【问题标题】:How could Qt apply style from an external Qt Stylesheet file?Qt 如何从外部 Qt 样式表文件应用样式?
【发布时间】:2011-05-25 19:06:51
【问题描述】:

我希望用户能够通过简单地加载他们的 OWN Qt 样式表文件来自定义我们应用程序的默认外观。我们如何做到这一点?谁能给我一个先机?

【问题讨论】:

  • CSS 是指 HTML CSS 文件还是 Qt 样式表 本身?
  • Qt 样式表...抱歉...让我更新一下...

标签: c++ css qt user-interface


【解决方案1】:

假设用户的样式表名为stylesheet.qss,并且位于应用程序文件夹中。

您可以在启动应用程序时加载样式表,使用 -stylesheet 参数:

myapp->stylesheet = stylesheet.qss;

但这需要您的用户知道如何使用参数启动应用程序。

您还可以在应用中添加一个设置对话框,用户可以在其中选择样式表路径。

然后您可以打开此文件,加载内容,并使用QApplication::setStyleSheet() 将其设置到您的应用程序:

 QFile file("stylesheet.qss");
 file.open(QFile::ReadOnly);
 QString styleSheet = QLatin1String(file.readAll());

 qApp->setStyleSheet(styleSheet);

Qt 提供了一个example online,这可能会有所帮助。

【讨论】:

  • 你能指定如何(如果可能的话)使用多个样式表吗?例如:我需要为特定布局使用样式表,为第二个布局使用另一个样式表。最后,是否可以将样式表链接到小部件而不是应用程序?
  • @SKYnine 你知道怎么做吗? (加载多个样式表)
  • 伙计,说真的,不要在变量名上使用CamelCase,这很混乱。尤其是通用名称,例如FileStyleSheet。如果这些是类名,没有人会感到惊讶。
  • 如果您想使用多个样式表,请将单独的文件读入字符串,然后将它们连接起来,然后再设置为应用程序的样式。您当然需要协调名称以免发生冲突。
  • @TomášZato-ReinstateMonica 这是帕斯卡案。
【解决方案2】:

您只需根据客户提供的配置为整个应用程序设置样式表。

http://doc.qt.io/qt-5/qapplication.html#styleSheet-prop

您可以从任意数量的位置设置/获取此配置,应用程序中的属性对话框可能是最自然的方法。

【讨论】:

  • 死链接和无用的答案。