diff options
author | Alessandro Portale <alessandro.portale@qt.io> | 2023-04-21 11:30:18 +0200 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@qt.io> | 2023-04-21 18:42:21 +0000 |
commit | 1e02f6bf987d4690695b49c0ac0358778d4e78c8 (patch) | |
tree | cd2f6af57998534c449004525b0031bdc5149551 /share | |
parent | 440541da232eb8dc9a6ceca566d9a56daee6bc17 (diff) |
Resuscitate the "legacy" Qt Quick Application wizard
Users still want to create new Qt Quick Application applications
targeting Qt 5 and with other build systems than cmake.
Fixes: QTCREATORBUG-28964
Change-Id: Ib87b7128f0b34eb4126ec771f324c70a960b2a03
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'share')
11 files changed, 566 insertions, 0 deletions
diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/CMakeLists.6.x.txt b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/CMakeLists.6.x.txt new file mode 100644 index 00000000000..9d2fc4a82cc --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/CMakeLists.6.x.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.16) + +project(%{ProjectName} VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(Qt6 6.2 COMPONENTS Quick REQUIRED) + +qt_add_executable(%{TargetName} + main.cpp +) + +qt_add_qml_module(%{TargetName} + URI %{ProjectName} + VERSION 1.0 + QML_FILES main.qml %{AdditionalQmlFiles} +) + +set_target_properties(%{TargetName} PROPERTIES + MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +target_link_libraries(%{TargetName} + PRIVATE Qt6::Quick) + +install(TARGETS %{TargetName} + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/CMakeLists.txt b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/CMakeLists.txt new file mode 100644 index 00000000000..3b5806eb093 --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/CMakeLists.txt @@ -0,0 +1,79 @@ +cmake_minimum_required(VERSION 3.14) + +project(%{ProjectName} VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +@if %{HasTranslation} +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Quick LinguistTools) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Quick LinguistTools) + +set(TS_FILES %{TsFileName}) +@else +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Quick) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Quick) +@endif + +set(PROJECT_SOURCES + %{MainCppFileName} + qml.qrc + @if %{HasTranslation} + ${TS_FILES} + @endif +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(%{ProjectName} + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ) +# Define target properties for Android with Qt 6 as: +# set_property(TARGET %{ProjectName} APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR +# ${CMAKE_CURRENT_SOURCE_DIR}/android) +# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation +@if %{HasTranslation} + + qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) +@endif +else() + if(ANDROID) + add_library(%{ProjectName} SHARED + ${PROJECT_SOURCES} + ) +# Define properties for Android with Qt 5 after find_package() calls as: +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") + else() + add_executable(%{ProjectName} + ${PROJECT_SOURCES} + ) + endif() +@if %{HasTranslation} + + qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}) +@endif +endif() + +target_link_libraries(%{ProjectName} + PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick) + +set_target_properties(%{ProjectName} PROPERTIES + MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +install(TARGETS %{ProjectName} + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_import_qml_plugins(%{ProjectName}) + qt_finalize_executable(%{ProjectName}) +endif() diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/app.pro b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/app.pro new file mode 100644 index 00000000000..1e0811386ab --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/app.pro @@ -0,0 +1,40 @@ +@if "%{UseVirtualKeyboard}" == "true" +QT += quick virtualkeyboard +@else +QT += quick +@endif +@if !%{IsQt6} + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 +@endif + +SOURCES += \\ + %{MainCppFileName} + +@if %{IsQt6} +resources.files = main.qml %{AdditionalQmlFiles} +resources.prefix = /$${TARGET} +RESOURCES += resources +@else +RESOURCES += qml.qrc +@endif +@if %{HasTranslation} + +TRANSLATIONS += \\ + %{TsFileName} +CONFIG += lrelease +CONFIG += embed_translations +@endif + +# Additional import path used to resolve QML modules in Qt Creator's code model +QML_IMPORT_PATH = + +# Additional import path used to resolve QML modules just for Qt Quick Designer +QML_DESIGNER_IMPORT_PATH = + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/app.qbs b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/app.qbs new file mode 100644 index 00000000000..14025b37b82 --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/app.qbs @@ -0,0 +1,48 @@ +import qbs + +CppApplication { +@if "%{UseVirtualKeyboard}" == "true" + Depends { name: "Qt"; submodules: ["quick", "virtualkeyboard"] } +@else + Depends { name: "Qt.quick" } +@endif + + install: true + + // Additional import path used to resolve QML modules in Qt Creator's code model + property pathList qmlImportPaths: [] +@if !%{IsQt6} + + cpp.defines: [ + // You can make your code fail to compile if it uses deprecated APIs. + // In order to do so, uncomment the following line. + //"QT_DISABLE_DEPRECATED_BEFORE=0x060000" // disables all the APIs deprecated before Qt 6.0.0 + ] +@endif + + files: [ + "%{MainCppFileName}", +@if !%{IsQt6} + "main.qml", + "qml.qrc", +@endif +@if %{HasTranslation} + "%{TsFileName}", +@endif + ] + @if %{HasTranslation} + + Group { + fileTagsFilter: "qm" + Qt.core.resourcePrefix: "/i18n" + fileTags: "qt.core.resource_data" + } +@endif +@if %{IsQt6} + Group { + files: ["main.qml"%{AdditionalQmlFilesQbs}] + Qt.core.resourcePrefix: "%{ProjectName}/" + fileTags: ["qt.qml.qml", "qt.core.resource_data"] + } +@endif +} diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon.png b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon.png Binary files differnew file mode 100644 index 00000000000..cb0a6d3b602 --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon.png diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon@2x.png b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon@2x.png Binary files differnew file mode 100644 index 00000000000..7b0df0dfa5f --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon@2x.png diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/main.qml.tpl b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/main.qml.tpl new file mode 100644 index 00000000000..36607ad82e9 --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/main.qml.tpl @@ -0,0 +1,48 @@ +import QtQuick %{QtQuickVersion} +@if !%{IsQt6} +import QtQuick.Window %{QtQuickWindowVersion} +@endif +@if %{UseVirtualKeyboard} +import %{QtQuickVirtualKeyboardImport} +@endif + +Window { +@if %{UseVirtualKeyboard} + id: window +@endif + width: 640 + height: 480 + visible: true + title: qsTr("Hello World") +@if %{UseVirtualKeyboard} + + InputPanel { + id: inputPanel + z: 99 + x: 0 + y: window.height + width: window.width + + states: State { + name: "visible" + when: inputPanel.active + PropertyChanges { + target: inputPanel + y: window.height - inputPanel.height + } + } + transitions: Transition { + from: "" + to: "visible" + reversible: true + ParallelAnimation { + NumberAnimation { + properties: "y" + duration: 250 + easing.type: Easing.InOutQuad + } + } + } + } +@endif +} diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/qml.qrc b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/qml.qrc new file mode 100644 index 00000000000..5f6483ac33f --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/qml.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/"> + <file>main.qml</file> + </qresource> +</RCC> diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/wizard.json b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/wizard.json new file mode 100644 index 00000000000..c2365108daa --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/wizard.json @@ -0,0 +1,230 @@ +{ + "version": 1, + "supportedProjectTypes": [ "CMakeProjectManager.CMakeProject", "Qbs.QbsProject", "Qt4ProjectManager.Qt4Project" ], + "id": "V.QtQuickApplicationEmptyCompat", + "category": "D.ApplicationQt", + "trDescription": "Creates a Qt Quick application that contains an empty window.\n\nUse this \"compat\" version if you want to use other build systems than CMake or Qt versions lower than 6.", + "trDisplayName": "Qt Quick Application (compat)", + "trDisplayCategory": "Application (Qt)", + "icon": "icon.png", + "iconKind": "Themed", + "featuresRequired": [ "QtSupport.Wizards.FeatureQt.5.6" ], + "enabled": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0 || value('Plugins').indexOf('QbsProjectManager') >= 0 || value('Plugins').indexOf('CMakeProjectManager') >= 0}", + + "options": + [ + { "key": "ProjectFile", "value": "%{JS: value('BuildSystem') === 'qmake' ? value('ProFile') : (value('BuildSystem') === 'cmake' ? value('CMakeFile') : value('QbsFile'))}" }, + { "key": "ProFile", "value": "%{JS: Util.fileName(value('ProjectDirectory') + '/' + value('ProjectName'), 'pro')}" }, + { "key": "QbsFile", "value": "%{JS: Util.fileName(value('ProjectDirectory') + '/' + value('ProjectName'), 'qbs')}" }, + { "key": "CMakeFile", "value": "%{ProjectDirectory}/CMakeLists.txt" }, + { "key": "IsQt6", "value": "%{JS: value('QtVersion').IsQt6}" }, + { "key": "MainCppFileName", "value": "%{JS: 'main.' + Util.preferredSuffix('text/x-c++src')}" }, + { "key": "QtQuickVersion", "value": "%{JS: value('QtVersion').QtQuickVersion}" }, + { "key": "QtQuickWindowVersion", "value": "%{JS: value('QtVersion').QtQuickWindowVersion}" }, + { "key": "QtQuickVirtualKeyboardImport", "value": "%{JS: value('QtVersion').QtQuickVirtualKeyboardImport}" }, + { "key": "QtQuickFeature", "value": "%{JS: (value('QtQuickVersion')=='') ? 'QtSupport.Wizards.FeatureQt.6.2' : 'QtSupport.Wizards.FeatureQtQuick.%{QtQuickVersion}'}" }, + { "key": "UseVirtualKeyboardByDefault", "value": "%{JS: value('Plugins').indexOf('Boot2Qt') >= 0 || value('Plugins').indexOf('Boot2QtQdb') >= 0}" }, + { "key": "HasTranslation", "value": "%{JS: value('TsFileName') !== ''}" }, + { "key": "SetQPAPhysicalSize", "value": "%{UseVirtualKeyboardByDefault}" }, + { "key": "AdditionalQmlFiles", "value": "" }, + { "key": "AdditionalQmlFilesQbs", "value": "" }, + { "key": "TargetName", "value": "%{JS: 'app' + value('ProjectName')}" } + ], + + "pages": + [ + { + "trDisplayName": "Project Location", + "trShortTitle": "Location", + "typeId": "Project" + }, + { + "trDisplayName": "Define Build System", + "trShortTitle": "Build System", + "typeId": "Fields", + "enabled": "%{JS: !value('IsSubproject')}", + "data": + [ + { + "name": "BuildSystem", + "trDisplayName": "Build system:", + "type": "ComboBox", + "persistenceKey": "BuildSystemType", + "data": + { + "index": 1, + "items": + [ + { + "trKey": "qmake", + "value": "qmake", + "condition": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0}" + }, + { + "trKey": "CMake", + "value": "cmake", + "condition": "%{JS: value('Plugins').indexOf('CMakeProjectManager') >= 0}" + }, + { + "trKey": "Qbs", + "value": "qbs", + "condition": "%{JS: value('Plugins').indexOf('QbsProjectManager') >= 0}" + } + ] + } + } + ] + }, + { + "trDisplayName": "Define Project Details", + "trShortTitle": "Details", + "typeId": "Fields", + "data": + [ + { + "name": "QtVersion", + "trDisplayName": "Minimum required Qt version:", + "type": "ComboBox", + "persistenceKey": "QtQuick.minimumQtVersion", + "data": + { + "index": 1, + "items": + [ + { + "trKey": "Qt 6.2", + "value": + { + "QtQuickVersion": "", + "QtQuickWindowVersion": "", + "QtQuickVirtualKeyboardImport": "QtQuick.VirtualKeyboard", + "IsQt6": true + } + }, + { + "trKey": "Qt 5.15", + "value": + { + "QtQuickVersion": "2.15", + "QtQuickWindowVersion": "2.15", + "QtQuickVirtualKeyboardImport": "QtQuick.VirtualKeyboard 2.15", + "IsQt6": false + } + }, + { + "trKey": "Qt 5.14", + "value": + { + "QtQuickVersion": "2.14", + "QtQuickWindowVersion": "2.14", + "QtQuickVirtualKeyboardImport": "QtQuick.VirtualKeyboard 2.14", + "IsQt6": false + } + }, + { + "trKey": "Qt 5.13", + "value": + { + "QtQuickVersion": "2.13", + "QtQuickWindowVersion": "2.13", + "QtQuickVirtualKeyboardImport": "QtQuick.VirtualKeyboard 2.4", + "IsQt6": false + } + }, + { + "trKey": "Qt 5.12", + "value": + { + "QtQuickVersion": "2.12", + "QtQuickWindowVersion": "2.12", + "QtQuickVirtualKeyboardImport": "QtQuick.VirtualKeyboard 2.4", + "IsQt6": false + } + } + ] + } + }, + { + "name": "UseVirtualKeyboard", + "trDisplayName": "Use Qt Virtual Keyboard", + "type": "CheckBox", + "persistenceKey": "QtQuick.UseVirtualKeyboard.%{UseVirtualKeyboardByDefault}", + "data": + { + "checked": "%{UseVirtualKeyboardByDefault}" + } + } + ] + }, + { + "trDisplayName": "Translation File", + "trShortTitle": "Translation", + "typeId": "QtTranslation" + }, + { + "trDisplayName": "Kit Selection", + "trShortTitle": "Kits", + "typeId": "Kits", + "enabled": "%{JS: !value('IsSubproject')}", + "data": { + "projectFilePath": "%{ProjectFile}", + "requiredFeatures": [ "QtSupport.Wizards.FeatureQt", "%{QtQuickFeature}" ] + } + }, + { + "trDisplayName": "Project Management", + "trShortTitle": "Summary", + "typeId": "Summary" + } + ], + "generators": + [ + { + "typeId": "File", + "data": + [ + { + "source": "../app.pro", + "target": "%{ProFile}", + "openAsProject": true, + "condition": "%{JS: value('BuildSystem') === 'qmake'}" + }, + { + "source": "%{JS: value('QtVersion').IsQt6 ? '../CMakeLists.6.x.txt' : '../CMakeLists.txt'}", + "target": "CMakeLists.txt", + "openAsProject": true, + "condition": "%{JS: value('BuildSystem') === 'cmake'}" + }, + { + "source": "../app.qbs", + "target": "%{QbsFile}", + "openAsProject": true, + "condition": "%{JS: value('BuildSystem') === 'qbs'}" + }, + { + "source": "../main.cpp", + "target": "%{MainCppFileName}" + }, + { + "source": "main.qml.tpl", + "target": "main.qml", + "openInEditor": true + }, + { + "source": "qml.qrc", + "condition": "%{JS: !value('QtVersion').IsQt6}" + }, + { + "source": "../../translation.ts", + "target": "%{TsFileName}", + "condition": "%{HasTranslation}" + }, + { + "source": "../../git.ignore", + "target": ".gitignore", + "condition": "%{JS: !value('IsSubproject') && value('VersionControl') === 'G.Git'}" + } + ] + } + ] +} diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/main.cpp b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/main.cpp new file mode 100644 index 00000000000..08698bb6bea --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/main.cpp @@ -0,0 +1,58 @@ +%{Cpp:LicenseTemplate}\ +%{JS: QtSupport.qtIncludes([], ["QtGui/QGuiApplication", "QtQml/QQmlApplicationEngine"])} +@if %{HasTranslation} +#include <QLocale> +#include <QTranslator> +@endif + +int main(int argc, char *argv[]) +{ +@if %{UseVirtualKeyboard} + qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); + +@endif +@if !%{IsQt6} +@if %{SetQPAPhysicalSize} + if (qEnvironmentVariableIsEmpty("QTGLESSTREAM_DISPLAY")) { + qputenv("QT_QPA_EGLFS_PHYSICAL_WIDTH", QByteArray("213")); + qputenv("QT_QPA_EGLFS_PHYSICAL_HEIGHT", QByteArray("120")); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +#endif + } +@else +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +#endif +@endif +@endif + QGuiApplication app(argc, argv); +@if %{HasTranslation} + + QTranslator translator; + const QStringList uiLanguages = QLocale::system().uiLanguages(); + for (const QString &locale : uiLanguages) { + const QString baseName = "%{JS: value('ProjectName') + '_'}" + QLocale(locale).name(); + if (translator.load(":/i18n/" + baseName)) { + app.installTranslator(&translator); + break; + } + } +@endif + + QQmlApplicationEngine engine; +@if %{IsQt6} + const QUrl url(u"qrc:/%{JS: value('ProjectName')}/main.qml"_qs); +@else + const QUrl url(QStringLiteral("qrc:/main.qml")); +@endif + 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(); +} diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/qtquickcontrols2.conf b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/qtquickcontrols2.conf new file mode 100644 index 00000000000..fd44f05995d --- /dev/null +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/qtquickcontrols2.conf @@ -0,0 +1,25 @@ +; This file can be edited to change the style of the application +; Read "Qt Quick Controls 2 Configuration File" for details: +; https://doc.qt.io/qt/qtquickcontrols2-configuration.html +@if '%{QtQuickControlsStyle}' != 'Default' + +[Controls] +Style=%{QtQuickControlsStyle} +@if '%{QtQuickControlsStyle}' == 'Universal' + +[Universal] +Theme=%{QtQuickControlsStyleTheme} +;Accent=Steel +;Foreground=Brown +;Background=Steel +@endif +@if '%{QtQuickControlsStyle}' == 'Material' + +[Material] +Theme=%{QtQuickControlsStyleTheme} +;Accent=BlueGrey +;Primary=BlueGray +;Foreground=Brown +;Background=Grey +@endif +@endif |