如何在没有 QProxyStyle 的情况下修改样式提示?

How to modify style hint without QProxyStyle?

我使用 Python Qt(PySide 或 PyQt4)的绑定。他们没有 QProxyStyle.

我想更改样式提示的值。例如,更改子菜单的 SH_Menu_SubMenuPopupDelay 弹出延迟时间。

在本机 C++ Qt 中,我会使用 QProxyStyle 并覆盖 styleHint 并过滤感兴趣的样式提示和 return 我喜欢的值。例如已经完成here

但是在我使用的Python绑定中QProxyStyle不可用。那么如何修改现有样式的样式提示呢?

菜单弹出延迟不是一个固定值,它取决于当前的样式。无法以编程方式设置它。

修改现有样式的样式提示的 Qt 方法是通过 QProxyStyle。但是,即使这样也不能保证对用户定义或第三方样式有效,因为它们没有义务调用 QStyle.proxy()。即使他们这样做了,PyQt 和 PySide 也不会包装任何基于插件的 classes(包括 QProxyStyle)。

完全控制样式提示行为的唯一方法是编写您自己的、特定于应用程序的样式class。但是,当然,您将不再修改 现有 样式的样式提示,因此这超出了当前问题的范围。

这似乎还剩下一个选项,那就是 subclass QMenu 并完全绕过样式提示。 Grepping Qt 源代码显示(忽略各种样式 classes)使用 SH_Menu_SubMenuPopupDelay 的唯一地方是在 QMenumouseMoveEvent 中。因此,可以重新实现它以获得您想要的行为。

更新:

QProxyStyle class 现在可以在 PyQt5 中使用了。