【问题标题】:How does Qt select a default style?Qt 如何选择默认样式?
【发布时间】:2018-06-14 01:20:28
【问题描述】:

在 Qt GUI 应用程序中,QApplication::style()->objectName() 将返回当前样式,例如“windowsvista”。

它如何/在哪里选择这种默认样式,以及它使用什么信息来决定?

【问题讨论】:

    标签: c++ qt qapplication qstyle


    【解决方案1】:

    Qt 带有内置样式,这些是(在我的 5.9.2 上):

    • 视窗
    • WindowsXP
    • WindowsVista
    • 安卓
    • 融合
    • 麦金塔

    每个都有自己的类,派生自QStyle

    查看哪些可用(取决于 Qt 构建配置):

    const QStringList styles = QStyleFactory::keys();
    for(QString s : styles)
    {
        qDebug() << s;
    }
    

    如果存在自定义插件(即 QTDIR/plugins/styles 目录中的库),也会显示。

    如何选择默认样式?

    默认样式在QApplication方法style()中搜索,在qapplication.cpp文件中,顺序如下:

    1. 样式覆盖,如果由环境变量QT_STYLE_OVERRIDE设置(在QApplicationPrivate::process_cmdline()中设置);
    2. QApplicationPrivate::desktopStyleKey() 返回的样式(此方法从当前平台主题加载样式列表,并从此列表中选择出现在QStyleFactory::keys() 列表中的名字);
    3. QStyleFactory::keys() 列表中的第一项。

    如果无法确定样式,则该方法在断言后将返回0

    Q_ASSERT(!"No styles available!");
    

    【讨论】:

      【解决方案2】:

      在文档中:

      Qt 包含一组 QStyle 子类,它们模拟 Qt 支持的不同平台(QWindowsStyle、QMacStyle 等)。

      您可以使用键设置样式:windowsvista 例如fusionmacintosh 等。使用任何键时,返回的样式将是 QStyle 的子类。根据您使用的平台,您可以访问一定数量的密钥。

      它如何/在哪里选择这种默认样式

      它在QStyleFactoryfile 中完成。您还可以查看 QStyle 源 file 以了解正在发生的事情。

      它使用什么信息来决定

      默认样式是平台相关的,然后您可以在此平台上根据您的配置在键中选择任何样式。

      【讨论】:

      • “默认样式取决于平台”——我们在同一台计算机上运行相同的程序,它会根据启动方式选择不同的样式(直接与 QProcess::startDetached 相比)。
      • @OJW 阅读我的答案,环境变量确实会影响默认样式...
      • @p-a-o-l-o 所以答案是 QGuiApplicationPrivate::createPlatformIntegration() 选择...
      • 没有。我编辑了我的答案,以更好地解释默认样式的选择位置和方式。
      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多