我有一个动态创建的表,其中每个行有n行和m qtableWidgetItems(仅用为复选框) - 我需要在检查或未选中复选框时运行知道行和列的代码。
我的 CheckBox 子类如下所示:
class CheckBox(QTableWidgetItem):
def __init__(self):
QTableWidgetItem.__init__(self,1000)
self.setTextAlignment(Qt.AlignVCenter | Qt.AlignJustify)
self.setFlags(Qt.ItemFlags(
Qt.ItemIsSelectable | Qt.ItemIsUserCheckable | Qt.ItemIsEnabled ))
def stateChanged(self):
do_something(self.row(),self.column())
...
显然,这并没有重新定义在 SIGNAL('stateChanged(int)')
-thingy 发生时调用的函数,因为,好吧,什么都没有发生。
但是,如果我这样做:
item = CheckBox()
self.connect(item, SIGNAL('stateChanged(int)'), item.stateChanged)
在创建表的循环中,出现错误:
TypeError: arguments did not match any overloaded call:
QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 1 has unexpected type 'CheckBox'
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 1 has unexpected type 'CheckBox'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 1 has unexpected type 'CheckBox
编辑:我也尝试过重新定义setCheckState()
,但显然在选中或取消选中项目时不会调用它。
编辑 2:此外,将连接更改为
self.connect(self.table, SIGNAL('itemClicked(item)'),
self.table.stateChanged)
wheretable = QTableWidget()
也无济于事。
我该如何以正确的方式做到这一点?