如何使用来自设置了 cellWidget 的 QTableWidget 单元格的信号
How to work with signals from QTableWidget cell with cellWidget set
我有一个 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 ...
}
问题是如果这些组合框发生变化,如何捕捉它们的信号?
我想知道 row
和 col
更改的小部件(组合框)和设置的值。
我已经尝试了 Qt 文档中针对 QTableWidget
提到的所有可用信号,但它们仅在单元格中没有小部件时才有效。
是否有一种简单的 Qt 方式来获得我需要的东西?
您可以处理来自组合框本身的 currentIndexChanged
信号,而不是处理来自 table 的信号。
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();
}
}
我有一个 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 ...
}
问题是如果这些组合框发生变化,如何捕捉它们的信号?
我想知道 row
和 col
更改的小部件(组合框)和设置的值。
我已经尝试了 Qt 文档中针对 QTableWidget
提到的所有可用信号,但它们仅在单元格中没有小部件时才有效。
是否有一种简单的 Qt 方式来获得我需要的东西?
您可以处理来自组合框本身的 currentIndexChanged
信号,而不是处理来自 table 的信号。
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();
}
}