|
4 | 4 | #include <QDialog> |
5 | 5 | #include <QDoubleValidator> |
6 | 6 | #include <QFormLayout> |
| 7 | +#include <QHeaderView> |
7 | 8 | #include <QLineEdit> |
8 | 9 | #include <QPushButton> |
9 | 10 | #include <QSpinBox> |
| 11 | +#include <QTableWidget> |
10 | 12 | #include <QTextEdit> |
11 | 13 | #include <QVBoxLayout> |
12 | 14 | #include <QWidget> |
@@ -89,65 +91,87 @@ QWidget* createGearParamForm(QWidget* parent = nullptr) { |
89 | 91 | // Result dialog |
90 | 92 | QDialog* resultDialog = new QDialog(formWidget); |
91 | 93 | resultDialog->setWindowTitle("Calculated Gear Parameters"); |
| 94 | + resultDialog->resize(600,800); |
92 | 95 | QVBoxLayout* dlgLayout = new QVBoxLayout(resultDialog); |
93 | 96 |
|
94 | | - QTextEdit* output = new QTextEdit(resultDialog); |
95 | | - output->setReadOnly(true); |
96 | | - |
97 | | - QString summary; |
98 | | - summary += "=== Gear Parameters ===\n"; |
99 | | - summary += QString("numTeeth: %1\n").arg(gear.numTeeth); |
100 | | - summary += QString("pitchConeAngle: %1\n").arg(gear.pitchConeAngle); |
101 | | - summary += QString("faceConeAngle: %1\n").arg(gear.faceConeAngle); |
102 | | - summary += QString("rootConeAngle: %1\n").arg(gear.rootConeAngle); |
103 | | - summary += QString("module: %1\n").arg(gear.module); |
104 | | - summary += QString("faceConeOffset: %1\n").arg(gear.faceConeOffset); |
105 | | - summary += QString("rootConeOffset: %1\n").arg(gear.rootConeOffset); |
106 | | - summary += QString("innerConeDistance: %1\n").arg(gear.innerConeDistance); |
107 | | - summary += QString("outerConeDistance: %1\n").arg(gear.outerConeDistance); |
108 | | - summary += QString("pitchConeDistance: %1\n").arg(gear.pitchConeDistance); |
109 | | - summary += QString("addendum: %1\n").arg(gear.addendum); |
110 | | - summary += QString("dedendum: %1\n").arg(gear.dedendum); |
111 | | - summary += QString("backlash: %1\n").arg(gear.backlash); |
112 | | - summary += QString("shaftAngle: %1\n").arg(gear.shaftAngle); |
113 | | - summary += QString("pressureAngle: %1\n").arg(gear.pressureAngle); |
114 | | - summary += QString("spiralAngle: %1\n").arg(gear.spiralAngle); |
115 | | - summary += QString("spiralType: %1\n") |
116 | | - .arg(spiralFunctionUtils::toString(gear.spiralType)); |
117 | | - |
118 | | - summary += "\n=== Pinion Parameters ===\n"; |
119 | | - summary += QString("numTeeth: %1\n").arg(pinion.numTeeth); |
120 | | - summary += QString("pitchConeAngle: %1\n").arg(pinion.pitchConeAngle); |
121 | | - summary += QString("faceConeAngle: %1\n").arg(pinion.faceConeAngle); |
122 | | - summary += QString("rootConeAngle: %1\n").arg(pinion.rootConeAngle); |
123 | | - summary += QString("module: %1\n").arg(pinion.module); |
124 | | - summary += QString("faceConeOffset: %1\n").arg(pinion.faceConeOffset); |
125 | | - summary += QString("rootConeOffset: %1\n").arg(pinion.rootConeOffset); |
126 | | - summary += QString("innerConeDistance: %1\n").arg(pinion.innerConeDistance); |
127 | | - summary += QString("outerConeDistance: %1\n").arg(pinion.outerConeDistance); |
128 | | - summary += QString("pitchConeDistance: %1\n").arg(pinion.pitchConeDistance); |
129 | | - summary += QString("addendum: %1\n").arg(pinion.addendum); |
130 | | - summary += QString("dedendum: %1\n").arg(pinion.dedendum); |
131 | | - summary += QString("backlash: %1\n").arg(pinion.backlash); |
132 | | - summary += QString("shaftAngle: %1\n").arg(pinion.shaftAngle); |
133 | | - summary += QString("pressureAngle: %1\n").arg(pinion.pressureAngle); |
134 | | - summary += QString("spiralAngle: %1\n").arg(pinion.spiralAngle); |
135 | | - summary += QString("spiralType: %1\n") |
136 | | - .arg(spiralFunctionUtils::toString(pinion.spiralType)); |
137 | | - |
138 | | - output->setText(summary); |
139 | | - |
| 97 | + // Table widget: Variable | Gear | Pinion |
| 98 | + // If Gear and Pinion values are same, cells are merged |
| 99 | + QTableWidget* table = new QTableWidget(resultDialog); |
| 100 | + table->setColumnCount(3); |
| 101 | + table->setHorizontalHeaderLabels({"Variable", "Gear", "Pinion"}); |
| 102 | + table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); |
| 103 | + |
| 104 | + // Helper lambda to insert rows |
| 105 | + auto addRow = [&](const QString& name, const QString& gearVal, |
| 106 | + const QString& pinionVal) { |
| 107 | + int row = table->rowCount(); |
| 108 | + table->insertRow(row); |
| 109 | + |
| 110 | + table->setItem(row, 0, new QTableWidgetItem(name)); |
| 111 | + |
| 112 | + if (gearVal == pinionVal) { |
| 113 | + // Insert merged cell for gear+pinion |
| 114 | + table->setItem(row, 1, new QTableWidgetItem(gearVal)); |
| 115 | + table->setSpan(row, 1, 1, 2); // Merge Gear + Pinion |
| 116 | + table->item(row, 1)->setTextAlignment(Qt::AlignCenter); |
| 117 | + } else { |
| 118 | + table->setItem(row, 1, new QTableWidgetItem(gearVal)); |
| 119 | + table->setItem(row, 2, new QTableWidgetItem(pinionVal)); |
| 120 | + } |
| 121 | + }; |
| 122 | + |
| 123 | + // Fill rows |
| 124 | + addRow("Teeth", QString::number(gear.numTeeth), |
| 125 | + QString::number(pinion.numTeeth)); |
| 126 | + addRow("Pitch Cone Angle", QString::number(gear.pitchConeAngle), |
| 127 | + QString::number(pinion.pitchConeAngle)); |
| 128 | + addRow("Face Cone Angle", QString::number(gear.faceConeAngle), |
| 129 | + QString::number(pinion.faceConeAngle)); |
| 130 | + addRow("Root Cone Angle", QString::number(gear.rootConeAngle), |
| 131 | + QString::number(pinion.rootConeAngle)); |
| 132 | + addRow("Module", QString::number(gear.module), |
| 133 | + QString::number(pinion.module)); |
| 134 | + addRow("Face Cone Offset", QString::number(gear.faceConeOffset), |
| 135 | + QString::number(pinion.faceConeOffset)); |
| 136 | + addRow("Root Cone Offset", QString::number(gear.rootConeOffset), |
| 137 | + QString::number(pinion.rootConeOffset)); |
| 138 | + addRow("Inner Cone Distance", QString::number(gear.innerConeDistance), |
| 139 | + QString::number(pinion.innerConeDistance)); |
| 140 | + addRow("Outer Cone Distance", QString::number(gear.outerConeDistance), |
| 141 | + QString::number(pinion.outerConeDistance)); |
| 142 | + addRow("Pitch Cone Distance", QString::number(gear.pitchConeDistance), |
| 143 | + QString::number(pinion.pitchConeDistance)); |
| 144 | + addRow("Addendum", QString::number(gear.addendum), |
| 145 | + QString::number(pinion.addendum)); |
| 146 | + addRow("Dedendum", QString::number(gear.dedendum), |
| 147 | + QString::number(pinion.dedendum)); |
| 148 | + addRow("Backlash", QString::number(gear.backlash), |
| 149 | + QString::number(pinion.backlash)); |
| 150 | + addRow("Shaft Angle", QString::number(gear.shaftAngle), |
| 151 | + QString::number(pinion.shaftAngle)); |
| 152 | + addRow("Pressure Angle", QString::number(gear.pressureAngle), |
| 153 | + QString::number(pinion.pressureAngle)); |
| 154 | + addRow("Spiral Angle", QString::number(gear.spiralAngle), |
| 155 | + QString::number(pinion.spiralAngle)); |
| 156 | + addRow("Spiral Function", spiralFunctionUtils::toString(gear.spiralType), |
| 157 | + spiralFunctionUtils::toString(pinion.spiralType)); |
| 158 | + |
| 159 | + table->setShowGrid(true); |
| 160 | + dlgLayout->addWidget(table); |
| 161 | + |
| 162 | + // Back & Exit buttons |
| 163 | + QHBoxLayout* buttonLayout = new QHBoxLayout(); |
140 | 164 | QPushButton* backBtn = new QPushButton("Back", resultDialog); |
141 | 165 | QPushButton* exitBtn = new QPushButton("Exit", resultDialog); |
| 166 | + buttonLayout->addWidget(backBtn); |
| 167 | + buttonLayout->addWidget(exitBtn); |
142 | 168 |
|
143 | 169 | QObject::connect(backBtn, &QPushButton::clicked, resultDialog, |
144 | 170 | &QDialog::accept); |
145 | 171 | QObject::connect(exitBtn, &QPushButton::clicked, resultDialog, |
146 | 172 | &QDialog::reject); |
147 | 173 |
|
148 | | - dlgLayout->addWidget(output); |
149 | | - dlgLayout->addWidget(backBtn); |
150 | | - dlgLayout->addWidget(exitBtn); |
| 174 | + dlgLayout->addLayout(buttonLayout); |
151 | 175 |
|
152 | 176 | resultDialog->exec(); // modal |
153 | 177 | }); |
|
0 commit comments