【问题标题】:How to work with signals from QTableWidget cell with cellWidget set如何使用设置了 cellWidget 的 QTableWidget 单元格处理信号
【发布时间】:2015-05-27 14:01:06
【问题描述】:

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

问题是如何从这些组合框中捕获信号,如果它们被改变了?
我想知道更改的小部件(组合框)的rowcol 以及设置的值。


我已经尝试了 Qt 文档中提到的 QTableWidget 的所有可用信号,但它们仅在单元格内部没有小部件时才有效。
有没有一种简单的 Qt 方式来获得我需要的东西?

【问题讨论】:

    标签: qt signals qtablewidget


    【解决方案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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2014-06-26
      • 2018-06-02
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2021-02-01
      相关资源
      最近更新 更多