如何为 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的主要内容,如果未能解决你的问题,请参考以下文章

如何为整个 Qt 应用程序创建一个菜单?

如何为 Qt GUI 小部件使用图像

如何为整个目录创建补丁来更新它?

如何为非 Qt 应用程序创建 Qt 共享库

如何为 Qt 创建自定义小部件

如何为 Qt 设置 Bullseye 代码覆盖率