🐛 fix: pick QML controls style explicitly
This commit is contained in:
+31
-3
@@ -1,8 +1,8 @@
|
|||||||
#include <qobject.h>
|
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QFileInfo>
|
||||||
#include <QQmlApplicationEngine>
|
#include <QQmlApplicationEngine>
|
||||||
#include <QQmlContext>
|
#include <QQmlContext>
|
||||||
|
#include <QQuickStyle>
|
||||||
#include <QSocketNotifier>
|
#include <QSocketNotifier>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -21,6 +21,26 @@ using namespace WallReel::Core;
|
|||||||
|
|
||||||
WALLREEL_DECLARE_SENDER("Main")
|
WALLREEL_DECLARE_SENDER("Main")
|
||||||
|
|
||||||
|
static QString pickControlsStyle(const QQmlApplicationEngine& engine) {
|
||||||
|
// Respect env
|
||||||
|
if (!qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE"))
|
||||||
|
return {};
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
|
||||||
|
using namespace Qt::StringLiterals;
|
||||||
|
// Prefer KDE style if available,
|
||||||
|
for (const QString& p : engine.importPathList())
|
||||||
|
if (QFileInfo::exists(p + u"/org/kde/desktop/qmldir"_s))
|
||||||
|
return u"org.kde.desktop"_s;
|
||||||
|
// fallback to Fusion
|
||||||
|
return u"Fusion"_s;
|
||||||
|
#else
|
||||||
|
for (const QString& p : engine.importPathList())
|
||||||
|
if (QFileInfo::exists(p + u"/org/kde/desktop/qmldir"_qs))
|
||||||
|
return u"org.kde.desktop"_qs;
|
||||||
|
return u"Fusion"_qs;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
// Destruction order after QApplication quits its event loop:
|
// Destruction order after QApplication quits its event loop:
|
||||||
// 1. QQmlApplicationEngine (with all QML objects)
|
// 1. QQmlApplicationEngine (with all QML objects)
|
||||||
@@ -46,12 +66,14 @@ int main(int argc, char* argv[]) {
|
|||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
a.setApplicationName(APP_NAME);
|
a.setApplicationName(APP_NAME);
|
||||||
a.setApplicationVersion(APP_VERSION);
|
a.setApplicationVersion(APP_VERSION);
|
||||||
|
{
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
a.setWindowIcon(QIcon(u":/icon.svg"_s));
|
a.setWindowIcon(QIcon(u":/icon.svg"_s));
|
||||||
#else
|
#else
|
||||||
a.setWindowIcon(QIcon(u":/%1.svg"_qs.arg(APP_NAME)));
|
a.setWindowIcon(QIcon(u":/icon.svg"_qs));
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
Logger::init();
|
Logger::init();
|
||||||
@@ -105,6 +127,10 @@ int main(int argc, char* argv[]) {
|
|||||||
{
|
{
|
||||||
QQmlApplicationEngine engine;
|
QQmlApplicationEngine engine;
|
||||||
|
|
||||||
|
if (const QString s = pickControlsStyle(engine); !s.isEmpty()) {
|
||||||
|
QQuickStyle::setStyle(s);
|
||||||
|
}
|
||||||
|
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
&engine,
|
&engine,
|
||||||
&QQmlApplicationEngine::objectCreationFailed,
|
&QQmlApplicationEngine::objectCreationFailed,
|
||||||
@@ -112,6 +138,7 @@ int main(int argc, char* argv[]) {
|
|||||||
[]() { QCoreApplication::exit(-1); },
|
[]() { QCoreApplication::exit(-1); },
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
|
{
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
engine.loadFromModule(UIMODULE_URI, u"Main"_s);
|
engine.loadFromModule(UIMODULE_URI, u"Main"_s);
|
||||||
@@ -119,6 +146,7 @@ int main(int argc, char* argv[]) {
|
|||||||
engine.addImportPath(u"qrc:/"_qs);
|
engine.addImportPath(u"qrc:/"_qs);
|
||||||
engine.load(QUrl(u"qrc:/WallReel/UI/Main.qml"_qs));
|
engine.load(QUrl(u"qrc:/WallReel/UI/Main.qml"_qs));
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bootstrap.start();
|
bootstrap.start();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user