我正在设计一个自定义小部件,它基本上是一个QGroupBox包含可配置数量的QCheckBox按钮,其中每个按钮都应该控制由QBitArray表示的位掩码中的特定位。为了做到这一点,我将QCheckBox实例添加到QButtonGroup,每个按钮都有一个整数ID:
def populate(self, num_bits, parent = None):
"""
Adds check boxes to the GroupBox according to the bitmask size
"""
self.bitArray.resize(num_bits)
layout = QHBoxLayout()
for i in range(num_bits):
cb = QCheckBox()
cb.setText(QString.number(i))
self.buttonGroup.addButton(cb, i)
layout.addWidget(cb)
self.setLayout(layout)
然后,每次用户单击中包含的复选框时self.buttonGroup,我想要self.bitArray得到通知,以便可以相应地设置/取消设置数组中的相应位。为此,我打算将QButtonGroup的buttonClicked(int)信号连接到QBitArray的toggleBit(int)方法,为了尽可能的python,我想使用新样式的signals语法,所以我尝试了以下方法:
^{pr2}$问题是buttonClicked是一个过载信号,因此也存在buttonClicked(QAbstractButton*)签名。事实上,当程序执行时,当我单击某个复选框时会出现以下错误:
The debugged program raised the exception unhandled TypeError
"QBitArray.toggleBit(int): argument 1 has unexpected type 'QCheckBox'"
这清楚地显示了toggleBit方法接收到的按钮被点击(QAbstractButton*)信号,而不是按钮点击(int)信号。在
所以,问题是,如何使用新的语法来指定信号连接,以便self.bitArray接收buttonClicked(int)信号,而不是默认的过载-buttonClicked(QAbstractButton*)?在
编辑:您可以使用pyqtSlot修饰符来指定要连接到给定插槽的信号,但这是您正在创建的插槽的信号。当插槽来自“现成”类时该怎么办?唯一的选择是将其子类化,然后用正确的修饰符重新实现给定的插槽吗?在
在浏览相关问题时,我发现this answer正是我需要的。对于只将QButtonGroup的buttonClicked(int)信号连接到QBitArray的toggleBit(int)的正确新型信号语法包括在括号中指定所需的类型,如下所示:
相关问题 更多 >
编程相关推荐