【问题标题】:Qt get default style sheets for different OSQt 获取不同操作系统的默认样式表
【发布时间】:2020-06-19 02:35:22
【问题描述】:

我正在开发一个跨平台应用程序,它在 Windows 中看起来比在 Ubuntu 中更糟糕。这仅与 Windows 的默认样式表与 Ubuntu 的默认样式表有关。有没有办法获得应用于应用程序的依赖于操作系统的样式表?我试图检索应用程序样式表:

QApplication app(argc, argv);
qDebug() << "Style sheet: " << app.styleSheet();

但这会产生一个空字符串(除非您手动将其设置为某个值)。我的目的是检索 Ubuntu 样式表并将其保存到文件中(并将其添加到资源列表中),这样我就可以在两个操作系统中为应用程序加载它:

QApplication app(argc, argv);
QFile file(":/ubuntu_style.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
app.setStyleSheet(styleSheet);

关于如何获取操作系统的默认样式表有什么想法吗?

【问题讨论】:

  • 在 QT 开发者论坛上收到答案可能会更幸运。
  • 我也发过帖XD

标签: c++ windows qt ubuntu styles


【解决方案1】:

根据documentation,当您没有使用参数-stylesheet 指定有效路径时,stylesheet() 将返回一个空字符串(这是您的情况)。我认为你不这样做。因此,您需要为您的应用程序添加此参数。或者,制作您自己的qss 文件并将其添加到资源文件夹中。 我希望这可以帮助您解决问题。

【讨论】:

    【解决方案2】:

    我在another forum 找到了答案。我将其发布在这里以供将来搜索其他用户。

    您可以使用QStyleFactory 获取操作系统默认样式。使用QStyleFactory::key() 可以使用可能的样式列表,返回可用键的列表。在我的情况下,这总是在 Windows 和 Linux 操作系统中返回 "Windows""Fusion"。此外,在 Windows 中,我还有"windowsvista"。使用这个类,我可以设置应用程序主样式:

    QApplication app(argc, argv);
    app.setStyle(QStyleFactory::create("Fusion"));
    

    因此,无论在哪个操作系统中编译/使用我的应用程序,它看起来总是一样的。

    但是,这不提供样式表,它提供了QStyle,因此使用app.styleSheet(); 返回一个空字符串。阅读另一个 Stack Overflow question,尤其是其 accepted answer 的 cmets,可以更好地理解 QStyle 和 qt 样式表。并得出结论,不可能将 QStyle 转换为样式表,因为它们是在不同的层上工作的。(特别感谢 @lcikgl 在那里发表的评论) p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2020-07-06
      • 2012-06-16
      • 2011-10-31
      相关资源
      最近更新 更多