Qt - 暂时禁用所有事件或窗口功能?

时间:2012-01-25 08:06:32

标签: python qt events pyqt pyqt4

我有一个带有许多按钮,用户可互动的小部件等的Qt程序 在程序的一个阶段,我希望所有的小部件暂时“停止工作”;停止对鼠标点击的行为,而是将事件传递给一个函数。

(这样用户可以选择一个小部件来执行元操作。这里的部分解释:Get variable name of Qt Widget (for use in Stylesheet)?

用户可以通过点击它来选择一个小部件(用来做东西),当然点击一个按钮不能导致按钮的绑定功能运行。

这样做的正确(最抽象,最明智)方法是什么? (不涉及太多新代码。即;不是每个小部件的子类化)
Qt中有什么设计用于此吗?

到目前为止,我能够检索程序中所有小部件的列表(通过调用

QObject.findChildren(QtGui.QWidget)

所以解决方案可以包含这个。

我目前的可怕想法是;

  • 如何在一个处理器中始终处理所有应用程序事件 当我需要时,功能并没有让事件发生 应用程序处于休眠状态。
  • 当我需要休眠时,制作一个新的透明小部件来接收 鼠标单击并在整个窗口上拉伸它。坐标 点击并找出下面的小部件。
  • 以某种方式创建窗口的新“shell”实例。

谢谢!
(抱歉可怕的写作;稍微匆忙)


python 2.7.2
PyQt4中
Windows 7

2 个答案:

答案 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)