如何使用设置了cellWidget的QTableWidget单元格中的信号

tem*_*ema 1 qt signals qtablewidget

QTableWidget里面有一些专栏.
由于我的需要,我QComboBox在一些列中设置并填充必要的数据.

void settingsDialog::onAddFieldButtonClicked()
{
    fieldsTable->setRowCount(++rowCount);
    combo = new QComboBox();
    combo->addItem(QString("Choose from list..."));
    foreach( int height, heightsAvailable)
        combo->addItem(QString("%1").arg(height));
    fieldsTable->setCellWidget(rowCount-1, 3, combo);
    // etc for other columns ...
}
Run Code Online (Sandbox Code Playgroud)

问题是如何更改来自这个组合框的信号?
我想知道rowcol更改小部件(组合框)和已设置的值.


我已经尝试过Qt docs中提到的所有可用信号QTableWidget,但它们仅在单元格内部没有小部件的情况下工作.
是否有一种简单的Qt方式来获得我需要的东西?

Lah*_*ima 5

您可以处理currentIndexChanged来自组合框本身的信号,而不是处理来自表格的信号.

QComboBox* combo = new QComboBox();
combo->addItem(QString("Choose from list..."));
combo->addItem(QString("first item"));
combo->setProperty("row", ui->tableWidget->rowCount() - 1);
combo->setProperty("column", 0);
connect(combo, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(OnComboIndexChanged(const QString&)));
ui->tableWidget->setCellWidget(ui->tableWidget->rowCount() - 1, 0, combo);
Run Code Online (Sandbox Code Playgroud)

在插槽中,您可以使用sender()识别发出信号的组合框.

void MainWindow::OnComboIndexChanged(const QString& text)
{
    QComboBox* combo = qobject_cast<QComboBox*>(sender());
    if (combo)
    {
        qDebug() << "row: " << combo->property("row").toInt();
        qDebug() << "column: " << combo->property("column").toInt();
    }
}
Run Code Online (Sandbox Code Playgroud)