From 987cd409f3c6daa6ebe67e3fe551c60ccb0c3a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Wed, 17 Apr 2024 22:54:58 +0200 Subject: [PATCH 01/27] SquishTests: Make sure that button in Designer is renamed properly This misused typeLines() to close the dialog by pressing "Return". Although the entire name of the button should be selected at first, I witnessed the new name being appended to the old one. The new code uses replaceEditorContent() to explicit select the old name and replace it with the new name. After that, it explicitly presses "Return" to close the dialog. Change-Id: I5ec946f57000396b70428e08ab795a1ee3eba91a Reviewed-by: Reviewed-by: Christian Stenger --- tests/system/suite_tools/tst_designer_autocomplete/test.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/system/suite_tools/tst_designer_autocomplete/test.py b/tests/system/suite_tools/tst_designer_autocomplete/test.py index c72d86a4e2e..b378407f812 100644 --- a/tests/system/suite_tools/tst_designer_autocomplete/test.py +++ b/tests/system/suite_tools/tst_designer_autocomplete/test.py @@ -25,7 +25,9 @@ def main(): openContextMenu(waitForObject("{container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack'" "text='PushButton' type='QPushButton' visible='1'}"), 5, 5, 1) activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Change objectName...")) - typeLines(waitForObject(":FormEditorStack_qdesigner_internal::PropertyLineEdit"), buttonName) + buttonNameEdit = waitForObject(":FormEditorStack_qdesigner_internal::PropertyLineEdit") + replaceEditorContent(buttonNameEdit, buttonName) + type(buttonNameEdit, "") else: # Verify that everything works without ever changing the name buttonName = "pushButton" From 7f7d4889d26b11e26d066d870da73ba5912f2988 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 23 Apr 2024 14:00:04 +0200 Subject: [PATCH 02/27] Add an environment variable for disabling atomic save There are situations where e.g. anti virus software leads to saving files failing. Provide a way to disable atomic save for debugging purposes. Task-number: QTCREATORBUG-30728 Change-Id: I1f3df009f89f6c27b2e0c9f91869b2a75f5575d8 Reviewed-by: Orgad Shaneh --- src/libs/utils/fileutils.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index a2998e2f07d..b3649a457d1 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -197,7 +197,8 @@ FileSaver::FileSaver(const FilePath &filePath, QIODevice::OpenMode mode) m_file.reset(tf); } else { const bool readOnlyOrAppend = mode & (QIODevice::ReadOnly | QIODevice::Append); - m_isSafe = !readOnlyOrAppend && !filePath.hasHardLinks(); + m_isSafe = !readOnlyOrAppend && !filePath.hasHardLinks() + && !qtcEnvironmentVariableIsSet("QTC_DISABLE_ATOMICSAVE"); if (m_isSafe) m_file.reset(new SaveFile(filePath)); else From d717e7be04e48cfb71a389f1cc65186aa40def3c Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 24 Apr 2024 14:27:23 +0200 Subject: [PATCH 03/27] TextEditor: fix backspace on block start Amends ec88d279a8d52189685008c8fe46371d13d2505f Change-Id: I7d83b5ffa617f8d45acc6998ce674b1afcf3a31b Reviewed-by: Christian Stenger --- src/plugins/texteditor/texteditor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 1d90c7481f2..bea58df3c88 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -6876,7 +6876,8 @@ void TextEditorWidgetPrivate::handleBackspaceKey() } } } else if (typingSettings.m_smartBackspaceBehavior == TypingSettings::BackspaceUnindents) { - if (c.positionInBlock() > TabSettings::firstNonSpace(c.block().text())) { + if (c.positionInBlock() == 0 + || c.positionInBlock() > TabSettings::firstNonSpace(c.block().text())) { if (cursorWithinSnippet) c.beginEditBlock(); c.deletePreviousChar(); From 041727fb29aa16f709fa2046f319401a9604ec33 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 19 Apr 2024 15:36:03 +0200 Subject: [PATCH 04/27] LanguageClient: fix compile with latest Qt dev Change-Id: Ifc6b5cfacb1e4e559646304b4ab5889eeb85bf3f Reviewed-by: hjk --- src/plugins/languageclient/languageclientutils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp index 8b9962b6c9b..e92041443cc 100644 --- a/src/plugins/languageclient/languageclientutils.cpp +++ b/src/plugins/languageclient/languageclientutils.cpp @@ -235,8 +235,8 @@ void updateEditorToolBar(Core::IEditor *editor) TextDocument *document = textEditor->textDocument(); Client *client = LanguageClientManager::clientForDocument(textEditor->textDocument()); - ClientExtras *extras = widget->findChild(clientExtrasName, - Qt::FindDirectChildrenOnly); + ClientExtras *extras = dynamic_cast( + widget->findChild(clientExtrasName, Qt::FindDirectChildrenOnly)); if (!extras) { if (!client) return; From 3f46037b373f5b507389f36154fc8ea857645048 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 25 Apr 2024 17:59:50 +0200 Subject: [PATCH 05/27] Debugger: Execute additional attach commands for LLDB This allows setting _Preferences > Debugger > GDB > Additional Attach Commands_ with the content: process handle SIGSEGV --pass true --stop false --notify true which results in the debugger not stopping in assembler for Java runtime exceptions. Task-number: QTCREATORBUG-29928 Change-Id: I8edf0d79dcccfe7ddb27502edb122fb5fb2c646c Reviewed-by: Axel Spoerl Reviewed-by: hjk --- src/plugins/debugger/lldb/lldbengine.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 2934f1db440..c6daabd863c 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -30,6 +30,7 @@ #include +#include #include #include #include @@ -328,6 +329,16 @@ void LldbEngine::handleLldbStarted() runEngine(); }; runCommand(cmd3); + + // Execute post attach commands + QStringList commands = settings().gdbPostAttachCommands().split('\n'); + commands = Utils::filtered(commands, [](const QString line) { + const QString trimmed = line.trimmed(); + return !trimmed.isEmpty() && !trimmed.startsWith('#'); + }); + for (const QString &cmd : commands) { + executeDebuggerCommand(cmd); + } } else { notifyEngineSetupFailed(); } From 6b7c6bde5afd87c9152fbe65e041b262c609538f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 25 Apr 2024 14:12:00 +0200 Subject: [PATCH 06/27] QmlJSEditor: Avoid crash on temporary documents Fixes: QTCREATORBUG-30739 Change-Id: I62872fc23529674d5fca6dcb6255872eab12a9da Reviewed-by: David Schulz --- src/plugins/qmljseditor/qmljseditordocument.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp index 18a9c4d0f26..cef1aefcd2b 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.cpp +++ b/src/plugins/qmljseditor/qmljseditordocument.cpp @@ -750,6 +750,9 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file, void QmlJSEditorDocumentPrivate::settingsChanged() { + if (q->isTemporary()) + return; + Utils::FilePath newQmlls = qmllsForFile(q->filePath(), ModelManagerInterface::instance()); if (m_qmllsStatus.qmllsPath == newQmlls) return; From 4443ee96aab156a88a093864dea7aac98eafc1bc Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 24 Apr 2024 13:00:06 +0200 Subject: [PATCH 07/27] QtSupport: Fix Qt Abi detection after Android initial SDK setup If QtVersion::qtAbis() is called while the Android SDK is not yet set up, AndroidQtVersion::detectQtAbis() returns an empty Abi list. After the Android SDK setup, the Abi detection is repeated. The recently introduced use of std::optional for Abis prevented that "second chance" for Abis detection. After the Android SDK setup, Qt Creator now had to first be restarted in order to have functioning Android Qt Kits. This change adds an Android specific hack in QtVersion::qtAbis() which gives AndroidQtVersion a "second chance" to detect Qt Abis. Amends: ee4f6ca1ae06ea932789fb41fdf8b9427ad27478 Fixes: QTCREATORBUG-30568 Change-Id: I5d8a4fa7081d80015375c76305bb559d890b5f79 Reviewed-by: Reviewed-by: Christian Kandeler --- src/plugins/qtsupport/baseqtversion.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index ae0ed49e069..9222d7c0bd4 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -11,6 +11,8 @@ #include "qtversionfactory.h" #include "qtversionmanager.h" +#include + #include #include @@ -837,8 +839,11 @@ bool QtVersion::hasQtAbisSet() const Abis QtVersion::qtAbis() const { - if (!d->m_data.qtAbis) + if (!d->m_data.qtAbis + // QTCREATORBUG-30568 give AndroidQtVersion a "second chance" to detect Qt Abis + || (d->m_type == Android::Constants::ANDROID_QT_TYPE && d->m_data.qtAbis->isEmpty())) { d->m_data.qtAbis = detectQtAbis(); + } return *d->m_data.qtAbis; } From 7309a46b1f14a79b55d6d05fbd0573a5cf7d39ab Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 26 Apr 2024 10:09:28 +0200 Subject: [PATCH 08/27] Update qbs submodule to HEAD of 2.3 branch Change-Id: I032c554de5920d9a44d8f6ca544ba3cb61fa7bae Reviewed-by: Christian Stenger Reviewed-by: --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index ca74c524363..12bc60c93d6 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit ca74c524363d17c689bb0ec4ca39c744df8d036e +Subproject commit 12bc60c93d684432af1b28576f21f853b8922d99 From 52979e8037965f66b69e0be31aa55f58047e170a Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 29 Apr 2024 10:54:08 +0200 Subject: [PATCH 09/27] Examples: Re-add the clear button for the search bar when something is typed there. Got lost during redesign. Change-Id: I6a765aa542243d2e20e00f6e965dbfbd26a12803 Reviewed-by: Alessandro Portale Reviewed-by: --- src/plugins/coreplugin/welcomepagehelper.cpp | 17 +++++++++-------- src/plugins/coreplugin/welcomepagehelper.h | 4 +--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/plugins/coreplugin/welcomepagehelper.cpp b/src/plugins/coreplugin/welcomepagehelper.cpp index fe01944a6f2..c2b28c1f83e 100644 --- a/src/plugins/coreplugin/welcomepagehelper.cpp +++ b/src/plugins/coreplugin/welcomepagehelper.cpp @@ -287,7 +287,7 @@ static const QPixmap &searchBoxIcon() } SearchBox::SearchBox(QWidget *parent) - : QLineEdit(parent) + : Utils::FancyLineEdit(parent) { setAttribute(Qt::WA_MacShowFocusRect, false); setAutoFillBackground(false); @@ -301,10 +301,9 @@ SearchBox::SearchBox(QWidget *parent) pal.setColor(QPalette::Text, searchBoxTextTF.color()); setPalette(pal); - const QSize iconSize = searchBoxIcon().deviceIndependentSize().toSize(); - setContentsMargins({HPaddingXs, ExPaddingGapM, - HPaddingXs + iconSize.width() + HPaddingXs, ExPaddingGapM}); + setContentsMargins({HPaddingXs, ExPaddingGapM, 0, ExPaddingGapM}); setFixedHeight(ExPaddingGapM + searchBoxTextTF.lineHeight() + ExPaddingGapM); + setFiltering(true); } QSize SearchBox::minimumSizeHint() const @@ -351,10 +350,12 @@ void SearchBox::paintEvent(QPaintEvent *event) QPainter p(this); paintCommonBackground(&p, rect(), this); - const QPixmap icon = searchBoxIcon(); - const QSize iconS = icon.deviceIndependentSize().toSize(); - const QPoint iconPos(width() - HPaddingXs - iconS.width(), (height() - iconS.height()) / 2); - p.drawPixmap(iconPos, icon); + if (text().isEmpty()) { + const QPixmap icon = searchBoxIcon(); + const QSize iconS = icon.deviceIndependentSize().toSize(); + const QPoint iconPos(width() - HPaddingXs - iconS.width(), (height() - iconS.height()) / 2); + p.drawPixmap(iconPos, icon); + } QLineEdit::paintEvent(event); } diff --git a/src/plugins/coreplugin/welcomepagehelper.h b/src/plugins/coreplugin/welcomepagehelper.h index cce3b812527..c32e803029e 100644 --- a/src/plugins/coreplugin/welcomepagehelper.h +++ b/src/plugins/coreplugin/welcomepagehelper.h @@ -25,8 +25,6 @@ #include #include -namespace Utils { class FancyLineEdit; } - namespace Core { namespace WelcomePageHelpers { @@ -113,7 +111,7 @@ private: const Role m_role = Primary; }; -class CORE_EXPORT SearchBox : public QLineEdit +class CORE_EXPORT SearchBox : public Utils::FancyLineEdit { public: explicit SearchBox(QWidget *parent = nullptr); From 84f0f6ba8b40378d0cf9fe743c75c1a58fc2bb41 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 29 Apr 2024 16:05:02 +0200 Subject: [PATCH 10/27] CMakePM: Fix crash with specific CMakePresets.json The code was not taking into consideration an empty QStringList. Fixes: QTCREATORBUG-30755 Change-Id: Ifb9f5dc3ffefd94d44b16b161bc04d381f3f6786 Reviewed-by: Alessandro Portale --- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 23c68a6e642..9e119bba886 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -136,6 +136,8 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP && left.inherits.value().contains(right.name); const bool inheritsGreater = left.inherits && right.inherits + && !left.inherits.value().isEmpty() + && !right.inherits.value().isEmpty() && left.inherits.value().first() > right.inherits.value().first(); From 8b682ac7f55d3762875631df21ec28ff9d0a7669 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 30 Apr 2024 08:33:48 +0200 Subject: [PATCH 11/27] Terminal: Fix TERM env variable Some (Fedora) OS/Distros set a default value for TERM such as "dumb", which then breaks command line tools such as "clear" which try to figure out what terminal they are running in. Therefore we have to force-set our own TERM value. Fixes: QTCREATORBUG-30737 Change-Id: I50ac86f17c92dc7bc477cc59ed43ec22025593fb Reviewed-by: Christian Stenger --- src/plugins/terminal/terminalwidget.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index 756f1a11bee..c7bdab9b2a8 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -119,8 +119,12 @@ void TerminalWidget::setupPty() Environment env = m_openParameters.environment.value_or(Environment{}) .appliedToEnvironment(shellCommand.executable().deviceEnvironment()); + // Some OS/Distros set a default value for TERM such as "dumb", which then breaks + // command line tools such as "clear" which try to figure out what terminal they are + // running in. Therefore we have to force-set our own TERM value here. + env.set("TERM", "xterm-256color"); + // Set some useful defaults - env.setFallback("TERM", "xterm-256color"); env.setFallback("TERM_PROGRAM", QCoreApplication::applicationName()); env.setFallback("COLORTERM", "truecolor"); env.setFallback("COMMAND_MODE", "unix2003"); From 7a47cf0a11baa7e0b4416be181d09b62596987d8 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 25 Apr 2024 10:01:29 +0200 Subject: [PATCH 12/27] Utils: fix crash on hiding a tooltip Closing the tip label indirectly calls ToolTip::hideTipImmediately via its eventFilter that closes the tool tip on any FocusIn/Out event on the application. Since m_tip is reset in hideTipImmediately the outer call crashes when this nullptr gets dereferenced. Avoid this crash by resetting m_tip before closing the tip label. Fixes: QTCREATORBUG-30738 Change-Id: Id3e690141be196db8ac6c4dab3d97627c0657140 Reviewed-by: Christian Stenger --- src/libs/utils/tooltip/tooltip.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/tooltip/tooltip.cpp b/src/libs/utils/tooltip/tooltip.cpp index 93f4c1d2ff0..da11540c083 100644 --- a/src/libs/utils/tooltip/tooltip.cpp +++ b/src/libs/utils/tooltip/tooltip.cpp @@ -288,9 +288,11 @@ void ToolTip::hideTipWithDelay() void ToolTip::hideTipImmediately() { if (m_tip) { - m_tip->close(); - m_tip->deleteLater(); - m_tip = nullptr; + TipLabel *tip = m_tip.data(); + m_tip.clear(); + + tip->close(); + tip->deleteLater(); } m_showTimer.stop(); m_hideDelayTimer.stop(); From ae4c893301331bdfd6908ea0a5d17d30f05ab8a7 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 29 Apr 2024 14:21:26 +0200 Subject: [PATCH 13/27] Fix the directory opened when exporting coding styles On macOS. Make sure to use an absolute path for the file dialog. Fixes: QTCREATORBUG-28832 Change-Id: I75f4166ee2bc3238a01089231bde4cf990269024 Reviewed-by: Marcus Tillmanns Reviewed-by: --- src/plugins/texteditor/codestyleselectorwidget.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/texteditor/codestyleselectorwidget.cpp b/src/plugins/texteditor/codestyleselectorwidget.cpp index ddeea0a74eb..5eb373f00f1 100644 --- a/src/plugins/texteditor/codestyleselectorwidget.cpp +++ b/src/plugins/texteditor/codestyleselectorwidget.cpp @@ -216,9 +216,11 @@ void CodeStyleSelectorWidget::slotImportClicked() void CodeStyleSelectorWidget::slotExportClicked() { ICodeStylePreferences *currentPreferences = m_codeStyle->currentPreferences(); - const FilePath filePath = FileUtils::getSaveFilePath(this, Tr::tr("Export Code Style"), - FilePath::fromString(QString::fromUtf8(currentPreferences->id() + ".xml")), - Tr::tr("Code styles (*.xml);;All files (*)")); + const FilePath filePath = FileUtils::getSaveFilePath( + this, + Tr::tr("Export Code Style"), + FileUtils::homePath().pathAppended(QString::fromUtf8(currentPreferences->id() + ".xml")), + Tr::tr("Code styles (*.xml);;All files (*)")); if (!filePath.isEmpty()) { CodeStylePool *codeStylePool = m_codeStyle->delegatingPool(); codeStylePool->exportCodeStyle(filePath, currentPreferences); From 2275b43cc4e6543f7443e00fbaa3ee0c6a7f7d4d Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 26 Apr 2024 13:33:47 +0200 Subject: [PATCH 14/27] Doc: Update info on Qt for MCUs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTCREATORBUG-29361 Change-Id: I926e09748265ca123fd1a52838da1d05de7f7766 Reviewed-by: Esa Törmänen Reviewed-by: Yasser Grimes Reviewed-by: Rainer Keller --- doc/qtcreator/config/style/qt5-sidebar.html | 1 + doc/qtcreator/images/qtcreator-mcu-kit.png | Bin 32077 -> 0 bytes .../images/qtcreator-mcu-new-project.webp | Bin 0 -> 10598 bytes .../images/qtcreator-mcu-options.png | Bin 11640 -> 0 bytes .../qtcreator-preferences-kits-mcu.webp | Bin 0 -> 16120 bytes .../images/qtcreator-preferences-mcu.webp | Bin 0 -> 9356 bytes .../external-resources.qdoc | 8 + .../howto/creator-only/creator-how-tos.qdoc | 15 + .../creator-embedded-platforms.qdoc | 4 +- doc/qtcreator/src/mcu/creator-mcu-dev.qdoc | 348 ++++++++++-------- .../creator-only/creator-mobile-targets.qdoc | 2 +- .../creator-only/creator-reference.qdoc | 9 + doc/qtcreator/src/qtcreator-toc.qdoc | 10 +- 13 files changed, 240 insertions(+), 157 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-mcu-kit.png create mode 100644 doc/qtcreator/images/qtcreator-mcu-new-project.webp delete mode 100644 doc/qtcreator/images/qtcreator-mcu-options.png create mode 100644 doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp create mode 100644 doc/qtcreator/images/qtcreator-preferences-mcu.webp diff --git a/doc/qtcreator/config/style/qt5-sidebar.html b/doc/qtcreator/config/style/qt5-sidebar.html index 327bd27a293..cf020e31ca0 100644 --- a/doc/qtcreator/config/style/qt5-sidebar.html +++ b/doc/qtcreator/config/style/qt5-sidebar.html @@ -51,6 +51,7 @@
  • Create Models and Diagrams
  • Debug
  • Design UIs
  • +
  • Develop for Devices
  • Edit Code
  • Manage Kits
  • Manage Projects
  • diff --git a/doc/qtcreator/images/qtcreator-mcu-kit.png b/doc/qtcreator/images/qtcreator-mcu-kit.png deleted file mode 100644 index c218ad647e851b56a29ac5379a3b48b55ace1946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32077 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 T-{>w6K7GE^eEX#Cet$*)ipXRA literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-mcu-options.png b/doc/qtcreator/images/qtcreator-mcu-options.png deleted file mode 100644 index a7234466e42b458979315d3556078b314bf1bb3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11640 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 V4_*e%XJBAp@O1TaS?83{1OPu7p}7D6 diff --git a/doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp b/doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp new file mode 100644 index 0000000000000000000000000000000000000000..cf61f131ecc78db38b64132b62574925377a4c30 GIT binary patch literal 16120 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� zy;_r!57^E+%2>0a{nUh&wWTl4&+oXf(8Ve4&)Ybk34WXJ$=28H(O{|Q;<)qF?^o)H zEBk(Zdd~kW%W8_pf$sTbuWr~L(fn|K*DrO!wWU*zGS>98JFN|Q`BO!qKPdfFn^30i zvWD8ZCMt|s2Q~j><(JE*6*8Fa;AgaPsblJ1d}Zb(uvIqQ^*1N5SR7mU%Cb0|XARHH zTj7)c{ds#YFRpS)cSHRd{|Dzy!~Xu{jM@3=)q#J1;A54)zCSEw%L45w$cp054TI!?SFN0 zw}An7oZAhK!oBjp+k`b3=3e)0iTai`|K!j7=Gv*niHy_ET8hlQ&{_L>7RLhNKhqY5 z*;b0Tr5)6c@LDVXd(-D#odLh&-hMv!o;@PWck%A8eWkuE7dY!q2dtjAhnsoxgQIGJ z-M@OSXFmVR_*U+Pbl&93pHoBZznz_XeY%wS%#ho0Z=3t}Pu6=o`8@N3u(vBF{|?&1 z`yle{+dGxlzcH`oeC+pOaonfF7QU}8Zt(siT7R$gk7f$n@d*e`i*~ z2;UiHP4eF+$sfxM>TipEwEoLyJs+vV@phe2#q5O3#z&pDyr?^H&i1YB1%;+noR|GRDBo3ZJ6vV*MyNh@ zetF_2i>?ixSAzCGl-u+Eir5rC`)@BaF>cViQ+z|MJ-=pu0vB>twJxsDEu;qV24b&iz&=b{kmqDU}Fqy|Lxa+M_Zlm(K6`_0p;HOR~J* zf`*x&f6Zllt-G&u{Wr-U-@i3SZOvYhr2Sz1|8_p5j#(StvHX8~k|A-`ttH-nt~%ap zohdoXTWj{q~?ZUwV1D}dthnL&>zweN+*`d)R^R7L;rSkW)pZC{4dw$;jhS$yx@p=2_ai5p4v(gf2yKk}E z?9-FXg#nYIxYpNwFuj_zZjU`^l<>fTPkKB{9hkdstv~C%vHRbjZ2PsmNqqc zf0XBMiu?OG?)>GuTh*`Me)R3@?;^qb3$A+wI@~Y*FWbaD z3ywQ3d$@cg4?d5TCYx9nO2JrVf=3d!LC?)uM}B!`I2Z_6T{*6kzS1GhtD&Of z%2keMXWfmD{(O8)*VAXeh-a*v)%+!Sw}1X$B6nlDdSvg9zilc#ENsS0`r4Ic?a#LA zHya3Xua9lt&hdSFW5K8A<`>lKWoJ9?&|LcMQpj29WB!x2^d6Y>@5}OA2zIeJx~*Z5W*m*vy6A4>!FHCMc-Ss@hmc^S*|kQ+06 z+Iy6%?5DNoZh3TL{)}9P71x(K?8t5C%NKl?&;0Po`Tnmn&78y);sp->aQ~>Gw!uWv zcm+#R`sr&dDvk9GEG*24@%h4Am>$GAJ4ziq&T%4?zx2hK7eZ}|TC@yZ7n)?SuR3Uv zq}%t#D)RQ6lf`Zlf5q=hKJ8J-5kF?;uzh=n&<(ajXXeYl5=Vf=BEf2a1 z9b#7bHtS}@#}g)MzMFqYOXt{JFi+nzN3lS4$zsXC^z2D03)z?_-96mbBIC|?Er~DO z*_1EYW^-@Smn}-}zLhU(+j+C?*mIq})~{x6-8vPZI_PMI3U z?v1I=GYYd=CUJCqa_U|6ye1#vM^jrs*Z#`l!9?2?dJ7C!2A7K6 z-#s}(&T77j+4~DMyTyfeuTN_CPu#hoD1(X z{V7ZEYf4QHAM?Ufy&molc3W7#OV2X-k<4;NUf9I!Q^>Ae8z*d^L~$_DeGyq@*p~cO7`!Q7B@$*>%bRGl8gof7xmi>xd~Pl6Ec2oK20i z&t1$)nUj%wU4C1)^Yg=UCk{uoPd&eB(RqowIcArx`*vHjUf3%!Y5u3>Rvy|a3pcR* zb;vM1#%-$U8oD^BS%%;R{@iO1%|G%zFxH84Cpg&&mda_4C<(jFcjxVw{D_nTM zyX%aM&x`=e<$eCyn|aa`Zd=%MjEU%<9N<9_M~1>rLbI)$p2zN-~v=Qr{;eY<#t z)rtEHl6vRV3C15;7xuu3;Dyo>v)${XjrlDY-9HFl}gH~%>Ca{Bv6&%`gD}ZT2v3=X zZQGu^xSU^Y!n)HF6ee2LhTSrsu&eW>@uiCsBNps_xk&d{Ue!f!%iG(whkmg+!lV;v zRN1=pe&ZbD5D)H{D-N8KKi~LOKliDN;@^2P=Z>!WzfIvL@9ik5ccp9p+i_lC?3H4(@U*cx2=pwXoxhK$VC0nLjsO*~&Wv4&OX__wL_AxhkGrCWqvF zR`cua`G0N#`| zbN#<$m}S%}>@RlbYOwRo3vbI#UZ?+ckq*meG1Uy?QN)gs00 z=JE`NXoZ^D`878JSO4Gl?L}|H+C71jb~R6v<4Id1o6om5aF^h|v*vMcb_7~&?y$YJ z{#f)s&4OQdD_SpFF&%b(JdyqO#hrDpeKc(fW@>$P{~UMHsi`71B(44WUP1mj*0fl?JCf?dD{B*Sfa1Fe*UO@yL$_lNwVa<|Y*I-8*z}OZhoDp6dT4_OtdY zPpc`}Eoip-%qz1$o9eoM9kh4~1^Nu-ff4uC_8d27N+ZN2Lv~!L2 zwf9}994&XbX&QI!hl_8IS@!REJn@H}BERde2iKZR&Q~nZRx0hWDN9P1`}6BI!{T#o zvo$Ps@GmxvJ9+x=wd>m)y5bFNSbj z=*DwmCf#$_znPole%U{H1HH^S7G-aFk7U*xw6&&%hN-e(*^FY@$YS2r)&37K)<1#`C8;AF`Ed-^D&u=tuLH( z&5e5ULI0rYjXE`l`p44_3#9kNfBb2}rk1l@R7te-z{dP{*O*Q{FI!O8aANzD+SkE; zX8kA4pNpN6{xtdet{>Ct*6ALo)$G#DU-QE{X8nn`E@g{~!d><%EjjIwc4Wm3<-dov z)Lox?@LTQv&}9V%Q(FIZ{9(Gzw@lV!=cFr_OA7eJe;I3D|Hi?7MpZO8tA*;MW(0o4s5)zwYE5~@rU%bIe!EWOTP~;`MJv=;8=%% z;}Wid-3Pxte$s3=-y>Of-}wv8Ji;~&kDjR%xL=*t&nk3BZe#MiySJA6yeg3x-DZi3SsZ^e!uEYV)i=9)SLgCjpOc5hq~6buiS1(bUTHn?j^#(s z4ox8_ymVJpHubSA4cIoas%)8O;S4ZRr&-tZk zR$o#ZuSVt{-1+L;tC%#cC$qjxoL1#?X;X0EG1CINWHf)15~9-9K(r z#U?thyQg6Ibnb^4Vnq@!>+Ywm+&^=1MR{wDoWZ9L7vHwY$?x>tr`LS%AYbET{$GDS zUd&Z>u4KKR-lS>cbkJ|T;#}XoFXp%!eo$U#cUM&HMCa@es@w^k$B%RcCNKH9@J7>Q z7T#9|A3vV8^xoUBj;Vg3j@Tjro6EUB?DQRF!>8Q0Ua;wQz?;sk+aL6@UTKtnxo(T( zbQr zxKHJTuy0zOzo30!{glpFmvi?+YaQ+{KDce?q${#pz9bkVzpW^K5tFG`Gdq9J4a4wN zd*$!x9^7WFy3#u1W%uq4;l10lyCEfO@GfCU$r`*$H?8rT^(Nuo&kNqQOh1`)BG zK4n{bMLW{NL%UD(wM|gI+1&DTvfi>>S|y)0c74macx&Rqla~X$p7U?9&JGPRdf+f2 z;r*U(VqVw6_*>@ATD5(NQsCrs&l}T{9t+gmh=@MnW8rl))4)lQd8N&zfWlTjwq>(6 z-AHW|*x-EO-0cWg$;C@5b!um{Up?{IBWZQ%bFZS>&8{c!t^4Gqb?eY2?&T};#6?A{ zg64z9vlgDY?OC>oeW_n3HOQRhYx${~{`ltQe;PV-Pfv)_tdvR> zI+~jne)-&H|LN)7AG2J~`b>@bAiSh1arX%=&FTpg^cnJ*H=eb5w}XYftoWyMhLcM3 zfwHZl`_Flw2E{Uxuf#p&JgoCQ z<4OMMC-+yMFLM-8vkaZwrThoH$+V+w9HU;)OzlNSa6}9&G z@q5o+&->15_w%am^E>79Y7{R72hILywxHoi@{aFs}C1Boe%G* z&#!Z1weDZPbjrc=?<}UfG3;ZGZ(D4kuzuodeviueKinTruQqvpXW}kt|2x0`+P**W zV7C0#tl7=m?I#IdZmpQOanrp?7ndweS@uOZrupjJCaq_VOJ_&Bu&?;{OAA#JM9iNS5r>Z zJbxzssr25*?47%B{5yHev@wYDldSm4J9BHEb1pSqHG_TXqBByv`Dcq&uT|+~s^PZd z&OZ{h_FIFDqv`Ju#@QNgik&l?o;PQ8FH@YTy7+O@d9RM?FU8)u+x`4fad_vnzDdD% zet$cfwR79t`ej?xM6@TkFL_s1*K1j`&{nhdXG!*>=Y}=x`&_a&?RA?zWySF|Dx1&q zE-id@VV~^U$03U5UJozwm++lE7+vr#;Ff=H-|6L!XKuZ4mDzA=iqk29q;)(cza-8F zG5l#+UlkUl;5SLkvgpKwOMy!B#M@_{y=}Ytc+>4@u4U0NYpz}kes+3;OJf?(`v!KS zZCuaWXKTz8pZH9-eW8h1zMrV^4og#;ZL^QgHZe1=6*$A3Yiw^>r}|HrJ8%(0(z`3d z##a2Z?@bihdYU=VZ*&SkZqUpd8>m6oRD%qpJQS^L&z z^OAiL>B|o9+o1KuH9Wli_c7B}iTcV+=8D@}n&)dBX}S~LabxEWRVJbOUjdqm97|XJ zVG1#P5taWik8O(I_7ioSiv_-gUVMf4#% zoi!2fuLf+5@p;VuHL*74{Y8PTTW)uz?+J>pdY1T8peDlUa-Pk9p^B-;w(QTWUs@vO ze8uYI%f{EU)&4&JBF6u}_)qx$I{pb)JXlhHh0gLhxh&4p)%8%?QX%G>vvij#J1YyB z3LjK)z1$e^wK&bQB&Yvp_V@|B0^R8FbVDH12H#nd`Vs=W-G_{QRv=YoL6 z$Jj;913!fCulxVO{`jZ==F!vK<)lANu<(E4w|4iDq?C&`x0T``HlM$yljK+UW7AWX zc)nkjwE|xf)_!5-RQP#(&hbeiCA?ZzZk_HM%1#PpDy+IvrtqehS9hR(73;2vmw#rh zwuzpS;-TB6tA48Gtdy5eO17T5#7fT3saGDfb6&ZqvrzxUrJ9r5q&aq^z2CF1rRdW( zo9LDbwMz%`%Cw;%tiV5%Z@icVC^oy;kXBL)&!Y2{+0P{dAtWDC&@8 zU*5@iC&FVA{yqGDB}dRs&}@nG%he~CmGw8Pe4HOqGUdm)Yd%{}>#V(#=<-RtFRW&ClbK`-`w58|0EmIQby_329X{Vsag|cJvT-sjS&P1HNImh?BZ)U)Y ziU})=(h~E{Px+jYF?qhprL9XTadV&0|C_TMHRtplaK09Hags%;>LbPzuX^%M1jjEC zZGZKo-PVeyhxcdU1m?0-4PVv@q4g4n4(D>3ZoYKTRr&1sxkt8rRMpGZEiM(j<@c9S z&sF=tspm7A71BSml-F&VQvgcn5?AC(vZtBsub-Fy@xJH3{ntAV+$ig_x_e3fjpLkS zQPOID{D0PEU8+CF@Z`(kh?qy!v%kzYw#hhjW%1+>2V-R?gw5HeB>hocuAuC!zk)>2 z6ZaMI0qm(UJ~j$$hH`3h0&5lip3FHTwsE)Ei+4-S^HcN9EY{Rta^>li4)r&@!^3D( z_pR>WPMdEchf97tUAfqot#f}eUzwKhyH0kOwd_T`_SKzrmJ{DUww||<1)^g{t+(aF zDkX(iGy1Y`%qs~CePKqw7!E1v_Q0 z7jVxhT{y48VGGl*9S` z>wjSNxUSbVFG<9hCF7BI%)D3Id#r@iroHrRj}rgZ$?me@^W-yv2M_emOYwF59$;*z zCMR&Q;r*=-jPrfYyx~q_+z>xs_m)7=3zIvMr;h!xe`%lIa-i4L-fT;u<+J*{H9t2l z>^*Jxzc~49|H9nD)UzUIB0eW)?%t6x%iTuMdv@Ws)5=ob(Mhw^w@7>6X1&bw(pk#; zc9?;UrJilUJNftOeaf|u{o=mxvrcusFyFCOuKn-XFRSBiQ%X0TnRDUm1nu_)0zzTM zm2LHN)>(Z|nY)7b+~XGu!=C>58a!2Y=N`R`s}pxQYuB8tE^8}2x~kmb7wZa#xxe+J z-%Gum_DU^bg5#wh$Yk#Mt^sB%Z|E7?V zw>8l`uKN{2Y^!&?TH+?)b!&6>ny%KzzCnHQ|8G@>hkGT4YOBa@o7{ZYUE8F^&~4t5 zdV>?Y9!0(Ww)Ku@ny*n%-TPk(PkQ|B+1=Sb-z9wIWx*9SRqxmO+uuqH=snnHTK~eR z!u!9&@{0S+Ve0B_ms%E|xh|FSFDGxxqYBxhv-rNg&G3CUeYX1Yn+va;6)5CtT`}jx z7rwu9vi|(KWVTeq_xFmNYy7ivA4=X6b$XujE+BNCiLJognNRN&O*Hsc)u&r*aX`n; zXnJz)m(#z$W`AIw`1aD4hlc+*KkjK4JmT-$+jsimvu2BkJ4ZGi<2Ntla+}rPd~W_M zttV|kJFRR@6Q*j;JI%YaFoRE=&FbZfFAqyCSZb#zZ8>?Y*JWPtjo%-y#A*<+gX zHGAqR=hyk}>z}S?Tio9B-HxN}xY*7unu}UkxMefz9{y1aEDC)wL$V|L;F(lbfgLBV zp4HrS_iIDptILY7`BjaURz#)7FMFlmZQA(ro!Zu>6@hCxo97g>y6P>A*4z2*%ay{7 zlm5=Np80xm59>eS#gEkgvmTL~dUb`$)|Yowrn;xN&(fdrLpM~3&+)!xr zcVr9go;^F{;a8tT$>S^etv*lXIl8Q`Hhg=)_shMhTR?VrMm?JPPwhRIqH~7OyTy5q zqWb{8F^wy%`gZKHLh@Ky6U-t`k2C#q%LaMwK~_%8mL+rITtldlwS*FU}6 z>4bwXyRhg>tE7O$AFDFgo$Cv!d}(xQPQvXxUZxdRk7CsKdnJH;GeaXZ$y`+DNqFWK zo!GPoXK&2#_sm)5bjo<;p?yE6)Nsq(VN7fd6EIz6nmEUJ-Ghj^Yt8l6m)ZW>r_*_} zZHw26h`G8s?lS9Im+K2%T@bZF)9pW7ljnP_3yj?|`Jr-e7soCWC{#^qO`4;##_YCV zMYw^ob@pV#jXRD+z2RHl`8UsZkN8$8=j1g%tDlwb-MC!(^yBS!-(Q>ksmnjmEB7bQ z$A8kZw!Ex+eddH$<)Ykh-_61AFY8=&6v&n+8>Eqm-3E_yovan>@3}%{O|d(S@O=&>NCI8=lG>J%gnyK zgSlfr8m1yIO4Z~$MliR ziJ-JUejDGv+!NZfqBGr2ancRWX@QEBZZ3AuY$rSv{HUB2WNV?+DYH6+xjbo#s$s#x zxf29UUplI6Tp%DOAsZ}H)0yPrYjN6;%h*pnY_ZgBzejQxl4a}{sm*yRakNQAtW_ZG zk6+=NKPeLRCu}A+ZJyG5HuF;bxebr}Rl2SpHR0YUbMkf4tk#YvrG{snTt4lZam@6P zsoC;1E+Xr@GtHDhYNQ2^zD}B@YY$hkg3VD0knlHQVlC z%buB$)*D$Ku=U`RM`732bZ1^WUhvj;XTW8KsZyB|5AIhwZS8rlywvjP>B3#}7FphF z3wCMTHRF}viQd=DojjYJ&z$5~UoE&-rXaZI@*WMfwHB%AUTxX=ucn{*)rj>BdX_tIq8dVX6D18L&98Cs8g&IJ)ip%l9^k z&T_2g&&~7mT^o1J$nrbU%ew55%P*G9DLzVDJ8eR4*!V?~!a!=XvZCS?zb^EdjrXQ!8EnWKKNc#01Omioh);^zo z^ugQD+pELE>o%43vU(S0XXoI96_x?5Q_{q2*{^xv$aR%K=+QZu!! zz$*XDEUlc6?HgwAonn3<<*o15M6KLc!hsuZ#_Rn}vAt9M{N7t#Ih#!nFU#Do{Pep` z`0b;xk`>)6i=6Ue{4G8xm~@<9@YKfmwz0R$#>uV0-}?@WOzU`I5Lq3(iy_hTdPr2V zR_-e9$Q7!ecE0zBNmd(1dY;H}bMKI%e?E{zQTq>F)bUE5o#p%k?Df1`HX1YC3 zchY%@OaFe}RN8;QPmE7oAdRUAWP(({Qs0wuYOk&yozhq0-FVMp`;X}+KLl$MKelrO zL@4PVy7M3-?LkWGcE+wBHVd!0lpOkF%R29enRKw=e2qBq%Q-G8>$@|>lqP|a|6kwV z!KI~!bHB{LysBl}w`F$g*L!U5V!P~i+J5tr_t{O7sn=$x?QlI8XD{;A^6K#p?;D2} zE=t~{vvBR+mG}3r&7ZbrW7rFu?V(4$PrNke(^HFFwQH01U*HX{^=mHV47Lba7PsQ& z)C=m2(Z;rp=!%?(Vp7T~(LC)#q0Z$#X|}?`z28^t-yj>Vn}d zQ>(Kn{_>0Lo4^xwSysx{g(PvdV`YT@`o)#f+v~;u09W8J}WdQ>ynR7b6Kz7 zW)a18dsp7Oe@$B}_tdS0fr|r{?ODq8uA zWVD*|di^$EbLz;>U&R}o89d+MscveZ%ri^3S^JM_m_Ffmd${ua%45u*d);p6y{dQF zbj_&m;+l(@*P=KI-}-J{zdiw!WGwj%p6Wi;eC{c8L1K~UhY9?OtIn@vvr@IV+8~#7 zqiW%=6&F{UNKD^!V&_VO>-R#w|Kb9r6a&`lJ6O(tp7676LeZR{%kHx>CK_CQ9`ds0 zuF#yU1EPGQvWsIEU)FJ*k)5CAu(EFQ?4$17`L%wQvy%^6X3c-f_0V2r_st}ObRnJ_ zG7CRO7xaG2{rs}=e(2wLO|`%BpZ{kz8UFYGbv{$(8~6S2VxjAiVP9^_{jQw2Pu!pV z!-9Y6e|8p_d_H#Jg=|;MZOJ1?*Io7Y`+w~D45RKZ)dz1lT@zVZv9V72AM?G1BFoaI zhE@MwY0BE*Bq?toWo~zTOXNQT&SjM+Om`8r%>-i1o+4b7j z=O2)2u5c^Sb}T6JU9w$sTe@am_<<*(u9`bq{<;{-elIBQNcd7@r4Z67^`h2ewaYrM z%@UGUe*+T@ie&>oK8q4=ZFt&qR`~n0&si6RFCNzZ^18_OyV&3IA9j0uEN)%+D#0KA zKV+5L#Zu9-hljs&9i4J`s^?yxUsXa;k>nF>ubwLN!uOI6-;;JYNVc%G+ zdwxOfSf|K$s z`c|>6^YM%o2yFV z)~EbL&x_9PTUYiUuHM4-VXywPlOhT_;RZrt>t1WA9XGqLEmEA-?7hGDuXSP7%zyJX z=&AZYwo%%WSHtI+I?a{2#xGyB=bD}u3wf@ZyI9dA`iOJDpEZ8tw$;owwTp*_1rzpPsRgX7Ls zuKD2#AAc_{nHN_g;4J?qzL6zJrJ!89LE_hz|JoB2=375HwfX1_&e_-Qofq{8;c{HY z+&_Io=G)r1MwTFrZJz60t!xYGKCR3@x6b_d2haaA7ey=1=lyYeqvi*fWR3ItdxZt3 zZ8*m^=g)7}=(~Gl@9SNhT5z82kFS(j_O?aZ59jgzxVs^;*nF4JyPFO7d1smiP6J8j z-B`of@bAChAJ6)io7cay`FZlQ_Eh`3u_s*R57|n8*qylfm`(qmvTvWyzpwq;9DZTn zhd1w(_s{LMX{k1QP<}YAx3K6_eE+p4|BD!=^K0q8nMDTJ^ zal03>CqJ;>;pb6&FaLh|-|1`1Yfnf!9lpG_W@dtHvs3F@x5pE6icJn*x7{0(dm{Vy zYWY2jbpD_Gr!>7Na^u=RcQ^Z|PucP)q^J3WueP4gi?eKV?oI8ficRi&pe4BY@~4W) z9WqaI4rs11)tXmUW&F@ex{LP!m*B?ov?qlk*Cd{AUjI(d`0eKPdBvL3OIPmbl-+x? z;qvV|L*vDU?ggzKkCTm~)V16#r3<*Sdz*H}rm4lGJ8xu+P_SB4&{xxUNb0f7|1Xx` zFFXy_TfJE^Th-~>-plhR?3D=R2;iH(bHT;#pmp|4#iuLMntT)2P87^b)i`Li zT}~oxj|5+K_=y06U3TTSQd@+wZr$X}+_6J4(p}M_O^0EF?Xw>SPnc{^UhuKpW9nG+ z=W=?@sZ=}ZP48@fU)g8>7HDjVwpbN-qPm~=0awHm zU$GP3d$vCMFeCoKk9xbOMzeV%zt`n{;;t!roMpRliM*&=pVe2RnYxYlLr$=yx~0eE zZ*IBv%j4aeZ6*m{(wNWPo62ML{(bXr1)jKPB@HW@7w*}jv(?k`)Xj$Ah-{UXxx0kc zFpIamX?#-^K4$_~gV2h;g9lYM{CU{-*kU0M1J4xpcbSeM5y^8zzp2)oN}a@eQz7Tt zscr14Y9gy{yRN-*n#FkKgr9m*Q$(yX=Ffa`ZlOcA+Kn@N4=1QG>)ls>m%(<`(N*?N zt9I?p(7h`Y-iL8z_nwg1oOx=t^jdCRXAvc*wQ>1#W~A@`m8|0=vqO=ENl_tbp$fwi zsd~|_KsEKizC%)>0;m5TBH2t_UpyoSR8#~LAffkIy2vQW#!7;JzMjm z%VVycXj?OpBl5Rj{ioswX-^VfrLJohHIii$UO8dy)*QF=ca8gv7wYA!>@{rlfTL$%f}TKLq}VB@5X=kC;P zs8XF#8~@w-Rfv}U@82wD+xOeotMOzp@a6k5JYTW?&&hv}(&O*i{d@WOU3%Po&vh>I zLr#DSmRQ~FiYY}aD|uth)#}1UZw4v0SF7D9-@4{uz@?=xq;}=`OkfRGbazmC^M1`? zNU5TB2viR3XFQyCHl{@N&Su7X?R}m%UOnsGAQ1b1neCI!jPH}| literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/external-resources/external-resources.qdoc b/doc/qtcreator/src/external-resources/external-resources.qdoc index 5c2f4f22850..6c385180192 100644 --- a/doc/qtcreator/src/external-resources/external-resources.qdoc +++ b/doc/qtcreator/src/external-resources/external-resources.qdoc @@ -25,6 +25,10 @@ \externalpage https://doc.qt.io/QtForMCUs/qtul-supported-platforms.html \title \QMCU - Supported Target Platforms */ +/*! + \externalpage https://doc.qt.io/QtForMCUs/qtul-prerequisites.html + \title \QMCU - Prerequisites +*/ /*! \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-renesas.html \title Getting Started on Renesas @@ -37,6 +41,10 @@ \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp.html \title Getting Started on NXP */ +/*! + \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-infineon.html + \title Getting Started on Infineon +*/ /*! \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-windows.html \title Getting Started on Windows diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc index 395c09ad72e..307c436d224 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc @@ -80,6 +80,21 @@ \generatelist creator-how-to-design + \section1 Develop for Devices + + Install the toolchain for building applications for the targeted + embedded or mobile platform on the computer, and use \QOI to + install Qt libraries that are built for the platform. Then add a + kit with the toolchain and the Qt version for the device's architecture. + When possible, \QOI creates suitable kits for you. + + \section2 MCUs + + Install \l {Qt for MCUs} and connect devices to the computer to run and + debug applications on them. + + \generatelist creator-how-to-mcu + \section1 Edit Code The code editor offers useful features for editing C++ and QML code, such diff --git a/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc b/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc index 1b4051121f7..a6ca31f33fe 100644 --- a/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc +++ b/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc @@ -85,7 +85,7 @@ \list \li \l{Connecting MCUs} - \li \l{Running Applications on MCUs} + \li \l{MCUs}{How To: Develop for MCUs} \li \l{https://doc.qt.io/QtForMCUs/index.html}{\QMCU} \endlist @@ -107,5 +107,5 @@ \li \l{Qt for QNX} \endlist - \sa {Supported Platforms} + \sa {Develop for Devices}{How To: Develop for Devices}, {Supported Platforms} */ diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc index 65fba314e28..5d5dc8b956c 100644 --- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc +++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc @@ -1,31 +1,29 @@ -// Copyright (C) 2020 The Qt Company Ltd. +// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! - \previouspage creator-developing-ios.html \page creator-developing-mcu.html - \nextpage creator-developing-qnx.html + \previouspage creator-reference.html - \title Connecting MCUs + \ingroup creator-reference-devices - \QMCU enables you to use subsets of QML and Qt Quick Controls - to create user interfaces for devices that are powered by microcontroller - units (MCU). It includes a new graphics rendering engine that has a low - memory footprint and is optimized for MCUs and other resource-constrained - devices. + \title Developing for MCUs - You can connect MCU boards to a development host to build applications for - them using the GNU Arm Embedded GCC compiler, libraries, and other GNU tools - necessary for bare metal software development on devices based on the Arm - Cortex-M processors. You can deploy the applications on MCUs to run and - debug them using \QC. + \brief Connect MCU devices to the computer to run and debug applications on + them. - The toolchains are available for cross-compilation on Microsoft Windows, - Linux, and macOS. However, the Qt for \QMCU SDK is currently only available - for Windows and Linux. + \note Enable the McuSupport plugin to develop for MCUs. - For a list of \QMCU reference implementations, see the - \l{\QMCU - Supported Target Platforms}{\QMCU} documentation. + Use subsets of QML and Qt Quick Controls to create user interfaces for + devices that are powered by microcontroller units (MCU). \QMCU has a + new graphics rendering engine with a low memory footprint and optimization + for MCUs and other resource-constrained devices. + + Connect MCU boards to a computer to build applications for them. Deploy the + applications on MCUs to run and debug them. + + For a list of \QMCU reference implementations, see + \l{\QMCU - Supported Target Platforms}. \section1 Requirements @@ -33,157 +31,46 @@ \list \li \QMCU SDK (only available for Windows and Linux) - \li \l{https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm} - {GNU ARM Embedded Toolchain} + \li \l {\QMCU - Prerequisites}{Suitable toolchain} \endlist + The toolchains are available for cross-compilation on Microsoft Windows, + Linux, and macOS. However, the Qt for \QMCU SDK is currently only available + for Windows and Linux. + The hardware-specific requirements vary depending on the hardware platform you are developing for. For more information see: \list \li \l{Getting Started on NXP} \li \l{Getting Started on STM} \li \l{Getting Started on Renesas} + \li \l{Getting Started on Infineon} \endlist - \section1 Setting Up the Development Environment + \section1 \QMCU SDKs - You must download and install the required software and create connections - between \QC and MCUs. The following subsections guide you through the - setup process. - - \section2 MCU Plugin - - To be able to develop applications for MCUs, you need the MCU plugin. - This plugin is enabled automatically by \QOI when you - install \QMCU. - - \section2 Specifying MCU Settings - - To configure a connection between \QC and your MCU board, select - \preferences > \uicontrol Devices > \uicontrol MCU: - - \image qtcreator-mcu-options.png "MCU preferences" - - \list 1 - \li In the \uicontrol {\QMCU SDK} field, specify the path - to the directory where you installed \QMCU SDK. - \li In the \uicontrol {Targets supported by the \QMCU SDK} - field, select your MCU board. - \li In the \uicontrol Requirements section, ensure that the - platform-specific requirements are met. This varies depending - on the target chosen: - \list - \li For STM32 targets: - \list - \li The \uicontrol {GNU ARM Embedded Toolchain} or - \uicontrol {IAR ARM Compiler} path. - \li The \uicontrol {STM32CubeProgrammer} install path. - \li The \uicontrol {MCU SDK} for the chosen target. - \li The \uicontrol {FreeRTOS Sources} for the chosen target. - \endlist - \li For NXP targets: - \list - \li The \uicontrol {GNU ARM Embedded Toolchain} or - \uicontrol {IAR ARM Compiler} path. - \li The \uicontrol {MCUXpresso IDE} install path. - \li The \uicontrol {MCU SDK} for the chosen target. - \li The \uicontrol {FreeRTOS Sources} for the chosen target. - \endlist - \li For Renesas targets: - \list - \li The \uicontrol {Green Hills Compiler} path. - \li The \uicontrol {Renesas Graphics Library} path. - \endlist - \endlist - \li Select the - \uicontrol {Automatically create kits for all available targets on start} - option to create kits automatically the next time Qt Creator is - started. - \note You could also use \uicontrol {Create Kit} to manually - create kits for the chosen target. - \li Select \uicontrol Apply to save the settings. - \endlist - - \note When updating to other versions of the \QMCU SDK, \QC will - ask you if you want to replace the existing kits, or create new ones - alongside. This can also be done manually, for each individual target, - via \uicontrol {Update Kit} and \uicontrol {Create Kit}, respectively. - - \section2 Adding MCU Devices - - \note This optional step is not necessary if you have already - set up the MCU SDK as outlined in \l{Specifying MCU Settings}. - - \QC automatically adds a default MCU device when you select - \uicontrol Apply in the \uicontrol MCU tab after configuring the - MCU tool chain. - - \image qtcreator-mcu-device.png "MCU devices" - - To add MCU devices, select \preferences > \uicontrol Devices > \uicontrol Add - > \uicontrol {MCU Device} > \uicontrol {Start Wizard}: - - \list 1 - \li In the \uicontrol Name field, give the device a name. - \li In the \uicontrol Type field, select the board type. - \li Select \uicontrol Apply to add the device. - \endlist - - \section2 Managing MCU Kits - - \QC automatically adds kits for all the available targets, if the - \uicontrol {Automatically create kits for all available targets on start} - option is enabled under the \uicontrol MCU settings tab. You can also - create kits for individual targets manually, as outlined - in \l{Specifying MCU Settings}. - - \image qtcreator-mcu-kit.png "MCU kits" - - You can edit and/or remove individual kits in \preferences > \uicontrol Kits. - - However, for adding new kits you should use the \uicontrol {Create Kit} - button in the {\QMCU} settings tab. This method adds the paths to - the kit's toolkits and SDKs, and keeps them synchronized when selecting - \uicontrol Apply or \uicontrol OK. - - The \uicontrol {MCU dependencies} field displays paths to 3rd party - software required for MCU development with the current kit. - - \section1 Running Applications on MCUs - - You can use a wizard to set up a project for developing an application that - you can run on MCUs. The project uses a subset of QML and Qt Quick Controls - that are supported by \QMCU. For more information about developing - applications for MCUs, see the \QMCU documentation. - - To create an application and run it on a MCU board: - - \list 1 - \li Select \uicontrol File > \uicontrol {New Project} > - \uicontrol {Application (\QMCU)} > - \uicontrol {MCU Support Application} > \uicontrol Choose. - \li Follow the instructions of the wizard to create the project. - \li Select \uicontrol Projects > \uicontrol {Build & Run}, and then - select the kit for building the application and running it on the - MCU board specified in the kit. - \li Select \uicontrol Run to specify run settings. - Usually, you can use the default settings. - \endlist - - \section1 Supported \QMCU SDKs - - \note The \QMCU SDK 2.3 requires \QC 9.0.0, or later. - - The following table lists the \QC versions you can use to develop - applications with particular \QMCU SDK versions. + While you can use the latest \QC version to develop with any \QMCU SDK, the + following combinations have been tested to work well. \table \header \li \QC version \li \QMCU SDK version \row - \li 9.0.0 or later - \li 2.0 or later + \li 12.0.2 or later + \li 2.7 or later + \row + \li 11.0.3 + \li 2.6 + \row + \li 10.0.2 + \li 2.5 + \row + \li 10.0.0 + \li 2.4 + \row + \li 9.0.0 + \li 2.3 \row \li 7.0.0 up to 8.0.2 \li 2.0 up to 2.2 @@ -203,4 +90,159 @@ \li 4.11.x \li 1.0 \endtable + + \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs} +*/ + +/*! + \page creator-how-to-create-mcu-kits.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-mcu + + \title Connect MCU devices + + \note Enable the McuSupport plugin to develop for MCUs. + + To configure a connection between \QC and your MCU board: + + \list 1 + \li Go to \preferences > \uicontrol Devices > \uicontrol MCU. + \li In \uicontrol {\QMCU SDK}, specify the path to the directory where + you installed \QMCU SDK. + \image qtcreator-preferences-mcu.webp {MCU preferences} + \li In \uicontrol {Targets supported by the \QMCU SDK}, select your MCU + board. + \li In \uicontrol Requirements, check that the platform-specific + requirements are met. This depends on the target: + \list + \li For STM32 targets: + \list + \li The \uicontrol {GNU ARM Embedded Toolchain} or + \uicontrol {IAR ARM Compiler} path. + \li The \uicontrol {STM32CubeProgrammer} install path. + \li The \uicontrol {Board SDK} for the chosen target. + \li The \uicontrol {FreeRTOS Sources} for the chosen target. + \endlist + \li For NXP targets: + \list + \li The \uicontrol {GNU ARM Embedded Toolchain} or + \uicontrol {IAR ARM Compiler} path. + \li The \uicontrol {MCUXpresso IDE} install path. + \li The \uicontrol {Board SDK} for the chosen target. + \li The \uicontrol {FreeRTOS Sources} for the chosen target. + \endlist + \li For Renesas targets: + \list + \li The \uicontrol {Green Hills Compiler} path. + \li The \uicontrol {Renesas Graphics Library} path. + \endlist + \li For Infineon targets: + \list + \li The \uicontrol {Green Hills Compiler for ARM} path. + \li The \uicontrol {Graphics Driver for Traveo II Cluster Series} + path. + \li The \uicontrol {Infineon Auto Flash Utility} path. + \endlist + \endlist + \li Select + \uicontrol {Automatically create kits for all available targets on start} + to create kits automatically the next time \QC starts. + \note Select \uicontrol {Create Kit} to manually create kits for the + target. + \li Select \uicontrol Apply to save the preferences. + \endlist + + \section1 Add MCU devices + + \QC automatically adds a default MCU device when you select + \uicontrol Apply in the \uicontrol MCU tab after configuring the + MCU tool chain. + + \image qtcreator-mcu-device.png {MCU devices} + + To add MCU devices, select \preferences > \uicontrol Devices > \uicontrol Add + > \uicontrol {MCU Device} > \uicontrol {Start Wizard}: + + \list 1 + \li In \uicontrol Name, give the device a name. + \li In \uicontrol Type, select the board type. + \li Select \uicontrol Apply to add the device. + \endlist + + \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs}, + {Developing for MCUs} +*/ + + +/*! + \page creator-how-to-manage-mcu-kits.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-mcu + + \title Manage MCU Kits + + \note Enable the McuSupport plugin to develop for MCUs. + + \QC automatically adds kits for all the available MCU targets if you select + \uicontrol {Automatically create kits for all available targets on start} + in \preferences > \uicontrol Devices > \uicontrol MCU. + + \image qtcreator-preferences-kits-mcu.webp {MCU kit} + + \note When you update the \QMCU SDK, \QC asks you whether you want to replace + the existing kits or create additional kits. To do this manually for each + target, select \uicontrol {Update Kit} or \uicontrol {Create Kit}. + + To add new kits, go to \preferences > \uicontrol Devices > \uicontrol MCU, + and select \uicontrol {Create Kit}. This adds the paths to the kit's toolkits + and SDKs, and keeps them synchronized when you select \uicontrol Apply or + \uicontrol OK. + + \section1 Change or remove MCU kits + + To change or remove individual kits, go to \preferences > \uicontrol Kits. + + The \uicontrol {MCU dependencies} field displays paths to 3rd party + software required for MCU development with the current kit. + + \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs}, + {Developing for MCUs} +*/ + +/*! + \page creator-how-to-run-on-mcu-devices.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-mcu + + \title Create MCU projects + + \note Enable the McuSupport plugin to develop for MCUs. + + Create a project for developing an application that you can run on MCUs. + The project imports a subset of QML and Qt Quick Controls types + that are supported by \QMCU. For more information about developing + applications for MCUs, see \l {Qt for MCUs}. + + To create an application and run it on a MCU board: + + \list 1 + \li Go to \uicontrol File > \uicontrol {New Project}. + \image qtcreator-mcu-new-project.webp {New Project dialog} + \li Select \uicontrol {QmlProject Application (\QMCU)} > + \uicontrol {Qt for MCUs Empty Application} or + \uicontrol {Qt for MCUs Example Application} > \uicontrol Choose. + \li Follow the instructions of the wizard to create the project. + \li Select \uicontrol Projects > \uicontrol {Build & Run}, and then + select the kit for building the application and running it on the + MCU board specified in the kit. + \li Select \uicontrol Run to specify run settings. + Usually, you can use the default settings. + \endlist + + \sa {Configure projects for running}, {Enable and disable plugins}, + {MCUs}{How To: Develop for MCUs}, {Use project wizards}, + {Developing for MCUs} */ diff --git a/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc b/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc index fc33900659b..395a5ba4589 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc @@ -61,7 +61,7 @@ \QC detects the tools and configured devices automatically and uses the tools to build, deploy, and run applications. - \li \l{Connecting MCUs} + \li \l{Developing for MCUs} You can connect MCU boards to a development host to deploy, run, and debug applications on them from \QC. diff --git a/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc b/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc index 45432f561bd..86450b31b13 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc @@ -36,6 +36,15 @@ \annotatedlist creator-reference-build-configurations + \section1 Devices + + Connect devices to the computer to run, debug, and analyze applications + built for them from \QC. When you install Qt for a target platform, such + as Android or QNX, the build and run configurations for the development + targets might be set up automatically in \QC. + + \annotatedlist creator-reference-devices + \section1 Editors When you open files, \QC chooses a suitable editor according to the file diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index 0a60027451d..4c6f0c4cb57 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -42,7 +42,6 @@ \li \l{Connecting Boot2Qt Devices} \li \l{Adding Docker Devices} \li \l{Connecting iOS Devices} - \li \l{Connecting MCUs} \li \l{Connecting QNX Devices} \li \l{Connecting Remote Linux Devices} \li \l{Building Applications for the Web} @@ -109,6 +108,11 @@ \generatelist creator-how-to-debug \li Design UIs \generatelist creator-how-to-design + \li Develop for Devices + \list + \li MCUs + \generatelist creator-how-to-mcu + \endlist \li Edit Code \generatelist creator-how-to-edit \list @@ -148,6 +152,10 @@ \list \li Build Configurations \generatelist creator-reference-build-configurations + \endlist + \li Devices + \generatelist creator-reference-devices + \list \li Run Configurations \generatelist creator-reference-run-configurations \endlist From 289b42aba4a329f77e16fc78dc4ffe0e67226619 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 29 Apr 2024 13:53:56 +0200 Subject: [PATCH 15/27] Fix tab order in "file deleted" dialog on Windows/Linux again This was fixed with e9320a812252b05a6367462fea698d35f9585eae and shortly after broke again with 4d6827dde9248b6b47949b535ae361e8c6b04cfa Amends 4d6827dde9248b6b47949b535ae361e8c6b04cfa Fixes: QTCREATORBUG-28676 Change-Id: I4a69b1ea1430613d1aa22620b8f10ebff73d66ab Reviewed-by: Reviewed-by: Alessandro Portale --- src/libs/utils/reloadpromptutils.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/libs/utils/reloadpromptutils.cpp b/src/libs/utils/reloadpromptutils.cpp index 52571382454..8a07592d3fe 100644 --- a/src/libs/utils/reloadpromptutils.cpp +++ b/src/libs/utils/reloadpromptutils.cpp @@ -89,12 +89,10 @@ QTCREATOR_UTILS_EXPORT FileDeletedPromptAnswer "Do you want to save it under a different name, or close " "the editor?").arg(QDir::toNativeSeparators(fileName)); QMessageBox box(QMessageBox::Question, title, msg, QMessageBox::NoButton, parent); - QPushButton *close = - box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole); + QPushButton *saveas = box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole); + QPushButton *close = box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole); QPushButton *closeAll = box.addButton(Tr::tr("C&lose All"), QMessageBox::RejectRole); - QPushButton *saveas = - box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole); QPushButton *save = box.addButton(Tr::tr("&Save"), QMessageBox::AcceptRole); box.setDefaultButton(saveas); From fcf3cf47709c40378e170e2542116fea1cd7185c Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 24 Apr 2024 16:26:21 +0200 Subject: [PATCH 16/27] Android: Allow users to use other Java versions than 17 Fixes: QTCREATORBUG-30684 Change-Id: I59940f43530fe5f36fdf4fc1655365ff321619f9 Reviewed-by: Reviewed-by: Marcus Tillmanns Reviewed-by: hjk --- src/plugins/android/androidsettingswidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index cb67d9fbeb7..86034b9373e 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -254,7 +254,7 @@ static expected_str testJavaC(const FilePath &jdkPath) jdkVersion = QVersionNumber::fromString(stdOut.mid(outputPrefix.length()).split('\n').first()); - if (jdkVersion.isNull() || jdkVersion.majorVersion() != requiredJavaMajorVersion) { + if (jdkVersion.isNull() /* || jdkVersion.majorVersion() != requiredJavaMajorVersion */ ) { return make_unexpected(Tr::tr("Unsupported JDK version (needs to be %1): %2 (parsed: %3)") .arg(requiredJavaMajorVersion) .arg(stdOut) From 5920d9cb9eb86e4a35ba10e286dd0a1fe3b2476a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 2 May 2024 08:12:04 +0200 Subject: [PATCH 17/27] Python: remove rope_completion language server setting Rope is not part of the default installation of the python-lsp-server pypi package and enabling it by default results in an error at startup. Fixes: QTCREATORBUG-30757 Change-Id: I975ac98d9f4c5b25f5be085461e5b626d3a93fbc Reviewed-by: Christian Stenger --- src/plugins/python/pythonsettings.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/python/pythonsettings.cpp b/src/plugins/python/pythonsettings.cpp index 98020fc7bcf..29bb5d728f3 100644 --- a/src/plugins/python/pythonsettings.cpp +++ b/src/plugins/python/pythonsettings.cpp @@ -404,7 +404,6 @@ static const QStringList &plugins() "pydocstyle", "pyflakes", "pylint", - "rope_completion", "yapf"}; return plugins; } @@ -610,7 +609,6 @@ static QString defaultPylsConfiguration() plugins.insert("pydocstyle", disabled); plugins.insert("pyflakes", enabled); plugins.insert("pylint", disabled); - plugins.insert("rope_completion", enabled); plugins.insert("yapf", enabled); QJsonObject pylsp; pylsp.insert("plugins", plugins); From 480f5366d281f02e87aadccf3e311a002d31c33d Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 30 Apr 2024 15:08:24 +0200 Subject: [PATCH 18/27] CMakePM: Do not force Kit's Qt version as projects Qt version Amends c6d1c962ee778263c8f17f9aa5b521dbef1fdbc9 Fixes: QTCREATORBUG-30712 Change-Id: I1d78d108a7566f4f59ff0f479eb4b5eddb8a986f Reviewed-by: Christian Stenger --- src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index e6701ea7507..d78e16a961a 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -1354,12 +1354,10 @@ void CMakeBuildSystem::updateProjectData() return QtMajorVersion::None; }; - QtMajorVersion qtVersion = kitInfo.projectPartQtVersion; - if (qtVersion == QtMajorVersion::None) - qtVersion = qtVersionFromCMake({{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}}, - {QtMajorVersion::Qt5, {"Qt5", "Qt5Core"}}, - {QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}} - }); + QtMajorVersion qtVersion = qtVersionFromCMake( + {{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}}, + {QtMajorVersion::Qt5, {"Qt5", "Qt5Core"}}, + {QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}}}); QString errorMessage; RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage); @@ -1368,7 +1366,7 @@ void CMakeBuildSystem::updateProjectData() qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage; for (RawProjectPart &rpp : rpps) { - rpp.setQtVersion(qtVersion); // TODO: Check if project actually uses Qt. + rpp.setQtVersion(qtVersion); const FilePath includeFileBaseDir = buildConfiguration()->buildDirectory(); QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags; QStringList cFlags = rpp.flagsForC.commandLineFlags; From ff6e8656d707c2e2930449a1c42dceed9b48c2ef Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 2 May 2024 12:10:19 +0200 Subject: [PATCH 19/27] Add change log for 13.0.1 Change-Id: I7f6dd377ebcae45bf3acd526daa5f3981df1a981 Reviewed-by: Leena Miettinen --- dist/changelog/changes-13.0.1.md | 131 +++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 dist/changelog/changes-13.0.1.md diff --git a/dist/changelog/changes-13.0.1.md b/dist/changelog/changes-13.0.1.md new file mode 100644 index 00000000000..d13fa8475ef --- /dev/null +++ b/dist/changelog/changes-13.0.1.md @@ -0,0 +1,131 @@ +Qt Creator 13.0.1 +================= + +Qt Creator version 13.0.1 contains bug fixes. + +The most important changes are listed in this document. For a complete list of +changes, see the Git log for the Qt Creator sources that you can check out from +the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v13.0.0..v13.0.1 + +General +------- + +* Fixed a crash when hiding tool tips + ([QTCREATORBUG-30738](https://bugreports.qt.io/browse/QTCREATORBUG-30738)) + +Help +---- + +* Examples Browser + * Fixed that two columns were shown for the wrong category + ([QTCREATORBUG-30634](https://bugreports.qt.io/browse/QTCREATORBUG-30634)) + * Fixed that the clear button was missing after typing in the filter input + +* Fixed links to QML properties + ([QTCREATORBUG-30625](https://bugreports.qt.io/browse/QTCREATORBUG-30625)) + +Editing +------- + +* Fixed that backspace could delete more than one whitespace in the middle of a line + ([QTCREATORBUG-30725](https://bugreports.qt.io/browse/QTCREATORBUG-30725)) + +### C++ + +* Fixed that completion was shown for number literals + ([QTCREATORBUG-30607](https://bugreports.qt.io/browse/QTCREATORBUG-30607)) +* Fixed that Flex and Bison files were opened in the C++ editor + ([QTCREATORBUG-30686](https://bugreports.qt.io/browse/QTCREATORBUG-30686)) + +### QML + +* Fixed a crash when creating a `Qt Quick Application` when the QML language server is enabled + ([QTCREATORBUG-30739](https://bugreports.qt.io/browse/QTCREATORBUG-30739)) + +### Models + +* Fixed a crash when selecting elements + ([QTCREATORBUG-30413](https://bugreports.qt.io/browse/QTCREATORBUG-30413)) + +Projects +-------- + +* Fixed that the text editor for environment changes showed a blinking cursor even when not focused + ([QTCREATORBUG-30640](https://bugreports.qt.io/browse/QTCREATORBUG-30640)) +* Fixed that the option `Start build processes with low priority` did not persist + ([QTCREATORBUG-30696](https://bugreports.qt.io/browse/QTCREATORBUG-30696)) + +### CMake + +* Fixed that `Add build library search path to PATH` missed paths to libraries that were built by + the project + ([QTCREATORBUG-30644](https://bugreports.qt.io/browse/QTCREATORBUG-30644)) +* Fixed the handling of `source_group` + ([QTCREATORBUG-30602](https://bugreports.qt.io/browse/QTCREATORBUG-30602), + [QTCREATORBUG-30620](https://bugreports.qt.io/browse/QTCREATORBUG-30620)) +* Fixed that renaming files did not adapt `set_source_file_properties` calls + ([QTCREATORBUG-30174](https://bugreports.qt.io/browse/QTCREATORBUG-30174)) +* Fixed a crash when combining presets + ([QTCREATORBUG-30755](https://bugreports.qt.io/browse/QTCREATORBUG-30755)) + +Debugging +--------- + +* Fixed a crash when enabling QML debugging + ([QTCREATORBUG-30706](https://bugreports.qt.io/browse/QTCREATORBUG-30706)) +* LLDB + * Fixed that `Additional Attach Commands` were not used + +Analyzer +-------- + +### Clang + +* Fixed the documentation link for `clang-tidy` checks + ([QTCREATORBUG-30658](https://bugreports.qt.io/browse/QTCREATORBUG-30658)) + +Terminal +-------- + +* Fixed the `TERM` environment variable, which broke the functioning of certain command line tools + ([QTCREATORBUG-30737](https://bugreports.qt.io/browse/QTCREATORBUG-30737)) + +Platforms +--------- + +### Android + +* Updated the command line tools that are installed with `Set Up SDK` +* Fixed that Qt ABI detection was wrong directly after `Set Up SDK` + ([QTCREATORBUG-30568](https://bugreports.qt.io/browse/QTCREATORBUG-30568)) + +### iOS + +* Fixed a crash when starting multiple applications in Simulators + ([QTCREATORBUG-30666](https://bugreports.qt.io/browse/QTCREATORBUG-30666)) + +### Remote Linux + +* Fixed that deployment could block Qt Creator until finished +* Fixed that it was not possible to change the device name + ([QTCREATORBUG-30622](https://bugreports.qt.io/browse/QTCREATORBUG-30622)) + +Credits for these changes go to: +-------------------------------- +Ahmad Samir +Alessandro Portale +BogDan Vatra +Christian Kandeler +Christian Stenger +Cristian Adam +David Faure +David Schulz +Eike Ziller +Jaroslaw Kobus +Jussi Witick +Leena Miettinen +Marcus Tillmanns +Robert Löhning From 2c4b7fa02a822754049610781a8137ddb650b830 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 30 Apr 2024 18:05:17 +0200 Subject: [PATCH 20/27] Core: Use Windows API to create path to explorer.exe Searching after "explorer.exe" in PATH can fail, as seen in a report on #qtcreator channel on Discord. Explorer.exe is always part of %systemroot%, which can be programatically obtained via SHGetFolderPath function. Fixes: QTCREATORBUG-30765 Change-Id: Id2c4f3bd9c51234cb9e16d936202dfbcb1975606 Reviewed-by: Alessandro Portale Reviewed-by: David Schulz --- src/plugins/coreplugin/fileutils.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/plugins/coreplugin/fileutils.cpp b/src/plugins/coreplugin/fileutils.cpp index e432543604f..c066e977d31 100644 --- a/src/plugins/coreplugin/fileutils.cpp +++ b/src/plugins/coreplugin/fileutils.cpp @@ -32,10 +32,28 @@ #include #include +#ifdef Q_OS_WIN +#ifdef QTCREATOR_PCH_H +#define CALLBACK WINAPI +#endif +#include +#include +#endif + using namespace Utils; namespace Core { +static FilePath windowsDirectory() +{ +#ifdef Q_OS_WIN + wchar_t str[UNICODE_STRING_MAX_CHARS] = {}; + if (SUCCEEDED(SHGetFolderPath(nullptr, CSIDL_WINDOWS, nullptr, 0, str))) + return FilePath::fromUserInput(QString::fromUtf16(reinterpret_cast(str))); +#endif + return {}; +} + // Show error with option to open settings. static void showGraphicalShellError(QWidget *parent, const QString &app, const QString &error) { @@ -56,13 +74,7 @@ void FileUtils::showInGraphicalShell(QWidget *parent, const FilePath &pathIn) const QFileInfo fileInfo = pathIn.toFileInfo(); // Mac, Windows support folder or file. if (HostOsInfo::isWindowsHost()) { - const FilePath explorer = FilePath("explorer.exe").searchInPath(); - if (explorer.isEmpty()) { - QMessageBox::warning(parent, - Tr::tr("Launching Windows Explorer Failed"), - Tr::tr("Could not find explorer.exe in path to launch Windows Explorer.")); - return; - } + const FilePath explorer = windowsDirectory().pathAppended("explorer.exe"); QStringList param; if (!pathIn.isDir()) param += QLatin1String("/select,"); From 67ab041903bead454187b75e6ee5621f4854e0cb Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 19 Apr 2024 20:45:18 +0200 Subject: [PATCH 21/27] Android: Disable "Make [NDK] default" button while NDKs list is empty When pressing the "Make [NDK] Default" button while the list is empty leads to a crash. The button should actually not be enabled if the list is empty. This change disables the button while the NDKs list is empty. Fixes: QTCREATORBUG-30716 Change-Id: I5f10fd180f62d20210f1b0c0261e4d821d0582dd Reviewed-by: Reviewed-by: Jarek Kobus --- src/plugins/android/androidsettingswidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index 86034b9373e..80821867d4e 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -813,6 +813,7 @@ void AndroidSettingsWidget::updateUI() } } + m_makeDefaultNdkButton->setEnabled(m_ndkListWidget->count() > 0); m_makeDefaultNdkButton->setText(isDefaultNdkSelected() ? Tr::tr("Unset Default") : Tr::tr("Make Default")); } From d3fb3a163c97dfa3a2c9b41dbdd0307522968628 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 29 Apr 2024 18:46:04 +0200 Subject: [PATCH 22/27] Debugger: Ignore stops in libart.so and other Android runtime specific places From https://issuetracker.google.com/issues/240007217#comment17 "Some a background on the technical aspect of SEGVs: Android Runtime (ART) uses SEGV for various internal purposes (it triggers a SEGV and handles it without crashing the app, the app doesn't know it happened). When the native debugger is connected, the debugger must intercept all SEGV signals. When running the debugger on Android API level 27 and newer, we make the debugger skip these SEGV signals (i.e., forward them to be handled by ART), because we know how to handle real SEGV signals inside ART. For older Android versions (26 or older), we did not have this support, so the debugger stops at every SEGV (i.e., it cannot know if the signal is a real crash or an ART-internal thing)." Arguably, this should be caught by the LLDB Android platform bits, but... Task-number: QTCREATORBUG-30759 Task-number: QTCREATORBUG-29928 Task-number: QTCREATORBUG-30080 Change-Id: I8cabe4a0675c596a9617520aff0d62ad11321f0e Reviewed-by: Reviewed-by: Cristian Adam Reviewed-by: Alessandro Portale --- share/qtcreator/debugger/lldbbridge.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 7809a6a3dcb..f2387ac913c 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -1456,6 +1456,21 @@ class Dumper(DumperBase): if bp is not None: self.reportBreakpointUpdate(bp) + def wantAutoContinue(self, frame): + if self.platform_ != 'remote-android': + return False + funcname = frame.GetFunctionName() + if funcname and funcname.startswith('java.'): + return True + module = frame.GetModule() + filespec = module.GetPlatformFileSpec() # Not GetFileSpec + filename = filespec.GetFilename() + if filename == 'libart.so': + return True + if funcname == None and not frame.line_entry.file.IsValid() and filename == None: + return True + return False + def handleEvent(self, event): if lldb.SBBreakpoint.EventIsBreakpointEvent(event): self.handleBreakpointEvent(event) @@ -1490,8 +1505,12 @@ class Dumper(DumperBase): if state == lldb.eStateStopped: stoppedThread = self.firstStoppedThread() if stoppedThread: - #self.report("STOPPED THREAD: %s" % stoppedThread) frame = stoppedThread.GetFrameAtIndex(0) + if self.wantAutoContinue(frame): + #self.warn("AUTO CONTINUE") + error = self.process.Continue() + return + #self.report("FRAME: %s" % frame) function = frame.GetFunction() functionName = function.GetName() From a0b19d9fba713232527d84a7c124e335f567678f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 11 Apr 2024 17:11:56 +0200 Subject: [PATCH 23/27] Welcome: Restore legibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After the release of Qt Creator 13.0.0, a couple of bug reports and comments regarding reduced legibility appeared. They boil down to: 1) Text appears blurry 2) Text is too small 3) Text contrast is too low This change fixes the blurryness by setting less custom font weights for non-HighDpi systems in StyleHelper::uiFont(). Bigger texts are used for the "Session" and "Recent Project" delegates. The text contrast is being increased by making Token_Text_Accent darker for light themes and brighter for dark themes. Token_Background_Muted, which is used as background color is made a bit brighter for light themes. Fixes: QTCREATORBUG-30579 Fixes: QTCREATORBUG-30637 Fixes: QTCREATORBUG-30650 Change-Id: I8eeb9db6854a19b0de0bcee14b10e2ef66234e06 Reviewed-by: André Hartmann Reviewed-by: hjk --- share/qtcreator/themes/dark.figmatokens | 8 +- share/qtcreator/themes/light.figmatokens | 9 +- src/libs/utils/stylehelper.cpp | 8 +- .../projectexplorer/projectwelcomepage.cpp | 109 +++++++++--------- 4 files changed, 75 insertions(+), 59 deletions(-) diff --git a/share/qtcreator/themes/dark.figmatokens b/share/qtcreator/themes/dark.figmatokens index 8937a3cc2d7..194ce7fab25 100644 --- a/share/qtcreator/themes/dark.figmatokens +++ b/share/qtcreator/themes/dark.figmatokens @@ -20,7 +20,13 @@ Token_Foreground_Subtle=ff2A2A2A Token_Text_Default=ffF8F8F8 Token_Text_Muted=ffAEAEAE Token_Text_Subtle=ff595959 -Token_Text_Accent=ff23B26A + +; Token_Text_Accent value from Figma is still too dark. Therefore, it is modified, here. +; Text (consisting of thin lines) needs to be substantially brighter than accent colors used for +; larger-area elements like the filled button. + +; Token_Text_Accent=ff23B26A +Token_Text_Accent=ff30C06A Token_Stroke_Strong=ffeeeeee Token_Stroke_Muted=ff727272 diff --git a/share/qtcreator/themes/light.figmatokens b/share/qtcreator/themes/light.figmatokens index 6ef243d17da..138ad74afdf 100644 --- a/share/qtcreator/themes/light.figmatokens +++ b/share/qtcreator/themes/light.figmatokens @@ -10,7 +10,12 @@ Token_Accent_Muted=ff1f9b5d Token_Accent_Subtle=ff1a8550 Token_Background_Default=fffcfcfc -Token_Background_Muted=ffF2F2F2 + +; Token_Background_Muted value from Figma is too dark to ensure proper contrast when used as +; text bachground. Therefore, it is modified, here. + +;Token_Background_Muted=ffF2F2F2 +Token_Background_Muted=ffF6F6F6 Token_Background_Subtle=ffe7e7e7 Token_Foreground_Default=ffD8D8D8 @@ -20,7 +25,7 @@ Token_Foreground_Subtle=ffEFEFEF Token_Text_Default=ff393939 Token_Text_Muted=ff6a6a6a Token_Text_Subtle=ffbebebe -Token_Text_Accent=ff28C878 +Token_Text_Accent=ff1F9B5D Token_Stroke_Strong=ff464646 Token_Stroke_Muted=ff727272 diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp index 69b5e395565..07f526a4af0 100644 --- a/src/libs/utils/stylehelper.cpp +++ b/src/libs/utils/stylehelper.cpp @@ -1010,7 +1010,13 @@ QFont StyleHelper::uiFont(UiElement element) const qreal qrealPointSize = metrics.pixelSize * pixelsToPointSizeFactor; font.setPointSizeF(qrealPointSize); - font.setWeight(metrics.weight); + // Intermediate font weights can produce blurry rendering and are harder to read. + // For "non-retina" screens, apply the weight only for some fonts. + static const bool isHighDpi = qApp->devicePixelRatio() >= 2; + const bool setWeight = isHighDpi || element == UiElementCaptionStrong + || element <= UiElementH4; + if (setWeight) + font.setWeight(metrics.weight); return font; } diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp index 29742256443..4928ae826e0 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.cpp +++ b/src/plugins/projectexplorer/projectwelcomepage.cpp @@ -47,10 +47,9 @@ const char PROJECT_BASE_ID[] = "Welcome.OpenRecentProject"; namespace ProjectExplorer { namespace Internal { -constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH6}; -constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementCaptionStrong}; -constexpr TextFormat sessionNameTF = {projectNameTF.themeColor, projectNameTF.uiElement, - Qt::AlignVCenter | Qt::TextDontClip}; +constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH5}; +constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementH6}; +constexpr TextFormat sessionNameTF = projectNameTF; constexpr TextFormat sessionProjectNameTF {Theme::Token_Text_Default, projectNameTF.uiElement}; constexpr TextFormat shortcutNumberTF {Theme::Token_Text_Default, StyleHelper::UiElementCaptionStrong, @@ -59,7 +58,7 @@ constexpr TextFormat actionTF {Theme::Token_Text_Default, StyleHelper::UiElement Qt::AlignCenter | Qt::TextDontClip}; constexpr TextFormat actionDisabledTF {Theme::Token_Text_Subtle, actionTF.uiElement, actionTF.drawTextFlags}; -constexpr int shortcutNumberWidth = 16; +constexpr int shortcutNumberWidth = 6; constexpr int actionSepWidth = 1; constexpr int sessionScrollBarGap = HPaddingXs; @@ -316,36 +315,36 @@ public: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const final { - // visible on withIcon() Gap + arrow visible on hover Extra margin right of project item - // | | | - // +-----------+----------+ +--------+-------+ +----------+----------+ - // | | | | | | + // visible on withIcon() Gap + arrow visible on hover Extra margin right of project item + // | | | + // +----------+----------+ +--------+-------+ +----------+----------+ + // | | | | | | // - // +------------+--------+---------+------------+---------+-------------+--------+-------+------------+---------------------+ --+ - // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | | - // | | | +------------+ +-------------+ | | | | | - // |(HPaddingXs)||(HGapXxs)| |(HGapXxs)||(HGapXs)|| | | +-- Header - // | |(16x16) | +------------+ +-------------+ | | | | | - // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | | - // |------------+--------+---------+------------+---------+-------------+--------+-------+ | | --+ - // | +-- | (VPaddingXxs) | | | | - // | | +------------------------------+(HPaddingXs)| | | - // | | | | | | | - // | | +------------------------------+ | | | - // | Per project in session --+ | (ExPaddingGapS) | |(sessionScrollBarGap)| | - // | | +------------------------------+ | | | - // | | | | | | | - // | | +------------------------------+ | | +-- Expansion - // | +-- | (VPaddingXxs) | | | | - // +------------------------------------------------------+------------------------------+------------+ | | - // | (VPaddingXs) | | | - // +-----------------------------------------+--------------+-----------------------------------------+ | | - // +-- | || | | | - // | +-----------------------------------------+--------------+-----------------------------------------+ | | - // | | (VPaddingXs) | | | - // | +--------------------------------------------------------------------------------------------------+---------------------+ --+ - // | | (VGapL) | +-- Gap between session items - // | +------------------------------------------------------------------------------------------------------------------------+ --+ + // +------------+--------+--------+------------+--------+-------------+--------+-------+------------+---------------------+ --+ + // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | | + // | | | +------------+ +-------------+ | | | | | + // |(HPaddingXs)||(HGapXs)| |(HGapXs)||(HGapXs)|| | | +-- Header + // | |(w:6) | +------------+ +-------------+ | | | | | + // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | | + // |------------+--------+--------+------------+--------+-------------+--------+-------+ | | --+ + // | +-- | (VPaddingXxs) | | | | + // | | +------------------------------+(HPaddingXs)| | | + // | | | | | | | + // | | +------------------------------+ | | | + // | Per project in session --+ | (ExPaddingGapS) | |(sessionScrollBarGap)| | + // | | +------------------------------+ | | | + // | | | | | | | + // | | +------------------------------+ | | +-- Expansion + // | +-- | (VPaddingXxs) | | | | + // +----------------------------------------------------+------------------------------+------------+ | | + // | (VPaddingXs) | | | + // +---------------------------------------+--------------+-----------------------------------------+ | | + // +-- | || | | | + // | +---------------------------------------+--------------+-----------------------------------------+ | | + // | | (VPaddingXs) | | | + // | +------------------------------------------------------------------------------------------------+---------------------+ --+ + // | | (VGapL) | +-- Gap between session items + // | +----------------------------------------------------------------------------------------------------------------------+ --+ // | // \ session action "buttons" and dividers // +-----------------------------------------------+--------+---------+--------+ @@ -381,11 +380,11 @@ public: const int y = bgR.y(); const int numberX = x + s(HPaddingXs); - const int iconX = numberX + shortcutNumberWidth + s(HGapXxs); + const int iconX = numberX + shortcutNumberWidth + s(HGapXs); const int arrowX = bgR.right() - s(HPaddingXs) - arrowS.width(); const QRect arrowHoverR(arrowX - s(HGapXs) + 1, y, s(HGapXs) + arrowS.width() + s(HPaddingXs), hdR.height()); - const int textX = withIcon() ? iconX + iconS.width() + s(HGapXxs) : iconX; + const int textX = withIcon() ? iconX + iconS.width() + s(HGapXs) : iconX; const int iconY = y + (hdR.height() - iconS.height()) / 2; const int arrowY = y + (hdR.height() - arrowS.height()) / 2; @@ -622,24 +621,24 @@ class ProjectDelegate : public BaseDelegate public: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const final { - // visible on with Icon() Extra margin right of project item - // | | - // +--------+-------+ +------+-----+ - // | | | | + // visible on with Icon() Extra margin right of project item + // | | + // +--------+-------+ +------+-----+ + // | | | | // - // +------------+--------+---------+------+---------+-------------+------------+------------+ - // | | | | | | (VPaddingXs)| | | - // | | | | | +-------------+ | | - // | | | | | || | | - // | | | | | +-------------+ | | - // |(HPaddingXs)||(HGapXxs)||(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)| - // | |(16x16) | | | +-------------+ | | - // | | | | | || | | - // | | | | | +-------------+ | | - // | | | | | | (VPaddingXs)| | | - // +------------+--------+---------+------+---------+-------------+------------+------------+ --+ - // | (VGapL) | +-- Gap between project items - // +----------------------------------------------------------------------------------------+ --+ + // +------------+--------+--------+------+---------+-------------+------------+------------+ + // | | | | | | (VPaddingXs)| | | + // | | | | | +-------------+ | | + // | | | | | || | | + // | | | | | +-------------+ | | + // |(HPaddingXs)||(HGapXs)||(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)| + // | |(w:6) | | | +-------------+ | | + // | | | | | || | | + // | | | | | +-------------+ | | + // | | | | | | (VPaddingXs)| | | + // +------------+--------+--------+------+---------+-------------+------------+------------+ --+ + // | (VGapL) | +-- Gap between project items + // +---------------------------------------------------------------------------------------+ --+ const bool hovered = option.widget->isActiveWindow() && option.state & QStyle::State_MouseOver; @@ -651,9 +650,9 @@ public: const int x = bgR.x(); const int numberX = x + s(HPaddingXs); - const int iconX = numberX + shortcutNumberWidth + s(HGapXxs); + const int iconX = numberX + shortcutNumberWidth + s(HGapXs); const int iconWidth = iconS.width(); - const int textX = withIcon() ? iconX + iconWidth + s(HGapXxs) : iconX; + const int textX = withIcon() ? iconX + iconWidth + s(HGapXs) : iconX; const int textWidth = bgR.width() - s(HPaddingXs) - textX; const int y = bgR.y(); From cc9ffdb685119a7c11248f08cf88308927252b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Sch=C3=A4pers?= Date: Tue, 30 Apr 2024 16:06:28 +0200 Subject: [PATCH 24/27] ClangFormat: Fix compiliation with LLVM19 Change-Id: I4b166da2e477ffd101a5c4b9aa07c710f7698da9 Reviewed-by: Christian Kandeler --- src/plugins/clangformat/clangformatbaseindenter.cpp | 4 ++++ src/plugins/clangformat/llvmfilesystem.h | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp index 1d5dc2730c3..b491bd293f1 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.cpp +++ b/src/plugins/clangformat/clangformatbaseindenter.cpp @@ -65,7 +65,11 @@ static void adjustFormatStyleForLineBreak(clang::format::FormatStyle &style, static llvm::StringRef clearExtraNewline(llvm::StringRef text) { +#if LLVM_VERSION_MAJOR >= 16 + while (text.starts_with("\n\n")) +#else while (text.startswith("\n\n")) +#endif text = text.drop_front(); return text; } diff --git a/src/plugins/clangformat/llvmfilesystem.h b/src/plugins/clangformat/llvmfilesystem.h index fface01fc08..b2d1c5de7e7 100644 --- a/src/plugins/clangformat/llvmfilesystem.h +++ b/src/plugins/clangformat/llvmfilesystem.h @@ -127,7 +127,11 @@ public: /// Gets real path of \p Path e.g. collapse all . and .. patterns, resolve /// symlinks. For real file system, this uses `llvm::sys::fs::real_path`. /// This returns errc::operation_not_permitted if not implemented by subclass. - std::error_code getRealPath(const Twine &Path, SmallVectorImpl &Output) const override + std::error_code getRealPath(const Twine &Path, SmallVectorImpl &Output) +#if LLVM_VERSION_MAJOR < 19 + const +#endif + override { Q_UNUSED(Path); Q_UNUSED(Output); From b0009782787ebc316a62f1aa0cb48e2eb6f42baa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Fri, 12 Apr 2024 22:16:29 +0200 Subject: [PATCH 25/27] SquishTests: Remove dead code The Qt Quick Application template doesn't allow changing the build system. skipBuildsystemChooser is True above. Change-Id: I413fa6c3b4d97e1f1212dbab96d2a39458ce3751 Reviewed-by: Christian Stenger Reviewed-by: --- tests/system/suite_general/tst_create_proj_wizard/test.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/system/suite_general/tst_create_proj_wizard/test.py b/tests/system/suite_general/tst_create_proj_wizard/test.py index 78178d82bb8..176b606b8bf 100644 --- a/tests/system/suite_general/tst_create_proj_wizard/test.py +++ b/tests/system/suite_general/tst_create_proj_wizard/test.py @@ -113,10 +113,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms, return fixedBuildSystems = list(availableBuildSystems) - if template == 'Qt Quick Application': - fixedBuildSystems.remove('qmake') - test.log("Skipped qmake (not supported).") - elif template == 'Qt Quick 2 Extension Plugin': + if template == 'Qt Quick 2 Extension Plugin': fixedBuildSystems.remove('Qbs') test.log("Skipped Qbs (not supported).") @@ -126,7 +123,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms, clickButton(waitForObject(":Next_QPushButton")) if specialHandlingFunc: specialHandlingFunc(displayedPlatforms, *args) - if not ('Plain C' in template or template == 'Qt Quick Application'): + if not ('Plain C' in template): __createProjectHandleTranslationSelection__() verifyKitCheckboxes(kits, displayedPlatforms) safeClickButton("Cancel") From 732f37685ced250e35ca10ed9a4679c963f293d1 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 3 May 2024 15:36:41 +0200 Subject: [PATCH 26/27] Update qbs submodule to HEAD of 2.3 branch Change-Id: Ib3182e394222e4323982983b557cabbc60e1c0d8 Reviewed-by: Christian Stenger --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 12bc60c93d6..488fbe40e86 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 12bc60c93d684432af1b28576f21f853b8922d99 +Subproject commit 488fbe40e86602d06e568a1749277387fd4a565e From 7eb09ff0b7195665b8de193d200b0ca2ea21b7bf Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 7 May 2024 13:50:56 +0200 Subject: [PATCH 27/27] Editors: Update navigation history when closing with the tool button The code path for the global actions (File menu, shortcut) were adding the closed document to the history, but the editor view local action did not. Move the call one level deeper, so it is done for both. That fixes Window > Go Back under some circumstances in which it didn't open closed files again. Change-Id: I74bdb02209b8ac7bb7714d9a827e3a0c30a4c9e9 Reviewed-by: Marcus Tillmanns --- src/plugins/coreplugin/editormanager/editormanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 6ec37a6cb8c..bd9b2620670 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1473,6 +1473,7 @@ bool EditorManagerPrivate::activateEditorForEntry(EditorView *view, DocumentMode void EditorManagerPrivate::closeEditorOrDocument(IEditor *editor) { QTC_ASSERT(editor, return); + EditorManager::addCurrentPositionToNavigationHistory(); QList visible = EditorManager::visibleEditors(); if (Utils::contains(visible, [&editor](IEditor *other) { @@ -2690,7 +2691,6 @@ void EditorManager::slotCloseCurrentEditorOrDocument() { if (!d->m_currentEditor) return; - addCurrentPositionToNavigationHistory(); d->closeEditorOrDocument(d->m_currentEditor); }