如何在 Qt QML (QtQuick 2) 中设置 Material 深色主题?
How to set Material Dark Theme in Qt QML (QtQuick 2)?
我想在 QtQuick2 中为我的应用程序设置 Material 深色主题。
我遵循了这个官方文档:
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 默认主题:
现在我想应用文档中没有说明的深色主题。我试图将字符串从“Material”更改为“Material.Dark”和类似的描述,但没有用。我也找不到 QQuickStyle 对象上的“setTheme”函数或类似函数,这让我有点无能为力。
谁能告诉我如何将深色主题应用到 material 风格?
一个可能的解决方案是使用环境变量 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
我想在 QtQuick2 中为我的应用程序设置 Material 深色主题。 我遵循了这个官方文档:
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 默认主题:
现在我想应用文档中没有说明的深色主题。我试图将字符串从“Material”更改为“Material.Dark”和类似的描述,但没有用。我也找不到 QQuickStyle 对象上的“setTheme”函数或类似函数,这让我有点无能为力。
谁能告诉我如何将深色主题应用到 material 风格?
一个可能的解决方案是使用环境变量 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