diff --git a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc
index 6a1d6a12277..b2dc857e458 100644
--- a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc
+++ b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc
@@ -1,4 +1,4 @@
-// Copyright (C) 2021 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
@@ -219,7 +219,7 @@
Ubuntu or Debian?}
\code
- sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev
+ sudo apt-get install libglib2.0-dev libsm-dev libxrender-dev libfontconfig1-dev libxext-dev
\endcode
If you use QtOpenGL, you also need:
diff --git a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc
index 5776d92e8ba..91696e03c1c 100644
--- a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc
+++ b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc
@@ -1,4 +1,4 @@
-// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
@@ -30,7 +30,7 @@
\li g++
\li make
\li libglib2.0-dev
- \li libSM-dev
+ \li libsm-dev
\li libxrender-dev
\li libfontconfig1-dev
\li libxext-dev
diff --git a/qbs/modules/pluginjson/pluginjson.qbs b/qbs/modules/pluginjson/pluginjson.qbs
index eccd53c85bd..e210731f0bf 100644
--- a/qbs/modules/pluginjson/pluginjson.qbs
+++ b/qbs/modules/pluginjson/pluginjson.qbs
@@ -19,7 +19,7 @@ Module {
// TODO: Could something like this be incorporated into the vcs module?
// Currently, the default repo dir is project.sourceDirectory, which
// does not make sense for Qt Creator.
- var dir = sourceDirectory;
+ var dir = product.sourceDirectory;
while (true) {
if (File.exists(FileInfo.joinPaths(dir, ".git")))
return dir;
diff --git a/scripts/deployqt.py b/scripts/deployqt.py
index 05113e43e77..79aea111bdd 100755
--- a/scripts/deployqt.py
+++ b/scripts/deployqt.py
@@ -273,13 +273,20 @@ def deploy_elfutils(qtc_install_dir, chrpath_bin, args):
if common.is_mac_platform():
return
+ libs = ['elf', 'dw']
+ version = '1'
+
def lib_name(name, version):
return ('lib' + name + '.so.' + version if common.is_linux_platform()
else name + '.dll')
- version = '1'
- libs = ['elf', 'dw']
- elfutils_lib_path = os.path.join(args.elfutils_path, 'lib')
+ def find_elfutils_lib_path(path):
+ for root, _, files in os.walk(path):
+ if lib_name('elf', version) in files:
+ return root
+ return path
+
+ elfutils_lib_path = find_elfutils_lib_path(os.path.join(args.elfutils_path, 'lib'))
if common.is_linux_platform():
install_path = os.path.join(qtc_install_dir, 'lib', 'elfutils')
backends_install_path = install_path
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
new file mode 100644
index 00000000000..cb0a6d3b602
Binary files /dev/null and b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon.png differ
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
new file mode 100644
index 00000000000..7b0df0dfa5f
Binary files /dev/null and b/share/qtcreator/templates/wizards/projects/qtquickapplication_compat/empty/icon@2x.png differ
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 @@
+
+
+ main.qml
+
+
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
+#include
+@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
diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts
index 0125854d3a9..a49b915b5a2 100644
--- a/share/qtcreator/translations/qtcreator_de.ts
+++ b/share/qtcreator/translations/qtcreator_de.ts
@@ -40138,11 +40138,11 @@ fails because Clang does not understand the target architecture.
Buffered output
-
+ Ausgabe puffern
Enabling improves output performance, but results in delayed output.
-
+ Aktivieren dieser Option verbessert die Leistung der Anwendung, resultiert aber in verzögerter Ausgabe.
Script:
@@ -40162,15 +40162,15 @@ fails because Clang does not understand the target architecture.
Executable is empty.
-
+ Ausführbare Datei ist leer.
%1 does not exist.
-
+ %1 existiert nicht.
%1 is not an executable file.
-
+ %1 ist keine ausführbare Datei.
&Add
@@ -40186,11 +40186,11 @@ fails because Clang does not understand the target architecture.
&Clean Up
-
+ &Bereiningen
Remove all Python interpreters without a valid executable.
-
+ Entfernt alle Python-Interpreter ohne gültige ausführbare Datei.
Interpreters
@@ -40202,43 +40202,43 @@ fails because Clang does not understand the target architecture.
Plugins:
-
+ Plugins:
Use Python Language Server
-
+ Python Language Server benutzen
For a complete list of available options, consult the <a href="https://github.com/python-lsp/python-lsp-server/blob/develop/CONFIGURATION.md">Python LSP Server configuration documentation</a>.
-
+ Für eine vollständige Liste der verfügbaren Optionen siehe auch die <a href="https://github.com/python-lsp/python-lsp-server/blob/develop/CONFIGURATION.md">Dokumentation zur Python LSP-Server-Konfiguration</a>.
Advanced
- Erweitert
+ Erweitert
Language Server Configuration
-
+ Language Server-Konfiguration
(Windowed)
-
+ (mit Fenster)
Removing Python
-
+ Entferne Python
Python:
-
+ Python:
%1 installation missing for %2 (%3)
-
+ %1-Installation fehlt für %2 (%3)
Install %1 for %2 using pip package installer.
-
+ Installiere %1 für %2 mit dem pip Paket-Installationsprogramm.
Install
@@ -40246,95 +40246,99 @@ fails because Clang does not understand the target architecture.
Install %1
-
+ This is the header of a progress bar
+ Installiere %1
Running "%1" to install %2.
-
+ Führe "%1" aus, um %2 zu installieren.
The %1 installation was canceled by %2.
-
+ %2 can be "user" or "time out" which doesn't work in non-english... so working around that.
+ Die Installation von %1 wurde abgebrochen: %2.
user
-
+ Used as %2 in "Die Installation von %1 wurde abgebrochen: %2."
+ Der Nutzer hat den Prozess abgebrochen
time out
-
+ Used as %2 in "Die Installation von %1 wurde abgebrochen: %2."
+ Zeitüberschreitung
Installing the %1 failed with exit code %2
-
+ Installation von %1 ist mit dem Rückgabewert %2 fehlgeschlagen
Run PySide6 project tool
-
+ PySide6 Projektwerkzeug ausführen
PySide project tool:
-
+ PySide Projektwerkzeug:
Enter location of PySide project tool.
-
+ Geben Sie den Ort des PySide Projektwerkzeugs ein.
General
- Allgemein
+ Allgemein
REPL
-
+ REPL
Open interactive Python.
-
+ Interaktives Python öffnen.
REPL Import File
-
+ REPL mit Datei-Import
Open interactive Python and import file.
-
+ Interaktives Python öffnen und Datei importieren.
REPL Import *
-
+ REPL mit *-Import
Open interactive Python and import * from file.
-
+ Interaktives Python öffnen und alles (*) aus der Datei importieren.
Open interactive Python. Either importing nothing, importing the current file, or importing everything (*) from the current file.
-
+ Interaktives Python öffnen. Importiert entweder nichts, die aktuelle Datei oder alles (*) aus der aktuellen Datei.
No Python Selected
-
+ Kein Python ausgewählt
Manage Python Interpreters
-
+ Python-Interpreter verwalten
Python Language Server (%1)
-
+ Python Language Server (%1)
Install Python language server (PyLS) for %1 (%2). The language server provides Python specific completion and annotation.
-
+ Python Language Server (PyLS) für %1 (%2) installieren. Der Language Server stellt Code-Vervollständigung und Annotationen für Python zur Verfügung.
Searching Python binaries...
-
+ Suche ausführbare Python-Dateien...
Found "%1" (%2)
-
+ "%1" (%2) gefunden
diff --git a/share/qtcreator/translations/qtcreator_zh_TW.ts b/share/qtcreator/translations/qtcreator_zh_TW.ts
index 3c1beded9e6..bf09c6b901e 100644
--- a/share/qtcreator/translations/qtcreator_zh_TW.ts
+++ b/share/qtcreator/translations/qtcreator_zh_TW.ts
@@ -246,7 +246,7 @@
The directory %1 already contains a cbp file, which is recent enough. You can pass special arguments or change the used tool chain here and rerun CMake. Or simply finish the wizard directly.
- 目錄 %1 已存在一份足夠新的 cbp 檔。您可以在此傳送特殊引數,或是變更所使用的工具鍊,然後重新執行 CMake。或者您也可以直接結束此精靈。
+ 目錄 %1 已存在一份足夠新的 cbp 檔。您可以在此傳送特殊引數,或是變更所使用的工具鏈,然後重新執行 CMake。或者您也可以直接結束此精靈。
The directory %1 does not contain a cbp file. Qt Creator needs to create this file by running CMake. Some projects require command line arguments to the initial CMake call.
@@ -315,7 +315,7 @@
<b>Unknown tool chain</b>
- <b>未知的工具鍊</b>
+ <b>未知的工具鏈</b>
Please enter the directory in which you want to build your project.
@@ -3292,7 +3292,7 @@ at debugger startup.
&Tool chain:
- 工具鍊(&T):
+ 工具鏈(&T):
Break at '&main':
@@ -3304,7 +3304,7 @@ at debugger startup.
Tool &chain:
- 工具鍊(&C):
+ 工具鏈(&C):
&Host and port:
@@ -4480,11 +4480,11 @@ Reason: %3
Tool chain:
- 工具鍊:
+ 工具鏈:
<Invalid tool chain>
- <無效的工具鍊>
+ <無效的工具鏈>
Generic Manager
@@ -7385,11 +7385,11 @@ Preselects a desktop Qt for building the application if available.
using Qt version: <b>%1</b><br>with tool chain <b>%2</b><br>building in <b>%3</b>
- 使用 Qt 版本:<b>%1</b><br>和工具鍊 <b>%2</b><br>在目錄 <b>%3</b> 中建置
+ 使用 Qt 版本:<b>%1</b><br>和工具鏈 <b>%2</b><br>在目錄 <b>%3</b> 中建置
<Invalid tool chain>
- <無效的工具鍊>
+ <無效的工具鏈>
General
@@ -7426,7 +7426,7 @@ Preselects a desktop Qt for building the application if available.
<No tool chain selected>
- <沒有選擇工具鍊>
+ <沒有選擇工具鏈>
An incompatible build exists in %1, which will be overwritten.
@@ -7443,7 +7443,7 @@ Preselects a desktop Qt for building the application if available.
Tool chain:
- 工具鍊:
+ 工具鏈:
Shadow build:
@@ -7592,11 +7592,11 @@ Preselects a desktop Qt for building the application if available.
Qt Creator needs a build configuration set up to build. Configure a tool chain in Project mode.
- Qt Creator 需要先設定建置組態才能執行建置。請在專案模式下組態工具鍊。
+ Qt Creator 需要先設定建置組態才能執行建置。請在專案模式下組態工具鏈。
Qt Creator needs a tool chain set up to build. Configure a tool chain in Project mode.
- Qt Creator 需要設置一個工具鍊才能建置。請在專案模式下組態工具鍊。
+ Qt Creator 需要設置一個工具鏈才能建置。請在專案模式下組態工具鏈。
Cannot find Makefile. Check your build settings.
@@ -7685,7 +7685,7 @@ Preselects a desktop Qt for building the application if available.
<b>Warning:</b> The tool chain suggests using another mkspec.
- <b>警告:</b> 工具鍊建議使用另一個 mkspec。
+ <b>警告:</b> 工具鏈建議使用另一個 mkspec。
Enable QML debugging:
@@ -13411,7 +13411,7 @@ Requires <b>Qt 4.7.4</b> or newer.
ABI detection failed: Make sure to use a matching tool chain when building.
- ABI 偵測失敗:請確認使用的工具鍊是否正確。
+ ABI 偵測失敗:請確認使用的工具鏈是否正確。
No qmlscene installed.
@@ -13466,7 +13466,7 @@ Requires <b>Qt 4.7.4</b> or newer.
Building helper(s) with toolchain '%1'...
- 正在使用工具鍊 '%1' 建置小助手...
+ 正在使用工具鏈 '%1' 建置小助手...
@@ -13769,11 +13769,11 @@ with a password, which you can enter below.
The Symbian tool chain does not handle spaces in the project path '%1'.
- Symbian 工具鍊不能處理在專案路徑 '%1' 中的空白。
+ Symbian 工具鏈不能處理在專案路徑 '%1' 中的空白。
The Symbian tool chain does not handle special characters in the project name '%1' well.
- Symbian 的工具鍊不能處理專案名稱 '%1' 中的特殊字元。
+ Symbian 的工具鏈不能處理專案名稱 '%1' 中的特殊字元。
@@ -18977,15 +18977,15 @@ Do you want to retry?
The following tool chain was already configured:<br> %1<br>It was not configured again.
- 已組態以下工具鍊:<br> %1<br>因此未再次組態。
+ 已組態以下工具鏈:<br> %1<br>因此未再次組態。
Duplicate Tool Chains detected
- 偵測到工具鍊有重複
+ 偵測到工具鏈有重複
The following tool chains were already configured:<br> %1<br>They were not configured again.
- 已組態以下工具鍊:<br> %1<br>因此未再次組態。
+ 已組態以下工具鏈:<br> %1<br>因此未再次組態。
@@ -20328,7 +20328,7 @@ if (a &&
Tool chain:
- 工具鍊:
+ 工具鏈:
Compiler:
@@ -21416,7 +21416,7 @@ Do you want to retry?
No valid tool chain has been detected.<br>Define a correct tool chain in "Options > Tool Chains"
- 沒有偵測到有效的工具鍊。<br>請在「選項」─「工具鍊」中定義一個正確的工具鍊
+ 沒有偵測到有效的工具鏈。<br>請在「選項」─「工具鏈」中定義一個正確的工具鏈
Choose a build configuration:
@@ -21424,7 +21424,7 @@ Do you want to retry?
Choose a tool chain:
- 選擇一個工具鍊:
+ 選擇一個工具鏈:
Launching
@@ -21562,11 +21562,11 @@ Do you want to retry?
No tool chain can produce code for this Qt version. Please define one or more tool chains.
- 沒有這個 Qt 版本使用的工具鍊。請定義一個或更多工具鍊。
+ 沒有這個 Qt 版本使用的工具鏈。請定義一個或更多工具鏈。
Not all possible target environments can be supported due to missing tool chains.
- 因為缺少工具鍊,所以不是所有的目標平台都能被支援。
+ 因為缺少工具鏈,所以不是所有的目標平台都能被支援。
The following ABIs are currently not supported:<ul><li>%1</li></ul>
@@ -26093,11 +26093,11 @@ should a repository require SSH-authentication (see documentation on SSH and the
Tool chain:
- 工具鍊:
+ 工具鏈:
<Invalid tool chain>
- <無效的工具鍊>
+ <無效的工具鏈>
Failed opening project '%1': Project file does not exist
@@ -26174,7 +26174,7 @@ should a repository require SSH-authentication (see documentation on SSH and the
<b>Unknown tool chain</b>
- <b>未知的工具鍊</b>
+ <b>未知的工具鏈</b>
@@ -26650,7 +26650,7 @@ references to elements in other files, loops, etc.)
<p>The project <b>%1</b> is not yet configured.</p><p>Qt Creator uses the Qt version: <b>%2</b> and the tool chain: <b>%3</b> to parse the project. You can edit these in the <b><a href="edit">options.</a></b></p>
- <p>專案 <b>%1</b>還沒組態。</p><p>Qt Creator 使用的 Qt 版本: <b>%2</b> 和工具鍊: <b>%3</b> 來解析專案。 你可以編輯這些 <b><a href="edit">選項.</a></b></p>
+ <p>專案 <b>%1</b>還沒組態。</p><p>Qt Creator 使用的 Qt 版本: <b>%2</b> 和工具鏈: <b>%3</b> 來解析專案。 你可以編輯這些 <b><a href="edit">選項.</a></b></p>
Qt Version:
@@ -26658,7 +26658,7 @@ references to elements in other files, loops, etc.)
Tool Chain:
- 工具鍊:
+ 工具鏈:
diff --git a/src/libs/utils/fileinprojectfinder.cpp b/src/libs/utils/fileinprojectfinder.cpp
index f92cb70fa78..6ee3c34becd 100644
--- a/src/libs/utils/fileinprojectfinder.cpp
+++ b/src/libs/utils/fileinprojectfinder.cpp
@@ -248,7 +248,10 @@ bool FileInProjectFinder::findFileOrDirectory(const FilePath &originalPath, File
}
}
while (prefixToIgnore != -1) {
- FilePath candidate = originalPath.resolvePath(m_projectDir);
+ QString candidateString = originalPath.toFSPathString();
+ candidateString.remove(0, prefixToIgnore);
+ candidateString.prepend(m_projectDir.toString());
+ const FilePath candidate = FilePath::fromString(candidateString);
const int matchLength = origLength - prefixToIgnore;
// FIXME: This might be a worse match than what we find later.
if (checkPath(candidate, matchLength, fileHandler, directoryHandler)) {
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index 69c31729149..1f6d89c43ae 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -62,6 +62,10 @@ bool FileReader::fetch(const FilePath &filePath, QIODevice::OpenMode mode)
return false;
}
m_data = *contents;
+
+ if (mode & QIODevice::Text)
+ m_data = m_data.replace("\r\n", "\n");
+
return true;
}
diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp
index 7567cc06183..2676fa6305c 100644
--- a/src/plugins/android/androidrunnerworker.cpp
+++ b/src/plugins/android/androidrunnerworker.cpp
@@ -122,7 +122,7 @@ static void findProcessPIDAndUser(QFutureInterface &fi, QStringList
if (!out.isEmpty()) {
QRegularExpressionMatch match;
qsizetype matchPos = out.indexOf(userIdPattern, 0, &match);
- if (matchPos >= 0 && match.hasCaptured(1) && match.capturedLength(1) > 0) {
+ if (matchPos >= 0 && match.capturedLength(1) > 0) {
bool ok = false;
processUser = match.captured(1).toInt(&ok);
if (!ok)
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp
index 49358f49ebd..f721ce3bc0d 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.cpp
+++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp
@@ -375,8 +375,14 @@ QSet internalTargets(const FilePath &proFile)
for (const CppEditor::ProjectPart::ConstPtr &projectPart : projectInfo->projectParts()) {
if (projectPart->buildTargetType != ProjectExplorer::BuildTargetType::Executable)
continue;
- if (projectPart->projectFile == proFile.toString())
+ if (projectPart->projectFile != proFile.toString())
+ continue;
+ if (Utils::anyOf(projectPart->projectMacros, [](const ProjectExplorer::Macro ¯o){
+ return macro.type == ProjectExplorer::MacroType::Define &&
+ macro.key == "QUICK_TEST_SOURCE_DIR";
+ })) {
result.insert(projectPart->buildSystemTarget);
+ }
}
return result;
}
diff --git a/src/plugins/clangformat/clangformatglobalconfigwidget.cpp b/src/plugins/clangformat/clangformatglobalconfigwidget.cpp
index 1b57403f32c..a0344e14eda 100644
--- a/src/plugins/clangformat/clangformatglobalconfigwidget.cpp
+++ b/src/plugins/clangformat/clangformatglobalconfigwidget.cpp
@@ -196,4 +196,10 @@ void ClangFormatGlobalConfigWidget::apply()
settings.write();
}
+void ClangFormatGlobalConfigWidget::finish()
+{
+ m_codeStyle->currentPreferences()->setTemporarilyReadOnly(
+ !ClangFormatSettings::instance().overrideDefaultFile());
+}
+
} // namespace ClangFormat
diff --git a/src/plugins/clangformat/clangformatglobalconfigwidget.h b/src/plugins/clangformat/clangformatglobalconfigwidget.h
index 989aa58a925..063c82852a3 100644
--- a/src/plugins/clangformat/clangformatglobalconfigwidget.h
+++ b/src/plugins/clangformat/clangformatglobalconfigwidget.h
@@ -28,6 +28,7 @@ public:
QWidget *parent = nullptr);
~ClangFormatGlobalConfigWidget() override;
void apply() override;
+ void finish() override;
private:
void initCheckBoxes();
diff --git a/src/plugins/clangformat/clangformatutils.cpp b/src/plugins/clangformat/clangformatutils.cpp
index d1d6bee684b..120e27fde7b 100644
--- a/src/plugins/clangformat/clangformatutils.cpp
+++ b/src/plugins/clangformat/clangformatutils.cpp
@@ -171,12 +171,11 @@ clang::format::FormatStyle qtcStyle()
style.SpacesInCStyleCastParentheses = false;
style.SpacesInParentheses = false;
style.SpacesInSquareBrackets = false;
- style.StatementMacros.emplace_back("Q_OBJECT");
- style.StatementMacros.emplace_back("QT_BEGIN_NAMESPACE");
- style.StatementMacros.emplace_back("QT_END_NAMESPACE");
+ addQtcStatementMacros(style);
style.Standard = FormatStyle::LS_Cpp11;
style.TabWidth = 4;
style.UseTab = FormatStyle::UT_Never;
+ style.Standard = FormatStyle::LS_Auto;
return style;
}
@@ -214,9 +213,10 @@ bool getCurrentOverriddenSettings(const Utils::FilePath &filePath)
const ProjectExplorer::Project *project = ProjectExplorer::SessionManager::projectForFile(
filePath);
- return getProjectUseGlobalSettings(project)
- ? ClangFormatSettings::instance().overrideDefaultFile()
- : getProjectOverriddenSettings(project);
+ return getProjectUseGlobalSettings(project) ? !TextEditor::TextEditorSettings::codeStyle("Cpp")
+ ->currentPreferences()
+ ->isTemporarilyReadOnly()
+ : getProjectOverriddenSettings(project);
}
ClangFormatSettings::Mode getProjectIndentationOrFormattingSettings(
@@ -276,9 +276,44 @@ Utils::FilePath configForFile(const Utils::FilePath &fileName)
void addQtcStatementMacros(clang::format::FormatStyle &style)
{
- static const std::vector macros = {"Q_OBJECT",
+ static const std::vector macros = {"Q_CLASSINFO",
+ "Q_ENUM",
+ "Q_ENUM_NS",
+ "Q_FLAG",
+ "Q_FLAG_NS",
+ "Q_GADGET",
+ "Q_GADGET_EXPORT",
+ "Q_INTERFACES",
+ "Q_MOC_INCLUDE",
+ "Q_NAMESPACE",
+ "Q_NAMESPACE_EXPORT",
+ "Q_OBJECT",
+ "Q_PROPERTY",
+ "Q_REVISION",
+ "Q_DISABLE_COPY",
+ "Q_SET_OBJECT_NAME",
"QT_BEGIN_NAMESPACE",
- "QT_END_NAMESPACE"};
+ "QT_END_NAMESPACE",
+
+ "QML_ADDED_IN_MINOR_VERSION",
+ "QML_ANONYMOUS",
+ "QML_ATTACHED",
+ "QML_DECLARE_TYPE",
+ "QML_DECLARE_TYPEINFO",
+ "QML_ELEMENT",
+ "QML_EXTENDED",
+ "QML_EXTENDED_NAMESPACE",
+ "QML_EXTRA_VERSION",
+ "QML_FOREIGN",
+ "QML_FOREIGN_NAMESPACE",
+ "QML_IMPLEMENTS_INTERFACES",
+ "QML_INTERFACE",
+ "QML_NAMED_ELEMENT",
+ "QML_REMOVED_IN_MINOR_VERSION",
+ "QML_SINGLETON",
+ "QML_UNAVAILABLE",
+ "QML_UNCREATABLE",
+ "QML_VALUE_TYPE"};
for (const std::string ¯o : macros) {
if (std::find(style.StatementMacros.begin(), style.StatementMacros.end(), macro)
== style.StatementMacros.end())
diff --git a/src/plugins/clangformat/tests/clangformat-test.cpp b/src/plugins/clangformat/tests/clangformat-test.cpp
index c5f77072e4b..80d2cc4da90 100644
--- a/src/plugins/clangformat/tests/clangformat-test.cpp
+++ b/src/plugins/clangformat/tests/clangformat-test.cpp
@@ -628,10 +628,16 @@ void ClangFormatTest::testCommentBlock()
void ClangFormatTest::testClassIndentStructure()
{
- insertLines({"class test {", " Q_OBJECT", " public:", "};"});
+ insertLines(
+ {"class test {", " Q_OBJECT", " QML_ELEMENT", " QML_SINGLETON", " public:", "};"});
m_indenter->indent(*m_cursor, QChar::Null, TextEditor::TabSettings());
QCOMPARE(documentLines(),
- (std::vector{"class test {", " Q_OBJECT", "public:", "};"}));
+ (std::vector{"class test {",
+ " Q_OBJECT",
+ " QML_ELEMENT",
+ " QML_SINGLETON",
+ "public:",
+ "};"}));
}
void ClangFormatTest::testIndentInitializeVector()
diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp
index 7881b53916f..e583a6269de 100644
--- a/src/plugins/clangtools/clangtoolruncontrol.cpp
+++ b/src/plugins/clangtools/clangtoolruncontrol.cpp
@@ -55,7 +55,8 @@ private:
connect(BuildManager::instance(), &BuildManager::buildQueueFinished,
this, &ProjectBuilder::onBuildFinished, Qt::QueuedConnection);
- BuildManager::buildProjectWithDependencies(target->project());
+ if (!BuildManager::isBuilding(target))
+ BuildManager::buildProjectWithDependencies(target->project());
}
void onBuildFinished(bool success)
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 9113c40700e..494d7ee67d7 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -1469,7 +1469,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
// Android magic:
if (DeviceTypeKitAspect::deviceTypeId(k) == Android::Constants::ANDROID_DEVICE_TYPE) {
buildSteps()->appendStep(Android::Constants::ANDROID_BUILD_APK_ID);
- const auto &bs = buildSteps()->steps().constLast();
+ const auto bs = buildSteps()->steps().constLast();
cmd.addArg("-DANDROID_PLATFORM:STRING="
+ bs->data(Android::Constants::AndroidNdkPlatform).toString());
auto ndkLocation = bs->data(Android::Constants::NdkLocation).value();
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index ecf3228d318..ae6e26f9e32 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -100,7 +100,9 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP
Utils::sort(presetsList, [](const auto &left, const auto &right) {
const bool sameInheritance = left.inherits && right.inherits
&& left.inherits.value() == right.inherits.value();
- if (!left.inherits || left.inherits.value().contains(right.name) || sameInheritance)
+ const bool leftInheritsRight = left.inherits
+ && left.inherits.value().contains(right.name);
+ if ((left.inherits && !right.inherits) || leftInheritsRight || sameInheritance)
return false;
return true;
});
diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
index 9293831fdcf..13a1510ebd6 100644
--- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
+++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp
@@ -391,7 +391,7 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input,
continue;
const auto mimeTypes = Utils::mimeTypesForFileName(si.path);
for (const auto &mime : mimeTypes)
- if (mime.name() == headerMimeType)
+ if (mime.inherits(headerMimeType))
sources.push_back(sourceDir.absoluteFilePath(si.path));
}
}
diff --git a/src/plugins/cmakeprojectmanager/presetsparser.cpp b/src/plugins/cmakeprojectmanager/presetsparser.cpp
index eed174e2b42..5ebd17fd630 100644
--- a/src/plugins/cmakeprojectmanager/presetsparser.cpp
+++ b/src/plugins/cmakeprojectmanager/presetsparser.cpp
@@ -82,7 +82,7 @@ std::optional parseCondition(const QJsonValue &jsonVa
if (type == "const") {
condition->type = type;
- condition->constValue = object.value("const").toBool();
+ condition->constValue = object.value("value").toBool();
return condition;
}
@@ -215,12 +215,24 @@ bool parseConfigurePresets(const QJsonValue &jsonValue,
item.key = cacheKey.toUtf8();
item.type = CMakeConfigItem::typeStringToType(
cacheVariableObj.value("type").toString().toUtf8());
- item.value = cacheVariableObj.value("type").toString().toUtf8();
+ item.value = cacheVariableObj.value("value").toString().toUtf8();
preset.cacheVariables.value() << item;
} else {
- preset.cacheVariables.value()
- << CMakeConfigItem(cacheKey.toUtf8(), cacheValue.toString().toUtf8());
+ if (cacheValue.isBool()) {
+ preset.cacheVariables.value()
+ << CMakeConfigItem(cacheKey.toUtf8(),
+ CMakeConfigItem::BOOL,
+ cacheValue.toBool() ? "ON" : "OFF");
+ } else if (CMakeConfigItem::toBool(cacheValue.toString()).has_value()) {
+ preset.cacheVariables.value()
+ << CMakeConfigItem(cacheKey.toUtf8(),
+ CMakeConfigItem::BOOL,
+ cacheValue.toString().toUtf8());
+ } else {
+ preset.cacheVariables.value()
+ << CMakeConfigItem(cacheKey.toUtf8(), cacheValue.toString().toUtf8());
+ }
}
}
diff --git a/src/plugins/coreplugin/locator/locatorsettingspage.cpp b/src/plugins/coreplugin/locator/locatorsettingspage.cpp
index 9940680aa25..0193a791c37 100644
--- a/src/plugins/coreplugin/locator/locatorsettingspage.cpp
+++ b/src/plugins/coreplugin/locator/locatorsettingspage.cpp
@@ -85,7 +85,7 @@ QVariant FilterItem::data(int column, int role) const
return m_filter->shortcutString();
break;
case FilterIncludedByDefault:
- if (role == Qt::CheckStateRole || role == SortRole || role == Qt::EditRole)
+ if (role == Qt::CheckStateRole || role == SortRole)
return m_filter->isIncludedByDefault() ? Qt::Checked : Qt::Unchecked;
break;
default:
@@ -102,7 +102,7 @@ Qt::ItemFlags FilterItem::flags(int column) const
if (column == FilterPrefix)
return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable;
if (column == FilterIncludedByDefault)
- return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsUserCheckable;
+ return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
}
diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp
index 3e1927faeb7..6f7e22bacd2 100644
--- a/src/plugins/projectexplorer/appoutputpane.cpp
+++ b/src/plugins/projectexplorer/appoutputpane.cpp
@@ -397,7 +397,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc)
const Environment thisEnvironment = rc->environment();
const auto tab = std::find_if(m_runControlTabs.begin(), m_runControlTabs.end(),
[&](const RunControlTab &tab) {
- if (!tab.runControl || tab.runControl->isRunning())
+ if (!tab.runControl || tab.runControl->isRunning() || tab.runControl->isStarting())
return false;
return thisCommand == tab.runControl->commandLine()
&& thisWorkingDirectory == tab.runControl->workingDirectory()
diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp
index 0575e2dbbba..a5b7687a2ac 100644
--- a/src/plugins/qmljseditor/qmljseditordocument.cpp
+++ b/src/plugins/qmljseditor/qmljseditordocument.cpp
@@ -505,7 +505,6 @@ QmlJSEditorDocumentPrivate::QmlJSEditorDocumentPrivate(QmlJSEditorDocument *pare
this, &QmlJSEditorDocumentPrivate::updateOutlineModel);
modelManager->updateSourceFiles(Utils::FilePaths({parent->filePath()}), false);
- settingsChanged();
}
QmlJSEditorDocumentPrivate::~QmlJSEditorDocumentPrivate()
@@ -818,6 +817,8 @@ QmlJSEditorDocument::QmlJSEditorDocument(Utils::Id id)
setId(id);
connect(this, &TextEditor::TextDocument::tabSettingsChanged,
d, &Internal::QmlJSEditorDocumentPrivate::invalidateFormatterCache);
+ connect(this, &TextEditor::TextDocument::openFinishedSuccessfully,
+ d, &Internal::QmlJSEditorDocumentPrivate::settingsChanged);
setSyntaxHighlighter(new QmlJSHighlighter(document()));
setCodec(QTextCodec::codecForName("UTF-8")); // qml files are defined to be utf-8
setIndenter(new Internal::Indenter(document()));
diff --git a/src/plugins/qtsupport/examplesparser.cpp b/src/plugins/qtsupport/examplesparser.cpp
index bdde8e66a0f..5fd3161777c 100644
--- a/src/plugins/qtsupport/examplesparser.cpp
+++ b/src/plugins/qtsupport/examplesparser.cpp
@@ -211,9 +211,9 @@ static QList parseTutorials(QXmlStreamReader *reader, const FileP
item->type = Tutorial;
QXmlStreamAttributes attributes = reader->attributes();
item->name = attributes.value(QLatin1String("name")).toString();
- item->projectPath = projectsOffset
- / attributes.value(QLatin1String("projectPath")).toString();
- item->hasSourceCode = !item->projectPath.isEmpty();
+ const QString projectPath = attributes.value(QLatin1String("projectPath")).toString();
+ item->projectPath = projectsOffset / projectPath;
+ item->hasSourceCode = !projectPath.isEmpty();
item->imageUrl = Utils::StyleHelper::dpiSpecificImageFile(
attributes.value(QLatin1String("imageUrl")).toString());
QPixmapCache::remove(item->imageUrl);
diff --git a/src/plugins/saferenderer/wizards/qsrapp/main.cpp.tpl b/src/plugins/saferenderer/wizards/qsrapp/main.cpp.tpl
index 4f36c6f6fa3..c491bee9aeb 100644
--- a/src/plugins/saferenderer/wizards/qsrapp/main.cpp.tpl
+++ b/src/plugins/saferenderer/wizards/qsrapp/main.cpp.tpl
@@ -28,23 +28,23 @@ int main(int argc, char *argv[])
static SafeRenderer::QSafeLayoutResourceReader layout("/layoutData/main/main.srl");
#if defined(USE_OUTPUTVERIFIER)
- static OutputVerifier outputVerifier;
+ static SafeRenderer::OutputVerifier outputVerifier;
#if defined(HOST_BUILD)
//In host environment the TestVerifier must be explicitly created.
//In OpeWFD adaptation the MISRVerifier instance is created in the SafeWindow adaptation.
- static TestVerifier testVerifier(outputVerifier);
+ static SafeRenderer::TestVerifier testVerifier(outputVerifier);
#endif
- SafeWindow telltaleWindow(layout.size(), QSafePoint(0U, 0U), outputVerifier);
+ SafeRenderer::SafeWindow telltaleWindow(layout.size(), SafeRenderer::QSafePoint(0U, 0U), outputVerifier);
#else
- SafeWindow telltaleWindow(layout.size(), QSafePoint(0U, 0U));
+ SafeRenderer::SafeWindow telltaleWindow(layout.size(), SafeRenderer::QSafePoint(0U, 0U));
#endif
static SafeRenderer::StateManager stateManager(telltaleWindow, layout);
telltaleWindow.requestUpdate(); //Request is required because eventHandler is not running yet.
#if defined(USE_OUTPUTVERIFIER)
- EventHandler msgHandler(stateManager, telltaleWindow, outputVerifier);
+ SafeRenderer::EventHandler msgHandler(stateManager, telltaleWindow, outputVerifier);
#else
- EventHandler msgHandler(stateManager, telltaleWindow);
+ SafeRenderer::EventHandler msgHandler(stateManager, telltaleWindow);
#endif
#if defined(HOST_BUILD)
diff --git a/src/plugins/texteditor/codestyleeditor.cpp b/src/plugins/texteditor/codestyleeditor.cpp
index 6aaf5ae9483..ac75f1ad6d3 100644
--- a/src/plugins/texteditor/codestyleeditor.cpp
+++ b/src/plugins/texteditor/codestyleeditor.cpp
@@ -108,6 +108,9 @@ void CodeStyleEditor::finish()
{
if (m_widget)
m_widget->finish();
+
+ if (m_additionalGlobalSettingsWidget)
+ m_additionalGlobalSettingsWidget->finish();
}
} // TextEditor
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 7e50d469271..17cabc38911 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -2913,9 +2913,9 @@ void TextEditorWidget::insertCodeSnippet(const QTextCursor &cursor_arg,
d->m_document->autoIndent(cursor);
cursor.endEditBlock();
- const QColor &occurrencesColor
+ const QColor occurrencesColor
= textDocument()->fontSettings().toTextCharFormat(C_OCCURRENCES).background().color();
- const QColor &renameColor
+ const QColor renameColor
= textDocument()->fontSettings().toTextCharFormat(C_OCCURRENCES_RENAME).background().color();
for (const CursorPart &part : cursorParts) {
diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp
index bf320549de1..52ab8709de6 100644
--- a/src/plugins/texteditor/texteditoroverlay.cpp
+++ b/src/plugins/texteditor/texteditoroverlay.cpp
@@ -134,8 +134,10 @@ QPainterPath TextEditorOverlay::createSelectionPath(const QTextCursor &begin, co
int x = line.cursorToX(pos);
lineRect.setLeft(x - borderWidth);
lineRect.setRight(x + borderWidth);
+ lineRect.setBottom(lineRect.bottom() + borderWidth);
QPainterPath path;
path.addRect(lineRect);
+ path.translate(offset);
return path;
}
@@ -250,6 +252,8 @@ void TextEditorOverlay::paintSelection(QPainter *painter,
return;
QPainterPath path = createSelectionPath(begin, end, clip);
+ if (path.isEmpty())
+ return;
painter->save();
QColor penColor = fg;
@@ -305,6 +309,8 @@ void TextEditorOverlay::fillSelection(QPainter *painter,
return;
QPainterPath path = createSelectionPath(begin, end, clip);
+ if (path.isEmpty())
+ return;
painter->save();
painter->translate(-.5, -.5);
diff --git a/src/plugins/texteditor/textmark.cpp b/src/plugins/texteditor/textmark.cpp
index 4a8320de57b..37be854d9b9 100644
--- a/src/plugins/texteditor/textmark.cpp
+++ b/src/plugins/texteditor/textmark.cpp
@@ -133,7 +133,7 @@ void TextMark::paintAnnotation(QPainter &painter,
const QColor &markColor = annotationColor();
const FontSettings &fontSettings = m_baseTextDocument->fontSettings();
- const AnnotationColors &colors = AnnotationColors::getAnnotationColors(
+ const AnnotationColors colors = AnnotationColors::getAnnotationColors(
markColor.isValid() ? markColor : painter.pen().color(),
fontSettings.toTextCharFormat(C_TEXT).background().color());
diff --git a/src/plugins/valgrind/callgrindvisualisation.cpp b/src/plugins/valgrind/callgrindvisualisation.cpp
index f049a92e354..4120dc53de2 100644
--- a/src/plugins/valgrind/callgrindvisualisation.cpp
+++ b/src/plugins/valgrind/callgrindvisualisation.cpp
@@ -155,7 +155,7 @@ void FunctionGraphicsItem::paint(QPainter *painter,
painter->save();
QRectF rect = this->rect();
- const QColor &color = brush().color();
+ const QColor color = brush().color();
if (option->state & QStyle::State_Selected) {
QLinearGradient gradient(0, 0, rect.width(), 0);
gradient.setColorAt(0, color.darker(100));
diff --git a/src/shared/qbs b/src/shared/qbs
index 978448ddfe8..e002680feb4 160000
--- a/src/shared/qbs
+++ b/src/shared/qbs
@@ -1 +1 @@
-Subproject commit 978448ddfe8aac9c4cc895f6c93429e0f9f689bc
+Subproject commit e002680feb415ee7d26e3a31d70afeef0d50dea2
diff --git a/tests/system/suite_CSUP/tst_CSUP03/test.py b/tests/system/suite_CSUP/tst_CSUP03/test.py
index 8667f3c2ac9..4e6f3e20995 100644
--- a/tests/system/suite_CSUP/tst_CSUP03/test.py
+++ b/tests/system/suite_CSUP/tst_CSUP03/test.py
@@ -50,10 +50,6 @@ def main():
}
for useClang in [False, True]:
with TestSection(getCodeModelString(useClang)):
- if (useClang and platform.system() in ('Windows', 'Microsoft')
- and JIRA.isBugStillOpen(18607)):
- test.warning("Skipping unstable tests on Windows", "See QTCREATORBUG-18607")
- continue
if not startCreatorVerifyingClang(useClang):
continue
projectName = createNewNonQtProject(tempDir(), "project-csup03",
diff --git a/tests/system/suite_CSUP/tst_CSUP06/test.py b/tests/system/suite_CSUP/tst_CSUP06/test.py
index 56e934db407..7682d1a6723 100644
--- a/tests/system/suite_CSUP/tst_CSUP06/test.py
+++ b/tests/system/suite_CSUP/tst_CSUP06/test.py
@@ -42,8 +42,14 @@ def performAutoCompletionTest(editor, lineToStartRegEx, linePrefix, testFunc, *f
def checkIncludeCompletion(editor, isClangCodeModel):
test.log("Check auto-completion of include statements.")
# define special handlings
- noProposal = ["detail/hea"]
+ noProposal = []
specialHandling = {"ios":"iostream", "cstd":"cstdio"}
+ if isClangCodeModel:
+ specialHandling["QDe"] = "QDebug"
+ for i in specialHandling.keys():
+ specialHandling[i] = " %s>" % specialHandling[i]
+ else:
+ noProposal += ["detail/hea"]
# define test function to perform the _real_ auto completion test on the current line
def testIncl(currentLine, *args):
@@ -69,25 +75,24 @@ def checkIncludeCompletion(editor, isClangCodeModel):
def checkSymbolCompletion(editor, isClangCodeModel):
test.log("Check auto-completion of symbols.")
# define special handlings
- expectedSuggestion = {"in":["internal", "int", "INT_MAX", "INT_MIN"],
+ expectedSuggestion = {"in":["internal", "int", "intmax_t"],
"Dum":["Dummy", "dummy"], "Dummy::O":["ONE","one"],
- "dummy.":["foo", "bla", "ONE", "one", "PI", "sfunc", "v1", "v2", "v3"],
+ "dummy.":["one", "ONE", "PI", "v1", "v2", "v3"],
"dummy.o":["one", "ONE"], "Dummy::In":["Internal", "INT"],
"Dummy::Internal::":["DOUBLE", "one"]
}
missing = ["Dummy::s", "Dummy::P", "dummy.b", "dummy.bla(", "internal.o", "freefunc2"]
- expectedResults = {"dummy.":"dummy.foo(", "Dummy::s":"Dummy::sfunc()",
+ expectedResults = {"Dummy::s":"Dummy::sfunc()",
"Dummy::P":"Dummy::PI", "dummy.b":"dummy.bla(", "dummy.bla(":"dummy.bla(",
"internal.o":"internal.one", "freefunc2":"freefunc2(",
"using namespace st":"using namespace std", "afun":"afunc()"}
if isClangCodeModel:
- missing.remove("internal.o")
- expectedSuggestion["in"] = ["internal", "int"] # QTCREATORBUG-22728
- expectedSuggestion["internal.o"] = ["one", "operator="]
+ missing = ["dummy.bla("]
+ expectedSuggestion["internal.o"] = ["one"]
if platform.system() in ('Microsoft', 'Windows'):
expectedSuggestion["using namespace st"] = ["std", "stdext"]
else:
- expectedSuggestion["using namespace st"] = ["std", "struct ", "struct template"]
+ expectedSuggestion["using namespace st"] = ["std", "struct", "struct template"]
else:
expectedSuggestion["using namespace st"] = ["std", "st"]
# define test function to perform the _real_ auto completion test on the current line
@@ -101,27 +106,25 @@ def checkSymbolCompletion(editor, isClangCodeModel):
found = []
if propShown:
proposalListView = waitForObject(':popupFrame_Proposal_QListView')
- found = dumpItems(proposalListView.model())
+ found = [i.strip() for i in dumpItems(proposalListView.model())]
diffShownExp = set(expectedSug.get(symbol, [])) - set(found)
if not test.verify(len(diffShownExp) == 0,
"Verify if all expected suggestions could be found"):
test.log("Expected but not found suggestions: %s" % diffShownExp,
"%s | %s" % (expectedSug[symbol], str(found)))
# select first item of the expected suggestion list
- doubleClickItem(':popupFrame_Proposal_QListView', expectedSug.get(symbol, found)[0],
+ suggestionToClick = expectedSug.get(symbol, found)[0]
+ if isClangCodeModel:
+ suggestionToClick = " " + suggestionToClick
+ doubleClickItem(':popupFrame_Proposal_QListView', suggestionToClick,
5, 5, 0, Qt.LeftButton)
changedLine = str(lineUnderCursor(editor)).strip()
if symbol in expectedRes:
exp = expectedRes[symbol]
else:
exp = (symbol[:max(symbol.rfind(":"), symbol.rfind(".")) + 1]
- + expectedSug.get(symbol, found)[0])
- if isClangCodeModel and changedLine != exp and JIRA.isBugStillOpen(15483):
- test.xcompare(changedLine, exp, "Verify completion matches (QTCREATORBUG-15483).")
- test.verify(changedLine.startswith(exp.replace("(", "").replace(")", "")),
- "Verify completion starts with expected string.")
- else:
- test.compare(changedLine, exp, "Verify completion matches.")
+ + expectedSug.get(symbol, found)[0]).strip()
+ test.compare(changedLine, exp, "Verify completion matches.")
performAutoCompletionTest(editor, ".*Complete symbols.*", "//",
testSymb, missing, expectedSuggestion, expectedResults)
@@ -143,6 +146,10 @@ def main():
return
editor = getEditorForFileSuffix("main.cpp")
if editor:
+ if useClang:
+ test.log("Wait for parsing to finish...")
+ progressBarWait(15000)
+ test.log("Parsing done.")
checkIncludeCompletion(editor, useClang)
checkSymbolCompletion(editor, useClang)
invokeMenuItem('File', 'Revert "main.cpp" to Saved')
diff --git a/tests/system/suite_HELP/tst_HELP04/test.py b/tests/system/suite_HELP/tst_HELP04/test.py
index e4c0500d234..3fd63309ad3 100644
--- a/tests/system/suite_HELP/tst_HELP04/test.py
+++ b/tests/system/suite_HELP/tst_HELP04/test.py
@@ -87,8 +87,7 @@ def main():
type(resultWidget, "")
waitFor("__getUrl__() != url or selText != __getSelectedText__()", 20000)
verifySelection(searchKeyword)
- if not (searchKeyword == "QODBC" and JIRA.isBugStillOpen(10331)):
- verifyUrl(urlDictionary[searchKeyword])
+ verifyUrl(urlDictionary[searchKeyword])
else:
test.verify(waitFor("noMatch in "
"str(resultWidget.plainText)", 1000),
diff --git a/tests/system/suite_QMLS/tst_QMLS04/test.py b/tests/system/suite_QMLS/tst_QMLS04/test.py
index 351b59ac638..2c96939151d 100644
--- a/tests/system/suite_QMLS/tst_QMLS04/test.py
+++ b/tests/system/suite_QMLS/tst_QMLS04/test.py
@@ -48,14 +48,12 @@ def main():
pass
# open MyComponent.qml file for verification
docOpened = openDocument(myCompTE)
- if JIRA.isBugStillOpen(28985):
- test.xverify(docOpened, "Was MyComponent.qml properly generated in project explorer?")
- saveAndExit()
- return
- if not test.verify(docOpened, "Was MyComponent.qml properly generated in project explorer?"):
- test.fatal("Could not open MyComponent.qml.")
- saveAndExit()
- return
+ # Work around QTCREATORBUG-28985
+ test.xverify(docOpened, "Was MyComponent.qml properly generated in project explorer?")
+ saveAndExit()
+ return
+ # The workaround will be removed in master branch
+ # Following dead code left in intentionally to still allow merging forward changes in it.
editorArea = waitForObject(":Qt Creator_QmlJSEditor::QmlJSTextEditorWidget")
codeText = str(editorArea.plainText)
# there should be Text item in new file
diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py
index 866720b27b8..f710dd1375a 100644
--- a/tests/system/suite_general/tst_default_settings/test.py
+++ b/tests/system/suite_general/tst_default_settings/test.py
@@ -275,7 +275,9 @@ def __getCDB__():
"C:\\Program Files\\Windows Kits\\8.1\\Debuggers\\x86",
"C:\\Program Files\\Windows Kits\\8.1\\Debuggers\\x64",
"C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x86",
- "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x64"]
+ "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x64",
+ "C:\\Program Files\\Windows Kits\\10\\Debuggers\\x86",
+ "C:\\Program Files\\Windows Kits\\10\\Debuggers\\x64"]
for cdbPath in possibleLocations:
cdb = os.path.join(cdbPath, "cdb.exe")
if os.path.exists(cdb):