2013-04-18 40 views
1

我有一個QTableWidget實例,它的CellEntered(int,int)信號與一個插槽X(高亮顯示包含單元格的行)相關聯。另外我有一列包含複選框。QTableWidget :: setCellWidget()禁用QTableWidget中的信號?

的問題是使用QTableWidget的:: setCellWidget()方法中添加的複選框表中的細胞:

QTableWidgetItem *checkBoxItem = new QTableWidgetItem(""); 
ui->tableWidget->setItem(rowCount, column, checkBoxItem); 
QCheckBox* checkBox = new QCheckBox(); 
ui->tableWidget->setCellWidget(rowCount, column, checkBox); 
connect(checkBox, SIGNAL(clicked(bool)), 
    this, SLOT(checkbox_clicked(bool))); 

使得插槽X當光標在該列中的單元不被稱爲。

該問題不是特別針對複選框,而是針對其他類型的小部件。

我已經閱讀了一些關於SignalMapper類的一些帖子,但該類似於將信號從小部件映射到插槽中非常有用。相反,我的問題與表中的信號有關。

有什麼建議嗎?

乾杯,

巴勃羅

回答

0

你爲什麼不使用QTableWidgetItem並將其與QTableWidgetItem::setCheckState(Qt::CheckState state)設置爲可檢查的?

QTableWidgetItem *check_item = new QTableWidgetItem; 
check_item->setCheckState(Qt::Unchecked); 

你也可以用標誌來做到這一點。

check_item->setFlags(Qt::ItemIsUserCheckable); 

QTableWidget::itemChanged(QTableWidgetItem * item)信號連接到插槽,並檢查該項是否在那裏檢查。

+0

是的,我考慮過這種替代方案,因爲它允許我處理來自QTableWidget的所有信號,這是必須的,以便照亮行。無論如何,我提出這樣的問題是因爲:1)我無法理解在單元中插入任何小部件會導致難以處理來自QTableWidget的信號的一般事實。 2)使用單元格的檢查狀態似乎沒有足夠的靈活性來操作複選框的位置和樣式,就像我使用QCheckBox一樣。謝謝你的回答,thuga! – pabloderosario