【问题标题】:How to modify style hint without QProxyStyle?如何在没有 QProxyStyle 的情况下修改样式提示?
【发布时间】:2015-03-29 19:28:54
【问题描述】:

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

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

在本机 C++ Qt 中,我将使用 QProxyStyle 并覆盖 styleHint 并过滤感兴趣的样式提示并返回我喜欢的值。以here 为例。

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

【问题讨论】:

    标签: python qt pyqt pyside qstyle


    【解决方案1】:

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

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

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

    这似乎留下了一个剩余的选择,即继承QMenu 并完全绕过样式提示。 Grepping Qt 源代码显示(忽略各种样式类)使用SH_Menu_SubMenuPopupDelay 的唯一位置是在QMenumouseMoveEvent 内。因此,有可能重新实现它以获得您想要的行为。

    更新

    QProxyStyle 类现在在 PyQt5 中可用。

    【讨论】:

    • 我接受这个答案,因为它让我确信修改现有样式的样式提示很难甚至是不可能的。可惜他们没有使样式提示可修改。
    猜你喜欢
    • 2016-08-25
    • 1970-01-01
    • 2021-04-21
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2023-02-04
    • 2013-04-23
    相关资源
    最近更新 更多