我使用Qt的Python绑定(PySide或PyQt4)。他们没有QProxyStyle
.
我想更改样式提示的值。例如,更改子菜单的SH_Menu_SubMenuPopupDelay
弹出延迟时间。
在原生C++Qt中,我会使用QProxyStyle
并覆盖styleHint
并过滤感兴趣的样式提示并返回我喜欢的值。例如,它在这里完成。
但是在我使用的 Python 绑定中QProxyStyle
不可用。那么,如何在那里修改现有风格的样式提示呢?
菜单弹出延迟不是固定值,因为它取决于当前样式。无法以编程方式设置它。
修改现有样式的样式提示的 Qt 方法是通过 QProxyStyle
。但是,即使这样也不能保证适用于用户定义的或第三方样式,因为它们没有义务调用QStyle.proxy()
。即使他们这样做了,PyQt 和 PySide 都没有包装任何基于插件(包括 QProxyStyle
)的类。
完全控制样式提示行为的唯一方法是编写自己的特定于应用程序的样式类。但是,当然,您将不再修改现有样式的样式提示,因此这超出了当前问题的范围。
这似乎留下了一个选项,即子类QMenu
并完全绕过样式提示。GrepingQt源代码揭示(忽略各种样式类)使用SH_Menu_SubMenuPopupDelay
的唯一地方是在QMenu
mouseMoveEvent
内。因此,有可能重新实现它以获得您想要的行为。
更新:
QProxyStyle
类现在在 PyQt5 中可用。