如何为 QMacStyle 获取整个 Qt StyleSheet
Posted
技术标签:
【中文标题】如何为 QMacStyle 获取整个 Qt StyleSheet【英文标题】:How to obtain entire Qt StyleSheet for QMacStyle 【发布时间】:2015-05-04 16:31:43 【问题描述】:是否可以获得QMacStyle 的整个 Qt5 StyleSheet 的文本文件(或显然在 Qt5 中使用的等效 QProxyStyle)?
我希望获得所有属性的列表:值对('background-color'、'border-radius'、'margin-top'、'padding'等),以及它们的默认设置,用于每个常见的小部件(QPushButton、QTabBar 等)。
Mac OSX 上的 Qt5 看起来很棒,因为所有的小部件都是原生的(参见例如 Macintosh Style Widget Gallery)。我想在我的应用程序中对一些样式属性进行一些外科手术替换,但要保持原生外观。 (在我的相关问题How to override just one property:value pair in Qt StyleSheet 中表示了对这个问题的另一种看法,或者至少在相同的最终目标上。)
如果我知道 QTabBar 或 QPushButton 的整个 Qt StyleSheet 等效项,我可以在我自己的 widget->setStyleSheet()
调用中重建本机外观,并添加一些必要的调整。
我搜索了整个 Qt5.4.0 目录,希望能找到一个代表 OSX 风格的*.qss
文件,但无济于事(我找到了很有希望的名称examples/widgets/widgets/stylesheet/qss/default.qss
,但里面写的只是//* empty stylesheet *//
)。我已经用尽了在完整的 Qt5 源目录上运行 grep
的想法,包括在 qt-everywhere-enterprise-src-5.4.0/qtbase/src/widgets/styles/
中,它可能确实包含细节但不是很容易理解的形式)。
谢谢--
【问题讨论】:
random internet result 感谢@GPPK,这是正确的想法,但是这似乎是某人在他们自己的项目中为 Mac 设置的样式,而不是等同于 QMacStyle 默认值 【参考方案1】:QMacStyle
是一个QStyle
子类,它使用Apple 的HITheme
进行绘图(查找文件qmacstyle_mac*
以查看实现),因此无需获取样式表。
【讨论】:
好的@Linville,谢谢 - 经过大量互联网和手册页搜索后的新手问题:我是否理解 QStyle() 和 QStyleSheet() 是设置 QWidgets 样式的两种完全不同的方式,而且它们是相互排斥的,即您必须选择一种方法或另一种方法? 当我看到这样的教程时,开始出现 QStyle() 和样式表确实是相互排斥的:How to Change the Background Color of a QWidget QWidget#setStyle 说Warning: Qt style sheets are currently not supported for custom QStyle subclasses. We plan to address this in some future release.
也许该评论适用于此
在这里深入了解。 This post 建议样式表是 QStyle()s 之上的一层
要从新手的角度理解@Linville 的正确答案,必须了解 QStyle() 和 StyleSheets 存在于不同的层。我最初的问题是在不好的前提下。 StyleSheets 在 QStyle() 之上实现。在qtbase/src/widgets/kernel/qapplication.cpp
中,我们看到QApplication::setStyleSheet()
创建了一个QStyleSheetStyle(QStyle 的子类)的实例,并用它替换了应用程序样式表。因此,调用 setStyleSheet() 会完全取代 QMacStyle。必须选择完全在 QStyleSheetStyle() 中工作(通过 setStyleSheet()),或者完全在 QMacStyle() 中。以上是关于如何为 QMacStyle 获取整个 Qt StyleSheet的主要内容,如果未能解决你的问题,请参考以下文章