我有一个Qt程序,包含许多按钮,用户可交互的小部件等。
在程序的一个阶段,我希望所有的小部件暂时“停止工作”。停止表现为鼠标点击,而是将事件传递给一个函数。Qt - 暂时禁用所有事件或窗口功能?
(这是为了让用户可以选择一个小部件来执行元操作部分说明这里:Get variable name of Qt Widget (for use in Stylesheet)?)
用户会选择一个小部件(做的东西),通过点击它,当然点击按钮不得导致按钮的绑定功能运行。
这样做的正确(最抽象的,明智的)方法是什么? (这不涉及太多的新代码,即;不是每个部件的子类)
Qt为此设计了什么?
到目前为止,我能够(通过调用
QObject.findChildren(QtGui.QWidget)
因此该解决方案可以将这个检索程序中所有的小部件列表
我目前的可怕想法。
- 一些如何在一个 函数中始终处理所有应用程序事件,并且在我需要 应用程序时不通过事件离子被休眠。
- 当我需要休眠时,制作一个新的透明窗口小部件,它接收鼠标点击并在整个窗口上拉伸。点击坐标 ,找出下面的小部件。
- 以某种方式创建窗口的新“壳”实例。
谢谢!
(对不起,可怕的评论;在轻微抢)
蟒蛇2.7.2
PyQt4的
Windows 7的
这也正是该解决方案。如果你想'窃取'所有事件,在qApp上放置一个事件过滤器,它会阻止任何孩子接收它们。 – synthesizerpatel
事件过滤什么也没做。即使所有事件都被忽略,点击按钮仍然会运行这些功能!(除非我很蠢,不知道我在做什么;是的) –
如果你想停止进一步处理的事件,确保你从eventFilter()返回true。而且,过滤所有事件是一个非常糟糕的主意 - 只过滤用户输入。一个更直接的方法是在顶级小部件上调用setEnabled(false)。 –