diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2021-12-07 15:04:04 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2021-12-08 13:12:12 +0000 |
commit | c17f633a7ecf9e4651af0b485f9f71afbd2cbb73 (patch) | |
tree | 3964af9119ce554fb11de4828e63c913d5d38963 | |
parent | 8c139603a18ef3efff5ff46de9cac488b3e93bfa (diff) |
QmlProjectManager: Add widgetApp qml project property
Widget was the default apptype in Qt5, but in Qt6 the default was
changed to gui, so projects with qml modules that depend on widgets can
no longer be launched. Notable example of this is QtCharts.
Added "widgetApp" qml project property to allow users to specify if
they want widget or gui based application.
Task-number: QDS-5686
Change-Id: If0787421c79d4ba24a0f8513c8538126bcf29b4e
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
5 files changed, 21 insertions, 0 deletions
diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp index 962b403492..80b2d08ca7 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp @@ -123,6 +123,10 @@ QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FilePath &fi if (qt6ProjectProperty.isValid() && qt6ProjectProperty.value.toBool()) projectItem->setQt6Project(qt6ProjectProperty.value.toBool()); + const auto widgetAppProperty = rootNode->property("widgetApp"); + if (widgetAppProperty.isValid()) + projectItem->setWidgetApp(widgetAppProperty.value.toBool()); + if (debug) qDebug() << "importPath:" << importPathsProperty.value << "mainFile:" << mainFileProperty.value; diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h index 90d17e4859..a104e90646 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h @@ -78,6 +78,9 @@ public: QString mainFile() const { return m_mainFile; } void setMainFile(const QString &mainFilePath) { m_mainFile = mainFilePath; } + bool widgetApp() const { return m_widgetApp; } + void setWidgetApp(bool widgetApp) { m_widgetApp = widgetApp; } + void appendContent(QmlProjectContentItem *item) { m_content.append(item); } Utils::EnvironmentItems environment() const; @@ -99,6 +102,7 @@ protected: bool m_forceFreeType = false; bool m_qtForMCUs = false; bool m_qt6Project = false; + bool m_widgetApp = false; }; } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index c17f7f158b..35ff194f95 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -585,6 +585,13 @@ bool QmlBuildSystem::forceFreeType() const return false; } +bool QmlBuildSystem::widgetApp() const +{ + if (m_projectItem) + return m_projectItem.data()->widgetApp(); + return false; +} + bool QmlBuildSystem::addFiles(Node *context, const FilePaths &filePaths, FilePaths *) { if (!dynamic_cast<QmlProjectNode *>(context)) diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index 4f347d07e1..9defdbc0ed 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -93,6 +93,7 @@ public: QString primaryLanguage() const; void setPrimaryLanguage(QString language); bool forceFreeType() const; + bool widgetApp() const; bool addFiles(const QStringList &filePaths); diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index f66c3005d0..e0c7cb3045 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -227,6 +227,11 @@ QString QmlProjectRunConfiguration::commandLineArguments() const ProcessArgs::addArg(&args, "windows:fontengine=freetype", osType); } + if (bs->qt6Project() && bs->widgetApp()) { + ProcessArgs::addArg(&args, "--apptype", osType); + ProcessArgs::addArg(&args, "widget", osType); + } + const QString main = bs->targetFile(FilePath::fromString(mainScript())).toString(); if (!main.isEmpty()) ProcessArgs::addArg(&args, main, osType); |