如何在没有 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
的唯一地方是在 QMenu
的 mouseMoveEvent
中。因此,可以重新实现它以获得您想要的行为。
更新:
QProxyStyle
class 现在可以在 PyQt5 中使用了。
我使用 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
的唯一地方是在 QMenu
的 mouseMoveEvent
中。因此,可以重新实现它以获得您想要的行为。
更新:
QProxyStyle
class 现在可以在 PyQt5 中使用了。