如何用cellWidget组从QTableWidget的细胞信号工作(How to work wit

2019-10-23 05:27发布

我有一个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 ...
}

该quetsion是如何抓住这个组合框的信号,如果他们改变了吗?
我想知道rowcol改变控件(组合框),并设置值。


我已经试过这是在Qt的文档的提到的所有可用信号QTableWidget ,但前提是小区不小部件里面有他们的工作。
有一个简单的和Qt的方式来获得我需要什么?

Answer 1:

而不是从表处理的信号,你可以处理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);

并在槽内,可以使用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();
    }
}


文章来源: How to work with signals from QTableWidget cell with cellWidget set