如何在 Qt QML (QtQuick 2) 中设置 Material Dark Theme?

Posted

技术标签:

【中文标题】如何在 Qt QML (QtQuick 2) 中设置 Material Dark Theme?【英文标题】:How to set Material Dark Theme in Qt QML (QtQuick 2)? 【发布时间】:2021-05-11 07:30:46 【问题描述】:

我想在 QtQuick2 中为我的应用程序设置 Material Dark Theme。 我遵循了这个官方文档:

https://doc.qt.io/qt-5/qtquickcontrols2-styles.html

并在我的 main.cpp 中应用了一行(从自动生成的代码中没有改变任何其他内容):

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickStyle>

#include <QDebug>

int main(int argc, char *argv[])

#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

    QGuiApplication app(argc, argv);


    //set GUI style theme here
    QQuickStyle::setStyle("Material");




    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) 
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    , Qt::QueuedConnection);
    engine.load(url);

    return app.exec();

这将成功添加默认材质主题,看起来如预期: 材质默认主题:

现在我想应用文档中未说明的深色主题。我试图将字符串从“Material”更改为“Material.Dark”和类似的描述,但没有成功。我在 QQuickStyle 对象上也找不到“setTheme”函数或类似函数,这让我有点不知所措。

有人可以告诉我如何将深色主题应用于材质风格吗?

【问题讨论】:

【参考方案1】:

一种可能的解决方案是使用环境变量QT_QUICK_CONTROLS_MATERIAL_THEME(参见https://doc.qt.io/qt-5/qtquickcontrols2-environment.html):

qputenv("QT_QUICK_CONTROLS_STYLE", QByteArray("Material"));
qputenv("QT_QUICK_CONTROLS_MATERIAL_THEME", QByteArray("Dark"));

QGuiApplication app(argc, argv);

你也可以使用 qtquickcontrols2.conf 文件(见https://doc.qt.io/qt-5/qtquickcontrols2-configuration.html)

qtquickcontrols2.conf

[Controls]
Style=Material

[Material]
Theme=Dark

【讨论】:

感谢您的回答。我尝试了第一个解决方案,我认为它有效。

以上是关于如何在 Qt QML (QtQuick 2) 中设置 Material Dark Theme?的主要内容,如果未能解决你的问题,请参考以下文章

QML/QtQuick:使图像在 ColumnLayout 中仅占用可用高度

如何从 PySide 访问 QML\QtQuick 控件?

如何截屏 Qt/QML

Qt、QtQuick、QML 和 QtMobility 可以针对的移动操作系统

Qt和Qt Quick QML,

QtQuick与Qml介绍