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

时间:2015-01-30 10:32:47

标签: python qt pyqt pyside qstyle

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

这似乎留下了一个剩余的选项,即子类QMenu并完全绕过样式提示。对Qt源代码进行优化会发现(忽略各种样式类)唯一使用SH_Menu_SubMenuPopupDelay的地方位于mouseMoveEvent QMenu内。所以有可能重新实现它以获得你想要的行为。

<强>更新

QProxyStyle类现在可在PyQt5中使用。