如何获取QMacStyle的完整Qt样式表

4

是否有可能获取QMacStyle(或其相当于Qt5中使用的QProxyStyle)的整个Qt5样式表的文本文件?

我希望获得所有常见窗口部件(QPushButton,QTabBar等)使用的属性:值对('background-color','border-radius','margin-top','padding'等),以及它们的默认设置列表。

由于所有本地外观窗口部件(例如Macintosh Style Widget Gallery),因此Mac OSX上的Qt5看起来很棒。我想在我的应用程序中执行一些样式属性的手术替换,但保持本地外观和感觉。(关于问题的备选方案,或者至少是同样的最终目标,在我的相关问题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/中,其中可能包含详细信息,但不太易于理解)。
谢谢--

请返回翻译后的文本。 - GPPK
谢谢@GPPK,那是正确的想法,但那似乎是某人在自己的项目中为Mac定制的样式,而不是QMacStyle默认值的等价物。 - lcikgl
1个回答

3

QMacStyle 是一个 QStyle 的子类,使用苹果的 HITheme 进行绘制(请查看文件 qmacstyle_mac* 查看实现),因此没有样式表可获取。


好的 @Linville,谢谢--作为一个新手,在浏览了一堆互联网和手册后,我有一个问题:我应该明白QStyle()和QStyleSheet()是两种完全不同的方式来为QWidgets设置样式,它们是相互排斥的,也就是说,你必须选择其中一种方法? - lcikgl
似乎QStyle()和样式表确实是互斥的,当我看到像这样的教程时:如何更改QWidget的背景颜色 - lcikgl
QWidget#setStyle方法中提到:警告:Qt样式表目前不支持自定义QStyle子类。我们计划在未来的某个版本中解决这个问题。也许这个注释适用于此处。 - lcikgl
逐渐接近对此的深入理解。这篇帖子表明样式表是在QStyle()之上的一层。 - lcikgl
5
为了从新手的角度理解@Linville的正确答案,必须理解QStyle()和StyleSheets存在于不同的层面。我的原始问题立足点错误。StyleSheets是在QStyle()之上实现的。在qtbase/src/widgets/kernel/qapplication.cpp中,我们看到QApplication::setStyleSheet()创建了一个QStyleSheetStyle的实例(QStyle的子类),并用它替换了应用程序的样式表。因此,调用setStyleSheet()会完全取代QMacStyle。你必须选择完全使用QStyleSheetStyle()(通过setStyleSheet()),或完全使用QMacStyle()。 - lcikgl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接