PyQt4 类之间的信号传递
我有一个类系列(基于相同的父类),它们是 QTableWidget 中的数据单元格(因此它们都派生自 QItemDelegate)。
我正在尝试创建一个信号,使这些类可以传递到控制器以传达数据更改。
我找不到正确的组合(尽管进行了大量的实验和阅读)。这是我的类结构:
基类:
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())
示例子类(只是相关部分 - 如果需要更多信息,请使用 LMK):
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
....
这是我的主类的相关部分:
@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)
上面的代码给出了“底层 C++ 对象已被删除”。我已经尝试过:
def addCriteria(self, row, cname, ctype):
self.setDirty()
c = YesNo(cname, "YesNo")
self.connect(c,SIGNAL("criteriaChange(int, int, QVariant)"),self.setItem)
有什么建议吗?我不必使用此方法,而是需要一种从各个控件中获取数据的方法。
蒂亚·
迈克
I have a family of classes (based on the same parent class) that are data cells in a QTableWidget (so they are all derived from QItemDelegate).
I'm trying to create a signal that these classes can pass up to the controller to communicate data changes.
I can't find the right combination (despite much experimentation and reading) which accomplished. Here's my class structure:
Base Class:
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())
Example Sub-class (just the relevant parts -- LMK if more info needed):
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
....
Here's the relevant portion of my master class:
@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)
The above code gives an "Underlying C++ object has been deleted". I've tried this:
def addCriteria(self, row, cname, ctype):
self.setDirty()
c = YesNo(cname, "YesNo")
self.connect(c,SIGNAL("criteriaChange(int, int, QVariant)"),self.setItem)
Any suggestions? I don't have to use this method, but rather need a way to get that data out of the individual controls.
TIA
Mike
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对此我真的很尴尬。希望这会帮助其他人。
我没有为适当的对象调用 Qt 初始化:
并且
I'm really embarrassed about this. Hopefully this will help somebody else.
I didn't call the Qt initialization for the appropriate object:
and
criteria.py
yes_no_maybe.py
yes_no.py
main.py
criteria.py
yes_no_maybe.py
yes_no.py
main.py