How to modify style hint without QProxyStyle?

给你一囗甜甜゛ 提交于 2019-12-20 04:26:13

问题


I use Python bindings of Qt (PySide or PyQt4). They don't have QProxyStyle.

I want to change the value of a style hint. For example change the SH_Menu_SubMenuPopupDelay popup delay time of a submenu.

In native C++ Qt I would use a QProxyStyle and override styleHint and filter for the style hint of interest and return the value I like. It's done here for example.

But in the Python bindings I use QProxyStyle is not available. So how can a style hint of an existing style be modified there?


回答1:


The menu popup delay is not a fixed value, as it will depend on the current style. There is no way to set it programmatically.

The Qt way to modify style hints for existing styles is via QProxyStyle. However, even that is not guaranteed to work for user-defined or third-party styles, because they are not obliged to call QStyle.proxy(). And even if they did, neither PyQt nor PySide wrap any classes that are based on plugins (which includes QProxyStyle).

The only way to get full control over the behaviour of style-hints is to write your own, application-specific style class. But, of course, you would then no longer be modifying the style-hints of an existing style, so that is beyond the scope of the current question.

That seems to leave one remaining option, which is to subclass QMenu and bypass the style-hint altogether. Grepping the Qt source code reveals that (disregarding the various style classes) the only places where SH_Menu_SubMenuPopupDelay is used is within the mouseMoveEvent of QMenu. So it might be possible to reimplement that to get the behaviour you want.

UPDATE:

The QProxyStyle class is now available in PyQt5.



来源:https://stackoverflow.com/questions/28233907/how-to-modify-style-hint-without-qproxystyle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!