Расширение на ответ Трубадура :
Вот модификация документации QSignalMapper для вашей ситуации:
QSignalMapper* signalMapper = new QSignalMapper(this);
for (each row in table) {
QComboBox* combo = new QComboBox();
table->setCellWidget(row,col,combo);
combo->setCurrentIndex(node.type());
connect(combo, SIGNAL(currentIndexChanged(int)), signalMapper, SLOT(map()));
signalMapper->setMapping(combo, QString("%1-%2").arg(row).arg(col));
}
connect(signalMapper, SIGNAL(mapped(const QString &)),
this, SLOT(changed(const QString &)));
В функции обработчика :: изменен (позиция QString):
QStringList coordinates = position.split("-");
int row = coordinates[0].toInt();
int col = coordinates[1].toInt();
QComboBox* combo=(QComboBox*)table->cellWidget(row, col);
combo->currentIndex()
Обратите внимание, что QString - довольно неуклюжий способ передачи этой информации. Лучшим выбором будет новый переданный вами QModelIndex, который затем будет удален измененной функцией.
Недостатком этого решения является то, что вы теряете значение, которое испускает currentIndexChanged, но вы можете запросить у QComboBox его индекс из :: updated.