// Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include #include #include #include #include // For component loading case #include int main(int argc, char *argv[]) { qputenv("QT_QUICK3D_EDITORMODE", "1"); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif QGuiApplication app(argc, argv); app.setApplicationName("Material Editor"); app.setOrganizationName("QtProject"); app.setOrganizationDomain("qt-project.org"); app.setApplicationVersion(QLatin1String(QT_VERSION_STR)); QSurfaceFormat::setDefaultFormat(QQuick3D::idealSurfaceFormat(4)); QCommandLineParser cmdLineparser; cmdLineparser.setApplicationDescription("Editor for creating custom materials for use with Qt Quick 3D"); cmdLineparser.addHelpOption(); QCommandLineOption modeOption({QChar(u'm'), QLatin1String("mode")}, QLatin1String("sets editor mode"), QLatin1String("c")); cmdLineparser.addOption(modeOption); QCommandLineOption changeDirOption({QChar(u'C'), QLatin1String("directory")}, QLatin1String("Change the working directory"), QLatin1String("dir")); cmdLineparser.addOption(changeDirOption); QCommandLineOption projectDirOption({QChar(u'p'), QLatin1String("project-dir")}, QLatin1String("Project directory"), QLatin1String("dir")); cmdLineparser.addOption(projectDirOption); QCommandLineOption verboseOutputOption({QChar(u'v'), QLatin1String("verbose")}, QLatin1String("Turn on verbose output.")); cmdLineparser.addOption(verboseOutputOption); cmdLineparser.process(app); bool workingDirSet = false; if (cmdLineparser.isSet(changeDirOption)) { const auto value = cmdLineparser.value(changeDirOption); QFileInfo fi(value); workingDirSet = fi.isDir(); if (workingDirSet) QDir::setCurrent(value); else qWarning("%s : %s - Not a directory", qPrintable(app.applicationName()), qPrintable(value)); } QString resourceFile; auto args = cmdLineparser.positionalArguments(); for (const auto &arg : std::as_const(args)) { if (arg.endsWith(".qml")) resourceFile = arg; } if (!resourceFile.isEmpty() && QFileInfo::exists(resourceFile)) { QFileInfo resourceFileInfo(resourceFile); if (resourceFileInfo.isFile()) { if (!workingDirSet) QDir::setCurrent(resourceFileInfo.dir().path()); resourceFile = resourceFileInfo.canonicalFilePath(); } } QString projectPath; if (cmdLineparser.isSet(projectDirOption)) { const auto value = cmdLineparser.value(projectDirOption); QFileInfo fi(value); if (fi.isDir()) projectPath = fi.canonicalFilePath(); else qWarning("%s : %s - Not a directory", qPrintable(app.applicationName()), qPrintable(value)); } QQmlApplicationEngine engine; if (auto ctx = engine.rootContext()) ctx->setContextProperty("_qtProjectDir", QUrl::fromLocalFile(projectPath)); const QUrl url(http://code.qt.io/QStringLiteral(%22qrc:/qt-project.org/imports/QtQuick3D/MaterialEditor/main.qml")); engine.load(url); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); }