Qt 通过eventFilter连接/断开信号

Qt 通过eventFilter连接/断开信号,qt,pyqt,pyqt4,pyside,Qt,Pyqt,Pyqt4,Pyside,我有一个有数百个自定义按钮的应用程序,每个按钮都需要多个信号连接。connect调用似乎非常慢,因此我尝试使用enter和leave事件通过主窗口的eventFilter连接/断开每个按钮的信号 但是,有时这些事件似乎被多次调用,从而导致运行时错误(当尝试断开已消失的事件时)。 下面是一段代码,它显示了使用默认按钮时出现的类似(希望是相关的)问题。 要查看此处的运行时错误,请运行代码,按下其中一个按钮,然后关闭窗口。这时我看到了: RuntimeError: Fail to disconnect

我有一个有数百个自定义按钮的应用程序,每个按钮都需要多个信号连接。connect调用似乎非常慢,因此我尝试使用enter和leave事件通过主窗口的
eventFilter
连接/断开每个按钮的信号

但是,有时这些事件似乎被多次调用,从而导致运行时错误(当尝试断开已消失的事件时)。 下面是一段代码,它显示了使用默认按钮时出现的类似(希望是相关的)问题。 要查看此处的运行时错误,请运行代码,按下其中一个按钮,然后关闭窗口。这时我看到了:

RuntimeError: Fail to disconnect signal clicked().
这是代码。有人知道这是不是PySide bug吗


在少数情况下,当我测试鼠标事件时,当事件附加到item类时,显示出更好的性能。。。所以不要子类化。而是:

class Button(QPushButton):
    def __init__(self, label):
        super(Button, self).__init__()
        self.setText(label)

app = QApplication( sys.argv )
w = TestWindow()
for i in xrange(10):
    btn = Button( 'test %s' % i )
    w.addWidget( btn )
…然后为类定义鼠标事件

class Button(QPushButton):
    def __init__(self, label):
        super(Button, self).__init__()
        self.setText(label)

app = QApplication( sys.argv )
w = TestWindow()
for i in xrange(10):
    btn = Button( 'test %s' % i )
    w.addWidget( btn )