2015-05-27 114 views
1

我有一個QTableWidget,裏面有一些列。
由於我的需要,我在某些欄中設置了QComboBox,並填入必要的數據。如何使用cellWidget設置的QTableWidget單元的信號處理

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方式來獲得我所需要的?

回答

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); 

並在插槽中,你可以使用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(); 
    } 
}