У меня есть динамически создаваемая таблица с 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)')
происходит, потому что, ну, ничего не происходит.
Но, если я сделаю:
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)
, где table = QTableWidget()
тоже не помогает.
Как мне сделать это правильно?