QTableWidget 中嵌入式复选框发出的信号

Posted

技术标签:

【中文标题】QTableWidget 中嵌入式复选框发出的信号【英文标题】:Signals Emitted by Embedded Checkbox in QTableWidget 【发布时间】:2012-07-19 20:10:14 【问题描述】:

我目前有一个设置,我试图在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)

【讨论】:

+1 用于新风格的连接。我无法想象我还在试图用签名来捣乱。 谢谢。我不知道我为什么要使用旧样式,我想这只是在我继承的代码中,我必须成为习惯。坏我。【参考方案2】:

我猜你必须改用 ItemClicked 信号。由于 itemChanged 信号是在数据更改时发出的,并且数据可能是文本。

【讨论】:

或 itemSelectionChanged () 似乎更好。

以上是关于QTableWidget 中嵌入式复选框发出的信号的主要内容,如果未能解决你的问题,请参考以下文章

如何在QTableWidget表头添加复选框

QTableWidget嵌入QpushButton后定位QpushButton

如何在 QTableView 中发出输入单元格和离开单元格的信号

无法从 QtGui.QStandardItem 发出信号

如何检查是不是在 qtablewidget 中选中了复选框?

将可检查组合框的文本显示到 QTableWidget