Here is my code. I fill my QTableWidget by taking all the values of the attributes of each element of my model (a temperatureStep). The first column should assume the values "Hold" or "Heat up", this is the reason why I use a QComboBox (extendend, in order to recognise which temperatureStep I have to modify when the value of the QComboBox changes).
private void showTemperatureCurve() {
List<TemperatureStep> temperatureCurve = MainWindowModel.getOven().getTemperatureCurve();
ui.twTemperatureCurve.blockSignals(true);
int j = 0;
ui.twTemperatureCurve.setRowCount(0);
for (TemperatureStep temperatureStep : temperatureCurve) {
ui.twTemperatureCurve.setRowCount(ui.twTemperatureCurve.rowCount() + 1);
List<String> attributes = new ArrayList<>();
List<Object> values = new ArrayList<>();
for (PropertyDescriptor propertyDescriptor
: Introspector.getBeanInfo(temperatureStep.getClass(), Object.class).getPropertyDescriptors()) {
attributes.add(propertyDescriptor.getDisplayName());
//System.out.println(propertyDescriptor.getReadMethod());
}
for (String attribute : attributes) {
Object value = BeanUtils.getProperty(temperatureStep, attribute);
values.add(value);
//System.out.println(attribute + " " + value.toString());
}
List<String> headerLabelsTemperatureCurveNU = Arrays.asList("stepType", "endTemperature", "maxSlope", "minTime");
for (int i = 0; i < attributes.size(); i++) {
ui.twTemperatureCurve.setItem(j, headerLabelsTemperatureCurveNU.indexOf(attributes.get(i)), new QTableWidgetItem(values.get(i).toString()));
}
j += 1;
}
ui.twTemperatureCurve.blockSignals(false);
for (int i = 0; i < temperatureCurve.size(); i++) {
QComboBoxExtended qcbTemperatureStep = new QComboBoxExtended();
qcbTemperatureStep.setIndex(i);
String currentTemperatureStepType = temperatureCurve.get(i).getStepType();
qcbTemperatureStep.addItem(currentTemperatureStepType);
if (currentTemperatureStepType.equals("Heat up")) {
qcbTemperatureStep.addItem("Hold");
} else {
qcbTemperatureStep.addItem("Heat up");
}
ui.twTemperatureCurve.setCellWidget(i, 0, qcbTemperatureStep);
qcbTemperatureStep.currentIndexChanged.connect(this, "actionQcbTemperatureStep_itemChanged()");
}
ui.twTemperatureCurve.resizeColumnsToContents();
}
public static int qcbTemperatureStepClickedIndex;
private void actionQcbTemperatureStep_itemChanged() {
TemperatureStep temperatureStep = MainWindowModel.getOven().getTemperatureCurve().get(qcbTemperatureStepClickedIndex);
if (temperatureStep.getStepType().equals("Hold")) {
temperatureStep.setStepType("Heat up");
} else {
temperatureStep.setStepType("Hold");
}
showTemperatureCurve();
}