J'ai une famille de classes (basées sur la même classe parente) qui sont des cellules de données dans un QTableWidget (elles sont donc toutes dérivées de QItemDelegate). J'essaye de créer un signal que ces classes peuvent passer au contrôleur pour communiquer des changements de données.PyQt4 Signalisation entre classes
Je ne trouve pas la bonne combinaison (malgré beaucoup d'expérimentation et de lecture) qui a accompli. Voici ma structure de classe:
Classe de base:
class Criteria(QItemDelegate):
def bind(self, update):
self.connect(self,SIGNAL("criteriaChange(int, int, QVariant)"),update)
def emitCommitData(self):
self.emit(SIGNAL("criteriaChange(int, int, QVariant)"), self.Row, self.Col, self.getValue())
Exemple Sous-classe (seulement les parties pertinentes - LMK si plus d'information nécessaire):
class YesNo(Criteria):
....
def createEditor(self, parent, option, index):
self.comboBox = QComboBox(parent)
for item in self.getChoices():
self.comboBox.addItem(item)
self.comboBox.activated.connect(self.emitCommitData)
return self.comboBox
....
est ici la partie pertinente de mon classe maître:
@pyqtSlot(int, int, QVariant, name='criteriaChanged')
def setItem(self, row, col, item):
print row, col, item.toString() # TODO: Remove when tested
self.Data[row][col] = item.toString()
def addCriteria(self, row, cname, ctype):
self.setDirty()
c = YesNo(cname, "YesNo")
c.bind(self.setItem)
Le code ci-dessus donne un «objet C++ sous-jacent a été supprimé». J'ai essayé ceci:
def addCriteria(self, row, cname, ctype):
self.setDirty()
c = YesNo(cname, "YesNo")
self.connect(c,SIGNAL("criteriaChange(int, int, QVariant)"),self.setItem)
Des suggestions? Je n'ai pas besoin d'utiliser cette méthode, mais j'ai plutôt besoin d'un moyen d'extraire ces données des contrôles individuels.
TIA
Mike
Pour ce que ça vaut, j'ai couru dans la même erreur et cela a été utile. – acrosman