At-Endlich fand ich 2 Möglichkeiten, es zu tun.
- Durch die Eigenschaft der QComboBox Einstellung
- Mit dem QSignalMapper
Erste Methode
QComboBox* mCombo = new QCombobox();
mComboBox->setProperty("row",(int) i); // i represents the row number in qtablewidget
In Handler-Funktion, wo Sie die geklickt QComboBox sind Handling
int row = sender()->property("row").toInt();
Zweite Methode
QSignalMapper *signalMapper= new QSignalMapper(this); //Create a signal mapper instance
for (each row in table) {
QComboBox* mCombo = new QComboBox();
table->setCellWidget(row,col,combo);
connect(mCombo, SIGNAL(currentIndexChanged(int)), signalMapper, SLOT(map()));
/*connect each signal of QComboBox to signal Mapper slot (i.e map()) which in turns connected to the signal of signalMapper calling the SLOT associated with it (i.e rowFinder) */
signalMapper->setMapping(combo, (int)row); //assign mapping to each widgetusing set mapping
}
connect(signalMapper, SIGNAL(mapped(int)),
this, SLOT(rowFinder(int)));
Funktion: rowFinder (int rowIndex)
int row = rowIndex; //here is the row indexof selected QComboBox
Der richtige Weg ist eine QStyledItemDelegate Unterklasse zu verwenden, die die Combobox malt und schafft es als Redakteur. Sobald das implementiert ist, können Sie die Signale von 'table-> selectionModel()' ('selectionChanged' und' currentChanged') verwenden, um alles abzufangen, was Sie wollen (aber auch hier bin ich zu 99,9999% sicher, was Sie zu tun versuchen) bereits innerhalb des Delegierten machbar) – IlBeldus