From 4f3fea4baa682d6e174490a7a80f35bb70196c31 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 8 Jun 2023 17:06:24 +0200 Subject: [PATCH 01/25] Doc: Update Issues view docs Task-number: QTCREATORBUG-28996 Change-Id: Icb35a36adf914b2791e405c1bed972fac40e6973 Reviewed-by: Christian Kandeler Reviewed-by: Reviewed-by: Thomas Hartmann --- doc/qtcreator/images/qtcreator-issues.png | Bin 4897 -> 0 bytes doc/qtcreator/images/qtcreator-issues.webp | Bin 0 -> 3940 bytes .../src/user-interface/creator-ui.qdoc | 25 ++++++++++++++---- 3 files changed, 20 insertions(+), 5 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-issues.png create mode 100644 doc/qtcreator/images/qtcreator-issues.webp diff --git a/doc/qtcreator/images/qtcreator-issues.png b/doc/qtcreator/images/qtcreator-issues.png deleted file mode 100644 index b0bde84e455dfa4a656e63696055ef9b03899dc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4897 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 diff --git a/doc/qtcreator/images/qtcreator-issues.webp b/doc/qtcreator/images/qtcreator-issues.webp new file mode 100644 index 0000000000000000000000000000000000000000..329a66b29b367a75601d8b21d119ba3552bdb4a9 GIT binary patch literal 3940 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 o;g@u<@#{|Yh+~I+B>ow?olRR6`8Pf6|IDlPX From 46cb0de54a4e8a24cc33253bab582448bd816a0e Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 15 Jun 2023 10:28:03 +0200 Subject: [PATCH 02/25] Doc: Fix broken \previouspage link Change-Id: Ia2e0d01833fd9f28545bfeee47c3386a96aafe0c Reviewed-by: Leena Miettinen --- doc/qtcreator/src/howto/creator-only/creator-cli.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc b/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc index 7634b9ce395..96c63abfd1d 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc @@ -8,7 +8,7 @@ // ********************************************************************** /*! - \previouspage creator-project-vcpkg.html + \previouspage creator-vcpkg.html \page creator-cli.html \nextpage creator-keyboard-shortcuts.html From 3825b9f2cc52bf14000ef6cba27999b634fb6db8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 13 Jun 2023 15:36:21 +0200 Subject: [PATCH 03/25] CMake: Some UI/tr fixes Avoid the order "Label [ ]" for checkboxes, we changed all cases to the standard "[ ] Label" because it looks very ugly and confusing the other way around. Also move the corresponding directory setting to the next row, which is not ideal but still looks better. Improve message about reloading presets. Change-Id: Ibcd26e24a2a4cd3ea5ca819f74e78edb40f46072 Reviewed-by: Leena Miettinen Reviewed-by: Cristian Adam --- .../cmakeprojectmanager/cmakebuildstep.cpp | 11 +++++---- .../cmakeprojectmanager.cpp | 24 +++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index 68f42127a21..783468422dd 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -194,7 +194,7 @@ CMakeBuildStep::CMakeBuildStep(BuildStepList *bsl, Id id) : m_useStaging = addAspect(); m_useStaging->setSettingsKey(USE_STAGING_KEY); - m_useStaging->setLabelPlacement(BoolAspect::LabelPlacement::AtCheckBox); + m_useStaging->setLabel(Tr::tr("Stage for installation"), BoolAspect::LabelPlacement::AtCheckBox); m_useStaging->setDefaultValue(!buildAndRunOnSameDevice(kit())); m_stagingDir = addAspect(); @@ -503,8 +503,10 @@ QWidget *CMakeBuildStep::createConfigWidget() m_stagingDir->setEnabled(m_useStaging->value()); if (m_useStaging->value()) { - summaryText.append(" " + Tr::tr("and stage at %2 for %3") - .arg(currentStagingDir(), currentInstallPrefix())); + //: Stage (for installation) at for + summaryText.append( + "; " + + Tr::tr("Stage at %2 for %3").arg(currentStagingDir(), currentInstallPrefix())); } if (!m_buildPreset.isEmpty()) { @@ -567,7 +569,8 @@ QWidget *CMakeBuildStep::createConfigWidget() Layouting::Form builder; builder.addRow({m_cmakeArguments}); builder.addRow({m_toolArguments}); - builder.addRow({Tr::tr("Stage for installation:"), Layouting::Row{m_useStaging, m_stagingDir}}); + builder.addRow({m_useStaging}); + builder.addRow({m_stagingDir}); if (m_useiOSAutomaticProvisioningUpdates) builder.addRow({m_useiOSAutomaticProvisioningUpdates}); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp index c43c7978a61..96d54518c33 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp @@ -233,18 +233,18 @@ void CMakeManager::reloadCMakePresets() { auto settings = CMakeSpecificSettings::instance(); - QMessageBox::StandardButton clickedButton - = CheckableMessageBox::question(Core::ICore::dialogParent(), - Tr::tr("Reload CMake Presets"), - Tr::tr("Re-generates the CMake presets kits. The manual " - "CMake project modifications will be lost."), - settings->askBeforePresetsReload.checkableDecider(), - QMessageBox::Yes | QMessageBox::Cancel, - QMessageBox::Yes, - QMessageBox::Yes, - { - {QMessageBox::Yes, Tr::tr("Reload")}, - }); + QMessageBox::StandardButton clickedButton = CheckableMessageBox::question( + Core::ICore::dialogParent(), + Tr::tr("Reload CMake Presets"), + Tr::tr("Re-generates the kits that were created for CMake presets. All manual " + "modifications to the CMake project settings will be lost."), + settings->askBeforePresetsReload.checkableDecider(), + QMessageBox::Yes | QMessageBox::Cancel, + QMessageBox::Yes, + QMessageBox::Yes, + { + {QMessageBox::Yes, Tr::tr("Reload")}, + }); if (clickedButton == QMessageBox::Cancel) return; From 6453cfa41281b88ff68348ef46651e182410a1f0 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 13 Jun 2023 09:39:40 +0200 Subject: [PATCH 04/25] Terminal: Don't use askpass Askpass is not needed for terminals. You can enter the password inside the terminal. Change-Id: I700efbc16cbf4bd9904c8652867af894e314785b Reviewed-by: Jarek Kobus Reviewed-by: --- src/libs/utils/terminalinterface.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/libs/utils/terminalinterface.cpp b/src/libs/utils/terminalinterface.cpp index 0054b60bd27..fc69451c9c0 100644 --- a/src/libs/utils/terminalinterface.cpp +++ b/src/libs/utils/terminalinterface.cpp @@ -392,16 +392,8 @@ void TerminalInterface::start() m_setup.m_commandLine.executable().fileName()); if (m_setup.m_runAsRoot && !HostOsInfo::isWindowsHost()) { - CommandLine rootCommand(FilePath("sudo").searchInPath(), {"-A"}); + CommandLine rootCommand("sudo", {}); rootCommand.addCommandLineAsArgs(cmd); - - const FilePath askPassPath = FilePath::fromUserInput(QCoreApplication::applicationDirPath()) - .pathAppended(QLatin1String(RELATIVE_LIBEXEC_PATH)) - .pathAppended(QLatin1String("qtc-askpass")); - - if (askPassPath.exists()) - stubSetupData.m_environment.setFallback("SUDO_ASKPASS", askPassPath.toUserOutput()); - stubSetupData.m_commandLine = rootCommand; } else { stubSetupData.m_commandLine = cmd; From c6e2e93bc00bf37ec06ee6a69f6383bd3e2a052c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Fri, 9 Jun 2023 17:54:04 +0200 Subject: [PATCH 05/25] SquishTests: Remove workaround for fixed issue with open terminals This reverts commit 4c5163f6750b91e1d945a02daec0e1bc25f12721. Task-number: QTCREATORBUG-15749 Change-Id: Icefdfe2f7e4f818f3407854619d4c6a395084af2 Reviewed-by: Christian Stenger --- tests/system/shared/qtcreator.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py index f243d00506a..7b58247571a 100644 --- a/tests/system/shared/qtcreator.py +++ b/tests/system/shared/qtcreator.py @@ -124,17 +124,6 @@ def waitForCleanShutdown(timeOut=10): shutdownDone=True if not shutdownDone and datetime.utcnow() > endtime: break - if platform.system() == 'Linux' and JIRA.isBugStillOpen(15749): - pgrepOutput = getOutputFromCmdline(["pgrep", "-f", "qtcreator_process_stub"], - acceptedError=1) - pids = pgrepOutput.splitlines() - if len(pids): - print("Killing %d qtcreator_process_stub instances" % len(pids)) - for pid in pids: - try: - os.kill(__builtin__.int(pid), 9) - except OSError: # we might kill the parent before the current pid - pass def checkForStillRunningQmlExecutable(possibleNames): for qmlHelper in possibleNames: From 012f67baf149544d6feb1e6dbce014f3a0a625c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Fri, 9 Jun 2023 21:55:16 +0200 Subject: [PATCH 06/25] SquishTests: Update keyboard shortcut GroupBox Change-Id: I168e6128f61b6363253c5ed999a29b1f64441cff Reviewed-by: Reviewed-by: Christian Stenger --- tests/system/suite_HELP/tst_HELP02/test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/system/suite_HELP/tst_HELP02/test.py b/tests/system/suite_HELP/tst_HELP02/test.py index 7cacdf6e515..e7e201c4948 100644 --- a/tests/system/suite_HELP/tst_HELP02/test.py +++ b/tests/system/suite_HELP/tst_HELP02/test.py @@ -53,8 +53,8 @@ def setKeyboardShortcutForAboutQtC(): invokeMenuItem("Edit", "Preferences...") mouseClick(waitForObjectItem(":Options_QListView", "Environment")) clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Keyboard") - filter = waitForObject("{container={title='Keyboard Shortcuts' type='QGroupBox' unnamed='1' " - "visible='1'} type='Utils::FancyLineEdit' unnamed='1' visible='1' " + filter = waitForObject("{container={name='Command Mappings' type='QGroupBox' visible='1'} " + "type='Utils::FancyLineEdit' unnamed='1' visible='1' " "placeholderText='Filter'}") replaceEditorContent(filter, "about") treewidget = waitForObject("{type='QTreeWidget' unnamed='1' visible='1'}") From d3177b84bcd9ae4cb3f6108c8332ebcf6b379f14 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 15 Jun 2023 13:17:38 +0200 Subject: [PATCH 07/25] Doc: Describe auto-adjustment of CMake config for Qt Quick projects ..when adding files to projects. Task-number: QTCREATORBUG-28996 Change-Id: If1de542ce3262227c307e3f479f6f10bf493fa83 Reviewed-by: Cristian Adam --- doc/qtcreator/src/cmake/creator-projects-cmake.qdoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc b/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc index f81a54551bc..d9809f09a38 100644 --- a/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc +++ b/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc @@ -190,6 +190,10 @@ If you use custom API, \QC uses \c {target_sources()} to add the files. + For Qt Quick projects, the files are added to the \c {qt_add_qml_module()} + function, prefixed with the \c QML_FILES, \c SOURCES, or \c RESOURCES + function argument. + When you rename or remove files in the \l {Projects} or \l {File System} view, \QC renames them in the CMakeLists.txt file or removes them from it. From 039898058cd40e4dfbe8ddefde4cc93aa7af0f58 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 14 Jun 2023 18:53:12 +0200 Subject: [PATCH 08/25] qds: remove Quick Control 1 feature Tab and TabView are not existing in QuickControls 2. Change-Id: I16694d6015927c54087e0b4aeebb8dee245f04f8 Reviewed-by: Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/CMakeLists.txt | 5 - .../formeditor/rotationindicator.cpp | 3 - .../componentsplugin/addtabdesigneraction.cpp | 118 ------------------ .../componentsplugin/addtabdesigneraction.h | 29 ----- .../addtabtotabviewdialog.cpp | 39 ------ .../componentsplugin/addtabtotabviewdialog.h | 25 ---- .../componentsplugin/addtabtotabviewdialog.ui | 85 ------------- .../componentsplugin/componentsplugin.cpp | 10 -- .../entertabdesigneraction.cpp | 116 ----------------- .../componentsplugin/entertabdesigneraction.h | 32 ----- .../componentsplugin/tabviewindexmodel.cpp | 61 --------- .../componentsplugin/tabviewindexmodel.h | 38 ------ .../designercore/include/nodemetainfo.h | 2 - .../designercore/metainfo/nodemetainfo.cpp | 21 ---- .../designercore/model/qmlitemnode.cpp | 6 - .../projectstorage/commontypecache.h | 4 - 16 files changed, 594 deletions(-) delete mode 100644 src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.cpp delete mode 100644 src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h delete mode 100644 src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.cpp delete mode 100644 src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h delete mode 100644 src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.ui delete mode 100644 src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp delete mode 100644 src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.h delete mode 100644 src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp delete mode 100644 src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index fdc2bb41d71..08bde98beff 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -1129,13 +1129,8 @@ extend_qtc_plugin(componentsplugin extend_qtc_plugin(componentsplugin SOURCES_PREFIX componentsplugin SOURCES - addtabdesigneraction.cpp addtabdesigneraction.h - addtabtotabviewdialog.cpp addtabtotabviewdialog.h - addtabtotabviewdialog.ui componentsplugin.cpp componentsplugin.h componentsplugin.qrc - entertabdesigneraction.cpp entertabdesigneraction.h - tabviewindexmodel.cpp tabviewindexmodel.h ) add_qtc_plugin(qmlpreviewplugin diff --git a/src/plugins/qmldesigner/components/formeditor/rotationindicator.cpp b/src/plugins/qmldesigner/components/formeditor/rotationindicator.cpp index d2c4e90da98..810f14d8248 100644 --- a/src/plugins/qmldesigner/components/formeditor/rotationindicator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/rotationindicator.cpp @@ -42,9 +42,6 @@ namespace { bool itemIsResizable(const ModelNode &modelNode) { - if (modelNode.metaInfo().isQtQuickControlsTab()) - return false; - return NodeHints::fromModelNode(modelNode).isResizable(); } diff --git a/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.cpp b/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.cpp deleted file mode 100644 index f10b9c6b7cc..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.cpp +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "addtabdesigneraction.h" -#include "addtabtotabviewdialog.h" - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -namespace QmlDesigner { - -bool isTabView(const ModelNode &modelNode) -{ - return modelNode.metaInfo().isQtQuickControlsTabView(); -} - -bool isTabAndParentIsTabView(const ModelNode &modelNode) -{ - return modelNode.metaInfo().isQtQuickControlsTab() && modelNode.hasParentProperty() - && modelNode.parentProperty().parentModelNode().metaInfo().isQtQuickControlsTabView(); -} - -AddTabDesignerAction::AddTabDesignerAction() - : AbstractAction(QCoreApplication::translate("TabViewToolAction","Add Tab...")) -{ - connect(action(), &QAction::triggered, this, &AddTabDesignerAction::addNewTab); -} - -QByteArray AddTabDesignerAction::category() const -{ - return QByteArray(); -} - -QByteArray AddTabDesignerAction::menuId() const -{ - return "TabViewAction"; -} - -int AddTabDesignerAction::priority() const -{ - return CustomActionsPriority; -} - -ActionInterface::Type AddTabDesignerAction::type() const -{ - return ContextMenuAction; -} - -bool AddTabDesignerAction::isVisible(const SelectionContext &selectionContext) const -{ - if (selectionContext.singleNodeIsSelected()) { - ModelNode selectedModelNode = selectionContext.currentSingleSelectedNode(); - return isTabView(selectedModelNode) || isTabAndParentIsTabView(selectedModelNode); - } - - return false; -} - -bool AddTabDesignerAction::isEnabled(const SelectionContext &selectionContext) const -{ - return isVisible(selectionContext); -} - -static ModelNode findTabViewModelNode(const ModelNode ¤tModelNode) -{ - if (currentModelNode.metaInfo().isQtQuickControlsTabView()) - return currentModelNode; - else - return findTabViewModelNode(currentModelNode.parentProperty().parentModelNode()); -} - -void AddTabDesignerAction::addNewTab() -{ - QString tabName = AddTabToTabViewDialog::create(QStringLiteral("Tab"), - Core::ICore::dialogParent()); - - if (!tabName.isEmpty()) { - QString directoryPath = QFileInfo(selectionContext().view()->model()->fileUrl().toLocalFile()).absolutePath(); - QString newFilePath = directoryPath +QStringLiteral("/") + tabName + QStringLiteral(".qml"); - - if (QFileInfo::exists(newFilePath)) { - Core::AsynchronousMessageBox::warning(tr("Naming Error"), tr("Component already exists.")); - } else { - const QString sourceString = QStringLiteral("import QtQuick 2.1\nimport QtQuick.Controls 1.0\n\nItem {\n anchors.fill: parent\n}"); - bool fileCreated = DocumentManager::createFile(newFilePath, sourceString); - - if (fileCreated) { - DocumentManager::addFileToVersionControl(directoryPath, newFilePath); - - ModelNode tabViewModelNode = findTabViewModelNode(selectionContext().currentSingleSelectedNode()); - - PropertyListType propertyList; - propertyList.append(QPair("source", QString(tabName + QStringLiteral(".qml")))); - propertyList.append(QPair("title", tabName)); - - ModelNode newTabModelNode = selectionContext().view()->createModelNode("QtQuick.Controls.Tab", - tabViewModelNode.majorVersion(), - tabViewModelNode.minorVersion(), - propertyList); - newTabModelNode.setIdWithRefactoring(newTabModelNode.model()->generateNewId(tabName)); - tabViewModelNode.defaultNodeAbstractProperty().reparentHere(newTabModelNode); - } - } - } -} - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h b/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h deleted file mode 100644 index 1a65c8503df..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/addtabdesigneraction.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include "abstractaction.h" - -namespace QmlDesigner { - -class AddTabDesignerAction : public QObject, public AbstractAction -{ - Q_OBJECT -public: - AddTabDesignerAction(); - - QByteArray category() const override; - QByteArray menuId() const override; - int priority() const override; - Type type() const override; - -protected: - bool isVisible(const SelectionContext &selectionContext) const override; - bool isEnabled(const SelectionContext &selectionContext) const override; - -private: - void addNewTab(); -}; - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.cpp b/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.cpp deleted file mode 100644 index fe50799416c..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "addtabtotabviewdialog.h" -#include "ui_addtabtotabviewdialog.h" - -namespace QmlDesigner { - -AddTabToTabViewDialog::AddTabToTabViewDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::AddTabToTabViewDialog) -{ - ui->setupUi(this); - ui->addTabLineEdit->setForceFirstCapitalLetter(true); -} - -AddTabToTabViewDialog::~AddTabToTabViewDialog() -{ - delete ui; -} - - -QString AddTabToTabViewDialog::create(const QString &tabName, QWidget *parent) -{ - AddTabToTabViewDialog addTabToTabViewDialog(parent); - - Utils::FileNameValidatingLineEdit *fileNameValidatingLineEdit = addTabToTabViewDialog.ui->addTabLineEdit; - - fileNameValidatingLineEdit->setText(tabName); - - int result = addTabToTabViewDialog.exec(); - - if (result == QDialog::Accepted && fileNameValidatingLineEdit->isValid()) - return fileNameValidatingLineEdit->text(); - else - return QString(); -} - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h b/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h deleted file mode 100644 index 9bb9eed8b7e..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -namespace QmlDesigner { -namespace Ui { class AddTabToTabViewDialog; } - -class AddTabToTabViewDialog : public QDialog -{ - Q_OBJECT - -public: - explicit AddTabToTabViewDialog(QWidget *parent = nullptr); - ~AddTabToTabViewDialog() override; - - static QString create(const QString &tabName, QWidget *parent); - -private: - Ui::AddTabToTabViewDialog *ui; -}; - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.ui b/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.ui deleted file mode 100644 index dff9e50e55c..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/addtabtotabviewdialog.ui +++ /dev/null @@ -1,85 +0,0 @@ - - - QmlDesigner::AddTabToTabViewDialog - - - - 0 - 0 - 362 - 80 - - - - Dialog - - - - - - - - Add tab: - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - Utils::FileNameValidatingLineEdit - QLineEdit -
utils/filenamevalidatinglineedit.h
-
-
- - - - buttonBox - accepted() - QmlDesigner::AddTabToTabViewDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - QmlDesigner::AddTabToTabViewDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - -
diff --git a/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp b/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp index 481a9ea7615..6c5ff54b74b 100644 --- a/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp +++ b/src/plugins/qmldesigner/componentsplugin/componentsplugin.cpp @@ -3,22 +3,12 @@ #include "componentsplugin.h" -#include "tabviewindexmodel.h" -#include "addtabdesigneraction.h" -#include "entertabdesigneraction.h" - -#include -#include #include namespace QmlDesigner { ComponentsPlugin::ComponentsPlugin() { - TabViewIndexModel::registerDeclarativeType(); - DesignerActionManager *actionManager = &QmlDesignerPlugin::instance()->viewManager().designerActionManager(); - actionManager->addDesignerAction(new AddTabDesignerAction); - actionManager->addDesignerAction(new EnterTabDesignerAction); } QString ComponentsPlugin::pluginName() const diff --git a/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp b/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp deleted file mode 100644 index b04ee5f7c78..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "entertabdesigneraction.h" - -#include -#include -#include -#include -#include -#include - -#include - -namespace QmlDesigner { - -class EnterTabAction : public DefaultAction -{ - -public: - EnterTabAction(const QString &description) - : DefaultAction(description) - { } - -public: - void actionTriggered(bool) override - { - DocumentManager::goIntoComponent(m_selectionContext.targetNode()); - } -}; - -EnterTabDesignerAction::EnterTabDesignerAction() - : AbstractActionGroup(QCoreApplication::translate("TabViewToolAction", "Step into Tab")) -{ -} - -QByteArray EnterTabDesignerAction::category() const -{ - return QByteArray(); -} - -QByteArray EnterTabDesignerAction::menuId() const -{ - return "TabViewAction"; -} - -int EnterTabDesignerAction::priority() const -{ - //Editing tabs is above adding tabs - return CustomActionsPriority + 10; -} - -void EnterTabDesignerAction::updateContext() -{ - menu()->clear(); - if (selectionContext().isValid()) { - - action()->setEnabled(isEnabled(selectionContext())); - action()->setVisible(isVisible(selectionContext())); - - if (action()->isEnabled()) { - const ModelNode selectedModelNode = selectionContext().currentSingleSelectedNode(); - if (selectedModelNode.metaInfo().isValid() - && selectedModelNode.metaInfo().isQtQuickControlsTabView()) { - const NodeAbstractProperty defaultProperty = selectedModelNode - .defaultNodeAbstractProperty(); - const QList childModelNodes = defaultProperty.directSubNodes(); - for (const QmlDesigner::ModelNode &childModelNode : childModelNodes) { - createActionForTab(childModelNode); - } - } - } - } -} - -bool EnterTabDesignerAction::isVisible(const SelectionContext &selectionContext) const -{ - if (selectionContext.singleNodeIsSelected()) { - ModelNode selectedModelNode = selectionContext.currentSingleSelectedNode(); - return selectedModelNode.metaInfo().isQtQuickControlsTabView(); - } - - return false; -} - -static bool tabViewIsNotEmpty(const SelectionContext &selectionContext) -{ - return selectionContext.currentSingleSelectedNode().defaultNodeAbstractProperty().isNodeListProperty(); -} - -bool EnterTabDesignerAction::isEnabled(const SelectionContext &selectionContext) const -{ - return isVisible(selectionContext) && tabViewIsNotEmpty(selectionContext); -} - -void EnterTabDesignerAction::createActionForTab(const ModelNode &modelNode) -{ - if (modelNode.metaInfo().isQtQuickControlsTab()) { - QmlDesigner::QmlItemNode itemNode(modelNode); - - if (itemNode.isValid()) { - QString what = tr("Step into: %1"). - arg(itemNode.instanceValue("title").toString()); - auto selectionAction = new EnterTabAction(what); - - SelectionContext nodeSelectionContext = selectionContext(); - nodeSelectionContext.setTargetNode(modelNode); - selectionAction->setSelectionContext(nodeSelectionContext); - - menu()->addAction(selectionAction); - - } - } -} - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.h b/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.h deleted file mode 100644 index 3cb6adff0f6..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/entertabdesigneraction.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -#include - -namespace QmlDesigner { - -class EnterTabDesignerAction : public AbstractActionGroup -{ - Q_DECLARE_TR_FUNCTIONS(EnterTabDesignerAction) - -public: - EnterTabDesignerAction(); - - QByteArray category() const override; - QByteArray menuId() const override; - int priority() const override; - void updateContext() override; - -protected: - bool isVisible(const SelectionContext &selectionContext) const override; - bool isEnabled(const SelectionContext &selectionContext) const override; - -private: - void createActionForTab(const ModelNode &modelNode); -}; - -} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp b/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp deleted file mode 100644 index 65ca73483ad..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "tabviewindexmodel.h" - -#include -#include -#include - -TabViewIndexModel::TabViewIndexModel(QObject *parent) : - QObject(parent) -{ -} - -void TabViewIndexModel::setModelNodeBackend(const QVariant &modelNodeBackend) -{ - auto modelNodeBackendObject = modelNodeBackend.value(); - - if (modelNodeBackendObject) - setModelNode(modelNodeBackendObject->property("modelNode").value()); - - setupModel(); - emit modelNodeBackendChanged(); -} - -void TabViewIndexModel::setModelNode(const QmlDesigner::ModelNode &modelNode) -{ - m_modelNode = modelNode; -} - -QStringList TabViewIndexModel::tabViewIndexModel() const -{ - return m_tabViewIndexModel; -} - -void TabViewIndexModel::setupModel() -{ - m_tabViewIndexModel.clear(); - if (m_modelNode.metaInfo().isQtQuickControlsTabView()) { - const QList childModelNodes - = m_modelNode.defaultNodeAbstractProperty().directSubNodes(); - for (const QmlDesigner::ModelNode &childModelNode : childModelNodes) { - if (childModelNode.metaInfo().isQtQuickControlsTab()) { - QmlDesigner::QmlItemNode itemNode(childModelNode); - if (itemNode.isValid()) { - m_tabViewIndexModel.append(itemNode.instanceValue("title").toString()); - } - } - } - } -} - -void TabViewIndexModel::registerDeclarativeType() -{ - qmlRegisterType("HelperWidgets",2,0,"TabViewIndexModel"); -} - -QVariant TabViewIndexModel::modelNodeBackend() const -{ - return QVariant::fromValue(m_modelNode); -} diff --git a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h b/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h deleted file mode 100644 index bd1c5cfa6b8..00000000000 --- a/src/plugins/qmldesigner/componentsplugin/tabviewindexmodel.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -#include -#include - -class TabViewIndexModel : public QObject -{ - Q_OBJECT - Q_PROPERTY(QVariant modelNodeBackendProperty READ modelNodeBackend WRITE setModelNodeBackend NOTIFY modelNodeBackendChanged) - Q_PROPERTY(QStringList tabViewIndexModel READ tabViewIndexModel NOTIFY modelNodeBackendChanged) - -public: - explicit TabViewIndexModel(QObject *parent = nullptr); - - void setModelNodeBackend(const QVariant &modelNodeBackend); - void setModelNode(const QmlDesigner::ModelNode &modelNode); - QStringList tabViewIndexModel() const; - void setupModel(); - - static void registerDeclarativeType(); - -signals: - void modelNodeBackendChanged(); - -private: - QVariant modelNodeBackend() const; - - QmlDesigner::ModelNode m_modelNode; - QStringList m_tabViewIndexModel; - -}; - -QML_DECLARE_TYPE(TabViewIndexModel) diff --git a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h index d7bc414e77e..c7d1e2a342f 100644 --- a/src/plugins/qmldesigner/designercore/include/nodemetainfo.h +++ b/src/plugins/qmldesigner/designercore/include/nodemetainfo.h @@ -145,9 +145,7 @@ public: bool isQtQuick3DView3D() const; bool isQtQuickBorderImage() const; bool isQtQuickControlsSwipeView() const; - bool isQtQuickControlsTab() const; bool isQtQuickControlsTabBar() const; - bool isQtQuickControlsTabView() const; bool isQtQuickExtrasPicture() const; bool isQtQuickImage() const; bool isQtQuickItem() const; diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index bdb7b63392e..7ca3aedff28 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -2107,16 +2107,6 @@ bool NodeMetaInfo::isListOrGridView() const } } -bool NodeMetaInfo::isQtQuickControlsTabView() const -{ - if constexpr (useProjectStorage()) { - using namespace Storage::Info; - return isBasedOnCommonType(m_projectStorage, m_typeId); - } else { - return isValid() && isSubclassOf("QtQuick.Controls.TabView"); - } -} - bool NodeMetaInfo::isQtQuickExtrasPicture() const { if constexpr (useProjectStorage()) { @@ -2195,17 +2185,6 @@ bool NodeMetaInfo::isQtQuickControlsTabBar() const } } -bool NodeMetaInfo::isQtQuickControlsTab() const -{ - if constexpr (useProjectStorage()) { - using namespace Storage::Info; - - return isBasedOnCommonType(m_projectStorage, m_typeId); - } else { - return isValid() && isSubclassOf("QtQuick.Controls.Tab"); - } -} - bool NodeMetaInfo::isQtQuickControlsSwipeView() const { if constexpr (useProjectStorage()) { diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index 6d79375b6d7..2c990a50364 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -349,9 +349,6 @@ bool QmlItemNode::instanceHasScaleOrRotationTransform() const bool itemIsMovable(const ModelNode &modelNode) { - if (modelNode.metaInfo().isQtQuickControlsTab()) - return false; - if (!modelNode.hasParentProperty()) return false; @@ -363,9 +360,6 @@ bool itemIsMovable(const ModelNode &modelNode) bool itemIsResizable(const ModelNode &modelNode) { - if (modelNode.metaInfo().isQtQuickControlsTab()) - return false; - return NodeHints::fromModelNode(modelNode).isResizable(); } diff --git a/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h b/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h index 0db44e3df76..05e90fdb285 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/commontypecache.h @@ -106,8 +106,6 @@ inline constexpr char StateGroup[] = "StateGroup"; inline constexpr char State[] = "State"; inline constexpr char SwipeView[] = "SwipeView"; inline constexpr char TabBar[] = "TabBar"; -inline constexpr char TabView[] = "TabView"; -inline constexpr char Tab[] = "Tab"; inline constexpr char TextArea[] = "TextArea"; inline constexpr char TextEdit[] = "TextEdit"; inline constexpr char Text[] = "Text"; @@ -215,9 +213,7 @@ class CommonTypeCache CacheType, CacheType, CacheType, - CacheType, CacheType, - CacheType, CacheType, CacheType, CacheType, From 61de872f0f84df2fb9d4d8a19b97893c7887fa70 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 15 Jun 2023 10:26:36 +0200 Subject: [PATCH 09/25] Editor: ensure valid blocknumbers for overlay prefiltering Change-Id: Ifc5f173fe12f3dca77fbcb6c4b8bfe6aa0bad7ea Reviewed-by: Christian Stenger --- src/plugins/texteditor/refactoroverlay.cpp | 7 +++++-- src/plugins/texteditor/texteditoroverlay.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/plugins/texteditor/refactoroverlay.cpp b/src/plugins/texteditor/refactoroverlay.cpp index e1f6ff2c7cd..a0c928858ca 100644 --- a/src/plugins/texteditor/refactoroverlay.cpp +++ b/src/plugins/texteditor/refactoroverlay.cpp @@ -25,14 +25,17 @@ RefactorOverlay::RefactorOverlay(TextEditor::TextEditorWidget *editor) : void RefactorOverlay::paint(QPainter *painter, const QRect &clip) { const auto firstBlock = m_editor->blockForVerticalOffset(clip.top()); + const int firstBlockNumber = firstBlock.isValid() ? firstBlock.blockNumber() : 0; const auto lastBlock = m_editor->blockForVerticalOffset(clip.bottom()); + const int lastBlockNumber = lastBlock.isValid() ? lastBlock.blockNumber() + : m_editor->blockCount() - 1; m_maxWidth = 0; for (const RefactorMarker &marker : std::as_const(m_markers)) { const int markerBlockNumber = marker.cursor.block().blockNumber(); - if (markerBlockNumber < firstBlock.blockNumber()) + if (markerBlockNumber < firstBlockNumber) continue; - if (markerBlockNumber > lastBlock.blockNumber()) + if (markerBlockNumber > lastBlockNumber) continue; paintMarker(marker, painter, clip); } diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp index 4dfed80728b..ca15ff256bf 100644 --- a/src/plugins/texteditor/texteditoroverlay.cpp +++ b/src/plugins/texteditor/texteditoroverlay.cpp @@ -334,11 +334,14 @@ void TextEditorOverlay::paint(QPainter *painter, const QRect &clip) Q_UNUSED(clip) const auto firstBlock = m_editor->blockForVerticalOffset(clip.top()); + const int firstBlockNumber = firstBlock.isValid() ? firstBlock.blockNumber() : 0; const auto lastBlock = m_editor->blockForVerticalOffset(clip.bottom()); + const int lastBlockNumber = lastBlock.isValid() ? lastBlock.blockNumber() + : m_editor->blockCount() - 1; auto overlapsClip = [&](const OverlaySelection &selection) { - return selection.m_cursor_end.blockNumber() >= firstBlock.blockNumber() - && selection.m_cursor_begin.blockNumber() <= lastBlock.blockNumber(); + return selection.m_cursor_end.blockNumber() >= firstBlockNumber + && selection.m_cursor_begin.blockNumber() <= lastBlockNumber; }; for (int i = m_selections.size() - 1; i >= 0; --i) { From 923e95eba6a80a6eaa325b43481fd23e195514d6 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 12 Jun 2023 15:23:43 +0200 Subject: [PATCH 10/25] Doc: Describe the experimental Axivion plugin Fixes: QTCREATORBUG-29240 Change-Id: I61e068796ddfd942553c9a0b64a8bede0d1db070 Reviewed-by: Christian Stenger --- doc/qtcreator/images/icons/home.png | Bin 0 -> 276 bytes doc/qtcreator/images/icons/info.png | Bin 0 -> 203 bytes .../images/qtcreator-axivion-annotation.webp | Bin 0 -> 4890 bytes .../images/qtcreator-axivion-view-rule.webp | Bin 0 -> 2544 bytes .../images/qtcreator-axivion-view.webp | Bin 0 -> 3398 bytes ...tcreator-edit-dashboard-configuration.webp | Bin 0 -> 3790 bytes ...qtcreator-preferences-axivion-project.webp | Bin 0 -> 5622 bytes .../images/qtcreator-preferences-axivion.webp | Bin 0 -> 2470 bytes .../src/analyze/creator-analyze.qdoc | 7 +- .../src/analyze/creator-axivion.qdoc | 109 ++++++++++++++++++ doc/qtcreator/src/analyze/creator-coco.qdoc | 2 +- .../analyze/creator-valgrind-overview.qdoc | 2 +- doc/qtcreator/src/qtcreator-toc.qdoc | 1 + .../src/user-interface/creator-ui.qdoc | 4 + 14 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 doc/qtcreator/images/icons/home.png create mode 100644 doc/qtcreator/images/icons/info.png create mode 100644 doc/qtcreator/images/qtcreator-axivion-annotation.webp create mode 100644 doc/qtcreator/images/qtcreator-axivion-view-rule.webp create mode 100644 doc/qtcreator/images/qtcreator-axivion-view.webp create mode 100644 doc/qtcreator/images/qtcreator-edit-dashboard-configuration.webp create mode 100644 doc/qtcreator/images/qtcreator-preferences-axivion-project.webp create mode 100644 doc/qtcreator/images/qtcreator-preferences-axivion.webp create mode 100644 doc/qtcreator/src/analyze/creator-axivion.qdoc diff --git a/doc/qtcreator/images/icons/home.png b/doc/qtcreator/images/icons/home.png new file mode 100644 index 0000000000000000000000000000000000000000..21e7d63a1045f1d36ebdfea99ab3a0bdaa0b34d7 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0y~yU=UxNj-%^1mEVbvA{+=DFy5LL`d!^fS78#@Ge*H6F`Cl>o z(tFS1sK$Bw#o}2t&q5Lp6`l4>TfnUS`14K%S@o?vhd7Vsgyel^{?`1bWTS|>?#r`G ihgz08Fm_DRygzZL@$x5y%(4s&3=E#GelF{r5}E*(GjhNH literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/icons/info.png b/doc/qtcreator/images/icons/info.png new file mode 100644 index 0000000000000000000000000000000000000000..eace805de31523d949851fa26d71d3b09aec01f2 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdmu-d_r6q7#JGxf;&+wUobE* zaF+!61v7MXPv5!g!o^EBZpj`wWX8b2;OFV$7{U>qEYQNlrqY)6v_xINc}MouRZrU- z+K#Pajal8*(4!%c%sFA=RxXZdjFOujl(Z*GMk=s*oZ?;|koMP=8_l9r_m3=9mOu6{1-oD!M<#ui9? literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-axivion-annotation.webp b/doc/qtcreator/images/qtcreator-axivion-annotation.webp new file mode 100644 index 0000000000000000000000000000000000000000..5879a1c19f5b18bbaf60780709a725326af30cf4 GIT binary patch literal 4890 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-axivion-view.webp b/doc/qtcreator/images/qtcreator-axivion-view.webp new file mode 100644 index 0000000000000000000000000000000000000000..c9003d5cb48f90eebd8726b981b94329c8e87235 GIT binary patch literal 3398 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-edit-dashboard-configuration.webp b/doc/qtcreator/images/qtcreator-edit-dashboard-configuration.webp new file mode 100644 index 0000000000000000000000000000000000000000..3f76b4427a374d0ddcc3bce6536c872ea399c5a8 GIT binary patch literal 3790 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-preferences-axivion-project.webp b/doc/qtcreator/images/qtcreator-preferences-axivion-project.webp new file mode 100644 index 0000000000000000000000000000000000000000..4656ab1d80d7c8d1d087d895add8f9c08e3a4821 GIT binary patch literal 5622 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 N>j`g2YCL7c006!RsgD2v literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-preferences-axivion.webp b/doc/qtcreator/images/qtcreator-preferences-axivion.webp new file mode 100644 index 0000000000000000000000000000000000000000..f884259a54a21e89e8b76ec8ad903e9cb75ae2d8 GIT binary patch literal 2470 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 Dd3B^> literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/analyze/creator-analyze.qdoc b/doc/qtcreator/src/analyze/creator-analyze.qdoc index 4a4e05f413c..f1eb052ea02 100644 --- a/doc/qtcreator/src/analyze/creator-analyze.qdoc +++ b/doc/qtcreator/src/analyze/creator-analyze.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // ********************************************************************** @@ -44,6 +44,11 @@ example, and use the results to make the tests more efficient and complete. + \li \l{Static Code Analysis}{Axivion} + + Do static code analysis and architecture analysis to detect and + eliminate unnecessary complexity of code. + \li \l{Using Valgrind Code Analysis Tools}{Valgrind Code Analysis Tools} Detect problems in memory management by using the Memcheck diff --git a/doc/qtcreator/src/analyze/creator-axivion.qdoc b/doc/qtcreator/src/analyze/creator-axivion.qdoc new file mode 100644 index 00000000000..244991c7834 --- /dev/null +++ b/doc/qtcreator/src/analyze/creator-axivion.qdoc @@ -0,0 +1,109 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \previouspage creator-coco.html + \page creator-axivion.html + \nextpage creator-valgrind-overview.html + + \title Static Code Analysis + + \l{https://www.axivion.com/en/products/axivion-suite/}{Axivion Suite} is + a tool suite for protecting software from erosion. Static code analysis, + architecture analysis, and code-smells-detection enable you to: + + \list + \li Check the source code for potential runtime errors. + \li Use metrics to generate quantitative information about the + internal quality of the source code. + \li Run style checks to achieve compliance with coding guidelines. + \li Detect both duplicates and similar pieces of code in the source code. + \li Recognize cyclical dependencies at different levels. + \li Detect unreachable code. + \endlist + + The experimental Axivion plugin integrates the Axivion dashboard server into + \QC. + + To use the plugin, you must set up a project in the Axivion dashboard + server and link to it from \QC. You can then see style violations in the + \uicontrol Edit mode and descriptions and issue counts in the + \uicontrol Axivion view. + + The editor shows style violations as inline annotations. Hover the mouse over + an annotation to bring up a tool tip with a short description of the issue. + + \image qtcreator-axivion-annotation.webp {Annotation popup} + + Select the \inlineimage icons/info.png + button to view detailed information about the issue in the \uicontrol Axivion + view. + + \image qtcreator-axivion-view-rule.webp {Axivion view} + + To view the issue counts, select \inlineimage icons/home.png + (\uicontrol {Show Dashboard}). + + \section1 Enabling the Axivion Plugin + + To enable the Axivion plugin: + + \list 1 + \li Select \uicontrol Help > \uicontrol {About Plugins} > + \uicontrol {Code Analyzer} > \uicontrol Axivion to enable the plugin. + \li Select \uicontrol {Restart Now} to restart \QC and load the plugin. + \endlist + + \section1 Connecting to Axivion Dashboard Servers + + To connect to Axivion: + + \list 1 + \li Select \uicontrol Edit > \uicontrol Preferences > \uicontrol Axivion. + \image qtcreator-preferences-axivion.webp {General tab in Axivion Preferences} + \li Select \uicontrol Edit to create a connection to the Axivion + dashboard server. + \image qtcreator-edit-dashboard-configuration.webp {Edit Dashboard Configuration dialog} + \li In \uicontrol {Dashboard URL}, enter the URL of the server. + \li In \uicontrol Description, enter a free-text description of the + server. + \li In \uicontrol {Access token}, enter the IDE application token that + you created in the server, in user preferences. + \endlist + + \section1 Linking to Dashboards + + To link a project to a dashboard: + + \list 1 + \li \uicontrol Projects > \uicontrol {Project Settings} > + \uicontrol Axivion. + \image qtcreator-preferences-axivion-project.webp {Axivion settings in Project Settings} + \li Select \uicontrol {Fetch Projects} to list projects from Axivion. + \li Select a project, and then select \uicontrol {Link Project} to link + to it. + \endlist + + To unlink a project, select \uicontrol {Unlink Project}. + + \section1 Viewing Issue Counts + + \image qtcreator-axivion-view.webp {Axivion view} + + The \uicontrol Axivion view lists the numbers of the following types of + issues that Axivion found in the linked project: + + \list + \li \uicontrol AV - architecture violations, such as hidden dependencies + \li \uicontrol CL - duplicates and similar pieces of code + \li \uicontrol CY - call, component, and include cycles + \li \uicontrol DE - dead code + \li \uicontrol MV - violations of metrics based on lines and tokens, + nesting, cyclomatic complexity, control flow, and so on. + \li \uicontrol SV - style violations, such as deviations from the naming + or coding conventions + \endlist + + To clear the view, select \inlineimage icons/clean_pane_small.png + (\uicontrol Clear). +*/ diff --git a/doc/qtcreator/src/analyze/creator-coco.qdoc b/doc/qtcreator/src/analyze/creator-coco.qdoc index 3a714d9bc08..0818e9a5b92 100644 --- a/doc/qtcreator/src/analyze/creator-coco.qdoc +++ b/doc/qtcreator/src/analyze/creator-coco.qdoc @@ -4,7 +4,7 @@ /*! \previouspage creator-qml-performance-monitor.html \page creator-coco.html - \nextpage creator-valgrind-overview.html + \nextpage creator-axivion.html \title Checking Code Coverage diff --git a/doc/qtcreator/src/analyze/creator-valgrind-overview.qdoc b/doc/qtcreator/src/analyze/creator-valgrind-overview.qdoc index 96b1195f3e6..9a2f914648f 100644 --- a/doc/qtcreator/src/analyze/creator-valgrind-overview.qdoc +++ b/doc/qtcreator/src/analyze/creator-valgrind-overview.qdoc @@ -8,7 +8,7 @@ // ********************************************************************** /*! - \previouspage creator-coco.html + \previouspage creator-axivion.html \page creator-valgrind-overview.html \nextpage creator-analyzer.html diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index e1efb659240..9b0cd51c993 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -205,6 +205,7 @@ \list \li \l{Profiling QML Applications} \li \l{Checking Code Coverage} + \li \l{Static Code Analysis} \li \l{Using Valgrind Code Analysis Tools} \list \li \l{Detecting Memory Leaks with Memcheck} diff --git a/doc/qtcreator/src/user-interface/creator-ui.qdoc b/doc/qtcreator/src/user-interface/creator-ui.qdoc index 0867b32374b..f5e59218f46 100644 --- a/doc/qtcreator/src/user-interface/creator-ui.qdoc +++ b/doc/qtcreator/src/user-interface/creator-ui.qdoc @@ -392,6 +392,10 @@ \li \uicontrol{General Messages} + \if defined(qtcreator) + \li \l {Static Code Analysis}{Axivion} + \endif + \li \uicontrol{Version Control} \if defined(qtcreator) From c5a38b2f95ac93b09a0d04d4cc9e517c5985514c Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 15 Jun 2023 12:31:50 +0200 Subject: [PATCH 11/25] They were part of the blog announcement https://www.qt.io/blog/qt-creator-11-cmake-update but not in the changelog. Change-Id: I1c47f0eeb986b5abebfdbc35a421b45b996f77c3 Reviewed-by: Leena Miettinen Reviewed-by: Eike Ziller --- dist/changelog/changes-11.0.0.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dist/changelog/changes-11.0.0.md b/dist/changelog/changes-11.0.0.md index a9811dbeafd..8c60f152ae5 100644 --- a/dist/changelog/changes-11.0.0.md +++ b/dist/changelog/changes-11.0.0.md @@ -158,6 +158,10 @@ Projects [QTCREATORBUG-28904](https://bugreports.qt.io/browse/QTCREATORBUG-28904), [QTCREATORBUG-28985](https://bugreports.qt.io/browse/QTCREATORBUG-28985), [QTCREATORBUG-29006](https://bugreports.qt.io/browse/QTCREATORBUG-29006)) +* Added `Build > Reload CMake Presets` to reload CMake presets after making + changes to them +* Fixed that CMake Presets were not visible in `Projects` view + ([QTCREATORBUG-28966](https://bugreports.qt.io/browse/QTCREATORBUG-28966)) * Fixed issues with detecting a configured Qt version when importing a build ([QTCREATORBUG-29075](https://bugreports.qt.io/browse/QTCREATORBUG-29075)) From 826f015b83bb2e7dab8313d63c643a0a8ace1fe6 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 12 Jun 2023 17:42:11 +0200 Subject: [PATCH 12/25] QbsProjectManager: Let users reset the path to qbs Also, don't store it if it wasn't changed from the default. Change-Id: Ia0f2e2b7e8f65c1fa32e111be499461fb2dda1d5 Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/qbsprojectmanager/qbssettings.cpp | 30 ++++++++++++++----- src/plugins/qbsprojectmanager/qbssettings.h | 1 + 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbssettings.cpp b/src/plugins/qbsprojectmanager/qbssettings.cpp index 58c9b96c698..409ebcd88b0 100644 --- a/src/plugins/qbsprojectmanager/qbssettings.cpp +++ b/src/plugins/qbsprojectmanager/qbssettings.cpp @@ -13,11 +13,13 @@ #include #include #include +#include #include #include #include #include +#include using namespace Utils; @@ -52,12 +54,17 @@ static bool operator!=(const QbsSettingsData &s1, const QbsSettingsData &s2) FilePath QbsSettings::qbsExecutableFilePath() { - const QString fileName = HostOsInfo::withExecutableSuffix("qbs"); FilePath candidate = instance().m_settings.qbsExecutableFilePath; - if (!candidate.exists()) { - candidate = FilePath::fromString(QCoreApplication::applicationDirPath()) - .pathAppended(fileName); - } + if (!candidate.exists()) + candidate = defaultQbsExecutableFilePath(); + return candidate; +} + +FilePath QbsSettings::defaultQbsExecutableFilePath() +{ + const QString fileName = HostOsInfo::withExecutableSuffix("qbs"); + FilePath candidate = FilePath::fromString(QCoreApplication::applicationDirPath()) + .pathAppended(fileName); if (!candidate.exists()) candidate = Environment::systemEnvironment().searchInPath(fileName); return candidate; @@ -136,7 +143,8 @@ void QbsSettings::loadSettings() void QbsSettings::storeSettings() const { QSettings * const s = Core::ICore::settings(); - s->setValue(QBS_EXE_KEY, m_settings.qbsExecutableFilePath.toString()); + QtcSettings::setValueWithDefault(s, QBS_EXE_KEY, m_settings.qbsExecutableFilePath.toString(), + defaultQbsExecutableFilePath().toString()); s->setValue(QBS_DEFAULT_INSTALL_DIR_KEY, m_settings.defaultInstallDirTemplate); s->setValue(USE_CREATOR_SETTINGS_KEY, m_settings.useCreatorSettings); } @@ -148,6 +156,7 @@ public: { m_qbsExePathChooser.setExpectedKind(PathChooser::ExistingCommand); m_qbsExePathChooser.setFilePath(QbsSettings::qbsExecutableFilePath()); + m_resetQbsExeButton.setText(Tr::tr("Reset")); m_defaultInstallDirLineEdit.setText(QbsSettings::defaultInstallDirTemplate()); m_versionLabel.setText(getQbsVersionString()); //: %1 == "Qt Creator" or "Qt Design Studio" @@ -157,13 +166,19 @@ public: const auto layout = new QFormLayout(this); layout->addRow(&m_settingsDirCheckBox); - layout->addRow(Tr::tr("Path to qbs executable:"), &m_qbsExePathChooser); + const auto qbsExeLayout = new QHBoxLayout; + qbsExeLayout->addWidget(&m_qbsExePathChooser); + qbsExeLayout->addWidget(&m_resetQbsExeButton); + layout->addRow(Tr::tr("Path to qbs executable:"), qbsExeLayout); layout->addRow(Tr::tr("Default installation directory:"), &m_defaultInstallDirLineEdit); layout->addRow(Tr::tr("Qbs version:"), &m_versionLabel); connect(&m_qbsExePathChooser, &PathChooser::textChanged, [this] { m_versionLabel.setText(getQbsVersionString()); }); + connect(&m_resetQbsExeButton, &QPushButton::clicked, [this] { + m_qbsExePathChooser.setFilePath(QbsSettings::defaultQbsExecutableFilePath()); + }); } void apply() final @@ -185,6 +200,7 @@ private: } PathChooser m_qbsExePathChooser; + QPushButton m_resetQbsExeButton; QLabel m_versionLabel; QCheckBox m_settingsDirCheckBox; FancyLineEdit m_defaultInstallDirLineEdit; diff --git a/src/plugins/qbsprojectmanager/qbssettings.h b/src/plugins/qbsprojectmanager/qbssettings.h index a91a9059653..434a9af34f3 100644 --- a/src/plugins/qbsprojectmanager/qbssettings.h +++ b/src/plugins/qbsprojectmanager/qbssettings.h @@ -27,6 +27,7 @@ public: static QbsSettings &instance(); static Utils::FilePath qbsExecutableFilePath(); + static Utils::FilePath defaultQbsExecutableFilePath(); static Utils::FilePath qbsConfigFilePath(); static bool hasQbsExecutable(); static QString defaultInstallDirTemplate(); From daf6dfab68dfd4add8d8039b0594d21f96ab66ea Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 13 Jun 2023 10:15:10 +0200 Subject: [PATCH 13/25] Issues Pane: Do not ignore clicks into second column The right column typically shows the file name, so it's clearly expected that clicking it takes you to the location. Fixes: QTCREATORBUG-29273 Change-Id: I14fbb3392ac34e25a614811d8190f559b19b9088 Reviewed-by: Christian Stenger Reviewed-by: Reviewed-by: Qt CI Bot --- src/plugins/projectexplorer/taskwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp index 9ae93c0bbf0..a8e691d6de0 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -435,6 +435,8 @@ void TaskWindow::triggerDefaultHandler(const QModelIndex &index) QModelIndex taskIndex = index; if (index.parent().isValid()) taskIndex = index.parent(); + if (taskIndex.column() == 1) + taskIndex = taskIndex.siblingAtColumn(0); Task task(d->m_filter->task(taskIndex)); if (task.isNull()) return; From 22c72f9999814dc87864b6174d686098e2e15aa0 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 13 Jun 2023 12:59:43 +0200 Subject: [PATCH 14/25] Editor: postpone snippet completion item tooltip generation Change-Id: Ib9762b489af87eab976248803dd0e9f4a3e0efba Reviewed-by: Christian Stenger --- .../snippets/snippetassistcollector.cpp | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/plugins/texteditor/snippets/snippetassistcollector.cpp b/src/plugins/texteditor/snippets/snippetassistcollector.cpp index edcfaef5aaa..58e46bb9673 100644 --- a/src/plugins/texteditor/snippets/snippetassistcollector.cpp +++ b/src/plugins/texteditor/snippets/snippetassistcollector.cpp @@ -10,6 +10,35 @@ using namespace TextEditor; using namespace Internal; +class SnippetProposalItem : public AssistProposalItemInterface +{ +public: + SnippetProposalItem(const Snippet &snippet, const QIcon &icon) + : m_snippet(snippet) + , m_icon(icon) + {} + + QString text() const override + { + return m_snippet.trigger() + QLatin1Char(' ') + m_snippet.complement(); + } + bool implicitlyApplies() const override { return false; } + bool prematurelyApplies(const QChar &) const override { return false; } + void apply(TextDocumentManipulatorInterface &manipulator, int basePosition) const override + { + manipulator.insertCodeSnippet(basePosition, m_snippet.content(), &Snippet::parse); + } + QIcon icon() const override { return m_icon; } + QString detail() const override { return m_snippet.generateTip(); } + bool isSnippet() const override { return true; } + bool isValid() const override { return true; } + quint64 hash() const override { return 0; } + +private: + const Snippet m_snippet; + const QIcon m_icon; +}; + static void appendSnippets(QList *items, const QString &groupId, const QIcon &icon, @@ -19,11 +48,7 @@ static void appendSnippets(QList *items, const int size = collection->totalActiveSnippets(groupId); for (int i = 0; i < size; ++i) { const Snippet &snippet = collection->snippet(i, groupId); - auto item = new AssistProposalItem; - item->setText(snippet.trigger() + QLatin1Char(' ') + snippet.complement()); - item->setData(snippet.content()); - item->setDetail(snippet.generateTip()); - item->setIcon(icon); + auto item = new SnippetProposalItem(snippet, icon); item->setOrder(order); items->append(item); } From 053e970c4d109034947c2fb44c8716998571c973 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Thu, 15 Jun 2023 14:36:52 +0200 Subject: [PATCH 15/25] QmlProjectManager: use qml2puppet only if it is QtSudio Qt Task-number: QTCREATORBUG-29259 Change-Id: Ib05737368c224fa28b2c9f091dfa0e210bc838af Reviewed-by: Thomas Hartmann --- src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index 77db8b073f5..e2626402f60 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -217,7 +217,10 @@ FilePath QmlProjectRunConfiguration::qmlRuntimeFilePath() const // i.e. not necessarily something the device can use, but the // device had its chance above. if (QtVersion *version = QtKitAspect::qtVersion(kit)) { - if (version->qtVersion().majorVersion() > 5) { + // look for puppet as qmlruntime only in QtStudio Qt versions + if (version->features().contains("QtStudio") && + version->qtVersion().majorVersion() > 5) { + auto [workingDirectoryPath, puppetPath] = QmlDesigner::QmlPuppetPaths::qmlPuppetPaths( target(), QmlDesigner::QmlDesignerBasePlugin::settings()); if (!puppetPath.isEmpty()) { From be6e31d119fd38c8d8176e4bb704abff13ec4f06 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 13 Jun 2023 17:06:58 +0200 Subject: [PATCH 16/25] Task-number: QTCREATORBUG-28996 Change-Id: I13ed29e3d4b742771f94849f87c1a461efa40ffa Reviewed-by: Eike Ziller --- dist/changelog/changes-11.0.0.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/dist/changelog/changes-11.0.0.md b/dist/changelog/changes-11.0.0.md index 8c60f152ae5..ac70cd2dc99 100644 --- a/dist/changelog/changes-11.0.0.md +++ b/dist/changelog/changes-11.0.0.md @@ -108,7 +108,8 @@ Editing ([QTCREATORBUG-312](https://bugreports.qt.io/browse/QTCREATORBUG-312)) * Added highlighting for typed string literals and user-defined literals ([QTCREATORBUG-28869](https://bugreports.qt.io/browse/QTCREATORBUG-28869)) -* Added the option to create class members from assignments +* Extended the `Add Class Member` refactoring action to create class + members from assignments ([QTCREATORBUG-1918](https://bugreports.qt.io/browse/QTCREATORBUG-1918)) * Fixed that locator showed both the declaration and the definition of symbols ([QTCREATORBUG-13894](https://bugreports.qt.io/browse/QTCREATORBUG-13894)) @@ -119,7 +120,8 @@ Editing ### Language Server Protocol -* Added missing actions for opening the `Call Hierarchy` +* Added actions for opening the `Call Hierarchy` to the context menu of the + editor ([QTCREATORBUG-28839](https://bugreports.qt.io/browse/QTCREATORBUG-28839), [QTCREATORBUG-28842](https://bugreports.qt.io/browse/QTCREATORBUG-28842)) @@ -140,13 +142,19 @@ Editing interpreter selector and the wizard ([PYSIDE-2152](https://bugreports.qt.io/browse/PYSIDE-2152)) + ([Documentation](https://doc-snapshots.qt.io/qtcreator-11.0/creator-python-development.html)) + Projects -------- -* Made it possible to add devices without going through the wizard -* Added support for moving files to a different directory when renaming +* Made it possible to add devices in `Preferences > Devices > Add` without going + through the wizard +* Added support for moving files to a different directory when renaming them in + the `File System` view ([QTCREATORBUG-15981](https://bugreports.qt.io/browse/QTCREATORBUG-15981)) + ([Documentation](https://doc.qt.io/qtcreator/creator-file-system-view.html)) + ### CMake * Implemented adding files to the project @@ -167,12 +175,14 @@ Projects ### Python -* Added an option for the interpreter to the wizards +* Added an option for selecting the interpreter to the wizards in + `File > New Project > Application (Qt for Python)` Debugging --------- -* Improved the UI for enabling and disabling debuggers +* Improved the UI for enabling and disabling debuggers in `Projects > Run > + Debugger settings` ([QTCREATORBUG-28627](https://bugreports.qt.io/browse/QTCREATORBUG-28627)) ### C++ From 6f6f6d3f970c3b5f04ee96c92b00ff23f04e604a Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 14 Jun 2023 16:08:24 +0200 Subject: [PATCH 17/25] Solutions: Add a common Solutions page Add also The Tasking solution page. Add some hints into README.md file. Change-Id: I4e355c95977d668fbc2f7bd286f9446e4e4b1f69 Reviewed-by: Jarek Kobus --- doc/qtcreatordev/src/qtcreator-module.qdoc | 19 ++++++++++++- doc/qtcreatordev/src/solutions-index.qdoc | 12 ++++++++ src/libs/solutions/README.md | 20 +++++++++++++ src/libs/solutions/tasking/tasktree.cpp | 33 ++++++++++++---------- 4 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 doc/qtcreatordev/src/solutions-index.qdoc diff --git a/doc/qtcreatordev/src/qtcreator-module.qdoc b/doc/qtcreatordev/src/qtcreator-module.qdoc index 18a56103353..a86699733ab 100644 --- a/doc/qtcreatordev/src/qtcreator-module.qdoc +++ b/doc/qtcreatordev/src/qtcreator-module.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 /*! @@ -109,12 +109,29 @@ \endomit \endtable + \section1 Solutions + + \QC uses object libraries that are independent of any \QC-specific code, and + are threfore ready to be a part of Qt. + + \table + \header + \li Solution Name + \li Description + + \row + \li \l{Tasking Solution}{Tasking} + \li Enables you to build extensible, declarative task tree structures + that contain possibly asynchronous tasks. + \endtable + \section1 Reference \list \li \l {Qt Creator C++ Classes} \li \l {Qt Creator Namespaces} \li \l {Qt Creator Functions} + \li \l {Solutions} \endlist */ diff --git a/doc/qtcreatordev/src/solutions-index.qdoc b/doc/qtcreatordev/src/solutions-index.qdoc new file mode 100644 index 00000000000..1eb4135b890 --- /dev/null +++ b/doc/qtcreatordev/src/solutions-index.qdoc @@ -0,0 +1,12 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +/*! + \page solutions-index.html + \title Solutions + \brief A collection of reusable object libraries. + + This topic lists the available solutions: + + \annotatedlist solutions-modules +*/ diff --git a/src/libs/solutions/README.md b/src/libs/solutions/README.md index ab4cc9727d3..4fd7234a286 100644 --- a/src/libs/solutions/README.md +++ b/src/libs/solutions/README.md @@ -46,3 +46,23 @@ integrated into Qt when they: - Have full docs. - Have auto tests. - Have at least one example (however, autotests often play this role, too). + +## Documentation + +The common Solutions doc (doc/qtcreatordev/src/solutions-index.qdoc) +lists all the solutions added to the solutions-modules group. +In order to gather all the available solutions in this common page, +define the module and refer to it like: + +/*! + \module TaskingSolution + \title The Tasking Solution + \ingroup solutions-modules + \brief (... add a brief description here...) +*/ + +The \ingroup will put the item above to the common Solutions page. +Don't add more \ingroup references from class docs, add \inmodule instead. + + + diff --git a/src/libs/solutions/tasking/tasktree.cpp b/src/libs/solutions/tasking/tasktree.cpp index c28e7b0e6aa..985343ab517 100644 --- a/src/libs/solutions/tasking/tasktree.cpp +++ b/src/libs/solutions/tasking/tasktree.cpp @@ -42,11 +42,25 @@ private: Guard &m_guard; }; +/*! + \module TaskingSolution + \title Tasking Solution + \ingroup solutions-modules + \brief Contains a general purpose Tasking solution. + + The Tasking solution depends on Qt only, and doesn't depend on any \QC specific code. +*/ + +/*! + \namespace Tasking + \inmodule TaskingSolution + \brief The Tasking namespace encloses all classes and global functions of the Tasking solution. +*/ + /*! \class Tasking::GroupItem \inheaderfile solutions/tasking/tasktree.h - \inmodule QtCreator - \ingroup mainclasses + \inmodule TaskingSolution \brief The GroupItem class represents the basic element for composing nested tree structures. */ @@ -1104,22 +1118,11 @@ void TaskNode::invokeEndHandler(bool success) m_container.m_constData.m_taskTreePrivate->advanceProgress(1); } -/*! - \namespace Tasking - \inmodule QtCreator - \brief The Tasking namespace contains a general purpose TaskTree solution. - - The Tasking namespace depends on Qt only, and doesn't depend on any \QC - specific code. -*/ - /*! \class Tasking::TaskTree \inheaderfile solutions/tasking/tasktree.h - \inmodule QtCreator - \ingroup mainclasses - \brief The TaskTree class runs an async task tree structure defined in a - declarative way. + \inmodule TaskingSolution + \brief The TaskTree class runs an async task tree structure defined in a declarative way. Use the Tasking namespace to build extensible, declarative task tree structures that contain possibly asynchronous tasks, such as Process, From 562c5774e3faabaad58f5d36a4487bb0397369bd Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 15 Jun 2023 11:38:21 +0200 Subject: [PATCH 18/25] Debugger: Fix automatic source mapping for Qt - The QtVersion::sourcePath() was wrong because QT_INSTALL_PREFIX/src doesn't return the right path. Work around by checking if sources are found, and otherwise trying the location that we know the installers to put them. - Pass the sourcePath along to the debugger run control, and use that instead of looking for qmake in the PATH (which fails because it is not in PATH). Fixes: QTCREATORBUG-28950 Change-Id: Iffa262d6c87dbc979c449d43cd4a85e1320bcd37 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/debugger/debuggerengine.h | 1 + src/plugins/debugger/debuggerruncontrol.cpp | 4 +- .../debuggersourcepathmappingwidget.cpp | 37 ++----------------- src/plugins/qtsupport/baseqtversion.cpp | 18 ++++++++- 4 files changed, 24 insertions(+), 36 deletions(-) diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 783fa9b9f17..cc6baf32d28 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -157,6 +157,7 @@ public: Utils::FilePath debugInfoLocation; // Gdb "set-debug-file-directory". QStringList debugSourceLocation; // Gdb "directory" QString qtPackageSourceLocation; + Utils::FilePath qtSourceLocation; bool isSnapshot = false; // Set if created internally. ProjectExplorer::Abi toolChainAbi; diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index e3feb04e393..ed4a34f3067 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -863,8 +863,10 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, AllowTerminal allowTerm m_runParameters.debugger = DebuggerKitAspect::runnable(kit); m_runParameters.cppEngineType = DebuggerKitAspect::engineType(kit); - if (QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(kit)) + if (QtSupport::QtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(kit)) { m_runParameters.qtPackageSourceLocation = qtVersion->qtPackageSourcePath().toString(); + m_runParameters.qtSourceLocation = qtVersion->sourcePath(); + } if (auto aspect = runControl->aspect()) { if (!aspect->useCppDebugger) diff --git a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp index 9d3af533bcc..0c98ba174b0 100644 --- a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp +++ b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp @@ -415,47 +415,18 @@ void DebuggerSourcePathMappingWidget::slotEditTargetFieldChanged() } } -// Find Qt installation by running qmake -static QString findQtInstallPath(const FilePath &qmakePath) -{ - if (qmakePath.isEmpty()) - return QString(); - Process proc; - proc.setCommand({qmakePath, {"-query", "QT_INSTALL_HEADERS"}}); - proc.start(); - if (!proc.waitForFinished()) { - qWarning("%s: Timeout running '%s'.", Q_FUNC_INFO, qPrintable(qmakePath.toString())); - return QString(); - } - if (proc.exitStatus() != QProcess::NormalExit) { - qWarning("%s: '%s' crashed.", Q_FUNC_INFO, qPrintable(qmakePath.toString())); - return QString(); - } - const QByteArray ba = proc.readAllRawStandardOutput().trimmed(); - QDir dir(QString::fromLocal8Bit(ba)); - if (dir.exists() && dir.cdUp()) - return dir.absolutePath(); - return QString(); -} - /* Merge settings for an installed Qt (unless another setting is already in the map. */ SourcePathMap mergePlatformQtPath(const DebuggerRunParameters &sp, const SourcePathMap &in) { - const FilePath qmake = BuildableHelperLibrary::findSystemQt(sp.inferior.environment); - // FIXME: Get this from the profile? - // We could query the QtVersion for this information directly, but then we - // will need to add a dependency on QtSupport to the debugger. - // - // The profile could also get a function to extract the required information from - // its information to avoid this dependency (as we do for the environment). - const QString qtInstallPath = findQtInstallPath(qmake); - if (qtInstallPath.isEmpty()) + static const QString qglobal = "qtbase/src/corelib/global/qglobal.h"; + const FilePath sourceLocation = sp.qtSourceLocation; + if (!(sourceLocation / qglobal).exists()) return in; SourcePathMap rc = in; for (const QString &buildPath : qtBuildPaths()) { if (!rc.contains(buildPath)) // Do not overwrite user settings. - rc.insert(buildPath, qtInstallPath + "/../Src"); + rc.insert(buildPath, sourceLocation.path()); } return rc; } diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index d6f2efacefc..dfc85ec0c77 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1861,9 +1861,23 @@ FilePath QtVersionPrivate::mkspecFromVersionInfo(const QHash FilePath QtVersionPrivate::sourcePath(const QHash &versionInfo) { const QString qt5Source = qmakeProperty(versionInfo, "QT_INSTALL_PREFIX/src"); - if (!qt5Source.isEmpty()) - return FilePath::fromString(QFileInfo(qt5Source).canonicalFilePath()); + if (!qt5Source.isEmpty()) { + // Can be wrong for the Qt installers :/ + // Check if we actually find sources, otherwise try what the online installer does. + const auto source = FilePath::fromString(QFileInfo(qt5Source).canonicalFilePath()); + static const QString qglobal = "qtbase/src/corelib/global/qglobal.h"; + if (!(source / qglobal).exists()) { + const auto install = FilePath::fromString( + qmakeProperty(versionInfo, "QT_INSTALL_PREFIX")) + .canonicalPath(); + const FilePath otherSource = install / ".." / "Src"; + if ((otherSource / qglobal).exists()) + return otherSource.cleanPath(); + } + return source; + } + // TODO The .qmake.cache workaround doesn't work anymore since Qt is built with CMake const QString installData = qmakeProperty(versionInfo, "QT_INSTALL_PREFIX"); QString sourcePath = installData; QFile qmakeCache(installData + "/.qmake.cache"); From 64cd1df74b164bd30c674ebfedd2e21d0129368b Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 15 Jun 2023 16:05:49 +0200 Subject: [PATCH 19/25] CMakePM: Add Qt SDK ninja to configure environment Fixes: QTCREATORBUG-29032 Change-Id: I1aebd11ba85ad6a363ecf1ab6406cdec20753e9d Reviewed-by: Reviewed-by: Eike Ziller --- src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 5ddc68c1c23..ee63aef2d71 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -2087,7 +2087,10 @@ void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const Environment CMakeBuildConfiguration::configureEnvironment() const { - return aspect()->environment(); + Environment env = aspect()->environment(); + addToEnvironment(env); + + return env; } QString CMakeBuildSystem::cmakeBuildType() const From 118c493c6c58e445f259d0899a7c435b22ba1210 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 13 Jun 2023 10:48:11 +0200 Subject: [PATCH 20/25] CppEditor: Make generated function const, if necessary ... in "Add member function" quickfix. Fixes: QTCREATORBUG-29274 Change-Id: Ie939389ac2336f70fd216f29ce0d38e495786b3e Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/cppeditor/cppquickfix_test.cpp | 14 ++++++++++++++ src/plugins/cppeditor/cppquickfixes.cpp | 20 ++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index f57670c1611..a3a8111ee8f 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -4055,6 +4055,20 @@ void QuickfixTest::testInsertMemberFromUse_data() "};\n"; QTest::addRow("add member function to this (implicit)") << original << expected; + original = + "class C {\n" + "public:\n" + " int value() const { return @valueInternal(); }\n" + "};\n"; + expected = + "class C {\n" + "public:\n" + " int value() const { return valueInternal(); }\n" + "private:\n" + " int valueInternal() const;\n" + "};\n"; + QTest::addRow("add const member function to this (implicit)") << original << expected; + original = "class C {\n" "public:\n" diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 85489b877e7..a7134169d62 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -311,7 +311,7 @@ QString nameString(const NameAST *name) // FIXME: Needs to consider the scope at the insertion site. QString declFromExpr(const TypeOrExpr &typeOrExpr, const CallAST *call, const NameAST *varName, const Snapshot &snapshot, const LookupContext &context, - const CppRefactoringFilePtr &file) + const CppRefactoringFilePtr &file, bool makeConst) { const auto getTypeFromUser = [varName, call]() -> QString { if (call) @@ -353,6 +353,7 @@ QString declFromExpr(const TypeOrExpr &typeOrExpr, const CallAST *call, const Na return type.isValid() ? oo.prettyType(type, varName->name) : getTypeFromUser(); Function func(file->cppDocument()->translationUnit(), 0, varName->name); + func.setConst(makeConst); for (ExpressionListAST *it = call->expression_list; it; it = it->next) { Argument * const arg = new Argument(nullptr, 0, nullptr); arg->setType(getTypeOfExpr(it->value)); @@ -1671,7 +1672,7 @@ private: if (currentFile->cppDocument()->languageFeatures().cxx11Enabled && settings->useAuto) return "auto " + oo.prettyName(simpleNameAST->name); return declFromExpr(binaryAST->right_expression, nullptr, simpleNameAST, snapshot(), - context(), currentFile); + context(), currentFile, false); } const BinaryExpressionAST *binaryAST; @@ -2939,10 +2940,11 @@ public: const TypeOrExpr &typeOrExpr, const CallAST *call, InsertionPointLocator::AccessSpec accessSpec, - bool makeStatic) + bool makeStatic, + bool makeConst) : CppQuickFixOperation(interface), m_class(theClass), m_memberName(memberName), m_typeOrExpr(typeOrExpr), m_call(call), - m_accessSpec(accessSpec), m_makeStatic(makeStatic) + m_accessSpec(accessSpec), m_makeStatic(makeStatic), m_makeConst(makeConst) { if (call) setDescription(Tr::tr("Add Member Function \"%1\"").arg(nameString(memberName))); @@ -2954,7 +2956,7 @@ private: void perform() override { QString decl = declFromExpr(m_typeOrExpr, m_call, m_memberName, snapshot(), context(), - currentFile()); + currentFile(), m_makeConst); if (decl.isEmpty()) return; if (m_makeStatic) @@ -2983,6 +2985,7 @@ private: const CallAST * m_call; const InsertionPointLocator::AccessSpec m_accessSpec; const bool m_makeStatic; + const bool m_makeConst; }; void AddDeclarationForUndeclaredIdentifier::match(const CppQuickFixInterface &interface, @@ -3198,7 +3201,7 @@ bool AddDeclarationForUndeclaredIdentifier::checkForMemberInitializer( result << new InsertMemberFromInitializationOp( interface, theClass, memInitializer->name->asSimpleName(), memInitializer->expression, - nullptr, InsertionPointLocator::Private, false); + nullptr, InsertionPointLocator::Private, false, false); return false; } @@ -3268,7 +3271,8 @@ void AddDeclarationForUndeclaredIdentifier::maybeAddMember( } } result << new InsertMemberFromInitializationOp(interface, theClass, path.last()->asName(), - typeOrExpr, call, accessSpec, needsStatic); + typeOrExpr, call, accessSpec, needsStatic, + func->symbol->isConst()); } void AddDeclarationForUndeclaredIdentifier::maybeAddStaticMember( @@ -3311,7 +3315,7 @@ void AddDeclarationForUndeclaredIdentifier::maybeAddStaticMember( if (theClass) { result << new InsertMemberFromInitializationOp( interface, theClass, path.last()->asName(), typeOrExpr, call, - InsertionPointLocator::Public, true); + InsertionPointLocator::Public, true, false); } } From db8842a0d480d36b568336889a06e623f0c1685e Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Wed, 14 Jun 2023 14:20:19 +0200 Subject: [PATCH 21/25] App: Allow usage of "windows" style if enforced Currently the code checks if qFuzzyCompare(qApp->devicePixelRatio(), 1.0) and if the condition is true it will always set the "fusion" style. If the user sets a "-style" option we shouldn't override it. Change-Id: If9a20a1b38f4a5aa3c2ccaf53cb01aafb45077f9 Reviewed-by: Alessandro Portale Reviewed-by: --- src/app/main.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 9e1e7458803..08d45e3544e 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -495,6 +495,10 @@ int main(int argc, char **argv) Options options = parseCommandLine(argc, argv); applicationDirPath(argv[0]); + const bool hasStyleOption = Utils::findOrDefault(options.appArguments, [](char *arg) { + return strcmp(arg, "-style") == 0; + }); + if (qEnvironmentVariableIsSet("QTC_DO_NOT_PROPAGATE_LD_PRELOAD")) { Utils::Environment::modifySystemEnvironment( {{"LD_PRELOAD", "", Utils::EnvironmentItem::Unset}}); @@ -607,10 +611,8 @@ int main(int argc, char **argv) setPixmapCacheLimit(); loadFonts(); - if (Utils::HostOsInfo::isWindowsHost() - && !qFuzzyCompare(qApp->devicePixelRatio(), 1.0) - && QApplication::style()->objectName().startsWith( - QLatin1String("windows"), Qt::CaseInsensitive)) { + if (Utils::HostOsInfo::isWindowsHost() && !qFuzzyCompare(qApp->devicePixelRatio(), 1.0) + && !hasStyleOption) { QApplication::setStyle(QLatin1String("fusion")); } const int threadCount = QThreadPool::globalInstance()->maxThreadCount(); From 5ba10671daf2761db4defd825c859460d949616a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 15 Jun 2023 13:28:33 +0200 Subject: [PATCH 22/25] CppEditor: fix highlighter tests amends 9091c994298f75ca76a9e1244236925320f60e15 Change-Id: Iaa64d51aa0dad1d63c88a51bfa55afa2367e65ed Reviewed-by: Christian Kandeler --- src/plugins/cppeditor/cpphighlighter.cpp | 5 +++-- src/plugins/texteditor/syntaxhighlighter.cpp | 7 +++++++ src/plugins/texteditor/syntaxhighlighter.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/plugins/cppeditor/cpphighlighter.cpp b/src/plugins/cppeditor/cpphighlighter.cpp index f5ef94efdee..656173feee2 100644 --- a/src/plugins/cppeditor/cpphighlighter.cpp +++ b/src/plugins/cppeditor/cpphighlighter.cpp @@ -621,8 +621,9 @@ void CppHighlighterTest::test() const QChar c = m_doc.characterAt(pos); if (c == QChar::ParagraphSeparator) continue; - const QTextCharFormat expectedFormat = c.isSpace() - ? whitespacified(formatForStyle) : formatForStyle; + const QTextCharFormat expectedFormat = asSyntaxHighlight( + c.isSpace() ? whitespacified(formatForStyle) : formatForStyle); + const QTextCharFormat actualFormat = getActualFormat(pos); if (actualFormat != expectedFormat) { int posLine; diff --git a/src/plugins/texteditor/syntaxhighlighter.cpp b/src/plugins/texteditor/syntaxhighlighter.cpp index 21db8c0cd32..d8b39a5c2c2 100644 --- a/src/plugins/texteditor/syntaxhighlighter.cpp +++ b/src/plugins/texteditor/syntaxhighlighter.cpp @@ -869,6 +869,13 @@ QTextCharFormat SyntaxHighlighter::whitespacified(const QTextCharFormat &fmt) return format; } +QTextCharFormat SyntaxHighlighter::asSyntaxHighlight(const QTextCharFormat &fmt) +{ + QTextCharFormat format = fmt; + format.setProperty(SyntaxHighlight, true); + return format; +} + void SyntaxHighlighter::highlightBlock(const QString &text) { formatSpaces(text); diff --git a/src/plugins/texteditor/syntaxhighlighter.h b/src/plugins/texteditor/syntaxhighlighter.h index 1b66e2ff56a..856aef72487 100644 --- a/src/plugins/texteditor/syntaxhighlighter.h +++ b/src/plugins/texteditor/syntaxhighlighter.h @@ -62,6 +62,7 @@ protected: void setTextFormatCategories(int count, std::function formatMapping); QTextCharFormat formatForCategory(int categoryIndex) const; QTextCharFormat whitespacified(const QTextCharFormat &fmt); + QTextCharFormat asSyntaxHighlight(const QTextCharFormat &fmt); // implement in subclasses // default implementation highlights whitespace From fc236d4534468fc0867e30843a109d9274ebba70 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 16 Jun 2023 14:31:39 +0200 Subject: [PATCH 23/25] Build: Avoid building Qt Creator when running translation targets The "project sources" contain lots of generated files that we are not interested in, simply exclude anything from the build directory. The *_tr.h header that we generate for the wizards and external tools are handled separately. Change-Id: I2ab1d6ac4312b1140ee475f8f16ba82d8488c43e Reviewed-by: Leena Miettinen Reviewed-by: Cristian Adam --- cmake/QtCreatorTranslations.cmake | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cmake/QtCreatorTranslations.cmake b/cmake/QtCreatorTranslations.cmake index 4803d66be5e..94f28663483 100644 --- a/cmake/QtCreatorTranslations.cmake +++ b/cmake/QtCreatorTranslations.cmake @@ -30,7 +30,18 @@ function(_extract_ts_data_from_targets outprefix) set(_target_sources "") if(_source_files) - list(FILTER _source_files EXCLUDE REGEX ".*[.]json[.]in|.*[.]svg|.*[.]pro|.*[.]css") + # exclude various funny source files, and anything generated + # like *metatypes.json.gen, moc_*.cpp, qrc_*.cpp, */qmlcache/*.cpp, + # *qmltyperegistrations.cpp + set(_exclude_patterns + .*[.]json[.]in + .*[.]svg + .*[.]pro + .*[.]css + "${PROJECT_BINARY_DIR}/.*" + ) + list(JOIN _exclude_patterns "|" _exclude_pattern) + list(FILTER _source_files EXCLUDE REGEX "${_exclude_pattern}") list(APPEND _target_sources ${_source_files}) endif() if(_extra_translations) From 1df36cac5a21903c43e5787d305b166f4d56d20f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 16 Jun 2023 13:03:02 +0200 Subject: [PATCH 24/25] Fix that run configurations lost their executable Prevent QmlDesignerProjectManager messing with projects in Qt Creator. Change-Id: Ife5a9a8c3a80a9aa1b6e1c5526fb1705996b1b3e Reviewed-by: hjk Reviewed-by: --- src/plugins/qmldesigner/qmldesignerprojectmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp index 0b8a7f46853..546406d0a11 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp @@ -514,7 +514,7 @@ void QmlDesignerProjectManager::fileListChanged() void QmlDesignerProjectManager::activeTargetChanged(ProjectExplorer::Target *target) { - if (!m_projectData) + if (!m_projectData || !m_projectData->projectStorageData) return; QObject::disconnect(m_projectData->activeTarget, nullptr, nullptr, nullptr); From d30689c9a9a1d17e9ea7225b9da5b1d8003351b4 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 16 Jun 2023 15:13:54 +0200 Subject: [PATCH 25/25] QtSupport: Fix handling of kits Allow creation of kits without a Qt. Broke with ce7677a7d7cfb0980e7e8c92d27e652ac35bc99b. Change-Id: Ia6ab9746beab9f4c48b72930c32d5068bb7c733b Reviewed-by: Marcus Tillmanns --- src/plugins/qtsupport/qtkitinformation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index 4d57a423ee1..fe773f4995e 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -37,7 +37,6 @@ public: { m_combo = createSubWidget(); m_combo->setSizePolicy(QSizePolicy::Ignored, m_combo->sizePolicy().verticalPolicy()); - m_combo->addItem(Tr::tr("None"), -1); m_manageButton = createManageButton(Constants::QTVERSION_SETTINGS_PAGE_ID); @@ -75,6 +74,7 @@ private: { const GuardLocker locker(m_ignoreChanges); m_combo->clear(); + m_combo->addItem(Tr::tr("None"), -1); IDeviceConstPtr device = BuildDeviceKitAspect::device(kit()); const FilePath deviceRoot = device->rootPath();