我有一个带有许多按钮,用户可互动的小部件等的Qt程序 在程序的一个阶段,我希望所有的小部件暂时“停止工作”;停止对鼠标点击的行为,而是将事件传递给一个函数。
(这样用户可以选择一个小部件来执行元操作。这里的部分解释:Get variable name of Qt Widget (for use in Stylesheet)?)
用户可以通过点击它来选择一个小部件(用来做东西),当然点击一个按钮不能导致按钮的绑定功能运行。
这样做的正确(最抽象,最明智)方法是什么?
(不涉及太多新代码。即;不是每个小部件的子类化)
Qt中有什么设计用于此吗?
到目前为止,我能够检索程序中所有小部件的列表(通过调用
)QObject.findChildren(QtGui.QWidget)
所以解决方案可以包含这个。
我目前的可怕想法是;
谢谢!
(抱歉可怕的写作;稍微匆忙)
python 2.7.2
PyQt4中
Windows 7
答案 0 :(得分:2)
您可以使用QObject::installEventFilter截取发送到特定小部件的事件。
答案 1 :(得分:1)
对于PySide中的实际示例,这里有一个示例,您可以从中获取一些有用的代码:
my_app.py
from KeyPressEater import KeyPressEater
if __name__ == "__main__":
app = QApplication(sys.argv)
eater = KeyPressEater()
app.installEventFilter(eater)
KeyPressEater.py
class KeyPressEater(QObject):
# subclassing for eventFilter
def eventFilter(self, obj, event):
if self.ignore_input:
# swallow events
pass
else:
# bubble events
return QObject.eventFilter(self,obj,event)