gpt4 book ai didi

qt - 通过 eventFilter 连接/断开信号

转载 作者:行者123 更新时间:2023-12-02 17:33:33 24 4
gpt4 key购买 nike

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

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

RuntimeError: Fail to disconnect signal clicked().

这是代码。有人知道这是否是一个 PySide 错误吗?

from PySide.QtGui import *
from PySide.QtCore import *
import sys

class TestWindow( QWidget ):
def __init__( self, parent=None ):
super( TestWindow, self ).__init__( parent )
self.setLayout( QGridLayout() )

def addWidget( self, w ):
self.layout().addWidget( w )

def testCB( self ):
print 'button connected'

def eventFilter( self, obj, event ):
'''Connect signals on mouse over'''
if event.type() == QEvent.Enter:
print 'enter',
obj.clicked.connect( self.testCB )
elif event.type() == QEvent.Leave:
print 'leave'
obj.clicked.disconnect( self.testCB )
return False

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

w.show()
sys.exit( app.exec_() )

最佳答案

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

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 )

...然后为类定义鼠标事件。

关于qt - 通过 eventFilter 连接/断开信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11076226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com