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

Seb*_*mar 3 c++ qt qml qtquick2 material-design

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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

现在我想应用黑暗主题,这在文档中没有说明。我尝试将字符串从“Material”更改为“Material.Dark”和类似的描述,但这不起作用。我也无法在 QQuickStyle 对象上找到“setTheme”函数或类似函数,这让我有点无能为力。

有人可以给我一些关于如何将黑暗主题应用到 Material 风格的提示吗?

eyl*_*esc 7

一种可能的解决方案是使用环境变量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);
Run Code Online (Sandbox Code Playgroud)

您还可以使用 qtquickcontrols2.conf 文件(参见https://doc.qt.io/qt-5/qtquickcontrols2-configuration.html

qtquickcontrols2.conf

[Controls]
Style=Material

[Material]
Theme=Dark
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的回答。我尝试了第一个解决方案,我认为它有效。 (2认同)