2012-07-19 112 views
0

我目前有一個設置,我試圖在QTableWidget中嵌入複選框。我設置的複選框細胞的方式如下:QTableWidget中嵌入式複選框發出的信號

chkbox1 = QTableWidgetItem() 
chkbox1.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) 
chkbox1.setCheckState(Qt.Unchecked) 
chkbox2 = QTableWidgetItem() 
chkbox2.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) 
chkbox2.setCheckState(Qt.Unchecked) 
self.tblData.setItem(i, 0, chkbox1) 
self.tblData.setItem(i, 1, chkbox2) 

這似乎很好地工作,但我似乎無法趕上每當一個複選框被選中或取消選中所發出的信號。我試過了:

self.connect(self.tblData, SIGNAL('itemChanged(QTableWidgetItem)'), self.updatePlot) 

但是這並沒有做任何事。作爲一個測試,我已經將按鈕點擊連接到相同的方法,並且它工作正常,所以我知道這只是我錯過了一個信號。

據我所知,itemChanged應該在任何時候發出任何數據改變,並且不改變複選框狀態改變數據?

在此先感謝您的幫助。

回答

1

信號簽名是錯誤的。它應該是itemChanged(QTableWidgetItem *)(注意*):

self.connect(self.tblData, SIGNAL('itemChanged(QTableWidgetItem *)'), self.updatePlot) 

或更好,使用the new style connections

self.tblData.itemChanged.connect(self.updatePlot) 
+0

+1新式連接。我無法想象仍然試圖用簽名來解決問題。 – jdi 2012-07-21 21:36:30

+0

謝謝你。我不知道爲什麼我使用舊式,我想這只是在我繼承的代碼中,而我必須成爲習慣。壞我。 – WilcoRogers 2012-07-23 14:06:04

0

我想你必須改用ItemClicked信號。由於itemChanged信號是在數據更改時發出的,而數據可能是文本。

+0

或itemSelectionChanged()似乎是一個更好的主意。 – pjsofts 2012-07-19 20:28:59