我有一个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是如何抓住这个组合框的信号,如果他们改变了吗?
我想知道row
和col
改变控件(组合框),并设置值。
我已经试过这是在Qt的文档的提到的所有可用信号QTableWidget
,但前提是小区不小部件里面有他们的工作。
有一个简单的和Qt的方式来获得我需要什么?
而不是从表处理的信号,你可以处理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();
}
}