From a8b689ae9b6c68d52f17343792bc649af068ca52 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 29 Feb 2024 12:19:54 +0100 Subject: [PATCH 01/56] Debugger: Fix register display for LLDB and CDB Change-Id: Ia157c0c03168e91b11d837d6355e61e10afd9728 Reviewed-by: Christian Stenger Reviewed-by: Reviewed-by: David Schulz --- src/plugins/debugger/gdb/gdbengine.cpp | 2 +- src/plugins/debugger/registerhandler.cpp | 3 ++- src/plugins/debugger/registerhandler.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 9efc98f24c3..3964589ef52 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3432,7 +3432,7 @@ void GdbEngine::handleRegisterListing(const DebuggerResponse &response) reg.name = parts.at(0); reg.size = parts.at(4).toInt(); reg.reportedType = parts.at(5); - reg.groups = Utils::toSet(parts.at(6).split(',')); + reg.groups = parts.at(6).split(','); m_registers[gdbRegisterNumber] = reg; } } diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp index 64f82052bf6..348888f29b8 100644 --- a/src/plugins/debugger/registerhandler.cpp +++ b/src/plugins/debugger/registerhandler.cpp @@ -676,7 +676,8 @@ void RegisterHandler::updateRegister(const Register &r) { bool sort = false; bool changed = false; - for (const QString &group : r.groups) { + const QStringList groups = r.groups.isEmpty() ? QStringList{"all"} : r.groups; + for (const QString &group : groups) { RegisterGroup *regGr = m_registerGroups.value(group, nullptr); if (!regGr) { sort = true; diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h index 0640a42bdcb..8a02fd2eaa1 100644 --- a/src/plugins/debugger/registerhandler.h +++ b/src/plugins/debugger/registerhandler.h @@ -72,7 +72,7 @@ public: RegisterValue value; RegisterValue previousValue; QString description; - QSet groups; + QStringList groups; int size = 0; RegisterKind kind = UnknownRegister; }; From 63a88562510cf38b967261d83da022bdb278cdc1 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 29 Feb 2024 12:51:14 +0100 Subject: [PATCH 02/56] ClangFormat: Do not show floating widget The widget is visible by default and will be shown when it gets added to its parent widget. This patch avoids a short popup of the widget which is not added to its parent when opening the C++ settings. Amends e1f7469afb32efa51d665c9211767b214cd93573. Change-Id: I7fd40e1fff4872c725ec84b5d1c1e60d6b2b22ce Reviewed-by: Artem Sokolovskii --- src/plugins/clangformat/clangformatconfigwidget.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index 98de3370228..99b8302d369 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -227,8 +227,6 @@ void ClangFormatConfigWidget::initEditor(TextEditor::ICodeStylePreferences *code QShortcut *saveSC = new QShortcut(QKeySequence("Ctrl+S"), this); connect(saveSC, &QShortcut::activated, this, [this] { apply(); }); - - m_editorScrollArea->show(); } void ClangFormatConfigWidget::initPreview(TextEditor::ICodeStylePreferences *codeStyle) From cc763c80d784e530cda6d767a1d4e35d8716c607 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 29 Feb 2024 13:41:45 +0100 Subject: [PATCH 03/56] ClangCodeModel: Improve debug output for semantic highlighting Previously, the final highlighting results we showed were incomplete and out of order. Change-Id: If18062cc5a7f3156d6bb0b282aed33906cdef910 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdsemantichighlighting.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp b/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp index dd63565bd56..c5bc3d72354 100644 --- a/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp +++ b/src/plugins/clangcodemodel/clangdsemantichighlighting.cpp @@ -386,8 +386,6 @@ void doSemanticHighlighting( } if (isOutputParameter(token)) styles.mixinStyles.push_back(C_OUTPUT_ARGUMENT); - qCDebug(clangdLogHighlight) << "adding highlighting result" - << token.line << token.column << token.length << int(styles.mainStyle); return HighlightingResult(token.line, token.column, token.length, styles); }; @@ -420,6 +418,8 @@ void doSemanticHighlighting( } QList virtualRanges; for (const HighlightingResult &r : results) { + qCDebug(clangdLogHighlight) + << '\t' << r.line << r.column << r.length << int(r.textStyles.mainStyle); if (r.textStyles.mainStyle != C_VIRTUAL_METHOD) continue; const Position startPos(r.line - 1, r.column - 1); From 38ea6224164887024c96f5f5b6f655fe250ad497 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Thu, 29 Feb 2024 12:35:57 +0100 Subject: [PATCH 04/56] TextEditor: Fix jump to a search result to a folded block Change-Id: Id9963bdf2a02930911753af046443e9b657bc9b9 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index baf027d124d..054e65193f4 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -3552,6 +3552,7 @@ void TextEditorWidget::restoreState(const QByteArray &state) QTC_ASSERT(documentLayout, return); documentLayout->requestUpdate(); documentLayout->emitDocumentSizeChanged(); + d->updateCursorPosition(); } }; if (!singleShotAfterHighlightingDone(foldingRestore)) @@ -6696,6 +6697,9 @@ void TextEditorWidget::ensureBlockIsUnfolded(QTextBlock block) void TextEditorWidgetPrivate::toggleBlockVisible(const QTextBlock &block) { + if (q->singleShotAfterHighlightingDone([this, block] { toggleBlockVisible(block); })) + return; + auto documentLayout = qobject_cast(q->document()->documentLayout()); QTC_ASSERT(documentLayout, return); From 251a8a22102501097c54a7cf527b2950fd27cf7c Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 29 Feb 2024 13:58:31 +0100 Subject: [PATCH 05/56] Utils: Display error message boxes on missing dlls This used to work in previou Qt Creator versions. Task-number: QTCREATORBUG-29662 Change-Id: I97b0b15edbc39c2d6c11bb7d71cacd7e006a26f5 Reviewed-by: Marcus Tillmanns --- src/libs/utils/processhelper.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/processhelper.cpp b/src/libs/utils/processhelper.cpp index 2ca23fe138d..6045b77bec1 100644 --- a/src/libs/utils/processhelper.cpp +++ b/src/libs/utils/processhelper.cpp @@ -59,9 +59,6 @@ void ProcessStartHandler::setWindowsSpecificStartupFlags(bool belowNormalPriorit bool createConsoleWindow) { #ifdef Q_OS_WIN - if (!belowNormalPriority && !createConsoleWindow) - return; - m_process->setCreateProcessArgumentsModifier( [belowNormalPriority, createConsoleWindow](QProcess::CreateProcessArguments *args) { if (createConsoleWindow) { @@ -71,6 +68,8 @@ void ProcessStartHandler::setWindowsSpecificStartupFlags(bool belowNormalPriorit if (belowNormalPriority) args->flags |= BELOW_NORMAL_PRIORITY_CLASS; + + args->flags |= CREATE_DEFAULT_ERROR_MODE; }); #else // Q_OS_WIN Q_UNUSED(belowNormalPriority) From 02bac284885be6760102f92ba3eadb0bd9354d24 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 29 Feb 2024 14:34:26 +0100 Subject: [PATCH 06/56] TextEditor: add mime type for device tree source files Fixes: QTCREATORBUG-19029 Change-Id: I1959681cb7e0f9466cea3344836d7029a98b4548 Reviewed-by: Eike Ziller --- src/plugins/texteditor/TextEditor.json.in | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/TextEditor.json.in b/src/plugins/texteditor/TextEditor.json.in index 5fbf3e3067b..447d9c91c67 100644 --- a/src/plugins/texteditor/TextEditor.json.in +++ b/src/plugins/texteditor/TextEditor.json.in @@ -15,5 +15,15 @@ "Category" : "Core", "Description" : "Text editor framework and the implementation of the basic text editor.", "Url" : "http://www.qt.io", - ${IDE_PLUGIN_DEPENDENCIES} + ${IDE_PLUGIN_DEPENDENCIES}, + "Mimetypes" : [ + "", + "", + " ", + " Device tree source files", + " ", + " ", + " ", + "" + ] } From e7468d060c854eae241f6cb18c81c7f679ff36ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Wed, 28 Feb 2024 10:57:12 +0100 Subject: [PATCH 07/56] Mention installer issue in changelog Users should know before downloading. Might also avoid some duplicate bugreports. Change-Id: Ib2d5964fcbb314d7b1c25a281bf5c255a47b3e86 Reviewed-by: Eike Ziller Reviewed-by: Leena Miettinen --- dist/changelog/changes-13.0.0.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dist/changelog/changes-13.0.0.md b/dist/changelog/changes-13.0.0.md index 6ca281668ff..82530d29768 100644 --- a/dist/changelog/changes-13.0.0.md +++ b/dist/changelog/changes-13.0.0.md @@ -41,6 +41,10 @@ General ([QTCREATORBUG-29886](https://bugreports.qt.io/browse/QTCREATORBUG-29886)) * Fixed issues with the window actions ([QTCREATORBUG-30381](https://bugreports.qt.io/browse/QTCREATORBUG-30381)) +* Known Issues + * Installers provided by The Qt Company mostly display English text, not + the system's language + ([QTIFW-3310](https://bugreports.qt.io/browse/QTIFW-3310)) Editing ------- From 87f2e9e190ee0df75ff2f9a16b694c152823f6d9 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 23 Feb 2024 13:04:00 +0100 Subject: [PATCH 08/56] Doc: Describe launching the debugger from the locator The "dr" locator filter was added. Task-number: QTCREATORBUG-30209 Change-Id: I25efd162c7adbff90e0c31c0965c30053ea4a64b Reviewed-by: hjk Reviewed-by: Eike Ziller --- .../debugger/creator-only/creator-debugger.qdoc | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc index 914ee674650..34ea75fc528 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc @@ -115,9 +115,17 @@ \title Launching the Debugger - To start an application from an open project under the control of a - debugger, select the \inlineimage icons/qtcreator-debug-button.png - (\uicontrol {Start Debugging of Startup Project}) button or press \key F5. + You can start an application from an open project under the control of a + debugger in the following ways: + + \list + \li Select \inlineimage icons/qtcreator-debug-button.png + (\uicontrol {Start Debugging of Startup Project}). + \li Press \key F5. + \li Enter \c {dr} in the locator, and select the project to debug. + \li Go to \uicontrol Debug > \uicontrol {Start Debugging} > + \uicontrol {Start Debugging of Startup Project}. + \endlist \QC checks whether the compiled application is up-to-date, and rebuilds and deploys it if you set the \uicontrol {Build before deploying} field to From 2e45d1d85ac3a62c44d42e6b1e0b4c1f3b19e2ab Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 28 Feb 2024 17:07:13 +0100 Subject: [PATCH 09/56] CppEditor: Make two test cases ClangFormat-compatible Change-Id: I5e9df40de3e13f0941c0f8c14385de43e828b5d2 Reviewed-by: Reviewed-by: Christian Stenger Reviewed-by: Qt CI Bot --- src/plugins/cppeditor/cppdoxygen_test.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/plugins/cppeditor/cppdoxygen_test.cpp b/src/plugins/cppeditor/cppdoxygen_test.cpp index 2cab76ee493..c1799b3b45f 100644 --- a/src/plugins/cppeditor/cppdoxygen_test.cpp +++ b/src/plugins/cppeditor/cppdoxygen_test.cpp @@ -225,26 +225,30 @@ void DoxygenTest::testBasic_data() /// test cpp style doxygen comment when inside a indented scope QTest::newRow("cpp_styleA_indented") << _( - " bool preventFolding;\n" + "void func() {\n" " ///|\n" " int a;\n" + "}\n" ) << _( - " bool preventFolding;\n" + "void func() {\n" " ///\n" " /// \\brief a\n" " ///\n" - " int a;\n") << int(CommandPrefix::Auto); + " int a;\n" + "}\n") << int(CommandPrefix::Auto); QTest::newRow("cpp_styleB_indented") << _( - " bool preventFolding;\n" + "void func() {\n" " //!|\n" " int a;\n" + "}\n" ) << _( - " bool preventFolding;\n" + "void func() {\n" " //!\n" " //! \\brief a\n" " //!\n" - " int a;\n") << int(CommandPrefix::Auto); + " int a;\n" + "}\n") << int(CommandPrefix::Auto); QTest::newRow("cpp_styleA_indented_preserve_mixed_indention_continuation") << _( "\t bool preventFolding;\n" From 3aa801ca9442167408835364cbb0a759ab0b5ee3 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 28 Feb 2024 17:23:41 +0100 Subject: [PATCH 10/56] CppEditor: Mark two tests as incompatible with ClangFormat Change-Id: I95771a3f7fb78d0b7700dc52fdbe7c1e17d00f74 Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/cppeditor/cppdoxygen_test.cpp | 8 ++++++++ src/plugins/cppeditor/cppquickfix_test.cpp | 8 -------- src/plugins/cppeditor/cpptoolstestcase.cpp | 11 +++++++++++ src/plugins/cppeditor/cpptoolstestcase.h | 2 ++ 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/plugins/cppeditor/cppdoxygen_test.cpp b/src/plugins/cppeditor/cppdoxygen_test.cpp index c1799b3b45f..2d85345303a 100644 --- a/src/plugins/cppeditor/cppdoxygen_test.cpp +++ b/src/plugins/cppeditor/cppdoxygen_test.cpp @@ -495,6 +495,14 @@ void DoxygenTest::runTest(const QByteArray &original, QCoreApplication::sendEvent(testDocument.m_editorWidget, &event); const QByteArray result = testDocument.m_editorWidget->document()->toPlainText().toUtf8(); + if (isClangFormatPresent()) { + QEXPECT_FAIL("noContinuationForExpressionAndComment1", + "ClangFormat indents differently", + Continue); + QEXPECT_FAIL("noContinuationForExpressionAndComment2", + "ClangFormat indents differently", + Continue); + } QCOMPARE(QLatin1String(result), QLatin1String(expected)); testDocument.m_editorWidget->undo(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index dd4817ea0d5..ac9766414d2 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -12,8 +12,6 @@ #include "cppsourceprocessertesthelper.h" #include "cpptoolssettings.h" -#include -#include #include #include @@ -5406,12 +5404,6 @@ void QuickfixTest::testInsertDefsFromDecls() void QuickfixTest::testInsertAndFormatDefsFromDecls() { - static const auto isClangFormatPresent = [] { - using namespace ExtensionSystem; - return Utils::contains(PluginManager::plugins(), [](const PluginSpec *plugin) { - return plugin->name() == "ClangFormat" && plugin->isEffectivelyEnabled(); - }); - }; if (!isClangFormatPresent()) QSKIP("This test reqires ClangFormat"); diff --git a/src/plugins/cppeditor/cpptoolstestcase.cpp b/src/plugins/cppeditor/cpptoolstestcase.cpp index a55895affcf..b0151e7a813 100644 --- a/src/plugins/cppeditor/cpptoolstestcase.cpp +++ b/src/plugins/cppeditor/cpptoolstestcase.cpp @@ -13,6 +13,9 @@ #include +#include +#include + #include #include @@ -39,6 +42,14 @@ using namespace Utils; namespace CppEditor::Internal::Tests { +bool isClangFormatPresent() +{ + using namespace ExtensionSystem; + return Utils::contains(PluginManager::plugins(), [](const PluginSpec *plugin) { + return plugin->name() == "ClangFormat" && plugin->isEffectivelyEnabled(); + }); +}; + CppTestDocument::CppTestDocument(const QByteArray &fileName, const QByteArray &source, char cursorMarker) : m_fileName(QString::fromUtf8(fileName)) diff --git a/src/plugins/cppeditor/cpptoolstestcase.h b/src/plugins/cppeditor/cpptoolstestcase.h index 13548630e65..99969621b3e 100644 --- a/src/plugins/cppeditor/cpptoolstestcase.h +++ b/src/plugins/cppeditor/cpptoolstestcase.h @@ -35,6 +35,8 @@ class CppEditorWidget; namespace Internal::Tests { +bool isClangFormatPresent(); + class CppTestDocument; typedef QSharedPointer TestDocumentPtr; From d6eb041e6dfeb1297c2cf74e7505278921da0973 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 28 Feb 2024 12:49:35 +0100 Subject: [PATCH 11/56] Debugger: Show supported gdb architectures in log ... using a true gem of interface design. Change-Id: I33ee751a0d204ea610d031991f0d472912a065a8 Reviewed-by: Christian Stenger Reviewed-by: --- src/plugins/debugger/gdb/gdbengine.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 3964589ef52..919ee6c7534 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3870,6 +3870,10 @@ void GdbEngine::handleGdbStarted() runCommand({"show version", CB(handleShowVersion)}); runCommand({"show debug-file-directory", CB(handleDebugInfoLocation)}); + // Show supported architectures. + runCommand({"set max-completions 1000"}); // gdb-multiarch needs ~250 + runCommand({"complete set arch "}); // Keep the space! + //runCommand("-enable-timings"); //rurun print static-members off"); // Seemingly doesn't work. //runCommand("set debug infrun 1"); From dfb685d64caedb126cda25a54655bdcb2252b8c2 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 29 Feb 2024 15:54:21 +0100 Subject: [PATCH 12/56] ProjectExplorer: Employ FuzzyMatcher in run config creation dialog ... when filtering the candidates. Change-Id: Ia95475ae3ee2a6eab2c9551ed22f97a9540d3503 Reviewed-by: Marcus Tillmanns --- src/plugins/projectexplorer/addrunconfigdialog.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/addrunconfigdialog.cpp b/src/plugins/projectexplorer/addrunconfigdialog.cpp index 4457bf07003..7cf96920e8b 100644 --- a/src/plugins/projectexplorer/addrunconfigdialog.cpp +++ b/src/plugins/projectexplorer/addrunconfigdialog.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -129,7 +130,7 @@ AddRunConfigDialog::AddRunConfigDialog(Target *target, QWidget *parent) buttonBox->button(QDialogButtonBox::Ok)->setText(Tr::tr("Create")); connect(filterEdit, &FancyLineEdit::textChanged, this, [proxyModel](const QString &text) { - proxyModel->setFilterRegularExpression(QRegularExpression(text, QRegularExpression::CaseInsensitiveOption)); + proxyModel->setFilterRegularExpression(FuzzyMatcher::createRegExp(text)); }); connect(m_view, &TreeView::doubleClicked, this, [this] { accept(); }); const auto updateOkButton = [buttonBox, this] { From 4f30c2b4eda72528c975251de0052104c5c8db66 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 29 Feb 2024 16:02:33 +0100 Subject: [PATCH 13/56] Welcome: Fix the hover background color It used the wrong color token. With the correct one, the hover effect is a bit less prominent. Change-Id: I95a1f5a92f95d4055ae8bce703fdc633b122ac59 Reviewed-by: hjk --- src/plugins/coreplugin/welcomepagehelper.cpp | 13 +++++-------- src/plugins/coreplugin/welcomepagehelper.h | 4 ++++ src/plugins/extensionmanager/extensionsbrowser.cpp | 11 +++++++---- src/plugins/projectexplorer/projectwelcomepage.cpp | 6 ++---- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/plugins/coreplugin/welcomepagehelper.cpp b/src/plugins/coreplugin/welcomepagehelper.cpp index 636888d6b47..c1cf35beb3d 100644 --- a/src/plugins/coreplugin/welcomepagehelper.cpp +++ b/src/plugins/coreplugin/welcomepagehelper.cpp @@ -856,10 +856,8 @@ void ListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti painter->save(); painter->translate(bgRGlobal.topLeft()); - const QColor fill(themeColor(hovered ? Theme::Token_Foreground_Muted - : Theme::Token_Background_Muted)); - const QPen pen(themeColor(hovered ? Theme::Token_Foreground_Muted - : Theme::Token_Stroke_Subtle), itemOutlineWidth); + const QColor fill(themeColor(hovered ? cardHoverBackground : cardDefaultBackground)); + const QPen pen(themeColor(hovered ? cardHoverStroke : cardDefaultStroke), itemOutlineWidth); WelcomePageHelpers::drawCardBackground(painter, bgR, fill, pen, itemCornerRounding); const int shiftY = thumbnailAreaR.bottom(); @@ -915,7 +913,7 @@ void ListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti constexpr int filterMargin = hoverBlurRadius; QImage thumbnail(bgR.size() + QSize(filterMargin, filterMargin) * 2, QImage::Format_ARGB32_Premultiplied); - thumbnail.fill(themeColor(Theme::Token_Foreground_Muted)); + thumbnail.fill(themeColor(cardHoverBackground)); QPainter thumbnailPainter(&thumbnail); thumbnailPainter.translate(filterMargin, filterMargin); thumbnailPainter.fillRect(thumbnailAreaR, @@ -924,8 +922,7 @@ void ListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti thumbnailPainter.setPen(titleTF.color()); drawPixmapOverlay(item, &thumbnailPainter, option, thumbnailAreaR); thumbnailPainter.setOpacity(1.0 - hoverBlurOpacity); - thumbnailPainter.fillRect(thumbnail.rect(), - themeColor(Theme::Token_Foreground_Muted)); + thumbnailPainter.fillRect(thumbnail.rect(), themeColor(cardHoverBackground)); thumbnailPainter.end(); qt_blurImage(thumbnail, hoverBlurRadius, false, false); @@ -944,7 +941,7 @@ void ListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti const QPixmap thumbnailPortionPM = m_blurredThumbnail.copy(backgroundPortionR); painter->drawPixmap(backgroundPortionR.topLeft(), thumbnailPortionPM); } else { - painter->fillRect(thumbnailAreaR, themeColor(Theme::Token_Foreground_Muted)); + painter->fillRect(thumbnailAreaR, themeColor(cardHoverBackground)); } } diff --git a/src/plugins/coreplugin/welcomepagehelper.h b/src/plugins/coreplugin/welcomepagehelper.h index 6856a59a99e..84a6ec358b3 100644 --- a/src/plugins/coreplugin/welcomepagehelper.h +++ b/src/plugins/coreplugin/welcomepagehelper.h @@ -59,6 +59,10 @@ public: CORE_EXPORT void setBackgroundColor(QWidget *widget, Utils::Theme::Color colorRole); constexpr qreal defaultCardBackgroundRounding = 3.75; +constexpr Utils::Theme::Color cardDefaultBackground = Utils::Theme::Token_Background_Muted; +constexpr Utils::Theme::Color cardDefaultStroke = Utils::Theme::Token_Stroke_Subtle; +constexpr Utils::Theme::Color cardHoverBackground = Utils::Theme::Token_Foreground_Subtle; +constexpr Utils::Theme::Color cardHoverStroke = cardHoverBackground; CORE_EXPORT void drawCardBackground(QPainter *painter, const QRectF &rect, const QBrush &fill, const QPen &pen = QPen(Qt::NoPen), qreal rounding = defaultCardBackgroundRounding); diff --git a/src/plugins/extensionmanager/extensionsbrowser.cpp b/src/plugins/extensionmanager/extensionsbrowser.cpp index dba1936d607..d83c1ef3ee2 100644 --- a/src/plugins/extensionmanager/extensionsbrowser.cpp +++ b/src/plugins/extensionmanager/extensionsbrowser.cpp @@ -329,10 +329,13 @@ public: { const bool selected = option.state & QStyle::State_Selected; const bool hovered = option.state & QStyle::State_MouseOver; - const QColor fillColor = creatorTheme()->color(hovered ? Theme::Token_Foreground_Muted - : Theme::Token_Background_Muted); - const QColor strokeColor = creatorTheme()->color(selected ? Theme::Token_Stroke_Strong - : Theme::Token_Stroke_Subtle); + const QColor fillColor = + creatorTheme()->color(hovered ? WelcomePageHelpers::cardHoverBackground + : WelcomePageHelpers::cardDefaultBackground); + const QColor strokeColor = + creatorTheme()->color(selected ? Theme::Token_Stroke_Strong + : hovered ? WelcomePageHelpers::cardHoverStroke + : WelcomePageHelpers::cardDefaultStroke); WelcomePageHelpers::drawCardBackground(painter, itemRect, fillColor, strokeColor); } { diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp index 431fa8ee1d0..5ca983329ec 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.cpp +++ b/src/plugins/projectexplorer/projectwelcomepage.cpp @@ -232,10 +232,8 @@ static QPixmap pixmap(const QString &id, const Theme::Color color) static void drawBackgroundRect(QPainter *painter, const QRectF &rect, bool hovered) { - const QColor fill(themeColor(hovered ? Theme::Token_Foreground_Muted - : Theme::Token_Background_Muted)); - const QPen pen(themeColor(hovered ? Theme::Token_Foreground_Muted - : Theme::Token_Stroke_Subtle)); + const QColor fill(themeColor(hovered ? cardHoverBackground : cardDefaultBackground)); + const QPen pen(themeColor(hovered ? cardHoverStroke : cardDefaultStroke)); const qreal rounding = s(defaultCardBackgroundRounding * 1000) / 1000.0; const qreal saneRounding = rounding <= 2 ? 0 : rounding; From 53eb67e4838d8c6c2131da0809ffe606917690ed Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 1 Mar 2024 07:56:21 +0100 Subject: [PATCH 14/56] Axivion: Improve sort indicator icon Change-Id: I3579cd460644867cddf491365780c0fd76f2c810 Reviewed-by: hjk --- src/plugins/axivion/issueheaderview.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/axivion/issueheaderview.cpp b/src/plugins/axivion/issueheaderview.cpp index ce432eb1265..a9dfd38b8df 100644 --- a/src/plugins/axivion/issueheaderview.cpp +++ b/src/plugins/axivion/issueheaderview.cpp @@ -16,13 +16,16 @@ static QIcon iconForSorted(SortOrder order) { const Utils::Icon UNSORTED( {{":/axivion/images/sortAsc.png", Utils::Theme::IconsDisabledColor}, - {":/axivion/images/sortDesc.png", Utils::Theme::IconsDisabledColor}}); + {":/axivion/images/sortDesc.png", Utils::Theme::IconsDisabledColor}}, + Utils::Icon::MenuTintedStyle); const Utils::Icon SORT_ASC( {{":/axivion/images/sortAsc.png", Utils::Theme::PaletteText}, - {":/axivion/images/sortDesc.png", Utils::Theme::IconsDisabledColor}}); + {":/axivion/images/sortDesc.png", Utils::Theme::IconsDisabledColor}}, + Utils::Icon::MenuTintedStyle); const Utils::Icon SORT_DESC( {{":/axivion/images/sortAsc.png", Utils::Theme::IconsDisabledColor}, - {":/axivion/images/sortDesc.png", Utils::Theme::PaletteText}}); + {":/axivion/images/sortDesc.png", Utils::Theme::PaletteText}}, + Utils::Icon::MenuTintedStyle); static const QIcon unsorted = UNSORTED.icon(); static const QIcon sortedAsc = SORT_ASC.icon(); static const QIcon sortedDesc = SORT_DESC.icon(); From b6b5f04264fae1bd68278388a1448847952b1fbe Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Fri, 1 Mar 2024 07:10:01 +0100 Subject: [PATCH 15/56] CompilerExplorer: Fix value vs. volatileValue Previously adding a new Compiler would not compile the current source, but the last "applied" source. Change-Id: I0979d21a61808e7bc03e5b72e9c8a2492200c8f6 Reviewed-by: hjk --- src/plugins/compilerexplorer/compilerexplorereditor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/compilerexplorer/compilerexplorereditor.cpp b/src/plugins/compilerexplorer/compilerexplorereditor.cpp index 0defb331636..c39b594d486 100644 --- a/src/plugins/compilerexplorer/compilerexplorereditor.cpp +++ b/src/plugins/compilerexplorer/compilerexplorereditor.cpp @@ -389,7 +389,7 @@ CompilerWidget::CompilerWidget(const std::shared_ptr &sourceSett removeCompilerBtn->setToolTip(Tr::tr("Remove Compiler")); connect(removeCompilerBtn, &QToolButton::clicked, this, &CompilerWidget::remove); - compile(m_sourceSettings->source()); + compile(m_sourceSettings->source.volatileValue()); connect(&m_sourceSettings->source, &Utils::StringAspect::volatileValueChanged, this, [this] { compile(m_sourceSettings->source.volatileValue()); @@ -459,7 +459,7 @@ void CompilerWidget::doCompile() { using namespace Api; - QString compilerId = m_compilerSettings->compiler(); + QString compilerId = m_compilerSettings->compiler.volatileValue(); if (compilerId.isEmpty()) compilerId = "clang_trunk"; From b5a6f851a3d42ec0fb9ff4cffbb3e65fe0540035 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Fri, 1 Mar 2024 06:37:04 +0100 Subject: [PATCH 16/56] CompilerExplorer: Adjust Terminal font size Adjust the output Terminal font size based on the text editor font size settings. Change-Id: Id1047f0fce0ac781cbc51b01f0df9657b179d71a Reviewed-by: David Schulz --- src/libs/solutions/terminal/terminalview.h | 4 ++-- .../compilerexplorereditor.cpp | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/libs/solutions/terminal/terminalview.h b/src/libs/solutions/terminal/terminalview.h index 4079eb7ddca..c69fbcd14e6 100644 --- a/src/libs/solutions/terminal/terminalview.h +++ b/src/libs/solutions/terminal/terminalview.h @@ -32,8 +32,8 @@ struct SearchHit bool operator==(const SearchHit &other) const { return !operator!=(other); } }; -QString defaultFontFamily(); -int defaultFontSize(); +QString TERMINAL_EXPORT defaultFontFamily(); +int TERMINAL_EXPORT defaultFontSize(); class TERMINAL_EXPORT TerminalView : public QAbstractScrollArea { diff --git a/src/plugins/compilerexplorer/compilerexplorereditor.cpp b/src/plugins/compilerexplorer/compilerexplorereditor.cpp index c39b594d486..651ee596205 100644 --- a/src/plugins/compilerexplorer/compilerexplorereditor.cpp +++ b/src/plugins/compilerexplorer/compilerexplorereditor.cpp @@ -446,6 +446,22 @@ Core::SearchableTerminal *CompilerWidget::createTerminal() m_resultTerminal->setColors(colors); + auto setFontSize = [this](const TextEditor::FontSettings &fontSettings) { + QFont f; + f.setFixedPitch(true); + f.setFamily(TerminalSolution::defaultFontFamily()); + f.setPointSize(TerminalSolution::defaultFontSize() * (fontSettings.fontZoom() / 100.0f)); + + m_resultTerminal->setFont(f); + }; + + setFontSize(TextEditorSettings::instance()->fontSettings()); + + connect(TextEditorSettings::instance(), + &TextEditorSettings::fontSettingsChanged, + this, + setFontSize); + return m_resultTerminal; } @@ -924,6 +940,14 @@ EditorFactory::EditorFactory() m_actionHandler.setUnhandledCallback( [undoStackFromEditor](Utils::Id cmdId, Core::IEditor *editor) { + if (cmdId == TextEditor::Constants::INCREASE_FONT_SIZE) { + TextEditor::TextEditorSettings::instance()->increaseFontZoom(); + return true; + } else if (cmdId == TextEditor::Constants::DECREASE_FONT_SIZE) { + TextEditor::TextEditorSettings::instance()->decreaseFontZoom(); + return true; + } + if (cmdId != Core::Constants::UNDO && cmdId != Core::Constants::REDO) return false; From 5b276d5940fa12b80bee53946c87fa1fe2983f57 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 29 Feb 2024 08:07:57 +0100 Subject: [PATCH 17/56] Android: Use more ICore::dialogParent() This is usually the better choice because it takes dialogs into account. I had one message box vanish behind the rest of Qt Creator, which could be better with this. Change-Id: I47b93e120a9e86f9f81da8e542477f1c6274bf87 Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidsdkmanagerwidget.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/android/androidsdkmanagerwidget.cpp b/src/plugins/android/androidsdkmanagerwidget.cpp index e5f0d27345f..7b1ca4e88f5 100644 --- a/src/plugins/android/androidsdkmanagerwidget.cpp +++ b/src/plugins/android/androidsdkmanagerwidget.cpp @@ -7,6 +7,8 @@ #include "androidsdkmodel.h" #include "androidtr.h" +#include + #include #include #include @@ -275,7 +277,7 @@ void AndroidSdkManagerWidget::installEssentials() { m_sdkModel->selectMissingEssentials(); if (!m_sdkModel->missingEssentials().isEmpty()) { - QMessageBox::warning(this, + QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("Android SDK Changes"), Tr::tr("%1 cannot find the following essential packages: \"%2\".\n" "Install them manually after the current operation is done.\n") @@ -321,8 +323,11 @@ void AndroidSdkManagerWidget::onApplyButton(const QString &extraMessage) QString message = Tr::tr("%n Android SDK packages shall be updated.", "", packagesToUpdate.count()); if (!extraMessage.isEmpty()) message.prepend(extraMessage + "\n\n"); - QMessageBox messageDlg(QMessageBox::Information, Tr::tr("Android SDK Changes"), - message, QMessageBox::Ok | QMessageBox::Cancel, this); + QMessageBox messageDlg(QMessageBox::Information, + Tr::tr("Android SDK Changes"), + message, + QMessageBox::Ok | QMessageBox::Cancel, + Core::ICore::dialogParent()); QString details; if (!uninstallPackages.isEmpty()) From 3ff56b80790dc6054f6994443ab7c59cd91b02b1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 1 Mar 2024 11:22:10 +0100 Subject: [PATCH 18/56] Bump version to 13.0.0-rc1 Change-Id: I5b4efa41aabce4b007308a53ea9ac291a3a3ad58 Reviewed-by: Eike Ziller --- cmake/QtCreatorIDEBranding.cmake | 6 +++--- qbs/modules/qtc/qtc.qbs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index 6890a1ef957..070a556d405 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,6 +1,6 @@ -set(IDE_VERSION "12.0.83") # The IDE version. -set(IDE_VERSION_COMPAT "12.0.83") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "13.0.0-beta2") # The IDE display version. +set(IDE_VERSION "12.0.84") # The IDE version. +set(IDE_VERSION_COMPAT "12.0.84") # The IDE Compatibility version. +set(IDE_VERSION_DISPLAY "13.0.0-rc1") # The IDE display version. set(IDE_COPYRIGHT_YEAR "2024") # The IDE current copyright year. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index cb40782268e..c9bfc919fe3 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -4,16 +4,16 @@ import qbs.FileInfo import qbs.Utilities Module { - property string qtcreator_display_version: '13.0.0-beta2' + property string qtcreator_display_version: '13.0.0-rc1' property string ide_version_major: '12' property string ide_version_minor: '0' - property string ide_version_release: '83' + property string ide_version_release: '84' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release property string ide_compat_version_major: '12' property string ide_compat_version_minor: '0' - property string ide_compat_version_release: '83' + property string ide_compat_version_release: '84' property string qtcreator_compat_version: ide_compat_version_major + '.' + ide_compat_version_minor + '.' + ide_compat_version_release From 262dcc6643225d413490fbf03a1b1471b380518d Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 29 Feb 2024 13:17:33 +0100 Subject: [PATCH 19/56] Core: do not activate open documents entry on right click If we activate an entry before we handle the context menu event we might switch into another mode. For example when right clicking on a ui File. Fixes: QTCREATORBUG-30357 Change-Id: I8de78c3a6bbd9d62e2766ccd2059ee3ee4ef0870 Reviewed-by: Eike Ziller --- src/libs/utils/itemviews.h | 16 ++++++++++++++++ .../coreplugin/editormanager/openeditorsview.cpp | 9 +++++++++ src/plugins/projectexplorer/projectwindow.cpp | 14 +------------- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/libs/utils/itemviews.h b/src/libs/utils/itemviews.h index 50e8a4af01e..ff1f5328b15 100644 --- a/src/libs/utils/itemviews.h +++ b/src/libs/utils/itemviews.h @@ -59,6 +59,22 @@ public: BaseT::keyPressEvent(event); } + virtual bool userWantsContextMenu(const QMouseEvent *) const + { + return false; + } + + void mousePressEvent(QMouseEvent *e) override + { + if (!userWantsContextMenu(e)) + BaseT::mousePressEvent(e); + } + + void mouseReleaseEvent(QMouseEvent *e) override + { + if (!userWantsContextMenu(e)) + BaseT::mouseReleaseEvent(e); + } }; class QTCREATOR_UTILS_EXPORT TreeView : public View diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.cpp b/src/plugins/coreplugin/editormanager/openeditorsview.cpp index 350cdac142b..cc7451b9395 100644 --- a/src/plugins/coreplugin/editormanager/openeditorsview.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorsview.cpp @@ -66,6 +66,8 @@ private: void activateEditor(const QModelIndex &index); void closeDocument(const QModelIndex &index); + bool userWantsContextMenu(const QMouseEvent *) const final; + ProxyModel *m_model; }; @@ -138,6 +140,13 @@ void OpenEditorsWidget::closeDocument(const QModelIndex &index) updateCurrentItem(EditorManager::currentEditor()); } +bool OpenEditorsWidget::userWantsContextMenu(const QMouseEvent *e) const +{ + // block activating on entry on right click otherwise we might switch into another mode + // see QTCREATORBUG-30357 + return e->button() == Qt::RightButton; +} + void OpenEditorsWidget::contextMenuRequested(QPoint pos) { QMenu contextMenu; diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index 66dca5ecd56..1c2f04a04c5 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -648,24 +648,12 @@ private: return; } - bool userWantsContextMenu(const QMouseEvent *e) const + bool userWantsContextMenu(const QMouseEvent *e) const final { // On Windows, we get additional mouse events for the item view when right-clicking, // causing unwanted kit activation (QTCREATORBUG-24156). Let's suppress these. return HostOsInfo::isWindowsHost() && e->button() == Qt::RightButton; } - - void mousePressEvent(QMouseEvent *e) final - { - if (!userWantsContextMenu(e)) - BaseTreeView::mousePressEvent(e); - } - - void mouseReleaseEvent(QMouseEvent *e) final - { - if (!userWantsContextMenu(e)) - BaseTreeView::mouseReleaseEvent(e); - } }; class ComboBoxItem : public TreeItem From 6a59cb891b7010cb97fcbdccf2b816ceadb516b6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 1 Mar 2024 12:22:58 +0100 Subject: [PATCH 20/56] Qt/Documentation: Avoid automatic loading of unrelated help files On Linux/KDE systems, the KDE documentation files can be installed in the Qt documentation directory. This leads to a great of documentation files to be loaded by default, which we try to avoid for performance reasons. Restrict the pattern for .qch files to start with a 'q', which still matches the Qt documentation files. If the user wants the documentation of KDE libraries, they can register them manually. Change-Id: Ib658c3b2c26a97ca69a8c0e46a5057a58b5a7ec7 Reviewed-by: Christian Kandeler --- src/plugins/qtsupport/qtversionmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 715eec8aa2d..acdaba62827 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -506,7 +506,7 @@ static QList> documentationFiles(QtVersion *v) {v->docsPath().toString() + QChar('/'), v->docsPath().toString() + "/qch/"}); for (const QString &docPath : docPaths) { const QDir versionHelpDir(docPath); - for (const QString &helpFile : versionHelpDir.entryList(QStringList("*.qch"), QDir::Files)) + for (const QString &helpFile : versionHelpDir.entryList(QStringList("q*.qch"), QDir::Files)) files.append({docPath, helpFile}); } return files; From c5cce4233d977a72ee4b99eed3845863cf91c7ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Thu, 29 Feb 2024 14:24:40 +0100 Subject: [PATCH 21/56] SquishTests: Update tests for Welcome screen Some tests are failing because of QTCREATORBUG-30466 unless someone resizes Creator's windows manually. Task-number: QTCREATORBUG-30466 Change-Id: Ibeecc2abd85839be3497691912e411862c465a89 Reviewed-by: Christian Stenger --- tests/system/shared/project.py | 12 ++-- tests/system/shared/welcome.py | 35 +++--------- tests/system/suite_WELP/tst_WELP01/test.py | 55 ++++++++----------- tests/system/suite_WELP/tst_WELP02/test.py | 7 +-- tests/system/suite_WELP/tst_WELP03/test.py | 3 +- tests/system/suite_WELP/tst_WELP04/test.py | 3 +- .../tst_session_handling/test.py | 6 +- 7 files changed, 45 insertions(+), 76 deletions(-) diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index 5bb724a0b1d..71689babf77 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -9,11 +9,11 @@ def openQbsProject(projectPath): def openQmakeProject(projectPath, targets=Targets.desktopTargetClasses(), fromWelcome=False): cleanUpUserFiles(projectPath) if fromWelcome: - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Open Project...') - if not all((wsButtonFrame, wsButtonLabel)): + wsButton = getWelcomeScreenSideBarButton('Open Project...') + if not object.exists(wsButton): test.fatal("Could not find 'Open Project...' button on Welcome Page.") return [] - mouseClick(wsButtonLabel) + mouseClick(wsButton) else: invokeMenuItem("File", "Open File or Project...") selectFromFileDialog(projectPath) @@ -60,11 +60,11 @@ def __createProjectOrFileSelectType__(category, template, fromWelcome = False, i if fromWelcome: if not isProject: test.fatal("'Create Project...' on Welcome screen only handles projects nowadays.") - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton("Create Project...") - if not all((wsButtonFrame, wsButtonLabel)): + wsButton = getWelcomeScreenSideBarButton("Create Project...") + if not object.exists(wsButton): test.fatal("Could not find 'Create Project...' button on Welcome Page") return [] - mouseClick(wsButtonLabel) + mouseClick(wsButton) elif isProject: invokeMenuItem("File", "New Project...") else: diff --git a/tests/system/shared/welcome.py b/tests/system/shared/welcome.py index 8066f271318..a5ba097ff1f 100644 --- a/tests/system/shared/welcome.py +++ b/tests/system/shared/welcome.py @@ -4,30 +4,11 @@ def __childrenOfType__(parentObject, typeName): return [child for child in object.children(parentObject) if className(child) == typeName] -def __getWelcomeScreenButtonHelper__(buttonLabel, widgetWithQFrames, isUrlButton = False): - frames = __childrenOfType__(widgetWithQFrames, 'QWidget') - for frame in frames: - childCount = 1 # incorrect but okay for framed sidebar buttons - if isUrlButton: - childCount = len(__childrenOfType__(frame, 'QLabel')) - for occurrence in range(1, childCount + 1): - label = getChildByClass(frame, 'QLabel', occurrence) - if label is None: - continue - if str(label.text) == buttonLabel: - return frame, label - return None, None -def getWelcomeScreenSideBarButton(buttonLabel, isUrlButton = False): - sideBar = waitForObject("{container={type='Welcome::Internal::SideArea' unnamed='1' " - "window=':Qt Creator_Core::Internal::MainWindow'} type='QWidget' " - "unnamed='1'}") - return __getWelcomeScreenButtonHelper__(buttonLabel, sideBar, isUrlButton) +def getWelcomeScreenSideBarButton(buttonLabel): + return ("{text='%s' type='QPushButton' unnamed='1' visible='1' " + "window=':Qt Creator_Core::Internal::MainWindow'}" % buttonLabel) -def getWelcomeScreenBottomButton(buttonLabel): - bottomArea = waitForObject("{type='Welcome::Internal::BottomArea' unnamed='1' " - "window=':Qt Creator_Core::Internal::MainWindow'}") - return __getWelcomeScreenButtonHelper__(buttonLabel, bottomArea, False) def getWelcomeTreeView(treeViewLabel): try: @@ -37,11 +18,11 @@ def getWelcomeTreeView(treeViewLabel): return None def switchToSubMode(subModeLabel): - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(subModeLabel) - frameAndLabelFound = all((wsButtonFrame, wsButtonLabel)) - if frameAndLabelFound: - mouseClick(wsButtonLabel) - return frameAndLabelFound + wsButton = getWelcomeScreenSideBarButton(subModeLabel) + buttonFound = object.exists(wsButton) + if buttonFound: + mouseClick(wsButton) + return buttonFound def findExampleOrTutorial(tableView, regex, verbose=False): filterModel = __childrenOfType__(tableView, 'QSortFilterProxyModel') diff --git a/tests/system/suite_WELP/tst_WELP01/test.py b/tests/system/suite_WELP/tst_WELP01/test.py index 0bc65d1f001..61ee8a6030b 100644 --- a/tests/system/suite_WELP/tst_WELP01/test.py +++ b/tests/system/suite_WELP/tst_WELP01/test.py @@ -14,25 +14,16 @@ def clickItemVerifyHelpCombo(button, expectedHelpComboRegex, testDetails): test.log("Found %s" % str(helpCombo.currentText)) # select "Welcome" page from left toolbar again switchViewTo(ViewConstants.WELCOME) - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) - return test.verify(all((wsButtonFrame, wsButtonLabel)), + return test.verify(object.exists(getWelcomeScreenSideBarButton(getStarted)), "Verifying: '%s' button is being displayed." % getStarted) def buttonActive(button): - # colors of the default theme for active button on Welcome page - defaultActiveRGB = (69, 206, 85) - # colors of the dark theme for active button on Welcome page - darkActiveRGB = (54, 193, 72) - # QPalette::Window (used background color of Welcome page buttons) - enumQPaletteWindow = 10 - color = button.palette.color(enumQPaletteWindow) - current = (color.red, color.green, color.blue) - return current == defaultActiveRGB or current == darkActiveRGB + return waitForObject(button).checked def waitForButtonsState(projectsActive, examplesActive, tutorialsActive, timeout=5000): - projButton = getWelcomeScreenSideBarButton('Projects')[0] - exmpButton = getWelcomeScreenSideBarButton('Examples')[0] - tutoButton = getWelcomeScreenSideBarButton('Tutorials')[0] - if not all((projButton, exmpButton, tutoButton)): + projButton = getWelcomeScreenSideBarButton('Projects') + exmpButton = getWelcomeScreenSideBarButton('Examples') + tutoButton = getWelcomeScreenSideBarButton('Tutorials') + if not all(map(object.exists, (projButton, exmpButton, tutoButton))): return False return waitFor('buttonActive(projButton) == projectsActive ' 'and buttonActive(exmpButton) == examplesActive ' @@ -65,25 +56,25 @@ def main(): buttonsAndState = {'Projects':False, 'Examples':True, 'Tutorials':False} for button, state in buttonsAndState.items(): - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(button) - if test.verify(all((wsButtonFrame, wsButtonLabel)), + wsButton = getWelcomeScreenSideBarButton(button) + if test.verify(object.exists(wsButton), "Verified whether '%s' button is shown." % button): - test.compare(buttonActive(wsButtonFrame), state, + test.compare(buttonActive(wsButton), state, "Verifying whether '%s' button is active (%s)." % (button, state)) # select Projects and roughly check this switchToSubMode('Projects') for button in ['Create Project...', 'Open Project...']: - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(button) - if test.verify(all((wsButtonFrame, wsButtonLabel)), + wsButton = getWelcomeScreenSideBarButton(button) + if test.verify(object.exists(wsButton), "Verified whether '%s' button is shown." % button): - test.verify(not buttonActive(wsButtonFrame), + test.verify(not buttonActive(wsButton), "Verifying whether '%s' button is inactive." % button) - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) - if test.verify(all((wsButtonFrame, wsButtonLabel)), + wsButton = getWelcomeScreenSideBarButton(getStarted) + if test.verify(object.exists(wsButton), "Verifying: Qt Creator displays Welcome Page with '%s' button." % getStarted): - if clickItemVerifyHelpCombo(wsButtonLabel, "Getting Started | Qt Creator Manual", + if clickItemVerifyHelpCombo(wsButton, "Getting Started | Qt Creator Manual", "Verifying: Help with Creator Documentation is being opened."): textUrls = {'Online Community':'https://forum.qt.io', @@ -92,13 +83,14 @@ def main(): 'User Guide':'qthelp://org.qt-project.qtcreator/doc/index.html' } for text, url in textUrls.items(): - button, label = getWelcomeScreenBottomButton(text) - if test.verify(all((button, label)), + button = getWelcomeScreenSideBarButton(text) + if test.verify(object.exists(button), "Verifying whether link button (%s) exists." % text): - test.compare(str(button.toolTip), url, "Verifying URL for %s" % text) - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) - if wsButtonLabel is not None: - mouseClick(wsButtonLabel) + test.compare(str(waitForObject(button).toolTip), url, + "Verifying URL for %s" % text) + wsButton = getWelcomeScreenSideBarButton(getStarted) + if object.exists(wsButton): + mouseClick(wsButton) qcManualQModelIndexStr = getQModelIndexStr("text~='Qt Creator Manual [0-9.]+'", ":Qt Creator_QHelpContentWidget") if str(waitForObject(":Qt Creator_HelpSelector_QComboBox").currentText) == "(Untitled)": @@ -109,8 +101,7 @@ def main(): # select "Welcome" page from left toolbar again switchViewTo(ViewConstants.WELCOME) - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(getStarted) - test.verify(wsButtonFrame is not None and wsButtonLabel is not None, + test.verify(object.exists(getWelcomeScreenSideBarButton(getStarted)), "Verifying: Getting Started topic is being displayed.") # select Examples and roughly check them switchToSubMode('Examples') diff --git a/tests/system/suite_WELP/tst_WELP02/test.py b/tests/system/suite_WELP/tst_WELP02/test.py index d79391d1213..add3d28b3a4 100644 --- a/tests/system/suite_WELP/tst_WELP02/test.py +++ b/tests/system/suite_WELP/tst_WELP02/test.py @@ -6,8 +6,7 @@ source("../../shared/qtcreator.py") def checkTypeAndProperties(typePropertiesDetails): for (qType, props, detail) in typePropertiesDetails: if qType == "QPushButton": - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton(props) - test.verify(all((wsButtonFrame, wsButtonLabel)), + test.verify(object.exists(getWelcomeScreenSideBarButton(props)), "Verifying: Qt Creator displays Welcome Page with %s." % detail) elif qType == 'QTreeView': treeView = getWelcomeTreeView(props) @@ -59,8 +58,8 @@ def main(): ) checkTypeAndProperties(typePropDet) - getStartedF, getStartedL = getWelcomeScreenSideBarButton("Get Started") - test.verify(getStartedF is not None and getStartedL is not None, "'Get Started' button found") + test.verify(object.exists(getWelcomeScreenSideBarButton("Get Started")), + "'Get Started' button found") # select "Create Project" and try to create a new project createNewQtQuickApplication(tempDir(), "SampleApp", fromWelcome = True) diff --git a/tests/system/suite_WELP/tst_WELP03/test.py b/tests/system/suite_WELP/tst_WELP03/test.py index b09fa9e2a90..50f7b503cc7 100644 --- a/tests/system/suite_WELP/tst_WELP03/test.py +++ b/tests/system/suite_WELP/tst_WELP03/test.py @@ -55,8 +55,7 @@ def main(): qchs.extend([os.path.join(p, "qtopengl.qch"), os.path.join(p, "qtwidgets.qch")]) addHelpDocumentation(qchs) setFixedHelpViewer(HelpViewer.HELPMODE) - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Get Started') - if not test.verify(all((wsButtonFrame, wsButtonLabel)), + if not test.verify(object.exists(getWelcomeScreenSideBarButton('Get Started')), "Verifying: Qt Creator displays Welcome Page with Getting Started."): test.fatal("Something's wrong - leaving test.") invokeMenuItem("File", "Exit") diff --git a/tests/system/suite_WELP/tst_WELP04/test.py b/tests/system/suite_WELP/tst_WELP04/test.py index c9a18066693..6ccf2f0d3ac 100644 --- a/tests/system/suite_WELP/tst_WELP04/test.py +++ b/tests/system/suite_WELP/tst_WELP04/test.py @@ -15,8 +15,7 @@ def main(): startQC() if not startedWithoutPluginError(): return - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Get Started') - if not test.verify(all((wsButtonFrame, wsButtonLabel)), + if not test.verify(object.exists(getWelcomeScreenSideBarButton('Get Started')), "Verifying: Qt Creator displays Welcome Page with Getting Started."): test.fatal("Something's wrong - leaving test.") invokeMenuItem("File", "Exit") diff --git a/tests/system/suite_general/tst_session_handling/test.py b/tests/system/suite_general/tst_session_handling/test.py index b535145cc91..305d64895ea 100644 --- a/tests/system/suite_general/tst_session_handling/test.py +++ b/tests/system/suite_general/tst_session_handling/test.py @@ -84,11 +84,11 @@ def createAndSwitchToSession(toSession): def checkWelcomePage(sessionName, isCurrent=False): switchViewTo(ViewConstants.WELCOME) - wsButtonFrame, wsButtonLabel = getWelcomeScreenSideBarButton('Projects') - if not all((wsButtonFrame, wsButtonLabel)): + wsButton = getWelcomeScreenSideBarButton('Projects') + if not object.exists(wsButton): test.fatal("Something's pretty wrong - leaving check for WelcomePage.") return - mouseClick(wsButtonLabel) + mouseClick(wsButton) treeView = getWelcomeTreeView("Sessions") if not treeView: test.fatal("Failed to find Sessions tree view - leaving check for WelcomePage.") From 810c9e710686cd8b247f8e50428b42fc79ca1c75 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Fri, 1 Mar 2024 12:18:18 +0100 Subject: [PATCH 22/56] ClangFormat: Fix vague error message Change-Id: I321d74a80c1735dad3edb6e542451cab3a71a3f7 Reviewed-by: Leena Miettinen --- src/plugins/clangformat/clangformatconfigwidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index 99b8302d369..9adf94cafc1 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -343,8 +343,8 @@ void ClangFormatConfigWidget::apply() } QMessageBox mBox; - mBox.setText( - Tr::tr("The current settings are not valid. Are you sure you want to apply them?")); + mBox.setText(Tr::tr("The current ClangFormat (C++ > Code Style > ClangFormat) settings are not " + "valid. Are you sure you want to apply them?")); mBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes); mBox.setDefaultButton(QMessageBox::No); if (mBox.exec() == QMessageBox::Yes) From 5e5c86fecbb51763cf655bd9e22aa195e636018e Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 27 Feb 2024 16:08:30 +0100 Subject: [PATCH 23/56] Doc: Update Axivion docs You can now view and filter issues from selected results. Task-number: QTCREATORBUG-30209 Change-Id: I175f71589755af3bd75813eea237487128f36c42 Reviewed-by: Christian Stenger --- doc/qtcreator/images/icons/axivion-av.png | Bin 0 -> 153 bytes doc/qtcreator/images/icons/axivion-cl.png | Bin 0 -> 315 bytes doc/qtcreator/images/icons/axivion-cy.png | Bin 0 -> 306 bytes doc/qtcreator/images/icons/axivion-de.png | Bin 0 -> 377 bytes doc/qtcreator/images/icons/axivion-mv.png | Bin 0 -> 253 bytes doc/qtcreator/images/icons/axivion-sv.png | Bin 0 -> 300 bytes .../images/qtcreator-axivion-annotation.webp | Bin 4890 -> 11880 bytes .../qtcreator-axivion-issue-search.webp | Bin 0 -> 13232 bytes .../images/qtcreator-axivion-view-rule.webp | Bin 2544 -> 4010 bytes .../images/qtcreator-axivion-view.webp | Bin 4270 -> 4184 bytes ...tcreator-edit-dashboard-configuration.webp | Bin 3790 -> 3772 bytes .../images/qtcreator-preferences-axivion.webp | Bin 2470 -> 2156 bytes .../src/analyze/creator-analyze.qdoc | 2 +- .../src/analyze/creator-axivion.qdoc | 192 +++++++++++++----- .../creator-projects-settings-overview.qdoc | 1 + doc/qtcreator/src/qtcreator-toc.qdoc | 1 - 16 files changed, 145 insertions(+), 51 deletions(-) create mode 100644 doc/qtcreator/images/icons/axivion-av.png create mode 100644 doc/qtcreator/images/icons/axivion-cl.png create mode 100644 doc/qtcreator/images/icons/axivion-cy.png create mode 100644 doc/qtcreator/images/icons/axivion-de.png create mode 100644 doc/qtcreator/images/icons/axivion-mv.png create mode 100644 doc/qtcreator/images/icons/axivion-sv.png create mode 100644 doc/qtcreator/images/qtcreator-axivion-issue-search.webp diff --git a/doc/qtcreator/images/icons/axivion-av.png b/doc/qtcreator/images/icons/axivion-av.png new file mode 100644 index 0000000000000000000000000000000000000000..54dcd301ea2abf6e61b6997595c122c278bc866f GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+BzU?whG?8`onXy(z<|Sf zp>uU^{KDhD?Yo$j0tEupxb63KMgRK2+_!CpE`yWwfj0~ZI;mxE3Yyk+sV)>=xvs-w z)04g>;SNtvHqJb@mGPQT%*&J(`(+GTw;RJ*dgM3!U~rwTXm$1w2NMGW1B0ilpUXO@ GgeCw|vo;L? literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/icons/axivion-cl.png b/doc/qtcreator/images/icons/axivion-cl.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2de82f18d14b8d0f5c467b4f8ade3996a68f5c GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0y~yU=RXf4i*LmhCj#M?l3SgGI_cOK6Krpn%D>DCg6$*{5O!{)YrKJDcnh$-Q(XXSV34+zyst z=|8pqt84e>@0x!2>AvqWI+=~e&zL_S-n!~Rgh#KbcJ{_(mQObxw+i2FUHkmaquBwo z_oc0U$Mt*N#3esBm=|%KY_Lz8?Vq${S=$7;6UGb9NbFqT&1Iv#@Gz&q?2;{qSau%Z znS0=?=bzhK3|ri))K|}OjWzI)Iw-jP%2zLapJyimjAw!iu*-9b4?#%Bg zCGxWW&W4J8`!cbD)Up z^|^O6m8J<^@!JsU@>VwYaz_-~M{yQy?wh`USiHNxG&^nBc%j5>UsG>_vP%KiM`o7Z z-k#_8I3H<>zqYxt+-+&eeBLVmX)2Q-N#sNPuI{kUuTB%7iokDecV`a{i9GgtPHVB@(PPnxeDCUGNbewl z7Yi=7n^oLDoi4lMPW8FJh5w$`#Cl|s*bD)lEXvPs&!bdJB3`ne}jR6fx*+&&t;ucLK6VxAEjvk literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/icons/axivion-mv.png b/doc/qtcreator/images/icons/axivion-mv.png new file mode 100644 index 0000000000000000000000000000000000000000..c34272c414b01d1f0844e0a50ae0c35b900ae760 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0y~yU=RXf4i*LmhCj#M?l3Sg9PxB<4AD5>dePR8iBW*< z!uG{iq%z<1h(s-P|G?qK`+er;6$R}435zx^nh+7RV4;!Wnu}~4yWYGD3EopPQ~u`+ zWnIx->uyE-Sk%kvwK+{}!TmE#)^gKwBKo=Z&UrO^=e=`Gsbv{S8?%Z+&NJ=ac_7tq z+8U$i2gg|+TFft6_5QCtcg=H6FYf0*_w=$V}Fe{zg~28a^kVYYZWuK zGAus5v7N?tH;`qv^PP|j9j4N|RxQ?*>?l^h73N^YN={_ zJ#bFhGM48Rp}o7e^m`Pf-)=oU<63=psnDY-2CM5B1wY0@RHd}IIs literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-axivion-annotation.webp b/doc/qtcreator/images/qtcreator-axivion-annotation.webp index 5879a1c19f5b18bbaf60780709a725326af30cf4..9cfd1407e30483c59c10fe737379089d34cc707f 100644 GIT binary patch literal 11880 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

?Hlxi&;Rr9L1JNw^G^GAGJ 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 YUh!;c*7~!%B>(sMrT=5z1T!)K0RN-i=>Px# literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-axivion-view-rule.webp b/doc/qtcreator/images/qtcreator-axivion-view-rule.webp index 30a5427885f915db37d3e6b67d63ee9f0ad02e50..9bbca00d9eaa45cbd7de4baae4f391c415fd98a2 100644 GIT binary patch literal 4010 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 E0P^~zAOHXW literal 2544 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 diff --git a/doc/qtcreator/images/qtcreator-axivion-view.webp b/doc/qtcreator/images/qtcreator-axivion-view.webp index c019284503ccb62d1534305ca9e515e65aedded9..0d1614b4eba94d5ae0713819d125d208c3fd9962 100644 GIT binary patch literal 4184 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 literal 4270 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

q1 zAy=of=}UV}RaWhfw%H#RY(2Z$zDLEai`V?&?TAZzejWBm+LmePY{26`@P=US)S575l#7Z&K3YHD8#kv$KBNzYTBgi>m|$U-F+-QPMdT)$}@X z`MIT52Qx3ICtQ57wy|sS%?jS@-ArHF7sdT7IQV+vch*Yzs`;xH2)~*8k^|<-^7$^V!4V=ilKCI&1IQeztIL&2NXe_q)pU z$J2+~^(yv7`#A?qj*)xhqZ?PcVfKq_>+DtPTV_Yc&gEUE!*kGYu6M!Sy-)AmPW3P6 zSC}oo>%q%+_hz(BKK$)k18-%jhxx^~bx(}$9?%YIm%S+-vW9EoPTR77pZA`$-XAyP z&+m=%nmz@r+|H)wtvbtjDrfclwTm65JkzdG*uh_N`_EN=Sp_S{Z)N{3@9h+?pWds& z{n1;yzeDf#tFP@*r*bkaleVNb%(V)?!1?W);_JHF+C|IPG^xJc=)Kx`S7+YWU(Sae zmY=&?(iD8*vfiSmiLdxg8H`tZy!}1T&6w@tqw@aT|C#X|^W<~Hv&j_Eu*A@qa6$|p*FnJ@USPKl3v zHOJ44|4Y{k{EDGypFTBIO?lqw{&(Tg%@25cH{`GW`a-i_ z@c5Ol?Oa+ek(CPGqCL{<7lvC1R-RFtXjxGz`cJ7(^CiEjo9h|9wGX9V@$1%Yy^-m( zEBD+JxhMLMW;Fc^kZd(xuF)8`@ZW`3>+Sb9+O#YVRr|i+oU6?2rhgyz-@C-O_g8q^ zzYTBqL+~Lk>&9ns)}jv^cF(w6W9B64^NK$-)}{WHHEDkJD+>MB)=tqm9JXz8MejaNuR~`1iJJsZMOeMjdR|&|BXpY2l{r`P zuSUP<-&-7J>iBB^(j(F@W+&{M`sC=N&4Qci?Z4croGbHHt6J>H*(v`5WWOB0^f9q8 zVaw8KRgYpPW@W9N!E>1N(BW zAMfAY>v_dLxA;Z>T4kpxFE*>k?Y3Rip(3rg*LR`&`~z$L1$<3>cX_#e&ToHd=LeTo z3%y(@$QIMj5~#jnQu~F3{VZQ=HW#;C$o{gT>q|gztHXIuu6>+CBp37$48WlKnsdy=?9c*=7{lk579wfA*uCpu_q_hgFY ziYh(f4!O+fcQ9o?%h%f7@8^L^vbWqT-Sw|#J@#-7m+ay_JtalqNKOme*Y+R50)p12 zzg1@x?u-1T;ct`OBs8IV!U`rsX2lfcD;MRpwx^1`z4Cf`!n}${(JGAUU5bg_dxcrN zeO~i_G+)bk@%40tZAAh#n=4+tcRKz5lJleIUlJ1!mE7)Fu+%=}v_pjFXKt~LT!&fx zYc^NjxZgT0Vo}?T?fl|4&3*p@m~u~RY@B>qUW+0BXvB}SuNUq=n)-Wbdx%f61vYY8a-AhGLk4ssXgaXBw{|ZfcCA#&OYDd=1s=ti2n}2gE z@~70jRGiA`R(Ya#%GdUy8QXdm&8_+?v_w~M>mR|Nycsj&t2|g2aitipuvc+U5wh-% V;JhRh_+(%8ufyQ#S}(GU0RWjFc6I;& diff --git a/doc/qtcreator/images/qtcreator-edit-dashboard-configuration.webp b/doc/qtcreator/images/qtcreator-edit-dashboard-configuration.webp index 3f76b4427a374d0ddcc3bce6536c872ea399c5a8..43d997ec424381b22d8a2cb8fe07601dabe54bd7 100644 GIT binary patch literal 3772 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 diff --git a/doc/qtcreator/images/qtcreator-preferences-axivion.webp b/doc/qtcreator/images/qtcreator-preferences-axivion.webp index f884259a54a21e89e8b76ec8ad903e9cb75ae2d8..a6b69dd1ff54ec5b9038e9b84c82eda59ba5999e 100644 GIT binary patch literal 2156 zcmWIYbaPALU|)-hZs^RPO>g(TKWVSf^h2njV1mkn zYunaFMZP}ugLQ|Jq~hOlN6C1lP0OW=a&9kMYdJr6>spDrFZNyXjW_p2e2#B_{{3I> z<>b)FsF2e9i)@a&->l$rcyO!1D%fJVN0a9Qr^dejhaPYDT^h8~g<~qmQh}8MN?cAN znGT#GVN0*Ax|Zaa7@RiYLYvb{hmQX$T>%{-Orom-R+Q_$4c25~bZHXsbjbPV-6ZBI zvh-lCa~7|XqtN9rr52ACp_P8z0-R0<#B!!&zKW5E2;|j2;2O4Jfj#pQ{E)fx^Fr%R;K!U+5_u2y^`FCgT-n}bZUjAakqj!Aw zHz_(=@xOa#aOa`^#p?HWRegU>iY)fLue#{}Bn8h&S2T*&AB@TgX{-_`x&0^G{_jh5 z*6wFfSF=LOR=%^ksH@^{U%jWHa@y)PjxQgZ+`?B1%6;-o^!(3#JiVQJ)(?4ozjK=_ zDx;_8%)MaE5*Rlj!*)yUkH;4}?6-LQc>Ki4`Oeo%-=fud662gbe4=jE%{aQ+Noez} zSJ^QaqitOE)^%=P={IfLaiP?b?1*2?Hm*nReqQxQ*i~(zzEOCKgq^)p%IOxnggYl& zWf!#iDCHLvc*!feKlyBMP~3fGOzf?R=Ke2cr(KszRaBU~W5b`_`^CP9vbpTz(B80Z z#&x-;`=3STC~I^wA6_f3-X_I0;s4Jkr;}NIrPO|`S}^CwuC%EiCZuzn4t_aZQAtf_ z*%SN!t5SonC7tuUVX{zum%5aysh^So-wx|78lTEeS4#IRw%ocvUh#ooORC_5(*AR| zkGfwvUyvg{OU3B<^pc>~$sSu<{st>sybF`OpzJT&EmWKpxctyz&nK2Ivn<|;c}Z2T zj+paC{+-O}h@9CfX=Qmv8S|!Ex4k<#r|W16?_M+2$*1RjQnFwDXX74Tm0nYZ%I=+Y zu4i%%8zrP3c-u8u-APpSaB;xi{{`+l^5nX_sH6;b@mbiefPwLiQTZ59adIG0^UFN=IQOhs= z{Xbj!4{Z!%Ez!QpSrJ%pw8-Nd|8WL=O$QTw6`gfYVwz7eO!ahY?h@S4&C8Wa6d=f(*e^{T77Zn`C1! z^J%V6mb6LBj!3}}wiP<@EQV5HK4&MY&9&v_SkRQ&u}z@p2;)~D*H6OA%u7A$S1k_F z&I}Ih+_lEsc9F=qlyu6|zBJOmy5#7@&;J(h^YRKVVT@g-yKH;o<3F=|9&ciuH@oVNvftJ@ z-{n4q?)ag(ZoXl9=JXY_ewp*$ue}iNsTKH*e|<-fw}@};S>{zY=Wd-*&&-xwHFx%U z;d~{Q;(Lu-L`!H^!z^;<{s}_947aqSK<6?-O$asIoqcd z)}%c%Kg1xn^^1bliO*5oSKmlp56!NvI=1}~gIp&6r>F_fuRdFK(|TX`k6jn*&GyG# zRMl6s`IeQlKt}jU<T<)i*%>-W;<&+gm)rnZt%TSVS?jTVT;4yJpD7*1j>VqT$IJyompUEPzP&ub=c+P8e2_PN_0N@okh zq_aw8{1;5$;b^R{F#YezHI|(pxa@*wK3i8U{YzunJHzlfv)K2aoS9oB$QpCXt;@mq zd|KYgP4% ze15~A_nZ4jK=#`QLKX!XlTS?BR4C+Vd_J%3^uLr2)#}DckA9p?+xR*>U}5LyjeMOU zE)NUst54Q@{rl`MD8F9)aAMyIwwYi5`!sFiDiCUvec94AsarkT`w-(M^(N`*_2(X_ z7=1|6|1ilQOYg-j#V7O1KLr^|PpX@<^G-l?&RBl4G*CfoZ9 zEz@^-zBTy3zRQE-*8f#+lv1XeA3V>x`$=iWp`&U)-pK4Ye5;7b=F6Slz%s*iW(U)Y z9!%%^q?B%jo+VV?&zK6ed5=ioc{%e klB;*N96xXC{V({_{7L_({8|3QUiH7`Pk)fVln*ih0Lq#QG5`Po literal 2470 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 Dd3B^> diff --git a/doc/qtcreator/src/analyze/creator-analyze.qdoc b/doc/qtcreator/src/analyze/creator-analyze.qdoc index 7438249701f..a29ab100155 100644 --- a/doc/qtcreator/src/analyze/creator-analyze.qdoc +++ b/doc/qtcreator/src/analyze/creator-analyze.qdoc @@ -44,7 +44,7 @@ example, and use the results to make the tests more efficient and complete. - \li \l{Static Code Analysis}{Axivion} + \li \l{Prevent code erosion}{Axivion} Do static code analysis and architecture analysis to detect and eliminate unnecessary complexity of code. diff --git a/doc/qtcreator/src/analyze/creator-axivion.qdoc b/doc/qtcreator/src/analyze/creator-axivion.qdoc index f188c84151b..b45d1f5fb19 100644 --- a/doc/qtcreator/src/analyze/creator-axivion.qdoc +++ b/doc/qtcreator/src/analyze/creator-axivion.qdoc @@ -1,16 +1,17 @@ -// Copyright (C) 2023 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-coco.html \page creator-axivion.html - \nextpage creator-valgrind-overview.html + \previouspage creator-how-tos.html - \title Static Code Analysis + \ingroup creator-how-to-analyze + + \title Prevent code erosion \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: + a tool suite for protecting software from erosion. With static code analysis, + architecture analysis, and code-smells-detection, you can: \list \li Check the source code for potential runtime errors. @@ -22,50 +23,164 @@ \li Detect unreachable code. \endlist - The experimental Axivion plugin integrates the Axivion dashboard server into - \QC. + Connect to an Axivion dashboard server from \QC to view results of code + analysis. \note Enable the Axivion plugin to use it. 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. + server and link to it from \QC. You can then see found issues in the + \uicontrol Edit mode, issues in the \uicontrol Axivion dashboard, and + issue details in the \uicontrol Axivion sidebar view. - The editor shows style violations as inline annotations. Hover the mouse over + The editor shows found issues 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. + Select \inlineimage icons/info.png to view detailed information about the + issue in the \uicontrol Axivion sidebar view. - \image qtcreator-axivion-view-rule.webp {Axivion view} + \image qtcreator-axivion-view-rule.webp {Axivion sidebar view} + + \section1 View issue counts To view the issue counts, select \inlineimage icons/home.png - (\uicontrol {Show Dashboard}). + (\uicontrol {Show Dashboard}) in the \uicontrol Axivion dashboard. - \section1 Connecting to Axivion Dashboard Servers + \image qtcreator-axivion-view.webp {Axivion dashboard} - To connect to Axivion: + The \uicontrol Axivion dashboard lists the numbers of the following types of + issues that Axivion found in the linked project: + + \table + \header + \li Icon + \li Type + \li Description + \row + \li \inlineimage icons/axivion-av.png + \li \uicontrol AV + \li Architecture violations, such as hidden dependencies. + \row + \li \inlineimage icons/axivion-cl.png + \li \uicontrol CL + \li Clones, such as duplicates and similar pieces of code. + \row + \li \inlineimage icons/axivion-cy.png + \li \uicontrol CY + \li Cyclic dependencies, such as call, component, and include cycles. + \row + \li \inlineimage icons/axivion-de.png + \li \uicontrol DE + \li Dead entities are callable entities in the source code that cannot + be reached from the entry points of the system under analysis. + \row + \li \inlineimage icons/axivion-mv.png + \li \uicontrol MV + \li Violations of metrics based on lines and tokens, + nesting, cyclomatic complexity, control flow, and so on. + \row + \li \inlineimage icons/axivion-sv.png + \li \uicontrol SV + \li Style violations, such as deviations from the naming + or coding conventions. + \endtable + + To clear the view, select \inlineimage icons/clean_pane_small.png + (\uicontrol Clear). + + To view issues, select \inlineimage icons/zoom.png + (\uicontrol {Search for Issues}). + + \section1 Filter issues + + \image qtcreator-axivion-issue-search.webp {Issues in Axivion view} + + To filter issues, select: + + \list + \li The icon of an issue type. + \li Two analyzed versions to compare. Select \uicontrol EMPTY to see + issues from the version you select in the right-side version box. + \li \inlineimage icons/arrowup.png to see only added issues. + \li \inlineimage icons/arrowdown.png to see only removed issues. + \li The owner of the issue. Select \uicontrol ANYBODY to see all issues, + \uicontrol NOBODY to see issues that are not associated with a user, + or a user name to see issues owned by a particular user. + \li Path patterns to show issues in the files in the directories that + match the pattern. + \endlist + + The information you see depends on the issue type. Double-click an issue + to see more information about it in the \uicontrol Axivion sidebar view. + + \section1 Jump to issues in the editor + + Typically, the details for cycles and clones show several paths. To view the + issues in the editor: + + \list + \li Click in a location column (that shows a file or line) to open the + respective location (if it can be found). + \li Click in other columns to open the first link in the issue details. + Usually, it leads to the \uicontrol {Left location} or + \uicontrol {Source location}. + \endlist + + The easiest way to jump to the \uicontrol {Right location} is to + select the link in the details or in the \uicontrol {Right Path} + or \uicontrol {Target Path} column. + + \sa {Enable and disable plugins}, {Link projects to Axivion dashboards}, + {Axivion} +*/ + +/*! + \page creator-preferences-axivion.html + \previouspage creator-reference.html + + \ingroup creator-reference-preferences + + \title Axivion + + \brief Create a connection to an Axivion dashboard server. + + Set preferences for the Axivion static code analysis tool in + \preferences > \uicontrol Axivion. + + \image qtcreator-preferences-axivion.webp {General tab in Axivion Preferences} + + To connect to an Axivion dashboard server: \list 1 - \li Select \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. + \li In \uicontrol Username, enter the username to access the server. \endlist - \section1 Linking to Dashboards + The first time you access the server, you must enter the password that + matches the username. It is stored safely in your keychain that is provided + by the OS for later use. - To link a project to a dashboard: + Select \uicontrol {Highlight marks} to highlight found issues on the + scrollbar in the editor. + + \sa {Enable and disable plugins}, {Link projects to Axivion dashboards}, + {Prevent code erosion} +*/ + +/*! + \page creator-link-axivion-dashboards.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-projects-configure + + \title Link projects to Axivion dashboards + + To link a project to an Axivion dashboard: \list 1 \li \uicontrol Projects > \uicontrol {Project Settings} > @@ -78,26 +193,5 @@ 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). - - \sa {Enable and disable plugins} + \sa {Enable and disable plugins}, {Prevent code erosion}, {Axivion} */ diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc index 27ff2fccff9..7902f219389 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc @@ -79,6 +79,7 @@ the project: \list + \li \l{Link projects to Axivion dashboards}{Axivion} \li \l{Specify clangd settings}{Clangd} \li \l{Speficy Clang tools settings}{Clang Tools} \li \l{Specify code style}{C++ Code Style} diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index 933fadb3a0e..c1b310e6c9c 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -102,7 +102,6 @@ \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} From bb15322af84fb3b13cd79f3c73fc33b5f03c5492 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 1 Mar 2024 12:17:11 +0100 Subject: [PATCH 24/56] Update qbs submodule to HEAD of 2.3 branch Change-Id: I3c4dd9307c74e3fef12bccdc54c13f96dd252e97 Reviewed-by: 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 60a18f09fa5..75aca0dca12 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 60a18f09fa547af064fb851e72b816ee25bf71a3 +Subproject commit 75aca0dca12c6c94109e65ee035b6b533b33a3c5 From 217b6eae033d178ed33a2cbcdfbb0671d46545ee Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 26 Feb 2024 13:53:56 +0100 Subject: [PATCH 25/56] Doc: Describe using junction points on Windows Task-number: QTCREATORBUG-30209 Change-Id: If6692b697e92a6d3fdffaaddc268cab82f50afd4 Reviewed-by: Cristian Adam --- .../qtcreator-preferences-cmake-general.webp | Bin 3406 -> 3816 bytes .../creator-projects-cmake-building.qdoc | 20 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/doc/qtcreator/images/qtcreator-preferences-cmake-general.webp b/doc/qtcreator/images/qtcreator-preferences-cmake-general.webp index e6b7de61f33ee971d1ec0503cf0d4c5e2c7c0e52..fb3b61eff00ef6d03092812d35e71c973b37cddc 100644 GIT binary patch literal 3816 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 SYrgOQ%`fZC{`O~gvj705;9M5~ literal 3406 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 diff --git a/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc b/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc index c8da5117fb6..6f5508312f5 100644 --- a/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc +++ b/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc @@ -200,6 +200,26 @@ \image qtcreator-build-configuration-set-clicolor-force.webp {Build Environment with CLICOLOR_FORCE set} + \section1 Using Junction Points on Windows + + To overcome issues with long paths on Windows, create and use + \l{https://learn.microsoft.com/en-us/sysinternals/downloads/junction} + {junction points} for the source and build directories. At a junction point, + a directory serves as an alias to another directory on the computer. + + To use the junction points for CMake configure, build, and install + operations, go to \preferences > \uicontrol CMake > \uicontrol General and + select \uicontrol {Use junctions for CMake configuration and build operations}. + + \image qtcreator-preferences-cmake-general.webp {CMake General preferences} + + \QC stores junction points in \c {C:\ProgramData\QtCreator\Links}. To use + another path, set it as the value of the \c QTC_CMAKE_JUNCTIONS_DIR + environment variable. + + Set the \c QTC_CMAKE_JUNCTIONS_HASH_LENGTH environment variable to shorten + the MD5 hash key length from the default length value of 32. + \section1 CMake Build Steps \QC builds CMake projects by running \c {cmake . --build}, which then runs From 51ca09c2d7128308c10371beb0691761df702e07 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 23 Feb 2024 17:00:33 +0100 Subject: [PATCH 26/56] Doc: Describe the "Edit Checks as String" option for Clazy Task-number: QTCREATORBUG-30209 Change-Id: I56d2f9d9a18f474ab0228c9c64bbde2101d49429 Reviewed-by: Alessandro Portale --- dist/changelog/changes-13.0.0.md | 2 +- doc/qtcreator/images/qtcreator-clazy.png | Bin 22558 -> 0 bytes doc/qtcreator/images/qtcreator-clazy.webp | Bin 0 -> 14428 bytes .../analyze/creator-clang-static-analyzer.qdoc | 10 +++++++--- 4 files changed, 8 insertions(+), 4 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-clazy.png create mode 100644 doc/qtcreator/images/qtcreator-clazy.webp diff --git a/dist/changelog/changes-13.0.0.md b/dist/changelog/changes-13.0.0.md index 82530d29768..163b25914cb 100644 --- a/dist/changelog/changes-13.0.0.md +++ b/dist/changelog/changes-13.0.0.md @@ -210,7 +210,7 @@ Analyzer ### Clang -* Added `Edit Checks as Strings` for Clazy +* Added `Edit Checks as String` for Clazy ([QTCREATORBUG-24846](https://bugreports.qt.io/browse/QTCREATORBUG-24846)) ### Axivion diff --git a/doc/qtcreator/images/qtcreator-clazy.png b/doc/qtcreator/images/qtcreator-clazy.png deleted file mode 100644 index 15dfb0aeb6b49e52bba350744183f65d2101734b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22558 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

L^zwo~~hBE%DPVb){+O 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 diff --git a/doc/qtcreator/images/qtcreator-clazy.webp b/doc/qtcreator/images/qtcreator-clazy.webp new file mode 100644 index 0000000000000000000000000000000000000000..1a7243b781807b2c352cb717bdab61b9a770b9fd GIT binary patch literal 14428 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/analyze/creator-clang-static-analyzer.qdoc b/doc/qtcreator/src/analyze/creator-clang-static-analyzer.qdoc index c13e626edc6..b1b1cd9a8fa 100644 --- a/doc/qtcreator/src/analyze/creator-clang-static-analyzer.qdoc +++ b/doc/qtcreator/src/analyze/creator-clang-static-analyzer.qdoc @@ -247,20 +247,24 @@ \l{https://clang-analyzer.llvm.org/available_checks.html} {Clang Static Analyzer documentation}. - \li To edit the selected check as plain text, select + \li To edit the selected checks as plain text, select \uicontrol {Edit Checks as String}. \li In the \uicontrol {Clazy Checks} tab, select the level of Clazy checks to perform. - \image qtcreator-clazy.png {Clazy Checks tab} + \image qtcreator-clazy.webp {Clazy Checks tab} + + \li To edit the selected checks as plain text, select + \uicontrol {Edit Checks as String}. + \li In the \uicontrol Filters field, select topics to view only checks related to those areas in the \uicontrol Checks field. To filter the checks in the selected areas, enter a string in the \uicontrol {Filter by name} field. - \li To view all checks again, select \uicontrol {Reset Filter}. + \li To view all checks again, select \uicontrol {Reset Topic Filter}. \li To view more information about the checks online, select the \uicontrol {Web Page} links next to them. From 642c4beac1afed0ed2906865140b3b8da212ccab Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 19 Feb 2024 11:32:11 +0100 Subject: [PATCH 27/56] Doc: Split up Refactoring into how-to topics - Move info about viewing search results to the Search Results View reference topic - Remove the Refactoring top-level topic (the general info is now in the Overview topic) Task-number: QTCREATORBUG-29361 Change-Id: I4072e628368905ed1d5006ececae1b9eaa02fa10 Reviewed-by: Eike Ziller --- .../src/editors/creator-code-refactoring.qdoc | 111 ++++-------------- doc/qtcreator/src/editors/creator-coding.qdoc | 9 +- .../creator-only/creator-clang-codemodel.qdoc | 4 +- .../creator-only/creator-cpp-quick-fixes.qdoc | 12 +- .../creator-how-to-find-symbols.qdoc | 60 ++++++++++ .../creator-only/creator-language-server.qdoc | 4 +- .../src/editors/creator-quick-fixes.qdoc | 23 ++-- doc/qtcreator/src/editors/creator-search.qdoc | 2 +- doc/qtcreator/src/qtcreator-toc.qdoc | 1 - doc/qtcreator/src/qtcreator.qdoc | 1 - .../creator-open-documents-view.qdoc | 8 +- .../creator-reference-output-views.qdoc | 6 + .../developers/studio-jump-to-the-code.qdoc | 2 +- .../src/overviews/studio-finding.qdoc | 4 + .../src/qtdesignstudio-faq.qdoc | 2 +- .../src/qtdesignstudio-toc.qdoc | 4 +- .../src/views/qtquick-text-editor.qdoc | 25 +++- 17 files changed, 155 insertions(+), 123 deletions(-) create mode 100644 doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc diff --git a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc index 413ffe9ef54..5a94f1c08d3 100644 --- a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc +++ b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc @@ -2,100 +2,35 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! - \page creator-editor-refactoring.html - \previouspage creator-jump-to-the-code.html - \nextpage creator-editor-options.html - - \title Refactoring - - To quickly and conveniently apply actions to refactor your - code, \l{Apply quick fixes}{select quick fixes in a context menu}. - - By default, the refactored files are saved automatically. To disable - this feature, deselect \preferences > \uicontrol Environment > - \uicontrol System > \uicontrol {Auto-save files after refactoring}. - - \if defined(qtcreator) - \section1 Finding Symbols - - To find instances of a specific symbol in your Qt C++ project, place the - cursor on the symbol in the editor and select \uicontrol Tools > - \uicontrol {C++} > \uicontrol {Find References to Symbol Under Cursor} or - press \key {Ctrl+Shift+U}. - - \image qtcreator-find-references-to-symbol-under-cursor.png {Search results for finding references to symbols} - - To view the same results color-coded according to the access type, such as - read, write, or declaration, select \uicontrol Tools > \uicontrol {C++} > - \uicontrol {Find References with Access Type}. - - \note Select \uicontrol Edit > \uicontrol {Find/Replace} > - \uicontrol {Advanced Find} > \uicontrol {C++ Symbols} to search for - classes, functions, enums, and declarations (including type aliases) either - from files listed as part of the project or from all files that are used by - the code, such as include files. - \image qtcreator-search-cpp-symbols.png - \endif - - \section1 Viewing Search Results - - \QC searches from the following locations: - - \list - \li Files listed as a part of the project - \li Files directly used by the project files (for example, generated - files) - \if defined(qtcreator) - \li Header files of used frameworks and libraries - \endif - \endlist - - \l{Search Results View} shows the location and number of search hits in the - current project. - - \if defined(qtcreator) - \image qtcreator-refactoring-find.png + \page creator-how-to-rename-symbols.html + \if defined(qtdesignstudio) + \previouspage studio-finding.html \else - \image qml-find-usages.png + \previouspage creator-how-tos.html \endif - Browse the search results in the following ways: + \ingroup creator-how-to-search - \list - \li To go directly to an instance, double-click the instance in - \uicontrol {Search Results}. - \li To move between instances, click the \inlineimage icons/next.png - (\uicontrol {Next Item}) button and \inlineimage icons/prev.png - (\uicontrol {Previous Item}) button in \uicontrol {Search Results}. - \li To expand and collapse the list of all instances, click the - \inlineimage icons/qtcreator-expand.png - (\uicontrol {Expand All}) button. - \li To filter the search results for the usage of symbols according to - access type, such as read, write, or declaration, click the - \inlineimage icons/filtericon.png - (\uicontrol {Filter Tree}) button and select the access type. - \li To clear the search results, click the - \inlineimage icons/clean_pane_small.png - (\uicontrol Clear) button. - \li To start a new search, click the - \inlineimage icons/qtcreator-new-search-icon.png - (\uicontrol {New Search}) button. - \endlist - - \section1 Renaming Symbols + \title Rename symbols You can rename symbols in all files in a project. + \if defined(qtcreator) When you rename a class, you can also change filenames that match the class name. - To rename a C++ symbol in a project, place the cursor - on it and select \uicontrol Tools > \uicontrol {C++} > - \uicontrol {Rename Symbol Under Cursor} or press \key {Ctrl+Shift+R}. - Use the keyboard shortcut to rename Python symbols. + To rename a C++ symbol in a project: + + \list 1 + \li Place the cursor on the symbol in the editor. + \li Go to \uicontrol Tools > \uicontrol {C++} > + \uicontrol {Rename Symbol Under Cursor}, or press \key {Ctrl+Shift+R}. + + Use the keyboard shortcut to rename Python symbols. + \endlist \endif - To rename a QML type in a project, select \uicontrol Tools > + To rename a QML type in a project, go to \uicontrol Tools > \uicontrol {QML/JS} > \uicontrol {Rename Symbol Under Cursor} or press \key {Ctrl+Shift+R}. @@ -109,23 +44,23 @@ \endif To replace all selected instances, enter the name of the new symbol - in the \uicontrol {Replace with} text box, and select \uicontrol Replace. - To omit an instance, deselect the check box next to the instance. + in \uicontrol {Replace with}, and select \uicontrol Replace. + To omit an instance, clear the check box next to the instance. \note This action replaces all selected instances of the symbol in all files listed in \uicontrol {Search Results}. You cannot undo this action. \if defined(qtcreator) - If the symbol is a class, select the \uicontrol {Rename files} check - box to also change the filenames that match the class name. + If the symbol is a class, select \uicontrol {Rename files} to also change + the filenames that match the class name. \note Renaming local symbols does not open \uicontrol {Search Results}. The instances of the symbol are highlighted in code, and you can edit the symbol. All instances of the local symbol are changed as you type. - \sa {Specify settings for quick fixes}, {Quick Fixes}, {C++ Quick Fixes} - + \sa {Find symbols}, {Specify settings for quick fixes}, {Quick Fixes}, + {C++ Quick Fixes} \endif \sa {Apply quick fixes}, {QML Quick Fixes} diff --git a/doc/qtcreator/src/editors/creator-coding.qdoc b/doc/qtcreator/src/editors/creator-coding.qdoc index 38c6f3f5963..5df03c90ccd 100644 --- a/doc/qtcreator/src/editors/creator-coding.qdoc +++ b/doc/qtcreator/src/editors/creator-coding.qdoc @@ -46,13 +46,6 @@ and file systems. \endif - \li \l{Refactoring} - - Code refactoring is the process of improving and simplifying code - without modifying the existing functionality of an application. You - can easily find and rename symbols and apply predefined actions to - refactor code. - \li \l{Configuring the Editor} You can change the fonts, colors, highlighting, and indentation. @@ -65,5 +58,7 @@ \if defined(qtcreator) \sa {Using GitHub Copilot} + \else + \sa {Apply quick fixes} \endif */ diff --git a/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc b/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc index 1bc7cd48bc9..b958f836558 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc @@ -38,7 +38,9 @@ \li \l{View function tooltips}{Tooltips} - \li \l{Finding Symbols}{Finding and renaming symbols} + \li \l{Find symbols}{Finding symbols} + + \li \l{Rename symbols}{Renaming symbols} \li \l{Apply quick fixes}{Quick fixes} diff --git a/doc/qtcreator/src/editors/creator-only/creator-cpp-quick-fixes.qdoc b/doc/qtcreator/src/editors/creator-only/creator-cpp-quick-fixes.qdoc index 7df63851dc7..44cc63bbf60 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-cpp-quick-fixes.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-cpp-quick-fixes.qdoc @@ -70,8 +70,8 @@ To return non-trivial objects by using a \c const reference, select the \uicontrol {Return non-value types by const reference} check box. - \sa {Apply quick fixes}, {Specify settings for quick fixes}, - {C++ Quick Fixes}, {QML Quick Fixes}, {Refactoring} + \sa {Apply quick fixes}, {Find symbols}, {Rename symbols}, + {Specify settings for quick fixes}, {C++ Quick Fixes}, {QML Quick Fixes} */ /*! @@ -786,8 +786,8 @@ \li Documentation comment for a function \endtable - \sa {Apply quick fixes}, {Specify settings for quick fixes}, - {QML Quick Fixes}, {Quick Fixes}, {Refactoring} + \sa {Apply quick fixes}, {Find symbols}, {Rename symbols}, + {Specify settings for quick fixes}, {QML Quick Fixes}, {Quick Fixes} */ /*! @@ -811,6 +811,6 @@ delete the custom settings, select \uicontrol {Use global settings}, and then select \uicontrol {Delete Custom Settings File}. - \sa {Apply quick fixes}, {C++ Quick Fixes}, {QML Quick Fixes}, {Quick Fixes}, - {Configuring Projects}, {Refactoring} + \sa {Apply quick fixes}, {Find symbols}, {Rename symbols}, + {C++ Quick Fixes}, {QML Quick Fixes}, {Quick Fixes}, {Configuring Projects} */ diff --git a/doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc b/doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc new file mode 100644 index 00000000000..b377f8c7da0 --- /dev/null +++ b/doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc @@ -0,0 +1,60 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page creator-editor-how-to-find-symbols.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-search + + \title Find symbols + + You can search for references to a particular symbol or search for symbols + with a name that matches a pattern. + + \section1 Find references to a symbol + + To find instances of a particular symbol in your Qt C++ project: + + \list 1 + \li Place the cursor on the symbol in the editor. + \li Go to \uicontrol Tools > \uicontrol {C++} > + \uicontrol {Find References to Symbol Under Cursor}, + or press \key {Ctrl+Shift+U}. + \image qtcreator-find-references-to-symbol-under-cursor.png {Search results for finding references to symbols} + \endlist + + \section2 Color-code access type + + To view the same results color-coded according to the access type, such as + read, write, or declaration, go to \uicontrol Tools > \uicontrol {C++} > + \uicontrol {Find References with Access Type}. + + \section1 Find symbols that match search criteria + + Go to \uicontrol Edit > \uicontrol {Find/Replace} > + \uicontrol {Advanced Find} and select \uicontrol {C++ Symbols} to search for + classes, functions, enums, and declarations (including type aliases) either + from files listed as part of the project or from all files that are used by + the code, such as include files. + + \image qtcreator-search-cpp-symbols.png + + \QC searches from the following locations: + + \list + \li Files listed as a part of the project + \li Files directly used by the project files (for example, generated + files) + \li Header files of used frameworks and libraries + \endlist + + \section1 View found symbols + + \l{Search Results View} shows the location and number of search hits in the + current project. + + \image qtcreator-refactoring-find.png + + \sa {Search}{How To: Search}, {Search Results View} +*/ diff --git a/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc b/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc index a89ca3c7ef8..7572451a83e 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc @@ -36,8 +36,8 @@ \l{Outline} view or in the \uicontrol Symbols list on the \l{Edit Mode}{editor toolbar} \li \l{Call Hierarchy}{Viewing the callers and callees of a function} - \li \l{Finding Symbols}{Finding references to symbols} - \li \l{Renaming Symbols}{Renaming the symbol under cursor} + \li \l{Find references to a symbol}{Finding references to symbols} + \li \l{Rename symbols}{Renaming the symbol under the cursor} \li Code actions \li Displaying diagnostics from the language server as tooltips. You can also select a code range to display diagnostics for. diff --git a/doc/qtcreator/src/editors/creator-quick-fixes.qdoc b/doc/qtcreator/src/editors/creator-quick-fixes.qdoc index af49d65612d..a2db91d7610 100644 --- a/doc/qtcreator/src/editors/creator-quick-fixes.qdoc +++ b/doc/qtcreator/src/editors/creator-quick-fixes.qdoc @@ -4,12 +4,14 @@ /*! \page creator-editor-quick-fixes.html \if defined(qtdesignstudio) - \previouspage creator-editor-refactoring.html + \previouspage creator-jump-to-the-code.html + \nextpage creator-reference-qml-quick-fixes.html \else \previouspage creator-how-tos.html \endif \ingroup creator-how-to-edit + \ingroup studio-code-view \title Apply quick fixes @@ -35,6 +37,10 @@ Or, press \key {Alt+Enter} to open a context menu that has quick fixes available in the current cursor position. + By default, the refactored files are saved automatically. To turn off + this feature, go to \preferences > \uicontrol Environment > + \uicontrol System and select \uicontrol {Auto-save files after refactoring}. + \if defined(qtcreator) \section1 Create functions @@ -85,21 +91,24 @@ \image qtcreator-refactoring-constructor.png "Constructor dialog" - \sa {Specify settings for quick fixes}, {Quick Fixes}, {C++ Quick Fixes} + \sa {Find symbols}, {Specify settings for quick fixes}, {Quick Fixes}, + {C++ Quick Fixes} \endif - \sa {QML Quick Fixes}, {Refactoring} + \sa {Rename symbols}, {QML Quick Fixes} */ /*! \page creator-reference-qml-quick-fixes.html \if defined(qtdesignstudio) - \previouspage creator-editor-refactoring.html + \previouspage creator-editor-quick-fixes.html + \nextpage creator-editor-options.html \else \previouspage creator-reference.html \endif \ingroup creator-reference + \ingroup studio-code-view \title QML Quick Fixes @@ -168,10 +177,10 @@ \endtable - \sa {Apply quick fixes}, {Refactoring} + \sa {Apply quick fixes}, {Rename symbols} \if defined(qtcreator) - \sa {Exclude files from to-do lists}, {Specify settings for quick fixes}, - {Quick Fixes}, {C++ Quick Fixes} + \sa {Exclude files from to-do lists}, {Find symbols}, + {Specify settings for quick fixes}, {Quick Fixes}, {C++ Quick Fixes} \endif */ diff --git a/doc/qtcreator/src/editors/creator-search.qdoc b/doc/qtcreator/src/editors/creator-search.qdoc index 42ca482a5f3..e47957f48e1 100644 --- a/doc/qtcreator/src/editors/creator-search.qdoc +++ b/doc/qtcreator/src/editors/creator-search.qdoc @@ -215,7 +215,7 @@ \l {Preserve case when replacing} apply here as well. \if defined(qtcreator) - \sa {Search}{How To: Search}, {Finding Symbols}, {Turn on Silver Searcher} + \sa {Search}{How To: Search}, {Find symbols}, {Turn on Silver Searcher} \else \sa {Search in current file} \endif diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index c1b310e6c9c..1f5acccca57 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -36,7 +36,6 @@ \li \l{Using Text Editing Macros} \li \l{Comparing Files} \endlist - \li \l{Refactoring} \li \l{Configuring the Editor} \li \l{Using GitHub Copilot} \endlist diff --git a/doc/qtcreator/src/qtcreator.qdoc b/doc/qtcreator/src/qtcreator.qdoc index eaceebf177d..f828eb6995c 100644 --- a/doc/qtcreator/src/qtcreator.qdoc +++ b/doc/qtcreator/src/qtcreator.qdoc @@ -50,7 +50,6 @@ \li \b {\l{Coding}} \list \li \l{Writing Code} - \li \l{Refactoring} \li \l{Configuring the Editor} \endlist \li \b {\l{Building and Running}} diff --git a/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc b/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc index 3eb7a3c2d4c..87760c448c6 100644 --- a/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc +++ b/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc @@ -49,7 +49,7 @@ automatically save changed files at the intervals specified in the \uicontrol Interval field. \li Select the \uicontrol {Auto-save files after refactoring} check - box to automatically save \l{Refactoring}{refactored files}. + box to automatically save refactored files. \li Select the \uicontrol {Auto-suspend unmodified files} check box to automatically free the resources of open files after prolonged inactivity. The files are still listed in the @@ -62,4 +62,10 @@ field, set the number of recently opened files listed in \uicontrol File > \uicontrol {Recent Files}. \endlist + + \sa {Apply quick fixes}, {Rename symbols} + + \if defined(qtcreator) + \sa {Find symbols} + \endif */ diff --git a/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc b/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc index 60b8b72d5af..0381320085f 100644 --- a/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc +++ b/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc @@ -142,8 +142,14 @@ \list \li To clear the search results, select \inlineimage icons/clean_pane_small.png (\uicontrol Clear). + \li To move between instances, select \inlineimage icons/next.png + (\uicontrol {Next Item}) and \inlineimage icons/prev.png + (\uicontrol {Previous Item}). \li To expand and collapse the search results, select \inlineimage icons/qtcreator-expand.png (\uicontrol {Expand All}). + \li To filter the search results for the usage of symbols according to + access type, such as read, write, or declaration, select + \inlineimage icons/filtericon.png (\uicontrol {Filter Tree}). \li To start a new search, select \inlineimage icons/qtcreator-new-search-icon.png (\uicontrol {New Search}). diff --git a/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc b/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc index d5a83080bfd..f5e9425e009 100644 --- a/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc +++ b/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc @@ -4,7 +4,7 @@ /*! \previouspage creator-editor-locator.html \page creator-jump-to-the-code.html - \nextpage creator-editor-refactoring.html + \nextpage creator-editor-quick-fixes.html \title Jump to the Code diff --git a/doc/qtdesignstudio/src/overviews/studio-finding.qdoc b/doc/qtdesignstudio/src/overviews/studio-finding.qdoc index bd1e24a5053..188c7a6cc64 100644 --- a/doc/qtdesignstudio/src/overviews/studio-finding.qdoc +++ b/doc/qtdesignstudio/src/overviews/studio-finding.qdoc @@ -20,6 +20,10 @@ With advanced search, you can search in currently open projects or files on the file system. + \li \l{Rename symbols} + + Search for QML types and rename them in all files in a project. + \li \l{Searching with the Locator} Use the locator to browse diff --git a/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc index f7dec4de039..8f7267e0d3d 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc +++ b/doc/qtdesignstudio/src/qtdesignstudio-faq.qdoc @@ -109,7 +109,7 @@ However, you can rename symbols in all files within a project. To rename a QML type in a project, select \uicontrol Tools > \uicontrol QML/JS > \uicontrol {Rename Symbol Under Cursor} or press \key Ctrl+Shift+R. For more - information, see \l {Renaming Symbols}. + information, see \l {Rename symbols}. \section2 How can I add .qml files to my project in Qt Creator? diff --git a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc index f18a71fb65a..5c34bad6e86 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc +++ b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc @@ -213,10 +213,12 @@ \list \li \l{Search in current file} \li \l{Search in projects or file systems} + \li \l{Rename symbols} \li \l{Searching with the Locator} \li \l{Jump to the Code} \endlist - \li \l{Refactoring} + \li \l{Apply quick fixes} + \li \l{QML quick fixes} \li \l{Configuring the Editor} \list \li \l{Font & Colors} diff --git a/doc/qtdesignstudio/src/views/qtquick-text-editor.qdoc b/doc/qtdesignstudio/src/views/qtquick-text-editor.qdoc index f2f5a80ade4..f6666daa50b 100644 --- a/doc/qtdesignstudio/src/views/qtquick-text-editor.qdoc +++ b/doc/qtdesignstudio/src/views/qtquick-text-editor.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -17,10 +17,6 @@ You can also view and modify other types of text files. - To open the search dialog in the \uicontrol {Code} view, go to - \uicontrol Edit > \uicontrol {Find/Replace} > \uicontrol {Find/Replace}. - You can also select \key Ctrl + \key {F}. - The view offers the following features: \list @@ -30,4 +26,23 @@ \li \l{Indent text or code} \li \l{Using Qt Quick Toolbars} \endlist + + \section1 Refactoring Code + + Code refactoring is the process of improving and simplifying code without + modifying the existing functionality of an application. You can easily find + and rename symbols and apply quick fixes in the \uicontrol Code view to + refactor code. + + \section1 Searching in Code + + To open the search dialog in the \uicontrol {Code} view: + + \list + \li Go to \uicontrol Edit > \uicontrol {Find/Replace} > + \uicontrol {Find/Replace}. + \li Select \key Ctrl + \key {F} (or \key Cmd + \key F on \macos). + \endlist + + \sa {Finding}, {Apply quick fixes}, {QML Quick Fixes} */ From 44b6dea74048a7a860795d299b89c84588e8b7b4 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Fri, 1 Mar 2024 14:42:29 +0100 Subject: [PATCH 28/56] CompilerExplorer: Use volatile Currently the user can't change the Url. This is for the future. Change-Id: I7854c1dc0e680c9aa4bbb41d44dbcb9540a3b34b Reviewed-by: Cristian Adam --- src/plugins/compilerexplorer/compilerexplorersettings.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/compilerexplorer/compilerexplorersettings.h b/src/plugins/compilerexplorer/compilerexplorersettings.h index 4b3ac849a2c..cd8c9533638 100644 --- a/src/plugins/compilerexplorer/compilerexplorersettings.h +++ b/src/plugins/compilerexplorer/compilerexplorersettings.h @@ -39,7 +39,8 @@ public: Api::Config apiConfig() const { - return Api::Config(Utils::NetworkAccessManager::instance(), compilerExplorerUrl()); + return Api::Config(Utils::NetworkAccessManager::instance(), + compilerExplorerUrl.volatileValue()); } }; From 5d41ab126f84dccf9351deaeb296751aeb6ed8e3 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 29 Feb 2024 17:22:57 +0100 Subject: [PATCH 29/56] ProjectExplorer: Expand selected details widgets in target setup page Rationale: - Selecting and unselecting should behave symmetrically. - The user is informed of and can easily change the set of pre-configured build configurations. Fixes: QTCREATORBUG-30412 Change-Id: I86e6a41c3baed280df9a694d6cf6eb631cb537f9 Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Marcus Tillmanns --- src/plugins/projectexplorer/targetsetupwidget.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/targetsetupwidget.cpp b/src/plugins/projectexplorer/targetsetupwidget.cpp index 3ccf02b38de..0e2127706fb 100644 --- a/src/plugins/projectexplorer/targetsetupwidget.cpp +++ b/src/plugins/projectexplorer/targetsetupwidget.cpp @@ -103,6 +103,7 @@ void TargetSetupWidget::setKitSelected(bool b) b &= hasSelectedBuildConfigurations(); const GuardLocker locker(m_ignoreChanges); m_detailsWidget->setChecked(b); + m_detailsWidget->setState(b ? DetailsWidget::Expanded : DetailsWidget::Collapsed); m_detailsWidget->widget()->setEnabled(b); } @@ -168,12 +169,7 @@ void TargetSetupWidget::targetCheckBoxToggled(bool b) if (m_ignoreChanges.isLocked()) return; m_detailsWidget->widget()->setEnabled(b); - if (b && (contains(m_infoStore, &BuildInfoStore::hasIssues) - || !contains(m_infoStore, &BuildInfoStore::isEnabled))) { - m_detailsWidget->setState(DetailsWidget::Expanded); - } else if (!b) { - m_detailsWidget->setState(DetailsWidget::Collapsed); - } + m_detailsWidget->setState(b ? DetailsWidget::Expanded : DetailsWidget::Collapsed); emit selectedToggled(); } From 832fde9e0e359c5b6a7ce8d2f3441028acd03206 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 15 Feb 2024 10:33:27 +0100 Subject: [PATCH 30/56] CMake: Exclude non-project CMake files from search All the CMake files the belong to packages found with `find_package` are part of the project tree, but we shouldn't include them when searching through "files in the project". Set listInProjects to false for these files. Fixes: QTCREATORBUG-30372 Change-Id: If39d477f14dc3207f4e2dd66b2f3969811dbd863 Reviewed-by: Cristian Adam Reviewed-by: --- .../cmakeprojectmanager/projecttreehelper.cpp | 16 ++++++++++------ .../cmakeprojectmanager/projecttreehelper.h | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp index fb7ca301667..e17505095a6 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.cpp +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.cpp @@ -35,7 +35,8 @@ void addCMakeVFolder(FolderNode *base, int priority, const QString &displayName, std::vector> &&files, - bool sourcesOrHeaders) + bool sourcesOrHeaders, + bool listInProject) { if (files.size() == 0) return; @@ -45,6 +46,10 @@ void addCMakeVFolder(FolderNode *base, folder = newFolder.get(); base->addNode(std::move(newFolder)); } + if (!listInProject) { + for (auto it = files.begin(); it != files.end(); ++it) + (*it)->setListInProject(false); + } folder->addNestedNodes(std::move(files)); folder->forEachFolderNode([] (FolderNode *fn) { fn->compress(); }); } @@ -68,10 +73,7 @@ void addCMakeInputs(FolderNode *root, std::unique_ptr cmakeVFolder = std::make_unique(root->filePath()); QSet knownFiles; - root->forEachGenericNode([&knownFiles](const Node *n) { - if (n->listInProject()) - knownFiles.insert(n->filePath()); - }); + root->forEachGenericNode([&knownFiles](const Node *n) { knownFiles.insert(n->filePath()); }); addCMakeVFolder(cmakeVFolder.get(), sourceDir, @@ -87,7 +89,9 @@ void addCMakeInputs(FolderNode *root, Utils::FilePath(), 10, Tr::tr(""), - removeKnownNodes(knownFiles, std::move(rootInputs))); + removeKnownNodes(knownFiles, std::move(rootInputs)), + /*sourcesOrHeaders=*/false, + /*listInProject=*/false); root->addNode(std::move(cmakeVFolder)); } diff --git a/src/plugins/cmakeprojectmanager/projecttreehelper.h b/src/plugins/cmakeprojectmanager/projecttreehelper.h index 08707360ed4..bcd5500db97 100644 --- a/src/plugins/cmakeprojectmanager/projecttreehelper.h +++ b/src/plugins/cmakeprojectmanager/projecttreehelper.h @@ -21,7 +21,8 @@ void addCMakeVFolder(ProjectExplorer::FolderNode *base, int priority, const QString &displayName, std::vector> &&files, - bool sourcesOrHeaders = false); + bool sourcesOrHeaders = false, + bool listInProject = true); std::vector> &&removeKnownNodes( const QSet &knownFiles, From 36c7d971c36b966560a42e453175a5077b3ec6ab Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 Mar 2024 09:34:11 +0100 Subject: [PATCH 31/56] LSP: Fix missing icons in call hierarchy Change-Id: I8b10392ac28689ce80dc818cba5ff58f21becb81 Reviewed-by: David Schulz --- src/libs/languageserverprotocol/callhierarchy.cpp | 2 +- src/libs/languageserverprotocol/callhierarchy.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libs/languageserverprotocol/callhierarchy.cpp b/src/libs/languageserverprotocol/callhierarchy.cpp index fc61faf6644..4b19d71fa82 100644 --- a/src/libs/languageserverprotocol/callhierarchy.cpp +++ b/src/libs/languageserverprotocol/callhierarchy.cpp @@ -7,7 +7,7 @@ namespace LanguageServerProtocol { bool CallHierarchyItem::isValid() const { - return contains(nameKey) && contains(symbolKindKey) && contains(rangeKey) && contains(uriKey) + return contains(nameKey) && contains(kindKey) && contains(rangeKey) && contains(uriKey) && contains(selectionRangeKey); } diff --git a/src/libs/languageserverprotocol/callhierarchy.h b/src/libs/languageserverprotocol/callhierarchy.h index a284611a127..1cc022d6d1f 100644 --- a/src/libs/languageserverprotocol/callhierarchy.h +++ b/src/libs/languageserverprotocol/callhierarchy.h @@ -15,8 +15,8 @@ public: QString name() const { return typedValue(nameKey); } void setName(const QString &name) { insert(nameKey, name); } - SymbolKind symbolKind() const { return SymbolKind(typedValue(symbolKindKey)); } - void setSymbolKind(const SymbolKind &symbolKind) { insert(symbolKindKey, int(symbolKind)); } + SymbolKind symbolKind() const { return SymbolKind(typedValue(kindKey)); } + void setSymbolKind(const SymbolKind &symbolKind) { insert(kindKey, int(symbolKind)); } Range range() const { return typedValue(rangeKey); } void setRange(const Range &range) { insert(rangeKey, range); } From add834577b45af4416e62e6ebd2cda9bd733c7ed Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 1 Mar 2024 14:58:22 +0100 Subject: [PATCH 32/56] Doc: Update info about autotests - Split the topic up into how-to and reference topics - Add and remove descriptions of preferences - Move general information to the overview - Describe qdt locator filter Task-number: QTCREATORBUG-30209 Task-number: QTCREATORBUG-29361 Change-Id: Idb29eebaeb2f77326ebbb5e6b5654c135473f329 Reviewed-by: Christian Stenger --- .../qtcreator-autotests-project-qt-test.png | Bin 9867 -> 0 bytes ...creator-autotests-project-qtquick-test.png | Bin 9287 -> 0 bytes .../images/qtcreator-new-file-test-case.webp | Bin 0 -> 6308 bytes .../qtcreator-new-project-boost-test.webp | Bin 0 -> 6572 bytes .../qtcreator-new-project-catch2-test.webp | Bin 0 -> 6958 bytes .../qtcreator-new-project-google-test.webp | Bin 0 -> 6694 bytes .../images/qtcreator-new-project-qt-test.webp | Bin 0 -> 5602 bytes .../qtcreator-new-project-qtquick-test.webp | Bin 0 -> 5368 bytes .../qtcreator-preferences-testing-qttest.webp | Bin 4594 -> 4690 bytes .../qtcreator-projects-settings-testing.webp | Bin 0 -> 3032 bytes .../images/qtcreator-test-results.webp | Bin 0 -> 5048 bytes .../howto/creator-only/creator-autotest.qdoc | 944 ++++++++++-------- .../howto/creator-only/creator-how-tos.qdoc | 12 + .../creator-only/creator-overview.qdoc | 59 +- .../creator-only/creator-reference.qdoc | 2 +- .../creator-only/creator-testing.qdoc | 7 +- .../creator-only/creator-files-creating.qdoc | 4 +- .../creator-projects-creating.qdoc | 4 +- .../projects/creator-projects-running.qdoc | 2 +- doc/qtcreator/src/qtcreator-toc.qdoc | 5 +- doc/qtcreator/src/qtcreator.qdoc | 7 +- 21 files changed, 623 insertions(+), 423 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-autotests-project-qt-test.png delete mode 100644 doc/qtcreator/images/qtcreator-autotests-project-qtquick-test.png create mode 100644 doc/qtcreator/images/qtcreator-new-file-test-case.webp create mode 100644 doc/qtcreator/images/qtcreator-new-project-boost-test.webp create mode 100644 doc/qtcreator/images/qtcreator-new-project-catch2-test.webp create mode 100644 doc/qtcreator/images/qtcreator-new-project-google-test.webp create mode 100644 doc/qtcreator/images/qtcreator-new-project-qt-test.webp create mode 100644 doc/qtcreator/images/qtcreator-new-project-qtquick-test.webp create mode 100644 doc/qtcreator/images/qtcreator-projects-settings-testing.webp create mode 100644 doc/qtcreator/images/qtcreator-test-results.webp diff --git a/doc/qtcreator/images/qtcreator-autotests-project-qt-test.png b/doc/qtcreator/images/qtcreator-autotests-project-qt-test.png deleted file mode 100644 index aa5bee758c641cdee31a196f19458ddfddfea18f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9867 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 UdrtpkU|?YIboFyt=akR{0H3h>rvLx| diff --git a/doc/qtcreator/images/qtcreator-autotests-project-qtquick-test.png b/doc/qtcreator/images/qtcreator-autotests-project-qtquick-test.png deleted file mode 100644 index 24d61b245aca3603ac8f7774911bcee1e783446e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9287 zcmeAS@N?(olHy`uVBq!ia0y~yU{+#aU`*j)Vqjnh-Y5~sz@WnC>EaktaqI2fxBW5K z6Ym%9)x2fDz_Iz1?oRFQNxubVU18P@WN>xAXcs8*m7&W|X=P!8CDFQnPt@%_&1P|R zbaZscY`9Z)J2(FCtMJvo51;#RDaGV<_5I)Xs^9Mw_j&DZ|0^(4L;L3CxWljY@08u< zUhlu^U|{Z1n;);Pe~$@%Znf{% zQxu%Ys}?w=c}>mFAL4QAL+&k$yyzxTBQ3IaXV0C$r<2QU@;AQ?={l-jy>;I_x6@f! zPG&~aZeM(QE?xAOzOReRvzuFXSzr5|y!LF>_q*lMTs>RXEJ`>1<(rp&>$v&3=cYZb zd;d9Y2@RX}ZgShjm78~E=`DWOGBh^J|7nVd`Osh^SuCmGMN|V(e&xzc+`|;fDP!U1FzODI_+wOZBFG~ykuTgO0 zynoE*tS*(li#lA3%lfXZdE{xG71ll3FD*Ch_1u%+u7vu5QjC<$>TlOMGr}UKetkAO z|KEppdzt*)u$|>{-yR-qTzfG%eDSfIS?ODExiwp@?Oq?}c8}Zp`1{OD8-kMmo#&8# z)oHu!)AY8rwc*f>(%QW%9LlnKl9=H zo#i<_yFP=``!kc@|2{6+m$Up);^g0JuKJyGEp%~lNz>nFRTVzXwHllue2tDx12d3v zhAJpOfeb*&FbgB$!cP>ku1(zij*Wrg0L#Ki1_lNbZU%;iG)4x73p%q{85kTkGcYh@ zh%qoQoLz(_{hbM}l7WE%q!>&fbU?H*F)%EMoMCva+B&dG+PLUocKEN4tl!PU(>~;_ z&ru7Pzx%QDJv#%#*;&WpHcZ%Cazi?L^2@J_tA5SS-X6C3Ro=M|YPmkU0+YGp&uv`h zzS%2x&XwPc3=W(5I?`NY|4zLcZBb?TVmAM@wBDR6J7$@-J}xlLHJQcAV4{8B|IIxE zsYu?#e7^(UvY2YWUDeL4V(wbFEOxU|(8F6%_xHQ?uJ(QDa8X3^%-Na(hK8Nj*8DZx zR(oyD4UYD?<<~y0SKqz*=&4VE&$)gcN^O_$)8gIr{E3Q(^7yldEU#ocxThr{61HYgWwVx%nB7SA2JV z$YpI~&A@QhDq~jYo8Z;5S?8or-OY-9STfV^sOYZju(Kui99X&Tg*{I66>dz<3QOLt z_4R$|=B)Lb9XDIq&TBPTLyya78*hgGIxv(0}3o?k@GyzB#kh zK5+fy*9L6+mtDPfMQs1Bo4Zvvm#&@M7Ad`Xb<|m}H6p+6E@}L_F5s2>wT%$_3k;} zzq8l;Iyl!+KVssfTQ4_nd9QQE#FTeeNLuTwFzeDQYc6^CY+UWPb-@CrmrKp69Nf=l z<%QR6S$1Q~-K?-&=Pc9Jj~8q1IjD73KYWsyMn>4%x$hT5Dz7U@nas$*?z4GOp2F*C zPUeDN*^kb3KeajV?5xn}=)Du}8lBAwpD=6Q`UiTg&ROXlU9&=O-9xf-*QRZ~^Yh{?(^p)XVhk77M4dhLt)(uN&2)8~(JQNGt5%A9 z>yg^~;>-4G<(`xb%cC2Y-tA3W`n241*401l?UpxJ&9~pHxj0g{KP`OL)vD*^rn5qC zIB#Z1xTntBt{3`7-#LHcTDzBanKQ1K1RK1H*V>+%W|%v5nv;1= zh-2p8;J?4-{aUxH=2A{fmd@F%yz8gZ^lNLBw`6_-J9Bc{)q6j0nVId8f38smY3 z*Vml-61gqI_J95N$diu(9P_gcW=;K{aO{@qhpkzrUuT&AW7Ou*S$)@2JL zufE$>yE1rXx^6$yw)&P!C-_S=^gm184Sl{&{mq@f$0uLgwtCCvGSNT(GOz9EPZRfk zF#CN?uJr9^b8p+3cc(EjoINCw#s(@y%KTp+*I{H}nAK{lmu-BSnStT#p(m!@$)NlU zD`t=i4F(2=8A@k=z5HGO@Z9eIyR5kx7&5N4n7)3u{Qt>^OZOKakGFpJjER9^mZ|62 zsJ(w~h5vg#TYcW|)J<2pY!*yekX`Okzdp)RxeBh7~HepplNTc!o zzh{@%JwMC6e(%pW@ArP)UiW`({I9>;53Qg7>(K1^^?&PY9z6ed@6r7q9_rd%Y)h+N zgNoh@YZgTI|NUk@|KD8m`TxW7_g<*}9lrm^+Wo)T-~TymU-evm|G#%v?JM73j;||! zeC&4ojeqv;_GMq0k599XxOi*ozjN1q1?-%}^6}JJ-D8JiU++D%erHvibYQ3_nlF>nul*s|NjuvAr z{QW=P?-Tv@=h*c7f7kw(vAp*D|C`(OAEy4Vt@wGJ|8DL5x$f^?EsOlP{${|nf)lGE zjHJ(HU0AcD?e6-O>Hi<^p8xZ4_sIiS?du=kp8x+;x!rH|_qE^l z@A;np@AvNczYnkfd$j-0r-jybTQ*c2XMew^xMypmY4?^Q)y?6-x~nCxbwzaMo?W8I zz%aw`Y}PM__Ivfe-%a2D?b`Z3*W~{$<+rb^c-Z$KqBEuU(wYp$uvIP>%L;W?8T3lT zMekhwtytz%areP3J(-LQ4U(7F@ZYOc(YW%k^{CCkE&IOh-&gwS@%nrJ7EXS6J?!|d z-9L6l9$gy#v-0qtP2V%DWAEL2pZj(8^|Vy&7q%}oQws|}et39zJE(2o=X8GSh8;WJ z&k}v2>BGi0@s#ksoaYzL|9!i^>iPX1y@!4LY@*p^I%jq#%UTvandmNOS^e$JVtugrW zYJaGp;LM#Z|GLu>+1xh26BZPlxmDsU(^(-pWayxAO ze3^N_CoSxK6Z5(`xP@`U)Gs+VYf?WlIq~kypLV7;wmc~Do%e)KM=x=osDB+;!+ThN zfy~NCM?bG?CIZv$pHX}FiB;;feW=LXhh=r?Pcn9DeNHV~b#>a=l_ez)zn}gZuC1hG zoDsFP&vkQ}$7ZhhPT7_IA10kyv8yL7bbs3JFRJ}7h1NwJWK&)I_Q}*tQtnIvKCs*ILzOFB;ulDB7zF$v1KAyhr{gMCC zH7lckKKxdoY_%mK_ES*q)TLfsx2Lajk4|)dxM9|6QNf9kCszh9kE{Fn^g+bK^c(AR zg@5VKGUc8%^?%!&lppH%CSP8rH*2c)1m5(i`$Bdn?*7Jgu=ObEkcqZn9cQTiIlF@z1Wbt2aWvT>4hlE%Q{Xhwr@V6_NKRWxY4MxTM|N z5?A$dsoL>bif5}5UjEq`>^}Kz^731NB`5j34OK~-l9sx4 zY0?$X&0gXYWOi>f6FRe(i-Mmo zeC3ljc;OVi#|lZ(Y>y}bbX3`iN^dD0V^+T zm~?PS;>Kke?te2+i3ix^>UBPq&0gu|;=0w&u@i&#A1;*#^7r-1`%G_~X)3v(|^XxMW=Oy}l+``}z5Kc2V0_fB1ap zXUmBLk2H_|xV}_4tXy`2e`9=H+`j_vc|US;jBn4ceRO!PQC_8>;KW$fFY%ifMTQnj z@g+TV+w8aI3UB#ChwN#fPV}wU8P_^5&H8S2w(Hu_aPj=aZKm0onJ-s#beveD`X%0Y zD~laZ*xY!_i;E%+FAC{RZUc26TGD#IPH&sc1jniUpwX2!LH4=yZp=C}QF;pOG! zf1hh9DH%_>P~7@Y`%BX1uR9|zrdu6Z7W!jK`$3@}89THine1i09Lg!KNK7m&{P^VL z*Wc@h4mJ5V9uENRxS@~Q zC@=vvDi|*4Kzkhyo6)3C?_~h>IY6D6Y!mgcbMyBLY%V&a%*eoCl5HeoTU(Y9?(RR| z>fuC?0j4V#uGzf2ze)(ynem;)KJ8pQC?yr1-x=)gef#6FPJ=I^zWRD|cl>^_viM|3 za@Cs?Oy%<t#27WPm`53y>m58VgI## z-zJ1y_elcDE{!Zddb#G}giHT2!nR$rz_r%QGyT$eE++18z%!I2p zzKmz8w-TM3@yZ}aL5y4nySG;mjnrilw_UoX2+<~6#Ya)pstcZQ{2)B!cDP0@bfC&fBW}@_qE{g(~T4$)atZ^ylN-6wQqNkYih#gP-8 zOxL{jI=%hMkK%me-q>df5Kuj=(+Y z%N{qqM?S3iF2xW43I_5STw z{cTrnd9b%+k>KREsa)>aVX@I*;~9g0u(5(V<|f<>3&a;kg2McQ4#1&SvIP*wtIV;~{_zy<@LBLbid!+OUCG+Z~6 zkMrmqZ3c$3Ove;7u1w_X?AjR%8U=tjDJ^DmnE7w(%wMy$^D=p*qpkmHuYSkOa6#w7 zns>8AEyL6VUhlp4i|53tv(x23opo-LY@4%DyD#0p88zQBa$zKc!{!Ff>uWMJRww?@ zn(gVsb!6Vgo8HUCu19s{e*JZF{p-CYdYiTj?w|61YgLZpzezkI8v-_k_{TN0-Trv& z*Mk*rvaIJSJ)gV!u$0;6%_ebX3=L_GX-{LdVtckul5$<9*%`X#dy;SGQ?-kWPs}TN z7pfU{an_>0Yr>ATvmIad)cNnp&UaZ_Hv{}1y1ca7{AkUK3mdz{C8wVM85ZWb$#|co zZ}~B60fr2*jB770uDPQ4srykhTd$jlcT3Lld-t;XbbA!9^3K@WpJ4hk#$-j<42iXU z4@JN8oO&*^W$Vd%jSLQ(9X4lOOPe}P=4t986Xk15BF`S(6n^+c;M%mUzPnTxXEWb@ zS!CEdD>SlxTliU{a1I6&Zj;rAUpZ=Tzy zo+!TN7VC3v(V~N!Pqkj{xOl?z@WUw?ZEsp%?_2t{E`#F zlz$20e6)5?Ek|Jcd2sO!p zDn1&^3U%!a2N~Yu7_dTFR!FpXH)v1_WWWWTGdt4O=6x%_^u;_pud;j5>zDD7vd^z> zb2i&HY5J|zckdqcnfE2@dsLd#jH$0#95y%9URtxrZO!+p*T$FMm#xVaSKr%O=Kyl> z!-kA&kj_%ix80!pupsilm8>w6DOU|@rk+(%V|}Doym`8x?z*iaw_kmo9Dlv~WlT!G za-HV??5{VnzQIW#P7Clc$|(iI4ue z?wHf3s*6Rfx{s}Vb)~Mz*tZ5bEA7nOXJ5Uied?r>zZa&tM!ikFa({wXbksUwh77T1 zsV3U{qiWKZX9g_K-nbts!XC?1`eU2kD+amMfEvJ<^49lKcard5m7g|-Z`&H>W z%ipJ)y;Mz=`*gqWzb)zhUgzHYTc=m-Rot4JS$&PcVRJ#k^|Vm-imWM%3TLg{8}Thm zf@9^?HG0YR$ys5yJ-fBc-n_ZJzF2?O)xFQ|W`|AwwPjx6mvg5U?cJL-ZKo513HRsk z)7w6tIk$mZ=Zw6mk5j3hnAN>cJRvJ5&29U+*ft~Vw&!Q*opJSFO0W4zZ9B8??Y?Ip z)p@)1OKp?SEn0MOy;rVjl1b5}4XI39o<=e=oIP~#>Y7I;!EbMUd**pq@aQGc%YW~M z?cZUycMnTl`Q)~rx44)BZ8Cozh$)`D)Z^{-$lEufwyyG%+7{#U*CqY1(2tzZy3ayC zo@5=jd+fJ<`hNS5^YulhZ!wQ^d&`@d;r)0s8^f&D=CzRymv0$?1~!XpN=-7vKsBZb zHzei5%UMvGC6MT`k9rJ*#u@I!?S%`4Yq3-EG2s`CWv2pG@VGiSFm- z+5X;v++ut5NY;e=viFbc4i(Gw^!4Wp2nx=e+XCvQE)-uJIV0}Sj@QZkwq^UF?Mkp< z)>$s+_5Y$p1t-q*ez8A8EG@z0wVj~g#K`W8I^emSS*){Em6V(|Z!kC8R<zE%?ZFTGOquvd*kB{yuY8IN>;yf!(NKo)* zw$p#t&C7x}2ibPHtlDmOO>y#-HPQN6rn5v>2djnn$M633=)g>;u3I9z#X+6iS*=z( zUusyfM{d4$?b^GOpRR0uJ6C%8`;|{V_0D}OZN6>$dfU(&<&WKN%)cLQwdA3ypy0$` zHh(@GUccwlsqCXIwu$vCQ(o-PxK@&Vttx-{_KR=guJ)!d=y=r^Z&vcm4*zv{=ZOsK z*%NuxU*)e8;d=5+Z*sOr_B~0S4M){u<=^mxu3fVJyZQB^QooSRvvjf__)Lt5J=djH z&8AoS)9uzA$B7TUKWd*mx8k3ZqM+c!vdgPVb!M3gXK!vZZj&|DwlbTzJff;=)>O~v zpVv1?%7$uPFj=?lUbm~(zH=^14mDQp_R_0%nzeP;uBw_D>g)6J<7+=vm`-2!-bKIV z|IRwi_@WK_qm1ryJiX-nsZ~FAy?uX2$BB=Rm;24F`uTKvb8_qa#NFF`K;HYZ{_HBf zqWo)X0_==upPCYHBV#&Yp<`o7jF#o9We$}Sbj^+Fetbr>ETZG=-?z zzvkMae{8?#tg9~~o#%GhzP?m&L3??8^W!$=q={v&^Gw&QyZF$>#pM{^*;xxOuDKJm zDkCf}d~%!RM5&6MY*6oalTA{-|)--fgNMGB?gr z{cu>S=yA|TuT{Ovn3`pus(!eu#{1oKGux^uvl(o{uB>_SbYYw57cIT|zrV^HH?!%B zdcPG3@dHg%Cf2ZZ-(UXYvFG&Z)9rPXl#H^$cI0zq?*z?ja-2QH;$f$heQSTO`X0yW z)28)xb#$DG0;OM2_tqst>{-8aJD=^B3(m{^=YN~Ox})PvfYW(V&;ZUw9UuL6aWOG* zasPQXKVK~F*8@#RIyuc31&sjd>gZh1@iBGWa%ewWo;W0XuI^3-HQgKjHi24(pvD@g z=wiU=L!o!E?r_5^>H#UUo;hvarvjR_n%oU>|2z{BK|#TZoo&by!Jz3br_G>Hh0hj) z^q6#GDgsR_gC>zrgrpTh#^~f{k&FpDXv<6n%Sh^EiKo(`6^-_TIHtVH+k??qFUxbL+CFwx9@0i5L3UDZgv})2B~` z*{v2fE}Xe=<5g>cw#sME`C5)u@q@~_ot~VNHT!M9-S}HP;lh~7 z%MNn=9hZokq2@vpz#yQ7dzHS3ch*yIH2{0a^URv&t^{r#UQIT_D3$v$8HAboztyPwbJ{kZvP z9`|bX_j6aZfb43y#|$c2YtIN*=S{9LHi5Y3%$BsJvME;t%f;79URuL_-sW?S-0nmhXcn}E%(^$*Y>~i-^@nCr%zr! zd1ajFWvDbG_`~uoXWZvkyqo#?IlI2?|2sST!(OdI}>H4wfr=^8*w}x+DZ)dqe^`_Q7k+=D4b{E6E z^X2h*yUl+Re!JbUDYv`DRef%*+#emW6)S(-*?iva`;V88g*`LUCa1mq%Gcr^Qd4wX zdVbNLG!MD-Ei-dWZGRn1+cWjH@k>bTzP!3-$Mc+*OvSP(`|QuY(Y_a)9DK3y_U-C- zvHA1TjwXp@2JU)(aO&stcHiGjI5LCl)0I_`$K_+}*nLwY86{OgwrP^Nao^UfVNg{km^wH^{$d1lzPQ@~mxvS#e2@M$E^)*Vngy{`;A1~ zTRBTK@{;j+zVAG1v}c;c@FjLN)?rGH7Rd&CU za4J0aOPdVJqudk;!&!+OzMR)mFs|B3C+`K$zVTm6zwj~V|0DbVI;fj$SX$5fNwBTbu4sXJ$(bVBym*!N8!ec({e(YS*o8y>lM_Oa31^KUh#uSU`AnE32Af z;PL&zjk9y}PdI)~VV%1H)IDw~->6DAY$!*`Z zuU_52!%$eD%t$55o)I6%rb=<6Se(mF3lT>bQdH2se<@UC<&%Zw} zlxASKsns=k>g3$pD{{Zg@4W5SwCPXDXQs)EzI)Vl$WE!@H~v=~VQ)XRPFL`o@X7TG zaetS8(dP7wxbXFh=lzKa?yFDziHlnC-<7HUU+5toUf<9gdmo#t@@3UO-LO7veb3i} z8q4qeUi@%Y`>`m;)z_Z9_HTJ7tc(3-q*IF0rc&z{W{omJSNxi;$ zb?3?u>%Z@UYYVQtdUfnVgm(5)+sobY4{kdqe&wH(z2_0&6A)vLEGt(JVVf8OY^U>9@BS>2+S4wKmaJi57kjG6w{AKR$Ty!eSwRGc7*E$_DQEfeJp$|R%u?Y>KZr7<~Wl2zmHjFmU@_E+8it~B{l?it~&(ps^Pl{Ee<{8ibW z<^MVQo$YM>{Fm#J#PlZL5!x6zE!^P;bI!`l)>e^4R%UBbclk82-MOCF8gTu{8~&+5 zr3bHTiiz3Igsr4{`LtO1#SPO4rFE4NXImf}~xc8%z=S70%raSJDYS^Xl zrNH6o2|?aJhi8d-gfoO4S7Uqk>A)gYzunz_lNZdX>SlhuO2kXI$mR2d1NM@?B2)Bv zA8ic1S@vr6cE#<#f6U-Goqt~bo?Y!8vvi{){248Us*Xtty(jIS?Ycg{I z%baxoZ;T3ln*}dc&Cot@YGv1n>_y(fJLVYqKIp&2(s9}8OnTvdQy$B==gQL`mDu&V z@2xtLA11xJc;eZq)ju;!En`?W-TYw4v`)dbP)d;HY>eoIn?AKg`&Rk3C@sudWcWca@?+)HMffVN_RaSy1~->;kk=?ix?XF;yJG?R2de!$ty|ydHGMq@d8ir z28pjt(=GliikIM)b<|zvD9e`Ao~0`~0?Tch8D$IMw2KS%|;H=R$+fRYv{Tj;0Tc&MU4ucQD%A zt5ssK2~5;=I@vA2RPoQ^vHzasKi(9-x0R}L{?cBr!ca5sr_}ph^CQ>keg89|erM{R z;|*s|%gy6IedMs!GQAJxJIcP-RFvBYmc)Pix8Ql<$Mav>onJBUb5}h2`JwygTiuHz z@_rQV`j#a0Sw4I3o4;ul>20ZTWrY=QAAh#6Thcm3;Lf)nNfB!M-hMjKdS}_&4gZ$< z-=4SP)UVpIuH0XV(%(6z^~cy8eEq01Q8rk7f>0Af)+42JtOtGkkLzEX`%Z9j)&eER zJsk#XIJqS2Y?kR&=eU?QUA@AZ+g`FW91LE+*TPPe{np&+wmGY6!eZvW zXVtH+*td+QUT~rHp4kd_O@gc3Lyz0L%=y>NyyLcB@2{5mic9T%Udm2LcsA#Mp>F-M z=fwxOGx@}8`GRtuUthO(#-9o0K2rY;|0RD(Gpe}g-z4*uQGLO#iOd;~?(uq6?Rm6~ ze?@i9y3&GGjJt0?-IsmBQe5QHCyuQd%_sI2GCWMX$o8Uk`U~m4+vnfxn51zbr@Yek zy}&Fbv(+LW)|FeXkam3FGpVUO>)v#4#|g|u>jWIL1@1jL@OROw0PdsnDwdowd!y?(Cye9&^_>-{WkH@Y$RC)?>MmMML-L71^b4_1Lbz zyX8_Zbg96XmCr{jzr4}qLb0gRCS6C*7_BenvvQg~i2mfXI^I^|@n=evJkwj#Z0j%6 znuIv(J>sbaOiZSRs-A5u<)r%m@$pE7@<>g&ZWHVaSWX33xH#fe%j)PX``N1k-IU}i^qH+x4whxsXPlB;={&d5q_A-UW|b* z)vy~P#}g(i@d#{CXcXe#Go4X((L*86`VF%^L@FX}6|5h)<%jPuOl)il@Dw|>P$tOR z(xoqHK4<78-KY>ozHF-x7MYutE3tMs{tZ1`tGj;TI3oStQ?*X$-sFb3trrjQZ5RBfU@rJ|+Kvk6vID*M)_D{jzQpgz zG4;dt26?AHTpHzt4<)m`ujo$+Vco7F6g?;YbpJJZ*^)(mOD`SOX;~LmvHkR7p(Bhd z{x=+wyUSmBe91@o%c95XnI6~gRxMNw6miZv6c;+6{ZTGIC3(U{K(#} zV!mVPWknB7UgZ!^za!P_4kYGz{#!Chgy+Y3-H9eLPMuCuJM*q5JGH7#X?*7TBzNAN z+*YN&*-_pag-I;Z*~2*DhQfJD!lL0qt77@RB=a`8u+?}NUv3HMWjV!srGY)~#p4C+O&(Kw?o=zraRtSP zX1F|$J>9SEIWH%}<@3aTDXEY00U3u*LxLO9TKaK4rdLeQIqJCBI;&uYodt(y2JVpF z(ziC2KfLqM@u}&(2mB=1)+V1mx%1HR)C~PSoF@IYJ7YL*c3rdy6S&#Et?AiDbuPu~ z1nvyE*_thH+RiShTr*kzz~L&{s%6PB>*$ubfr5^vZ;rH)=_3|@rTnP%_>^mi0Zt}_r-CCb=#h=(}b+X^! zbPia}J27?nm*jP;EjK92%>EVoRv}nXJhbF?^n=HjmQUPJz_%jeoPNcsY@U$E>8Gs~ zcrRbJo<8a6j4~hQ=qIc1J-4dz<+s{+<$X@O$vRmMRv$qxVXXx{CXr@KeK!4;(K&gG zS#R0G7u(DaAHTTVMPl9?C&8;WjpDnHDX6cWvCYSRhL@V**LE#MZ>tb_@yK^CO>Jj* z>9L)=G5t>SI^_nVNmlDt9Q`r<$2t9qFPBS_wjEZ8*qvOcbKJ3gYx9n8eC7@E8|-)1 z>OC?|6=m0T>bbD_*xeiNA1g#~Uy0OEj;TIS9^ht}cl$`~i~V9ZKiV{YxAR@z5-8Cy zbt>bkZ)N5U$8+OlPQPtPPED;Zk^d^VUUPNX0i`1fwudIT=sa$GF~dY#MEvKrY5ZLG z-bgiTTv&6)cx(3pp-oF71K*x7Jv+a%aUOfk62+7=?z;r@OM4rWT)s4K=s(isdF|f& z$Coa>2-@iS?aT`K3$q$#{I=Ek=KgDCT0e(k+5Y@ShlNb1DsJ5h+Mk|TUlQYAn7^F+ z;nqKbCE^yFFaGb-eH%NkKASIF#OWSud6V()H|t-Wo`2gqT;{4w*`^J}>d)i*W^VQQ zZEfpb%W#jeyy4kKW!4F&FN)n@+unR_J;wf#rtl>a-)T6$Nd-}OpZ z@3h((Mn83**~r{+xw%~Hi2M?R1M=korZTqt-&XXWC^mfF$kx;%blg$CJitTlvx694pD<{#>}e1Gale8-Bn_aB%a znRDFnxno47#=*NCpQUV`+5F+-jCAThE%^Lv#hFSGJL$Hm{nrj3I17)Mut2BPkTDV*AxoPE@N(+ZtgEcl69;Y3tw0{!y?_rn3|KxM>W%9-Me#jT! z6YsRl|8so$p{*+7IUnBKVeve)^5#Lo*NY}vS+vMhNo`jwJvP;4@uPot%@wky?PG5# zm~yXO*5H`QB!|z1H={~+|LVN(DUabv*^+Wg_bT>^2eZCB$=Nk)3e(Hl8=CD;a*Z<+ z7zLEJ?5UpY=58ja7ijLrzSgr`Pi*aUk#|PC9V^xfWz6H#eJ^*h%0p@QYU8a!QIo&L z1a4l;5!jh>W8Lq~vwgHYC*GBqTjiZ^^vPIUR5@e^zx5Ht2#rP#-S=sZm%1w#v=n&q z1o1{qzE{IxQ69d7-`Yu_reldi%e3;|1fz;fmER2>4;f05OCHSn@^@>EdHnWooD9`E zx8G?!s`fdv+VJ^bPUDq}r-n}vQ1*Vmv9Rs>sc^0HLQwYUilUU4(Ie@hyOvR}OXCU0x1$W_&w{C?akRqi$VeO^DK^}Fgs# z{g@JkbtOt|-?yv#u=qdECe-2vBq%b541b!D>4B>ZAtxrgJ3j@*Vo9@W3DCMUj} z3Oj4hYH>~R$GSV!Z9PuB%t_Z5fBA9f?riaPn*e`RMbp5!bNQ!S(dcRMo%v#NG4r?U zI|WaDwK{8Juror1{l`pa{UgU5nK;=C_S9~g{w=^vVo~K2kHkjR$iUBf8<()hPG>VY z@MX_DwaAq=e-pG;E?nY&>L8%{LOba~~ zAJpz%y~@o>$ZS!YFef{k?Ua|LvoaHkHhS>g$gup{bi-l_^OP(b`P1h#_?e%0)II;9 zkg(XTZ{E{?O%cMT2fq9c-gSPNID76i-(3uCljL}f_HL3ruRd9UL!^rT{lS|__O5nc z6BoQqId8T{PY<K$<&$acQsykT;ymcWES$FswpGRbv^e?HnFqbT-&(+oLMR! zvZ3}A+A9=Zg)2w-+dr?@rrlt3ufLoe0g@_Qu{?SKR!8eX}ezTi>LMS{=GVT zw;z*?^LAI<<&^Uy_c2fYpW{FJKgvTIFcP4y7dZmYHyGF{{*-;zF4FT~;=kpZKItX1 zm%dizzj^DcK*PJHi9fXV^X-{>uzS7eb?z&%2AAT@mDi_!c%%wu+pbUjki=gq-g9L7 zb)$-n?K`>MKAp~%+;fBZF01m_r(1dA-ZZ{zn)vHe6r27xhw_6SlXBH|rYD!poE-6P z-q}rSXW1T4yVSn?`Zc?p-DkzvK~19%_PQtaZm@W5>wGfL=>FMPxmPu&Nv})moc4eB z#Dm>4jMlFN6(HG*-u`&3mS-Kb&FPnc)-zV+uUm!N98R`*+>4&JeP8U}*@Z83Yj&E4 z8ZTvCEs^x~-6oz;i&GC=eP&+gfi<3tzg|h)vv^;bgVYoqU!#4I+rmEgCEd?-+j!^8 zHD{wblgCDnt(LC7dT&$Q+&b@#)%X9(-=8h4UN%E8L+bvF&zJc=2@3{4GX*uRI)dsy zI%v&Iah+sf=aHp*zQo1IP@?javR0a{QmEUMW%q;LWTn;=dxd)%$118g>@Invn|4Mt z^5~XUpQXpWbvl=`J>H*d60IiG92mYymd)`bo9D69dzQ|6JG=XCpzWup+hitvWPZG1 z!-dVy#qQ;}EnvN+uzIil>cV3Oxt{XG9hp+j>%r-k@Ox46q|{fAlMFunbmH;jano}( z)R$PfJ}@G16XTnRNVD0MsSQ`>ZMv6sCL(g)-I@)_#|sZAl;mia`J~O3Y!u6jIX`1s zx@^h^rDc1vUD6EJ6$pFwTR2SXZPJ`@qc73R;Ly`qZzBx#B~EUdntrS=&FA!H>Exq( z{$AEd>6u!1;KpWEmsEelKlwY8o-V#<*jaD;FHl-PCH!r})52-hXBZ-7m#`>%cbTXu zFOr|KM&A0HQNGdVOP4O)j(;Ojyl2bHgyVcY2j8ri`F+otdwFuxt*YzqsJ$(bVBs@el7T^A@o)=+DEDKtNg|=8|04C}534JwHN0MBoxneH z;#Q`JKEWAN_;z2reNRY3>*fUE@Fi~&X0slj`E%NWzP~cM+qWH@z@Vja)5Ftt$~%GG zm$qq7da`Bv^-WS5hQ`K=J?~DtFy(47`>oQ`;=feWPA(COVTwFsBUt(GzkR*a(~^0! z<|@afWvhAVe0AyAxJD}QYRA=yeqA${E_|xDUaM@4(DVqe!p@n~w!3Y}*{T!jF5`I3 z=zW0uY}W1DzHK`jyyAxUrusaFEB0!J%UZ-P-Z$o1u;!X&Z9&fMsB3e&PrGw_ewY@1 z^q$A3-cRR!?!_kw|F~$U_jfw0XVC?##pyvx5jS^#a!q*Btp49~DuYAe-1C~o!7-Lv zH*IcBnOS}P$1STg5ZDy@cgCA{cU3l5-t;@am;Z#%%#)wQ4Nj@?hrDr)U$^Mbft!<* zk1m-p^X8%_?dJIkUXxO8y*k}%Ipg>L_)j^vxAk`4e0+IB>}@~kpLe|2cJlb!oH=vm z%%A`J6TFL!!?!K_&v(ZyXvr11`)95iK4+Zr+2<3D+B_fer%q~fd^F*?!lXMJermUQNGQ#;7xg}< zFxC10!wtDAo?3Tz`#WFWv2z1+>-ClzkC~j6{fqvlZ>xL9%g?gt4)-U~n$+#b4>L1( zR;*vOoc|rmgymCi+KAkXt`=#qm*<@^Q>1ok(axI1({c-EMon>@c`;7I<6!L#+wX40 z=l|TAo_j^jIF8Hve`=K4%#&$ecc+{VZnG(N*!pow>A$ZcSA=HA*9mzmyjX3v>o)hV zqIowLEEExBT2fWut?ZIeSbAEnHs$m#)59(E#J{Aft$mwkk~S^o=~resGp*gWJQf`Z z1yVs9iWhu%@3Znwael`+n;XfW0^;l+9ei&1L7+nA&5yXivL!nMb=zG1lT3S~n108a zXRXnl-frk{A^N}Hi-i^?hfi;)eSN<%>LRaG<&?Zhe;0I^8cPN6Urc0r81PQY`{F_e zF#{HlpkVuJhuQS^%NuBApH|Y~i?!D5ix2Sr&Fd|0&|rQye@38X$=hWuFL>P-?m4%| z*K+O!j+B((CC^!dPjF9sINND;OPI#oPluN6UTL1S`)bANa#>c}le0YUT-xND+Hh`( zP0!a0ihCcv$n#jsIwif-TjI*gPFCI+kF~dQ?LW?IJ|n;yUMV0`z|ehekEi6Lzw11u zMBH2C7DZ|X%xiUC&AFOm=Uh!uO|HDjtlwK%S11-W-V*!R5XDs6vxKR9OM@I=#Fw^= z`ku&}xo7{2MRl!M{x+P=fAN}I@9VkaH@sePMu7GDg{He=53XLitf?R2wrxwiq|63y zb4`BXs*DX$N%pxC62_V(-scZ92yc{I@Ufm-bG6myQ^9RlryN-^!Buk6y>lUX-{KbK zY@5w~dSR{U|GSL2`VrsG1x~e3DzZQBcSbu~=GD|sii_WE{eQ-=b;^|Q8n^1V{LlD5 zbM4%c3b9M7G0ICl)sCrMc0ct*tNG!vl+G!qW$jmLY8{ivlUefQW`nfc*+&VQvP?5u zy$($}-~af=jkZ+gPm>QFN?ED*f_?cfCIJS$gA?@+KAhK|+I%UhL!*P&`c@3v)PK#= zm)|Fz+}`UGBxKd^6mj>A+tp2nS^MYNhU#w5Nb#THa^(1flM^|TxhxVIdOmX1{FN3y z>Nch02CwiU2c4^q>>Q@kV%8wVCR9{KTOMII05-s~9-3tAJKo=94@{M%)ivmuV>EkiO( zhP%mO2@Ul%(;QZ))-Dt(*sauYp#JY;QE%VvtxRnDPAFIWxhu0I<&D?TX-CooU$ES6 z)JSu9(cikxZ9nT`Cr@_KmCQaYPi8i89B29C?-bda!=SKLD4wP8!n&Zwx{YStNxOr% zHM6F%&6E(f+|kLQA`rY{x!@~qhC8CFKQ!9dr1(4&rbIL;-^+5U&uL)fnNZSmg)v$9 zgoJ{-hsT7gK^j|6OgP}TIYNNldTW`>ij6Ft(L;(o>Q1hs@%gmXGGNko-4i@8ic z8hvCzc#=+w*|kLu-^w40-sZl=7&GDO9#(*CvIkfrds`P>of5?wAjrt6UHbZKMbnZbwL2;* z^V#^frM`c9sJV~h_#8vY39gQ3YNZy&tKDbY!n{KutUDmxR`)-f82_nPyx(n^vASJv-e0SqbE;r(LDzgWN6#KF{|Q{42CFKzy}uDy`)2pI zC+>S+US})T?|m*Oect|h;lw=TDnI%{hhy(fQf z(cQYgi#}iT?7!P=$G$sudw;av-8^bzK;MVbuCD+*Gm&4X(q zdo?vmvwUl=&902TQ}c4&*;k?My`OK}e&?HK^Rj+R?eWW>x-S3Cly{bVB)`J_Y!G*6 z;}zkf`(Es*6uX`9Z0X5A$=y$HZ(BWGFt)s}`t5sr$*O%;Zx&ZK{;d0TJYkm0=c8gL ze$Hfgb*x0Ncd^pea~nQi&AaVxTmHTGGoM|geA%{J>Gj*cAG|l?_DsI@i@#j|{QBRv zYg3nbZMu5REP&N#BNO9%KYfiKZEmspz7>*TJLY@;wCZ5KmDFVtd%<7$rmHfC&qgPK zV;9#5DpPBdf6bvbp?)rz{M4N>eiLr?&%Thw5oGrFNh8CQrdvUO zKgQ=6zt=u@(}X|x%fVE0HbqH%lEmjd|J<Kc)jGsMX&T54F3pk-DddL@8S%WSdJx; zUdD2>9g=_j&aDyIv8kj*C5)>;Cu$deiEFT;;nO&w>A73j?mywFD`>u!H|ZNoO=)Pl zir4D{Y_^JFuAjAc7G7$L5WOJwNM`LqDS<^=-J)**;-9pn2OLRS3QnG|uFwQ|E zC7w6bsI2AqhllIclG_bTbd1XmSSI#f`}<_-?F{u*%_Vm{^%j|h3M(imytyBul>b5e zfyBQmrN{@?c9~rr((AAIs^~>|d8|oS;CkG#V^L8!bc<&3jzNU>?i$v4MyT*OV?oxPvcUzJ)Q z*I)NwYA93R!|li3cu(kgdE9Hl5uQNL<3Gedm!DzT^xCw}-4j5;Zejo*%P|FS6V zk~J>evEb*QDV@uHbg68YC~Zo$wA^xBJlnD`C~W4_+e^ylHm0^}|D39`dfOzgzDVg$d7;a0YwR~EBgSn*Een$)qzQOng^Kg#~CUo^+n$I(`K6I)7e zOuwS_O{L_){gu^*rBUrGmxOKXk^NF9^QTi|h2dWlk0hOIO9Mqtt;?9j*YBeG++xwx9 zoujXeUezgYc5`Irw(jzL#TNJ7QjszFSLTI+|Hn9W3!2S0Y0tWL>+xUr^NKcy7&}{< zoxM9w@7dYeQqCXC8NO;ovq!0{r&3Jk!#$kG_HJS0diYDj?sf0BxLcgANwy+S4|qyW zGEZThQ|?OgqnLlto)~iO5HfiH-Y=> znNqghdG~f{?EIg$_0I7%k-PuS^-epwTc@bEc9YY)?&~4{OaGW0D^d&9TXykmd*U?j z`d#OeG)~8am#!@|6FijYHPdv{oVN<>A=A}&?68thQVZnRcsrKo{>N~^DUN0d$M6%Uizh?5N%6FBE=Uoy+lgbE>56L__P@ z9sB2nMu+XwmoF-{cx&(T)G7J(rFOp$y6*fxBjnibZ>niNlp_AWctgVv$&FhaEqszY zY-6tSPJ20L`%iCe&CsSs?)7^b17~ad%{3~HPwQ>^pD$RSA7drjBr;t`dUr?IhV$;< zL_=J7**~&-Eq}24lSui57lC0eH=cjilDI2=(f*mM_KmkG>N5j2oC$wn@!YxKy_v<{ zeL%AUrbdfyIyI`X)iFTh3^kDx7vodL#mgH&P7XQXcUI%Y`%PP_5Q9`_mdWG z+mpC8iN7x2=!J7j!3-`>ivUZ)D^0l3~@C-K%tmW&hvf`VX$y8rAadb!PJW z#;xM|`TXU=bIH7>g-hq@1!}qp-FW#zH0)@Qas0w(bK0d|9b3}4U6m!QPui^JEp zFt>%@`@FlR)k|pC)%U@xJrwuPnDU47d56P4Rqlx%vb&%USa zx9UH!M=U6g`>L-YvDJJ6gXnV`KP&#esqI{TX>-Ci1{9s^UfgOZ|J>-@>c|Ys=SMFd zn$f>l^0}zamN}mvWh5RrzOm=Cmsr-h%EB!M4<1Jxt5l6%_;gOckS@;;i_ zzx^H5|4(Z5nAPDYyYx_vm2XzHcK3`}sBX!;`_DZADy9t3ST~!vdTQz7I zc$zx!r81dnnnqrmd3i@ekyF>cjtif=7yBIfn`hIpbBRc8Z0#PQlpPm%m0VN{95zc! zym_|D)M1%z($QV_*F4m^KjRs1-KMG>C6{2g=BP=2R=lT-_=T4UF-$Dn?y9m_y`*90 z^2Q>LwNp|9Bm9qCS;S#`ljBm-vF+Omn9OEu2;<-l=4{r%uWARY3cS-@f(9 zJdd?k`yU8)YmT?4G=Q+3tz+il&SEm>4hjn5nR3-iDwF zwV%a%zI^+j-^5eB%b{fj3tx2S>4xMjdpNg;&RknQbN?i!yZJj#nJ>F}#(%|DZleQB zE?cnI)I0KdMV(jaS!}^&dF58ni!a|Q1Pdg#x^#Fw_;ORWX2a~ZnfnTgu4npX)l75w zo_gW$vlq&Y1aXAs^2a=BbZ?uam5Oaqi0pg%_ZvZnV8_;?sL0s!EQ{Weu|`!`$|d3MZp3pIM~H zG|6K6dxZ_BxphuRnx|dVnG?0!+il_Imc#>YhW#_XJo|Fr#?kQc$(Q>h3%_`&{{8ub zU;dMB{#n!BN#~qOjJ6ovH@j|ftDc3ca^6GR9AUYMp)u>w3P!a?fp8!{dje5ChSv*g}$fqxDN9hg7;nV&iT z4%>Ox^8QTy|E58ogN?s?#rcPPrqgHa*lN5dwCJ3-L#7|A(oY*NL4O}R-amEoPe}Kk z&)p&Q?Ty=>tlq?j+qSH~Hp`Z&>E`G5S=!g!Z`f-;oim*wIGNk!Q{@z;c_*CxYxes; znU~nNNj-<*{QSH;nRLFS1BVknWjho-h2tK*)UwPsH7yjh{M)Ta8_wVZtJIxkM8 zaaNI3e1f1nqul&Ln;V@^rS})8ys0Rb;F067DQ2;_VzbaEqV#!<)t(3b>007X8eeU? za47>Qu*hEE|7(rH8=ixmah7!Ryye%Lweig=Jr$j{q-xax}R#f z`q<8`oU!x8o=>}96vmy5zBY$_u3Y6+_f;+1A*UfS@2^Ix9P4*k7)1&dY}oPKZMlYQp}@3d0^&qa?tUZ65j zFNOQ_=iT#sRHmm8H6`S#F>45Iwv_OZxP1D|XL+xMH7FIg0(Ctx6Fe%1JU zjiXJ6JEO~VqvF)8JniYP{(P2XWfS9_@#0AJF59bL_AnmaqPC$hZWd>O^<%ZS?gG*~ zc`v;^>=Bxo{CtL8knI-!^B1Mg)ph7*zLSfsa8efd@$JL@ZDpJjV}pyMf1a|sC+_e^ zP~m{+i9bANWDRsXPUU{!y0gFM-!zl`j^VHW9n-Ymyqx=t;JcV-{jMF|TY_KQUt+HL zXTH}CozlCN>ljwd*->{(I_)OU;Vo|7=c7MO_@X*}YWFF9spk``?b!V-=AN3~eJ+Mk zIQB%wO7C71|7%=6cIFbxObhe{9-iBfYb4ihbe%Vt^JBhq>r3U*CUKp~CKHTSz2<3X zn4DZLA#_}}Hlh0P8NSE0KB@bo4`{8s#n+bE+m?E6Q}qPDtQFp~F0w!Qf5KM3m^GW} zfn1e#u|n+u7x6i!(iTtL)qVZgFF&k$VbRT4-j*9Y|7@^^V$xUbD}Yh=LF)$_}HCtu&uG|%?eVacc5lGh*fm^%JEqQsc(CABbj%Z8v3BfGwJ zTbQg5^X_;2tvg4_L~dfo)ap#m!kb@?9JBPeS7R+35t4G(J9}CFoX; z9+`9*=fB-{`(4-imr=id-YT2^*YEnTYg?B*=P$7jug#6!Sbh85h1Kis>utPt zAiC$<=1aKoF?Fq*zHJ)MGSgQrtd$C)rw!va zFMA#+zf!oYA*MsL<;*M(okIp|ce0tr%zIT5*%J9B#DA(Q7t7B7x2nt52Cnrv%ebxAUN>}xuoR`pLg`TX&F4X4xFoiBY@>wGJi%=%mw@&L6KMJ0m>z-0<%f`)U&+R(p4~-KqAJO_%>IKJ3PHavuW# DyWD@~ literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-new-project-catch2-test.webp b/doc/qtcreator/images/qtcreator-new-project-catch2-test.webp new file mode 100644 index 0000000000000000000000000000000000000000..040f2a586b1bb6e81cc855a94e6804ead7627dd5 GIT binary patch literal 6958 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-new-project-google-test.webp b/doc/qtcreator/images/qtcreator-new-project-google-test.webp new file mode 100644 index 0000000000000000000000000000000000000000..eca2110f039f3965ee2a76d518018e9fd390b936 GIT binary patch literal 6694 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 ZbGzDhpLdLUogwuoCH?R5HeRNe900C_*t7ru literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-new-project-qtquick-test.webp b/doc/qtcreator/images/qtcreator-new-project-qtquick-test.webp new file mode 100644 index 0000000000000000000000000000000000000000..82124b958dea7e93a403c5c6b74e271b769b0d8f GIT binary patch literal 5368 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 Lv{|ykGbRQA!sKaw literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-qttest.webp b/doc/qtcreator/images/qtcreator-preferences-testing-qttest.webp index f6df07907ead584d1fd5a80ab08329a409c7d72b..b4cb5a5db1cf94de9004dbbe4e404e19937566cb 100644 GIT binary patch literal 4690 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 diff --git a/doc/qtcreator/images/qtcreator-projects-settings-testing.webp b/doc/qtcreator/images/qtcreator-projects-settings-testing.webp new file mode 100644 index 0000000000000000000000000000000000000000..6f8fe53a22f287e8c697169d6f9d39f839ed4158 GIT binary patch literal 3032 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 \uicontrol Testing - > \uicontrol General. - - The detection of tests is usually much faster for build system based - tests as this normally does not involve scanning or parsing. - The information in the tests tree is usually more detailed - when using code based tests. - - If you enable both code based and build system based tests, you - may duplicate tests inside the tests tree. See also \l {Selecting Tests to Run}. - - \section1 Creating Tests - - Use a wizard to create projects that have tests. - - \section2 Creating Qt and Qt Quick Tests - - To create a Qt or Qt Quick test: + To create a Qt test: \list 1 - \li Select \uicontrol File > \uicontrol {New Project} > - \uicontrol {Test Project} > \uicontrol {Qt Test Project} > - \uicontrol Choose to create a project with boilerplate code for a - Qt test, or \uicontrol File > \uicontrol {New Project} > - \uicontrol {Test Project} > \uicontrol {Qt Quick Test Project} > - \uicontrol Choose to create a Qt Quick test. - + \li Go to \uicontrol File > \uicontrol {New Project} > + \uicontrol {Test Project}. + \li Select \uicontrol {Qt Test Project} > \uicontrol Choose. \li In the \uicontrol {Project and Test Information} dialog, specify - settings for the project and test: - - \list 1 - - \li For a Qt test, select the \uicontrol {GUI Application} check - box to create a Qt application. - - \image qtcreator-autotests-project-qt-test.png {Autotest project wizard - Qt Test} - - \li In the \uicontrol {Test case name} field, enter a name for - the test case. - - \li For a Qt test, select the \uicontrol {Requires \QApplication} - check box to add the include statement for QApplication to - the main.cpp file of the project. - - \li For a Qt Quick test, select the - \uicontrol {Generate setup code} check box to execute C++ - code before running any of the QML tests. The testing - framework will call slots and invocable functions, as - described in \l{Executing C++ Before QML Tests}. - - \image qtcreator-autotests-project-qtquick-test.png {Autotest project wizard - Qt Quick Test} - - \li Select the \uicontrol {Generate initialization and cleanup - code} checkbox to add functions to your test that the - testing framework executes to initialize and clean - up the test. - - \li In the \uicontrol {Build system} field, select the build - system to use for building the project: qmake, CMake, or - Qbs. - - \endlist - + settings for the project and test. + \image qtcreator-new-project-qt-test.webp {Project and Test Information - Qt Test} + \li In \uicontrol {Test case name}, enter a name for the test case. + \li Select \uicontrol {Requires \QApplication} to add the include + statement for QApplication to the main.cpp file of the project. + \li Select \uicontrol {GUI Application} to create a Qt application. + \li Select \uicontrol {Generate initialization and cleanup code} + to add functions to your test that the testing framework + executes to initialize and clean up the test. + \li In \uicontrol {Build system}, select the build system to use + for building the project: CMake, qmake, or Qbs. \endlist \QC creates the test in the specified project directory. Edit the .cpp file - to add private slots for each test function in your test. For more information - about creating Qt tests, see \l{Creating a Test}. + to add private slots for each test function in your test. - \section2 Creating Google Tests + For more information about creating Qt tests, see \l{Creating a Test}. + + \sa {Test}{How To: Test}, {Select the build system}, {Testing}, + {Test Results} +*/ + +/*! + \page creator-how-to-create-qtquick-tests.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-test + + \title Create Qt Quick tests + + \QC integrates the \l{Qt Quick Test} unit test framework for Qt Quick + applications, where you write test cases as JavaScript functions. + + To create a Qt Quick test: + + \list 1 + \li Go to \uicontrol File > \uicontrol {New Project} > + \uicontrol {Test Project}. + \li Select \uicontrol {Qt Quick Test Project} > \uicontrol Choose. + \li In the \uicontrol {Project and Test Information} dialog, specify + settings for the project and test. + \image qtcreator-new-project-qtquick-test.webp {Project and Test Information - Qt Quick Test} + \li In \uicontrol {Test case name}, enter a name for the test case. + \li Select \uicontrol {Generate setup code} to execute C++ + code before running any of the QML tests. The testing + framework will call slots and invocable functions, as + described in \l{Executing C++ Before QML Tests}. + \li Select \uicontrol {Generate initialization and cleanup code} + to add functions to your test that the testing framework + executes to initialize and clean up the test. + \li In \uicontrol {Build system}, select the build system to use + for building the project: CMake, qmake, or Qbs. + \endlist + + \QC creates the test in the specified project directory. Edit the .cpp file + to add private slots for each test function in your test. + + \sa {Test}{How To: Test}, {Select the build system}, {Testing}, + {Test Results} +*/ + +/*! + \page creator-how-to-create-google-tests.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-test + + \title Create Google tests To create a Google test: \list 1 - \li Select \uicontrol File > \uicontrol {New Project} > - \uicontrol {Test Project} > \uicontrol {Google Test Project} > - \uicontrol Choose to create a project with boilerplate code for a - Google test. + \li Go to \uicontrol File > \uicontrol {New Project} > + \uicontrol {Test Project}. + + \li Select \uicontrol {Google Test Project} > \uicontrol Choose to create + a project with boilerplate code for a Google test. \li In the \uicontrol {Project and Test Information} dialog, specify settings for the project and test: + \image qtcreator-new-project-google-test.webp {Project and Test Information - Google test} + \list 1 - \li In the \uicontrol {Test framework} field, select + \li In \uicontrol {Test framework}, select \uicontrol {Google Test (shared libraries)} to link against - Google Test, or \uicontrol {Google Test (headers only)} to + Google Test or \uicontrol {Google Test (headers only)} to include necessary Google Test sources into the project. - \li In the \uicontrol {Test suite name} field, enter a name for + \li In \uicontrol {Test suite name}, enter a name for the test suite. - \li In the \uicontrol {Test case name} field, enter a name for + \li In \uicontrol {Test case name}, enter a name for the test case. - \li Select the \uicontrol {Enable C++ 11} check box to - support C++ 11 features in the test. + \li For a shared library test, you can set the path to a + Google C++ testing framework installation in + \uicontrol {Googletest install directory (optional)}. - \li In the \uicontrol {Google test repository} field, select - a directory that has a clone of the googletest - repository. + \li For a header-only test, you can set the path to + a googletest repository clone in + \uicontrol {Googletest source directory (optional)}. - To use an installed Google C++ Testing framework instead, - see \l{Setting Up the Google C++ Testing Framework}. - - \li In the \uicontrol {Build system} field, select the build - system to use for building the project: qmake, CMake, or - Qbs. + \li In \uicontrol {Build system}, select the build system to use + for building the project: CMake, qmake, or Qbs. \endlist \endlist \QC creates the test in the specified project directory. + For more information about creating Google tests, see the \l{https://github.com/google/googletest/blob/master/docs/primer.md} {Google Test Primer}. - \section2 Creating Boost Tests + \sa {Test}{How To: Test}, {Select the build system}, {Testing}, + {Test Results} +*/ - To build and run Boost tests, you must have the Boost.Test installed on the - development host. Typically, the Boost installation includes it. You can - download Boost from \l{https://www.boost.org/}{Boost.org}. +/*! + \page creator-how-to-create-boost-tests.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-test + + \title Create Boost tests + + To build and run Boost tests, install Boost.Test on the computer. + Typically, the Boost installation includes it. Download Boost from + \l{https://www.boost.org/}{Boost.org}. If the compiler and build system can find the Boost libraries, you do not need to specify the include directory when creating the test. @@ -169,37 +159,49 @@ To create a Boost test: \list 1 - \li Select \uicontrol File > \uicontrol {New Project} > - \uicontrol {Test Project} > \uicontrol {Boost Test Project} > + \li Go to \uicontrol File > \uicontrol {New Project} > + \uicontrol {Test Project}. + \li Select \uicontrol {Boost Test Project} > \uicontrol Choose to create a project with boilerplate code for a Boost test. \li In the \uicontrol {Project and Test Information} dialog, specify settings for the project and test: + \image qtcreator-new-project-boost-test.webp {Project and Test Information - Boost test} \list 1 - \li In the \uicontrol {Test framework} field, select - \uicontrol {Boost Test (headers only)} to include needed + \li In \uicontrol {Test framework}, select + \uicontrol {Boost Test (header only)} to include needed headers, or \uicontrol {Boost Test (shared libraries)} to link against Boost Test. - \li In the \uicontrol {Test suite name} field, enter a name for + \li In \uicontrol {Test suite name}, enter a name for the test suite. - \li In the \uicontrol {Test case name} field, enter a name for + \li In \uicontrol {Test case name}, enter a name for the test case. - \li In the \uicontrol {Boost include dir (optional)} field, + \li In \uicontrol {Boost include directory (optional)}, enter the path to the directory that has files needed by Boost.Test, such as \e version.hpp and the \e test subfolder that contains the test header files. - \li In the \uicontrol {Build system} field, select the build - system to use for building the project: qmake, CMake, or - Qbs. + \li In \uicontrol {Build system}, select the build + system to use for building the project: CMake, qmake, or Qbs. \endlist \endlist \QC creates the test in the project directory. + For more information about creating Boost tests, see \l{https://www.boost.org/doc/libs/1_81_0/libs/test/doc/html/index.html} {Boost.Test}. - \section2 Creating Catch2 Tests + \sa {Test}{How To: Test}, {Select the build system}, {Testing}, + {Test Results} +*/ + +/*! + \page creator-how-to-create-catch2-tests.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-test + + \title Create Catch2 tests To build and run Catch2 tests, you can either install Catch2 libraries and headers or use the single include header file in the @@ -211,38 +213,50 @@ To create a basic Catch2 test: \list 1 - \li Select \uicontrol File > \uicontrol {New Project} > - \uicontrol {Test Project} > \uicontrol {Catch2 Test Project} > - \uicontrol Choose to create a project with boilerplate code for a - Catch2 test. + \li Go to \uicontrol File > \uicontrol {New Project} > + \uicontrol {Test Project}. + \li Select \uicontrol {Catch2 Test Project} > \uicontrol Choose to create + a project with boilerplate code for a Catch2 test. \li In the \uicontrol {Project and Test Information} dialog, specify settings for the project and test: + \image qtcreator-new-project-catch2-test.webp {Project and Test Information dialog - Catch2 test} \list 1 - \li In the \uicontrol {Test framework} field, select + \li In \uicontrol {Test framework}, select \uicontrol {Catch2 v3 (shared libraries)} to link against Catch2 (recommended for version 3), or \uicontrol {Catch2 v2 (header only)} to use a single header include (recommended for version 2). - \li In the \uicontrol {Test case name} field, specify a name + \li In \uicontrol {Test case name}, specify a name for the test case file. - \li Select the \uicontrol {Use Qt libraries} check box - to use a self-defined main function and set up the project - to use Qt features. - \li In the \uicontrol {Catch2 include directory (optional)} field, - you may enter a path to the directory that has the + \li In \uicontrol {Catch2 install directory (optional)}, + you can enter a path to the directory that has the Catch2 header files. - \li In the \uicontrol {Build system} field, select the build - system to use for building the project: qmake, CMake, or - Qbs. + \li Select \uicontrol {Use own main} to use a self-defined + main function. + \li Select \uicontrol {Use Qt libraries} set up the project to + use Qt features. + \li In \uicontrol {Build system}, select the build + system to use for building the project: CMake, qmake, or Qbs. \endlist \endlist \QC creates the test in the project directory. + For more information about creating Catch2 tests, see \l{https://github.com/catchorg/Catch2/blob/master/docs/Readme.md} {Catch2}. - \section2 Creating CTest Based Tests + \sa {Test}{How To: Test}, {Select the build system}, {Testing}, + {Test Results} +*/ + +/*! + \page creator-how-to-create-ctests.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-test + + \title Create CTest Based Tests CTest can execute tests for CMake based projects regardless of the test framework. You configure tests in the project file, usually, CMakeLists.txt. @@ -256,75 +270,52 @@ Add \c test_example as an executable before trying to register it as test. It may be any executable command including arguments. - For detailed information on how to use CTest see + + For more information about how to use CTest, see \l{https://gitlab.kitware.com/cmake/community/-/wikis/doc/ctest/Testing-With-CTest} {Testing with CTest}. - \section1 Adding Tests To Existing Test Projects + \sa {Test}{How To: Test}, {Select the build system}, {Testing}, + {Test Results} +*/ - Use a wizard to add a new file containing additional tests for projects - containing a test project. +/*! + \page creator-how-to-add-tests-to-projects.html + \previouspage creator-how-tos.html - Select \uicontrol File > \uicontrol {New File} > \uicontrol {Test Case} > - \uicontrol Choose to add a new test case. + \ingroup creator-how-to-test - \note This is only supported for code based test frameworks except for + \title Add tests to existing test projects + + To add a new file that has test cases to a project that contains a test + project: + + \list 1 + \li Go to \uicontrol File > \uicontrol {New File}. + \li Select \uicontrol {Test Case} > \uicontrol Choose. + \li In \uicontrol {Test framework}, select the test framework in use. + This has to match the test framework you are using inside the project + you want to add this file to. + \image qtcreator-new-file-test-case.webp {Test Information dialog} + \endlist + + The settings to specify depend on the selected test framework. + + \note This is only supported for code based test frameworks, except for Qt Tests. There is no official support for having multiple test cases - inside a single Qt test application and it is better to create + inside a single Qt test application, and it is better to create a separate test sub project for each test case. - In \uicontrol {Test framework}, select the test framework in use. - This has to match the test framework you are using inside the project - you want to add this file to. + \sa {Test}{How To: Test}, {Testing}, {Test Results} +*/ - Depending on the chosen test framework, you can specify the test case - name, test suite name, the used filename, or further options. For a - detailed explanation, see the general information provided for each - test framework on its own in \l {Creating Tests}. +/*! + \page creator-how-to-build-and-run-tests.html + \previouspage creator-how-tos.html - \section1 Setting Up the Google C++ Testing Framework + \ingroup creator-how-to-test - To build and run Google tests, install and configure the Google C++ Testing - framework on the development host. You can either clone it from Git Hub or - install it from an installation package. - - To configure a project to use a cloned Google testing framework, edit the - \c INCLUDEPATH variable in the project file (.pro) to include the source - and \c include folders of Google Test's \c googletest and \c googlemock. - Usually, you need to add the following subfolders: - - \list - \li \c googletest - \li \c googlemock - \li \c googletest/include - \li \c googlemock/include - \endlist - - Also, add the necessary files to the \c SOURCES variable. For example: - - \list - \li \c googletest/src/gtest-all.cc - \li \c googlemock/src/gmock-all.cc - \endlist - - To configure a project to use an installed Google testing framework package, - add the following include paths to the .pro file: - - \list - \li \c /include/gtest - \li \c /include/gmock - \endlist - - Then add linker options to be able to find the libraries and to link against - them. For example, for qmake based projects, you typically need to add the - following values to the .pro file: - - \list - \li \c {LIBS += -lgtest -L} - \li \c {LIBS += -lgmock -L} - \endlist - - \section1 Building and Running Tests + \title Build and run tests To build and run tests: @@ -334,7 +325,7 @@ \li In the \uicontrol Tests view, select the tests to run. - \li In the \uicontrol {Test Results}, select: + \li In the \uicontrol {Test Results} view, select: \list \li \inlineimage icons/run_small.png @@ -359,20 +350,20 @@ To run the selected tests without deployment, select \uicontrol {Run Selected Tests Without Deployment}. - The functions to run tests are also available in the context menu in the - \uicontrol Tests view and in \uicontrol Tools > \uicontrol Tests. + You can run tests also from the context menu in the \uicontrol Tests view or + by going to \uicontrol Tools > \uicontrol Tests. \note If you enable both build system based and code based tests, - you may run tests twice when using \uicontrol {Run All Tests} or + you may run tests twice when selecting \uicontrol {Run All Tests} or \uicontrol {Run Selected Tests}. This happens if the tests can be found by the code based test frameworks and are registered as test with the build system. If a test takes more than a minute to execute, the default timeout might - stop the test execution. To increase the timeout, select \preferences > + stop the test execution. To increase the timeout, go to \preferences > \uicontrol {Testing} > \uicontrol General. - \section2 Selecting Tests to Run + \section1 Select tests to run The \uicontrol Tests view shows all the tests found for the currently active test frameworks in the current project. Select the test cases to run. @@ -398,10 +389,10 @@ select \inlineimage icons/leafsort.png (\uicontrol {Sort Naturally}). - \section2 Running and Debugging Tests from Code Editor + \section1 Run and debug tests from code editor You can run and debug tests in the file currently open in the code editor. - To run all tests in the open file, select \uicontrol Tools > + To run all tests in the open file, go to \uicontrol Tools > \uicontrol Tests > \uicontrol {Run Tests for Current File}. \note Available only for code based test frameworks. @@ -414,230 +405,395 @@ \note Availability for build system based tests depends on the build system tool's abilities. - \section1 Specifying Test Settings + \section1 Turn on build system based tests - To customize the handling of tests, test frameworks, and test tools, select + By default, \QC does not handle build system based tests to avoid + interference with code based parsers. To turn on build system based tests, + select the respective test tool in \preferences > \uicontrol Testing + > \uicontrol General. + + The detection of tests is usually much faster for build system based + tests as this normally does not involve scanning or parsing. + The information in the tests tree is usually more detailed + when using code based tests. + + If you turn on both code based and build system based tests, you + may duplicate tests inside the tests tree. + + \section1 Locate Qt Test data tags + + To locate Qt Test data tags: + + \list 1 + \li Press \key {Ctrl+K} (\key {Cmd+K} on \macos) to activate the locator. + \li Enter \c qdt, followed by a space. + \endlist + + \sa {Test}{How To: Test}, {Select the build system}, {Testing}, + {Test Results} +*/ + +/*! + \page creator-preferences-testing.html + \previouspage creator-reference.html + + \ingroup creator-reference-preferences + + \title Testing + + \brief Customize the handling of tests, test frameworks, and test tools. + + To set preferences for handling tests, go to \preferences > \uicontrol {Testing} > \uicontrol General. \image qtcreator-preferences-testing-general.webp {General tab in Testing preferences} - You can customize some settings at project level. To change settings - for the current project instead of globally, select \uicontrol Projects > - \uicontrol {Project Settings} > \uicontrol {Testing}. + The following table summarizes the general testing preferences. - In the \uicontrol {Active Test Frameworks} list, select tests for \QC to - handle. To improve the performance of full scans for tests, disable - test frameworks you do not use. + \table + \header + \li Setting + \li Value + \row + \li \uicontrol {Scan threads} + \li Set the amount of worker threads used when scanning for tests. + By default, \QC uses a quarter of the available logical CPUs. + \row + \li \uicontrol {Omit internal messages} + \li Omit internal messages. + \row + \li \uicontrol {Omit run configuration warnings} + \li Omit run configuration warnings for deduced configurations. + \row + \li \uicontrol {Limit result output} + \li By default, test result output shows a maximum of 100,000 characters. + \row + \li \uicontrol {Limit result description} + \li Set the maximum number of lines in the test result tooltip and + description. + \row + \li \uicontrol {Open results when tests start} + \li Show test results automatically when testing starts. + \row + \li \uicontrol {Open results when tests finish} + \li Show test results automatically when testing ends. + \row + \li \uicontrol {Open results only for unsuccesfull test runs} + \li Show test results only if thy contain failed, fatal, or + unexpectedly passed tests. + \row + \li \uicontrol {Automatically scroll results} + \li The view automatically scrolls to show the latest results. + \row + \li \uicontrol {Group results by application} + \li Group test results by the executable path that you use to run the + tests. This is useful if you have multiple test executables and run + them all at once. + \row + \li \uicontrol {Process arguments} + \li Pass arguments to the test executable that you specify in the + \l {Configure projects for running}{run configuration}. This is an + experimental feature that might cause the execution of the test + executable to fail. + \row + \li \uicontrol {Automatically run} + \li Automatically run all or selected tests after successfully building + the current project. + \row + \li \uicontrol {Timeout} + \li The maximum time in seconds to execute a test case. + \row + \li \uicontrol {Reset Cached Choices} + \li Sometimes, \QC cannot deduce which executable or run configuration to + use. If it repeatedly asks you to select the tests to run when trying + to execute tests, you can let it cache your choices and use them where + appropriate. \QC clears the cache when you switch to another project, + close the current one, or select this setting. + \row + \li \uicontrol {Active Test Frameworks} + \li Select tests for \QC to handle. To improve the performance of full + scans for tests, disable test frameworks you do not use. + \row + \li \uicontrol {Group} + \li Group related test cases for an active test framework. + By default, \QC groups tests that are in the same directory. + \endtable - To group related test cases for an active test framework, select the - \uicontrol Group check box next to the framework name in the - \uicontrol {Active Test Frameworks} list. - By default, \QC groups tests that are in the same directory. + To select the testing framework for the current project, go to + \uicontrol Projects > \uicontrol {Project Settings} > \uicontrol {Testing}. - By default, \QC uses a quarter of the available logical CPUs when - scanning for tests. You can set the amount of worker threads used - in \uicontrol {Scan threads}. + \section1 Qt Tests - \QC omits internal messages and run configuration warnings for - deduced configurations by default. To view them, deselect the - \uicontrol {Omit internal messages} and - \uicontrol {Omit run configuration warnings} check boxes. - - By default, test result output shows a maximum of 100,000 characters. The - view automatically scrolls to show the latest results. To display - full results, deselect the \uicontrol {Limit result output} check box. - To disable automatic scrolling, deselect the - \uicontrol {Automatically scroll results} check box. - - Set the maximum number of lines in the test result tooltip and description - in \uicontrol {Limit result description}. - - To group test results by the executable path that you use to run the - tests, select \uicontrol {Group results by application}. This is useful - if you have multiple test executables and run them all at once. - - To automatically run tests after successfully building the current project, - select them in \uicontrol {Automatically run}. - - Sometimes, \QC cannot deduce which executable or run configuration to use. - If \QC repeatedly asks you to select the tests to run when trying to execute - tests, you can let it cache your choices and use them where appropriate. \QC - clears the cache when you switch to another project, close the current one, - or select \uicontrol {Reset Cached Choices}. - - Select the \uicontrol {Process arguments} check box to pass arguments to the - test executable that you specify in the \l {Configure projects for running} - {run configuration}. This is an experimental feature that might cause the - execution of the test executable to fail. - - \section2 Specifying Settings for Running Qt Tests - - The code inside a benchmark test is measured, and possibly also repeated - several times in order to get an accurate measurement. This depends on the - measurement back-end that you can select in the - \uicontrol {Benchmark Metrics} group in \preferences > \uicontrol {Testing} > - \uicontrol {Qt Test}: - walltime, CPU tick counter, event counter, Valgrind Callgrind, and Linux - Perf. For more information, see \l{Creating a Benchmark}. + To set preference for Qt tests, go to \preferences > \uicontrol {Testing} > + \uicontrol {Qt Test}. \image qtcreator-preferences-testing-qttest.webp {Qt Tests tab in Testing preferences} - To receive verbose output when running benchmarks, select the - \uicontrol {Verbose benchmarks} check box. + The code inside a benchmark test is measured, and possibly also repeated + several times in order to get an accurate measurement. This depends on the + measurement back-end that you select in \uicontrol {Benchmark Metrics}: - To allow the debugger to interrupt Qt tests on assertions, select the - \uicontrol {Disable crash handler while debugging} check box. + \list + \li Walltime + \li CPU tick counter + \li Event counter + \li Valgrind Callgrind + \li Linux Perf + \endlist - To record information about signals and slots in the test log, select the - \uicontrol {Log signals and slots} check box. + For more information, see \l{Creating a Benchmark}. - To explicitly limit the maximum number of warnings in the test log, select - the \uicontrol {Limit warnings} check box and set the limit. Set it to 0 if - you want no limit at all. The default number is 2000. + The following table summarizes the other Qt test preferences. - To check for Qt Quick Tests that are derived from TestCase, select the - \uicontrol {Check for derived Qt Quick tests} check box. + \table + \header + \li Setting + \li Value + \row + \li \uicontrol {Disable crash handler while debugging} + \li Allow the debugger to interrupt Qt tests on assertions. + \row + \li \uicontrol {Use XML output} + \li XML output avoids parsing issues, but plain text is more human + readable. + \note Plain text misses some information, such as duration. + \row + \li \uicontrol {Verbose benchmarks} + \li Receive verbose output when running benchmarks. + \row + \li \uicontrol {Log signals and slots} + \li Record information about signals and slots in the test log. + \row + \li \uicontrol {Limit warnings} + \li Explicitly limit the maximum number of warnings in the test log. + Set the limit to 0 if you want no limit at all. The default limit + is 2000. + \row + \li \uicontrol {Check for derived Qt Quick tests} + \li Check for Qt Quick Tests that are derived from TestCase. + \note This feature is rather expensive and increases the scan time + significantly. + \row + \li \uicontrol {Find user-defined locations} + \li Parse messages for the following pattern and use it as location + information: \c {file://filepath:line} - \note This feature is rather expensive and increases the - scan time significantly. + where \":line\" is optional. - \section2 Specifying Settings for Running Google Tests + \note If the patterns are used in code, the location information + for debug messages and other messages might improve, at the risk + of some incorrect locations and lower performance. + \endtable - To specify settings for running Google tests, select \preferences > + \section1 Google Tests + + To specify settings for running Google tests, go to \preferences > \uicontrol {Testing} > \uicontrol {Google Test}. \image qtcreator-preferences-testing-googletest.webp {Gooble Test tab in Testing preferences} - To run disabled tests, select the \uicontrol {Run disabled tests} check box. + The following table summarizes the Google test preferences. - To turn assertion failures into C++ exceptions, select the - \uicontrol {Throw on failure} check box. + \table + \header + \li Setting + \li Value + \row + \li \uicontrol {Run disabled tests} + \li Execute disabled tests during a test run. + \row + \li \uicontrol {Throw on failure} + \li Turn assertion failures into C++ exceptions. + \row + \li \uicontrol {Break on failure while debugging} + \li Turn failures into debugger breakpoints. + \row + \li \uicontrol {Repeat tests} + \li Run several iterations of the tests. + \row + \li \uicontrol Iterations + \li The number of times to run the tests. + \row + \li \uicontrol {Shuffle tests} + \li Make sure that the tests are independent and repeatable by running + them in a different order each time. + \row + \li \uicontrol Seed + \li The seed for initializing the randomizer. The value 0 generates + a seed based on the current timestamp. + \row + \li \uicontrol {Group mode} + \li Group Google tests by using a \uicontrol {GTest Filter}. + \row + \li \uicontrol {Active filter} + \li The GTest filter to use. + \endtable - To turn failures into debugger breakpoints, select the - \uicontrol {Break on failure while debugging} check box. - - To run several iterations of the tests, select the \uicontrol {Repeat tests} - check box and enter the number of times to run the tests in the - \uicontrol Iterations field. To make sure that the tests are independent and - repeatable, run them in a different order each time by selecting the - \uicontrol {Shuffle tests} check box. Set the seed for initializing the - randomizer in the \uicontrol Seed field. The value 0 generates a seed - based on the current timestamp. - - - To group Google tests by using a GTest filter, select - \uicontrol {GTest Filter} in the \uicontrol {Group mode} field, - and specify the filter in the \uicontrol {Active filter} - field. For more information about GTest filters, see + For more information about GTest filters, see \l{https://github.com/google/googletest/blob/master/docs/advanced.md#running-a-subset-of-the-tests} {Running a Subset of the Tests}. - \section2 Specifying Settings for Running Boost Tests + \section1 Boost Tests - \list 1 - \li To specify settings for running Boost tests, select \preferences > - \uicontrol {Testing} > \uicontrol {Boost Test}. - \image qtcreator-preferences-testing-boosttest.webp {Boost Test tab in Testing preferences} - \li In the \uicontrol {Log format} field, select the error report - format to specify the type of events to record in the - test report. - \li In the \uicontrol {Report level} field, select the verbosity level - of the test result report. Select \uicontrol No if you do not want - a report. - \li Select the \uicontrol Randomize check box to execute the tests in - a random order, using the seed specified in the \uicontrol Seed - field for initializing the randomizer. The value 0 means no + To specify settings for running Boost tests, go to \preferences > + \uicontrol {Testing} > \uicontrol {Boost Test}. + + \image qtcreator-preferences-testing-boosttest.webp {Boost Test tab in Testing preferences} + + The following table summarizes the Boost test preferences. + + \table + \header + \li Setting + \li Value + \row + \li \uicontrol {Log format} + \li The type of events to record in the test report. + \row + \li \uicontrol {Report level} + \li The verbosity level of the test result report. Select \uicontrol No + if you do not want a report. + \row + \li \uicontrol Randomize + \li Execute the tests in a random order. + \row + \li \uicontrol Seed + \li The seed for initializing the randomizer. The value 0 means no randomization, the value 1 uses the current time, and any other value generates a random seed. - \li Select the \uicontrol {Catch system errors} check box to catch - system errors. - \li Select the \uicontrol {Floating point exceptions} check box to - detect floating point exceptions. - \li Select the \uicontrol {Detect memory leaks} check box to detect - memory leaks. - \endlist + \row + \li \uicontrol {Catch system errors} + \li Catch or ignore system errors. + \row + \li \uicontrol {Floating point exceptions} + \li Detect floating point exception traps. + \row + \li \uicontrol {Detect memory leaks} + \li Detect memory leaks. + \endtable - \section2 Specifying Settings for Running Catch2 Tests - \list 1 - \li To specify settings for running Catch2 tests, select - \preferences > \uicontrol {Testing} > \uicontrol {Catch Test}. - \image qtcreator-preferences-testing-catchtest.webp {Catch Test tab in Testing preferences} - \li Select the \uicontrol {Show success} check box to show succeeding - expressions as well. By default Catch2 will print only fails. - \li Select the \uicontrol {Break on failure while debugging} check box - to turn failures into debugger breakpoints. - \li Select the \uicontrol {Skip throwing assertions} check box to skip - any assertion that test for throwing an exception. - \li Select the \uicontrol {Visualize whitespace} check box to turn - whitespace into escape sequences. - \li Select the \uicontrol {Warn on empty tests} check box to get a - warning when a test case does not check any assertion. - \li Select the \uicontrol {Abort after} check box to abort the test - after the number of failures specified inside the spin box. - \li Select the \uicontrol {Benchmark samples} check box to specify - the number of samples to collect while running benchmarks. - \li Select the \uicontrol {Benchmark resamples} check box to specify - the number of resamples to use for statistical bootstrapping after + \section1 Catch2 Tests + + To specify settings for running Catch2 tests, go to \preferences > + \uicontrol {Testing} > \uicontrol {Catch Test}. + + \image qtcreator-preferences-testing-catchtest.webp {Catch Test tab in Testing preferences} + + The following table summarizes the Catch2 test preferences. + + \table + \header + \li Setting + \li Value + \row + \li \uicontrol {Show success} + \li Show succeeding expressions as well. By default Catch2 prints only + failed expressions. + \row + \li \uicontrol {Break on failure while debugging} + \li Turn failures into debugger breakpoints. + \row + \li \uicontrol {Skip throwing assertions} + \li Skip assertions that test for thrown exceptions. + \row + \li \uicontrol {Visualize whitespace} + \li Turn whitespace into escape sequences. + \row + \li \uicontrol {Abort after} + \li Abort the test after the number of failures specified inside the box. + \row + \li \uicontrol {Benchmark samples} + \li The number of samples to collect while running benchmarks. + \row + \li \uicontrol {Benchmark resamples} + \li The number of resamples to use for statistical bootstrapping after benchmarking. - \li Select the \uicontrol {Benchmark confidence interval} check box - to specify the confidence interval for statistical bootstrapping. - \li Select the \uicontrol {Benchmark warmup time} check box to specify - the warmup time for each test before benchmarking starts. - \li Select the \uicontrol {Disable analysis} check box to disable - statistical analysis and bootstrapping. - \endlist + \row + \li \uicontrol {Benchmark confidence interval} + \li The confidence interval for statistical bootstrapping. + \row + \li \uicontrol {Benchmark warmup time} + \li The warmup time for each test before benchmarking starts. + \row + \li \uicontrol {Disable analysis} + \li Disable statistical analysis and bootstrapping. + \endtable \section2 Specifying Settings for Running CTest-Based Tests - \list 1 - \li To specify settings for running CTest-based tests, select - \preferences > \uicontrol {Testing} > \uicontrol {CTest}. - \image qtcreator-preferences-testing-ctest.webp {CTest tab in Testing preferences} - \li Select the \uicontrol {Output on failure} check box to show test - specific output if a test fails. Contrary to the CTest default - this is enabled by default. - \li Select \uicontrol {Schedule random} to execute the tests in - random order. - \li Select \uicontrol {Stop on failure} to automatically stop the - test execution on the first failing test. - \li In the \uicontrol {Output mode} field, select the verbosity level - of the CTest output. - \note This only influences the output on the text display. - \li Select \uicontrol {Repeat tests} if you want to re-run tests - under certain circumstances. - \li In the \uicontrol {Repetition mode} field, select the mode for - re-running tests. Set the maximum count for repeating a test in - the \uicontrol {Count} field. - \li Select \uicontrol {Run in parallel} to run the tests in parallel - using the specified number of \uicontrol {Jobs}. - \li Select \uicontrol {Test load} to limit the parallel + + To specify settings for running CTest-based tests, go to \preferences > + \uicontrol {Testing} > \uicontrol {CTest}. + + \image qtcreator-preferences-testing-ctest.webp {CTest tab in Testing preferences} + + The following table summarizes the CTest preferences. + + \table + \header + \li Setting + \li Value + \row + \li \uicontrol {Output on failure} + \li Show test specific output if a test fails. Contrary to the + CTest default this setting is on by default. + \row + \li \uicontrol {Schedule random} + \li Execute the tests in random order. + \row + \li \uicontrol {Stop on failure} + \li Automatically stop the test execution on the first failing test. + \row + \li \uicontrol {Output mode}, + \li The verbosity level of the CTest output. + \note This setting only influences the output on the text display. + \row + \li \uicontrol {Repeat tests} + \li Re-run tests, as determined by \uicontrol {Repetition mode}. Set the + maximum number of times for repeating a test in \uicontrol {Count}. + \row + \li \uicontrol {Run in parallel} + \li Run the tests in parallel using the specified number of + \uicontrol {Jobs}. In \uicontrol {Test load}, limit the parallel execution. CTest will not start a new test if it would cause the CPU load to pass the threshold set in \uicontrol {Threshold}. - \endlist + \endtable - \section1 Viewing Test Output + \sa {Test}{How To: Test}, {Test Results} +*/ - The \l{View output}{Test Results} view shows Qt and Qt Quick test results +/*! + \page creator-test-results.html + \previouspage creator-reference.html + + \ingroup creator-reference-output-views + + \title Test Results + + \brief View test results. + + View and filter test results in the \uicontrol{Test Results} view. + + \image qtcreator-test-results.webp {Visual display in the Test Results view} + + \section1 Qt Test Output + + The \uicontrol{Test Results} view shows Qt and Qt Quick test results in XML format and other test results in plain text format. - \section2 Qt Test Output - XML can be parsed more easily and reliably than plain text. However, if a Qt or Qt Quick test crashes, it might not produce complete XML code that can be parsed, which might lead to information loss. You might see the lost information when viewing the results as plain text. - To view the - results of Qt and Qt Quick tests as plain text, select \preferences > - \uicontrol {Testing} > \uicontrol {Qt Test}, and - then deselect the \uicontrol {Use XML output} check box. Then select the - \inlineimage icons/text.png - (\uicontrol {Switch Between Visual and Text Display}) button in + To view the results of Qt and Qt Quick tests as plain text, go to + \preferences > \uicontrol {Testing} > \uicontrol {Qt Test} and then clear + \uicontrol {Use XML output}. Then select \inlineimage icons/text.png + (\uicontrol {Switch Between Visual and Text Display}) in \uicontrol {Test Results} to switch to the text display. - \section2 Summary of Messages + \section1 Summary of Messages - The following table lists the messages that \uicontrol {Test Results} - displays: + The following table lists the messages that \uicontrol {Test Results} shows. \table \header @@ -685,11 +841,17 @@ \endtable + \section1 Filtering Test Results + To view only messages of a particular type, select - \inlineimage icons/filtericon.png - (\uicontrol {Filter Test Results}), and then select the types of messages to - show. To show all messages, select \uicontrol {Check All Filters}. To - deselect all message types, select \uicontrol {Uncheck All Filters}. + \inlineimage icons/filtericon.png (\uicontrol {Filter Test Results}) and + then select the types of messages to show. + + To show all messages, select \uicontrol {Check All Filters}. + + To deselect all message types, select \uicontrol {Uncheck All Filters}. + + \section1 Blacklisting Tests Since Qt 5.4, you can add a BLACKLIST file for tests. It is mainly used internally by the Qt CI system. @@ -712,4 +874,6 @@ \li Blacklisted test case passed even though it was expected to fail. \endtable + + \sa {Test}{How To: Test}, {Test Results} */ 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 3696b292635..a715f171cb5 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc @@ -93,6 +93,18 @@ \generatelist creator-how-to-get-help + \section1 Test + + \QC supports both \e {code based tests} and \e {build system based tests}. + Code based testing offers special handling for particular testing + frameworks that strongly ties to the underlying code models or + specialized parsers. Build system based testing is independent from any + testing frameworks. It retrieves information directly from the underlying + build system and uses it or even the build system as such to execute the + respective tests. + + \generatelist creator-how-to-test + \section1 Use \QC \generatelist creator-how-to-use diff --git a/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc b/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc index eb0bcf8ec36..3a74a671e24 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc @@ -27,7 +27,7 @@ \image qt-app-dev-flow.webp {Application development life-cycle} \caption Application development life-cycle - \section1 Projects + \section1 Managing Projects First, you need a \e project. \QC relies on a separate build system, such as CMake, qmake, or Qbs for building the project. From the build system, \QC @@ -63,12 +63,12 @@ For more information, see \l{Manage Projects}{How To: Manage Projects}. - \section1 User Interfaces + \section1 Designing User Interfaces \image heartgame-start.webp {Heart Rate Game} - To create intuitive, modern-looking, fluid user interfaces, use \l{Qt Quick} - and \l{Qt Design Studio Manual}{\QDS}: + To create intuitive, modern-looking, fluid user interfaces (UI), use + \l{Qt Quick} and \l{Qt Design Studio Manual}{\QDS}: \list \li \l {\QMLD} @@ -101,7 +101,7 @@ For more information, see \l{Design UIs}{How To: Design UIs} and \l{UI Design}. - \section1 Code + \section1 Editing Code Writing, editing, and navigating in source code are core tasks in application development. Therefore, the code editor is one of the key components of \QC. @@ -116,13 +116,13 @@ such as Python, for which a \e {language server} is available that provides information about the code to IDEs. - \section2 Find + \section2 Finding Use the incremental and advanced search to search in currently open projects or files on the file system or use the locator to browse through projects, files, classes, functions, documentation, and file systems. - \section2 Refactor + \section2 Refactoring Code \e {Code refactoring} is the process of improving and simplifying code without modifying the existing functionality of an application. Find @@ -137,7 +137,7 @@ \li Simplify code structure \endlist - \section2 Configure the Editor + \section2 Configuring the Text Editor Configure the text editor to suit your specific needs. Change the fonts, colors, highlighting, and indentation. @@ -147,7 +147,7 @@ For more information, see \l{Edit Code}{How To: Edit Code} and \l{Editors}. - \section1 Build, Deploy, and Run + \section1 Building, Deploying, and Running Applications Run and deploy Qt applications that you build for different target platforms or with different compilers, debuggers, or Qt versions. @@ -182,7 +182,7 @@ For more information, see \l{Connecting Devices} and \l{Deploying to Devices}. - \section2 Preview QML + \section2 Previewing QML Use the QML live preview to preview a QML file or an entire Qt Quick application on the desktop, as well as on Android and embedded Linux @@ -191,7 +191,7 @@ For more information, see \l{Validating with Target Hardware}. - \section1 Debug + \section1 Debugging Applications A debugger lets you see what happens \e inside an application while it runs or when it crashes. A debugger can do the following to help you find errors @@ -214,7 +214,7 @@ For more information, see \l{Debugging}. - \section1 Analyze + \section1 Analyzing Source Code Devices have limited memory and CPU power, so you should use them carefully. \QC integrates code analysis tools for detecting memory leaks, profiling @@ -227,17 +227,42 @@ For more information, see \l{Analyzing Code}. - \section1 Autotest + \section1 Running Tests - Create, build and run Qt tests, Qt Quick tests, Google tests, and Boost tests - to unit test applications and libraries. + \QC supports both \e {code based tests} and \e {build system based tests}. + Code based testing offers special handling for particular testing + frameworks that strongly ties to the underlying code models or + specialized parsers. Build system based testing is independent from any + testing frameworks. It retrieves information directly from the underlying + build system and uses it or even the build system as such to execute the + respective tests. + + \QC integrates the following testing frameworks for unit testing + applications and libraries: + + \list + \li \l{https://www.boost.org/doc/libs/1_81_0/libs/test/doc/html/index.html} + {Boost.Test} + \li \l{https://github.com/catchorg/Catch2}{Catch2 test framework} + \li \l{https://github.com/google/googletest}{Google C++ Testing Framework} + \li \l{Qt Quick Test} framework + \li \l{Qt Test} framework + \endlist + + In addition, \QC offers build system based support for + \l{https://cmake.org/cmake/help/latest/manual/ctest.1.html}{CTest}. + + You can use \QC to create, build, and run code based tests for your + projects. + + \image qtcreator-autotests.png Map AUTs (Application Under Test) to \QC and run Squish test suites and cases from it. - For more information, see \l{Running Autotests} and \l{Using Squish}. + For more information, see \l{Test}{How To: Test} and \l{Using Squish}. - \section1 Publish + \section1 Publishing Applications Create installation packages for mobile devices that you publish to application stores and other channels. You must make sure that the diff --git a/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc b/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc index c26df6eb3e5..1fe8e41e287 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc @@ -37,7 +37,7 @@ \section1 Preferences - Set prefecerences that apply globally to all projects. + Set preferences that apply globally to all projects. \annotatedlist creator-reference-preferences diff --git a/doc/qtcreator/src/overview/creator-only/creator-testing.qdoc b/doc/qtcreator/src/overview/creator-only/creator-testing.qdoc index 26ef6701d69..34297d34fa5 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-testing.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-testing.qdoc @@ -12,7 +12,7 @@ \page creator-testing.html \nextpage creator-debugging.html - \title Testing + \title Debugging and Analyzing \image front-testing.png @@ -35,11 +35,6 @@ from \QC. However, the QML Profiler is installed as part of \QC for profiling Qt Quick applications. - \li \l{Running Autotests} - - Create, build and run Qt tests, Qt Quick tests, Google - tests, and Boost tests using \QC. - \li \l{Using Squish} Map AUTs to \QC and run Squish test suites and cases from it. diff --git a/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc b/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc index d03263d4625..084bc90c1ab 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc @@ -74,8 +74,8 @@ \li Empty Nim source and script files. \endtable - \sa {Add Files}{How To: Add Files}, {Create UML-style models}, - {Use project wizards} + \sa {Add Files}{How To: Add Files}, {Add tests to existing test projects}, + {Create UML-style models}, {Use project wizards} */ /*! diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc index 60fb9686fd6..914516417a1 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc @@ -168,8 +168,8 @@ \uicontrol Impl there. \sa {Assign keyboard shortcuts}, {Activate kits for a project}, - {Create files}, {Create Projects}{How To: Create Projects}, - {Creating Projects} + {Create files}, {Test}{How To: Test}, + {Create Projects}{How To: Create Projects}, {Creating Projects} */ /*! diff --git a/doc/qtcreator/src/projects/creator-projects-running.qdoc b/doc/qtcreator/src/projects/creator-projects-running.qdoc index 43d80f08c8d..0b39d0d7077 100644 --- a/doc/qtcreator/src/projects/creator-projects-running.qdoc +++ b/doc/qtcreator/src/projects/creator-projects-running.qdoc @@ -49,7 +49,7 @@ \section1 Select run targets If your project has several run targets defined, such as - \l{Running Autotests}{tests}, you can select them in the kit selector. + \l{Build and run tests}{tests}, you can select them in the kit selector. \image qtcreator-kit-selector-run-targets.png {Run targets in the kit selector} diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index 1f5acccca57..c38beb825d3 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -68,7 +68,7 @@ \li \l{Building Applications for the Web} \endlist \endlist - \li \l{Testing} + \li \l{Debugging and Analyzing} \list \li \l{Debugging} \list @@ -112,7 +112,6 @@ \li \l{Analyzing Code with Cppcheck} \li \l{Visualizing Chrome Trace Events} \endlist - \li \l{Running Autotests} \li \l{Using Squish} \endlist \li \l{How To} @@ -157,6 +156,8 @@ \endlist \li Read Documentation \generatelist creator-how-to-get-help + \li Test + \generatelist creator-how-to-test \li Use \QC \generatelist creator-how-to-use \li Use the UI diff --git a/doc/qtcreator/src/qtcreator.qdoc b/doc/qtcreator/src/qtcreator.qdoc index f828eb6995c..ddc9b74cca6 100644 --- a/doc/qtcreator/src/qtcreator.qdoc +++ b/doc/qtcreator/src/qtcreator.qdoc @@ -64,11 +64,10 @@ \li \inlineimage front-help.png \li \inlineimage front-advanced.png \row - \li \b {\l{Testing}} + \li \b {\l{Debugging and Analyzing}} \list \li \l{Debugging} \li \l{Analyzing Code} - \li \l{Running Autotests} \li \l{Using Squish} \endlist \li \b {\l{How To}} @@ -79,6 +78,10 @@ \li \l{Design UIs} \li \l{Edit Code} \li \l{Manage Projects} + \li \l{Read Documentation} + \li \l{Test} + \li \l{Use \QC} + \li \l{Use the UI} \li \l{How To}{See More...} \endlist \li \b {\l{Reference}} From cf8a8974eda296ba82925bb3f2c0d2cfa1a4bc1b Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 4 Mar 2024 10:10:14 +0100 Subject: [PATCH 33/56] CMakePM: Suppress error message for valid build preset Fixes: QTCREATORBUG-30373 Change-Id: I2e2ec83c0b14d188096ace61468435ccbd36d84b Reviewed-by: Alessandro Portale --- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 25352f0b5d6..23c68a6e642 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -210,7 +210,7 @@ void CMakeProject::setupBuildPresets(Internal::PresetsData &presetsData) { for (auto &buildPreset : presetsData.buildPresets) { if (buildPreset.inheritConfigureEnvironment) { - if (!buildPreset.configurePreset) { + if (!buildPreset.configurePreset && !buildPreset.hidden) { TaskHub::addTask(BuildSystemTask( Task::TaskType::Error, Tr::tr("Build preset %1 is missing a corresponding configure preset.") From f56fd04c8dbbfead7800a1612fb0d1fd05ceeca6 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 1 Mar 2024 13:43:27 +0100 Subject: [PATCH 34/56] Revert "Clangd: Avoid client restart after modifying open documents" The whole point of tracking external changes to files is to use the open files as a sentinel to indicate that non-open files (on which we don't have a watch) have likely also been changed. This reverts commit cff26d813a8805c34588536ca19453852b946643. Change-Id: I5a8b3e6709eda881b912916cf0838b45d1ff4fa4 Reviewed-by: David Schulz Reviewed-by: Reviewed-by: Qt CI Bot --- .../clangcodemodel/clangmodelmanagersupport.cpp | 5 ----- src/plugins/clangcodemodel/test/clangdtests.cpp | 10 ++++++++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 477ab9104b9..3cf94e19c7c 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -796,11 +796,6 @@ void ClangModelManagerSupport::watchForExternalChanges() if (!LanguageClientManager::hasClients()) return; for (const FilePath &file : files) { - if (TextEditor::TextDocument::textDocumentForFilePath(file)) { - // if we have a document for that file we should receive the content - // change via the document signals - continue; - } const ProjectFile::Kind kind = ProjectFile::classify(file.toString()); if (!ProjectFile::isSource(kind) && !ProjectFile::isHeader(kind)) continue; diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 1edec4c2905..bfe7ea95368 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -2207,15 +2207,21 @@ void ClangdTestExternalChanges::test() QVERIFY(curDoc->marks().isEmpty()); // Now trigger an external change in an open, but not currently visible file and - // verify that we get diagnostics in the current editor. + // verify that we get a new client and diagnostics in the current editor. TextDocument * const docToChange = document("mainwindow.cpp"); docToChange->setSilentReload(); QFile otherSource(filePath("mainwindow.cpp").toString()); QVERIFY(otherSource.open(QIODevice::WriteOnly)); otherSource.write("blubb"); otherSource.close(); + QVERIFY(waitForSignalOrTimeout(LanguageClientManager::instance(), + &LanguageClientManager::clientAdded, timeOutInMs())); + ClangdClient * const newClient = ClangModelManagerSupport::clientForProject(project()); + QVERIFY(newClient); + QVERIFY(newClient != oldClient); + newClient->enableTesting(); if (curDoc->marks().isEmpty()) - QVERIFY(waitForSignalOrTimeout(client(), &ClangdClient::textMarkCreated, timeOutInMs())); + QVERIFY(waitForSignalOrTimeout(newClient, &ClangdClient::textMarkCreated, timeOutInMs())); } From fbe244fd4684121ae4b60519f0b2fcd37646e584 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 Mar 2024 10:52:15 +0100 Subject: [PATCH 35/56] Cpp Editor: Fix serializing clangd settings A "store with default operation" makes no sense on the level of the map itself, as it does not have knowledge about the current on-disk settings. This reverts commit a4fbc5f00dddde39871c25bca652de7842baa1dd. Change-Id: I008b0b5c24428c71182dac5d1f151d25cf4f7467 Reviewed-by: Marcus Tillmanns Reviewed-by: David Schulz Reviewed-by: Reviewed-by: Qt CI Bot --- src/libs/utils/store.cpp | 16 +++ src/libs/utils/store.h | 25 +---- .../cppeditor/cppcodemodelsettings.cpp | 99 +++++++------------ src/plugins/cppeditor/cppcodemodelsettings.h | 29 ++---- 4 files changed, 63 insertions(+), 106 deletions(-) diff --git a/src/libs/utils/store.cpp b/src/libs/utils/store.cpp index 37f939f5a8c..fa8d4232c02 100644 --- a/src/libs/utils/store.cpp +++ b/src/libs/utils/store.cpp @@ -190,4 +190,20 @@ void storeToSettings(const Key &groupKey, QtcSettings *s, const Store &store) s->endGroup(); } +void storeToSettingsWithDefault(const Key &groupKey, + QtcSettings *s, + const Store &store, + const Store &defaultStore) +{ + QTC_ASSERT(store.size() == defaultStore.size(), storeToSettings(groupKey, s, store); return); + + s->beginGroup(groupKey); + for (auto it = store.begin(), defaultIt = defaultStore.begin(), end = store.end(); it != end; + ++it, ++defaultIt) + s->setValueWithDefault(it.key(), + mapEntryFromStoreEntry(it.value()), + mapEntryFromStoreEntry(defaultIt.value())); + s->endGroup(); +} + } // Utils diff --git a/src/libs/utils/store.h b/src/libs/utils/store.h index 97e71b0eecd..c538f34c5f2 100644 --- a/src/libs/utils/store.h +++ b/src/libs/utils/store.h @@ -15,26 +15,7 @@ class QtcSettings; using KeyList = QList; -class Store : public QMap -{ -public: - using QMap::QMap; - - template - void insertValueWithDefault(const Key &key, const T &val, const T &defaultValue) - { - if (val != defaultValue) - insert(key, val); - } - - template - void insertValueWithDefault(const Key &key, const T &val) - { - if (val != T()) - insert(key, val); - } -}; - +using Store = QMap; using OldStore = QMap; QTCREATOR_UTILS_EXPORT KeyList keysFromStrings(const QStringList &list); @@ -60,6 +41,10 @@ QTCREATOR_UTILS_EXPORT QVariant mapEntryFromStoreEntry(const QVariant &value); // Don't use in new code. QTCREATOR_UTILS_EXPORT Store storeFromSettings(const Key &groupKey, QtcSettings *s); QTCREATOR_UTILS_EXPORT void storeToSettings(const Key &groupKey, QtcSettings *s, const Store &store); +QTCREATOR_UTILS_EXPORT void storeToSettingsWithDefault(const Key &groupKey, + QtcSettings *s, + const Store &store, + const Store &defaultStore); } // Utils diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index 29516c62189..82cca5752bc 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -445,7 +445,11 @@ void ClangdSettings::loadSettings() void ClangdSettings::saveSettings() { const auto settings = Core::ICore::settings(); - Utils::storeToSettings(clangdSettingsKey(), settings, m_data.toMap()); + const ClangdSettings::Data defaultData; + Utils::storeToSettingsWithDefault(clangdSettingsKey(), + settings, + m_data.toMap(), + defaultData.toMap()); settings->beginGroup(Constants::CPPEDITOR_SETTINGSGROUP); diagnosticConfigsToSettings(settings, m_data.customDiagnosticConfigs); settings->endGroup(); @@ -546,81 +550,44 @@ void ClangdProjectSettings::saveSettings() Store ClangdSettings::Data::toMap() const { Store map; - - map.insertValueWithDefault(useClangdKey(), useClangd, DefaultUseClangd); - - const QString clangdPath = executableFilePath != fallbackClangdFilePath() - ? executableFilePath.toString() - : QString(); - - map.insertValueWithDefault(clangdPathKey(), clangdPath); - - map.insertValueWithDefault(clangdIndexingKey(), indexingPriority != IndexingPriority::Off, true); - map.insertValueWithDefault(clangdIndexingPriorityKey(), - int(indexingPriority), - int(DefaultIndexingPriority)); - - map.insertValueWithDefault(clangdHeaderSourceSwitchModeKey(), - int(headerSourceSwitchMode), - int(DefaultHeaderSourceSwitchMode)); - - map.insertValueWithDefault(clangdCompletionRankingModelKey(), - int(completionRankingModel), - int(DefaultCompletionRankingModel)); - - map.insertValueWithDefault(clangdHeaderInsertionKey(), - autoIncludeHeaders, - DefaultAutoIncludeHeaders); - - map.insertValueWithDefault(clangdThreadLimitKey(), workerThreadLimit, DefaultWorkerThreadLimit); - - map.insertValueWithDefault(clangdDocumentThresholdKey(), - documentUpdateThreshold, - DefaultDocumentUpdateThreshold); - - map.insertValueWithDefault(clangdSizeThresholdEnabledKey(), - sizeThresholdEnabled, - DefaultSizeThresholdEnabled); - - map.insertValueWithDefault(clangdSizeThresholdKey(), - sizeThresholdInKb, - DefaultSizeThresholdInKb); - - map.insertValueWithDefault(sessionsWithOneClangdKey(), sessionsWithOneClangd); - - map.insertValueWithDefault(diagnosticConfigIdKey(), - diagnosticConfigId.toSetting(), - initialClangDiagnosticConfigId().toSetting()); - - if (haveCheckedHardwareReqirements != false) - map.insert(checkedHardwareKey(), true); - - map.insertValueWithDefault(completionResultsKey(), - completionResults, - defaultCompletionResults()); + map.insert(useClangdKey(), useClangd); + map.insert(clangdPathKey(), + executableFilePath != fallbackClangdFilePath() ? executableFilePath.toString() + : QString()); + map.insert(clangdIndexingKey(), indexingPriority != IndexingPriority::Off); + map.insert(clangdIndexingPriorityKey(), int(indexingPriority)); + map.insert(clangdHeaderSourceSwitchModeKey(), int(headerSourceSwitchMode)); + map.insert(clangdCompletionRankingModelKey(), int(completionRankingModel)); + map.insert(clangdHeaderInsertionKey(), autoIncludeHeaders); + map.insert(clangdThreadLimitKey(), workerThreadLimit); + map.insert(clangdDocumentThresholdKey(), documentUpdateThreshold); + map.insert(clangdSizeThresholdEnabledKey(), sizeThresholdEnabled); + map.insert(clangdSizeThresholdKey(), sizeThresholdInKb); + map.insert(sessionsWithOneClangdKey(), sessionsWithOneClangd); + map.insert(diagnosticConfigIdKey(), diagnosticConfigId.toSetting()); + map.insert(checkedHardwareKey(), true); + map.insert(completionResultsKey(), completionResults); return map; } void ClangdSettings::Data::fromMap(const Store &map) { - useClangd = map.value(useClangdKey(), DefaultUseClangd).toBool(); + useClangd = map.value(useClangdKey(), true).toBool(); executableFilePath = FilePath::fromString(map.value(clangdPathKey()).toString()); indexingPriority = IndexingPriority( - map.value(clangdIndexingPriorityKey(), int(DefaultIndexingPriority)).toInt()); + map.value(clangdIndexingPriorityKey(), int(this->indexingPriority)).toInt()); const auto it = map.find(clangdIndexingKey()); if (it != map.end() && !it->toBool()) indexingPriority = IndexingPriority::Off; - headerSourceSwitchMode = HeaderSourceSwitchMode( - map.value(clangdHeaderSourceSwitchModeKey(), int(DefaultHeaderSourceSwitchMode)).toInt()); - completionRankingModel = CompletionRankingModel( - map.value(clangdCompletionRankingModelKey(), int(DefaultCompletionRankingModel)).toInt()); - autoIncludeHeaders = map.value(clangdHeaderInsertionKey(), DefaultAutoIncludeHeaders).toBool(); - workerThreadLimit = map.value(clangdThreadLimitKey(), DefaultWorkerThreadLimit).toInt(); - documentUpdateThreshold - = map.value(clangdDocumentThresholdKey(), DefaultDocumentUpdateThreshold).toInt(); - sizeThresholdEnabled - = map.value(clangdSizeThresholdEnabledKey(), DefaultSizeThresholdEnabled).toBool(); - sizeThresholdInKb = map.value(clangdSizeThresholdKey(), DefaultSizeThresholdInKb).toLongLong(); + headerSourceSwitchMode = HeaderSourceSwitchMode(map.value(clangdHeaderSourceSwitchModeKey(), + int(headerSourceSwitchMode)).toInt()); + completionRankingModel = CompletionRankingModel(map.value(clangdCompletionRankingModelKey(), + int(completionRankingModel)).toInt()); + autoIncludeHeaders = map.value(clangdHeaderInsertionKey(), false).toBool(); + workerThreadLimit = map.value(clangdThreadLimitKey(), 0).toInt(); + documentUpdateThreshold = map.value(clangdDocumentThresholdKey(), 500).toInt(); + sizeThresholdEnabled = map.value(clangdSizeThresholdEnabledKey(), false).toBool(); + sizeThresholdInKb = map.value(clangdSizeThresholdKey(), 1024).toLongLong(); sessionsWithOneClangd = map.value(sessionsWithOneClangdKey()).toStringList(); diagnosticConfigId = Id::fromSetting(map.value(diagnosticConfigIdKey(), initialClangDiagnosticConfigId().toSetting())); diff --git a/src/plugins/cppeditor/cppcodemodelsettings.h b/src/plugins/cppeditor/cppcodemodelsettings.h index 6b491855107..fe2e625c070 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.h +++ b/src/plugins/cppeditor/cppcodemodelsettings.h @@ -125,26 +125,15 @@ public: QStringList sessionsWithOneClangd; ClangDiagnosticConfigs customDiagnosticConfigs; Utils::Id diagnosticConfigId; - - static constexpr auto DefaultWorkerThreadLimit = 0; - static constexpr auto DefaultDocumentUpdateThreshold = 500; - static constexpr auto DefaultSizeThresholdInKb = 1024ll; - static constexpr auto DefaultUseClangd = true; - static constexpr auto DefaultIndexingPriority = ClangdSettings::IndexingPriority::Low; - static constexpr auto DefaultHeaderSourceSwitchMode = HeaderSourceSwitchMode::Both; - static constexpr auto DefaultCompletionRankingModel = CompletionRankingModel::Default; - static constexpr auto DefaultAutoIncludeHeaders = false; - static constexpr auto DefaultSizeThresholdEnabled = false; - - int workerThreadLimit = DefaultWorkerThreadLimit; - int documentUpdateThreshold = DefaultDocumentUpdateThreshold; - qint64 sizeThresholdInKb = DefaultSizeThresholdInKb; - bool useClangd = DefaultUseClangd; - IndexingPriority indexingPriority = DefaultIndexingPriority; - HeaderSourceSwitchMode headerSourceSwitchMode = DefaultHeaderSourceSwitchMode; - CompletionRankingModel completionRankingModel = DefaultCompletionRankingModel; - bool autoIncludeHeaders = DefaultAutoIncludeHeaders; - bool sizeThresholdEnabled = DefaultSizeThresholdEnabled; + int workerThreadLimit = 0; + int documentUpdateThreshold = 500; + qint64 sizeThresholdInKb = 1024; + bool useClangd = true; + IndexingPriority indexingPriority = IndexingPriority::Low; + HeaderSourceSwitchMode headerSourceSwitchMode = HeaderSourceSwitchMode::Both; + CompletionRankingModel completionRankingModel = CompletionRankingModel::Default; + bool autoIncludeHeaders = false; + bool sizeThresholdEnabled = false; bool haveCheckedHardwareReqirements = false; int completionResults = defaultCompletionResults(); }; From 50c404659385fa1b991e18e84329bf0c25bd8190 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 4 Mar 2024 12:00:43 +0100 Subject: [PATCH 36/56] Deploy qtplugininfo It is useful for inspecting Qt Creator plugins and doesn't hurt. Change-Id: Ifefb3b17193e16b0f592b854477374dbcb5ab1b4 Reviewed-by: Alessandro Portale Reviewed-by: Reviewed-by: Qt CI Bot --- scripts/deploy.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/deploy.py b/scripts/deploy.py index 20ade283d2a..8df90f1ac14 100755 --- a/scripts/deploy.py +++ b/scripts/deploy.py @@ -236,7 +236,7 @@ def deploy_qt_conf_files(qtc_binary_path): if common.is_linux_platform(): qt_prefix_path = os.path.join(qtc_binary_path, '..', 'lib', 'Qt') add_qt_conf(os.path.join(qtc_binary_path, '..', 'libexec', 'qtcreator'), qt_prefix_path) - add_qt_conf(os.path.join(qtc_binary_path, '..', 'lib', 'Qt', 'bin'), qt_prefix_path) # qtdiag + add_qt_conf(os.path.join(qtc_binary_path, '..', 'lib', 'Qt', 'bin'), qt_prefix_path) # qtdiag etc add_qt_conf(qtc_binary_path, qt_prefix_path) # QtC itself if common.is_windows_platform(): add_qt_conf(qtc_binary_path, qtc_binary_path) # QtC itself, libexec, and qtdiag etc @@ -409,8 +409,9 @@ def deploy_qt_mac(qtc_binary_path, qt_install): puppets = glob(os.path.join(libexec_path, 'qml2puppet*')) for puppet in puppets: additional_paths.append(puppet) - # qtdiag + # qtdiag, qtplugininfo additional_paths.append(os.path.join(bin_path, 'qtdiag')) + additional_paths.append(os.path.join(bin_path, 'qtplugininfo')) # other libexec additional_paths.append(os.path.join(libexec_path, 'sdktool')) additional_paths.append(os.path.join(libexec_path, 'qtpromaker')) @@ -470,6 +471,7 @@ def main(): else os.path.dirname(args.qtcreator_binary)) deploy_binary('qtdiag', qtcreator_binary_path, qt_install) + deploy_binary('qtplugininfo', qtcreator_binary_path, qt_install) deploy_binary('qsb', qtcreator_binary_path, qt_install) deploy_plugins(qtcreator_binary_path, qt_install) deploy_imports(qtcreator_binary_path, qt_install) From 6d6ec00cdbb6d110411ed8b731790ab676417d41 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Mar 2024 14:50:27 +0100 Subject: [PATCH 37/56] Core: Wrap moribund dialogs into QPointer There's no guarantee that items in the collected list don't die for other reasons before it's their turn in the loop. Change-Id: I5e81a25c3c205646eece30d6dd1a95f4b97eda05 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/icore.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 54462f30512..1834a795608 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -2189,15 +2189,17 @@ void ICorePrivate::openFileFromDevice() static void acceptModalDialogs() { const QWidgetList topLevels = QApplication::topLevelWidgets(); - QList dialogsToClose; + QList> dialogsToClose; for (QWidget *topLevel : topLevels) { if (auto dialog = qobject_cast(topLevel)) { if (dialog->isModal()) dialogsToClose.append(dialog); } } - for (QDialog *dialog : dialogsToClose) - dialog->accept(); + for (QDialog *dialog : dialogsToClose) { + if (dialog) + dialog->accept(); + } } } // Internal From 58f6a3a459a8e77fe3b31b31d51a3ba428cc9afc Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 26 Feb 2024 14:17:08 +0100 Subject: [PATCH 38/56] COIN/GitHub: Use Qt 6.6.2 Change-Id: Ib9303ea53eb8b14851c670c144ed6a3261c2d6cb Reviewed-by: Qt CI Bot Reviewed-by: David Schulz --- .github/workflows/build_cmake.yml | 6 +++--- coin/instructions/common_environment.yaml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index 6ac4564da1e..794b38c6c1c 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -7,7 +7,7 @@ on: - 'doc/**' env: - QT_VERSION: 6.6.0 + QT_VERSION: 6.6.2 MACOS_DEPLOYMENT_TARGET: 11.0 CLANG_VERSION: 17.0.1 ELFUTILS_VERSION: 0.175 @@ -202,12 +202,12 @@ jobs: set(url_os "linux_x64") set(qt_package_arch_suffix "gcc_64") set(qt_dir_prefix "${qt_version}/gcc_64") - set(qt_package_suffix "-Linux-RHEL_8_6-GCC-Linux-RHEL_8_6-X86_64") + set(qt_package_suffix "-Linux-RHEL_8_8-GCC-Linux-RHEL_8_8-X86_64") elseif ("${{ runner.os }}" STREQUAL "macOS") set(url_os "mac_x64") set(qt_package_arch_suffix "clang_64") set(qt_dir_prefix "${qt_version}/macos") - set(qt_package_suffix "-MacOS-MacOS_12-Clang-MacOS-MacOS_12-X86_64-ARM64") + set(qt_package_suffix "-MacOS-MacOS_13-Clang-MacOS-MacOS_13-X86_64-ARM64") endif() set(qt_base_url "https://\${qt_mirror}/online/qtsdkrepository/${url_os}/desktop/qt6_${qt_version_dotless}") diff --git a/coin/instructions/common_environment.yaml b/coin/instructions/common_environment.yaml index 6d4fe73802e..e2d11901180 100644 --- a/coin/instructions/common_environment.yaml +++ b/coin/instructions/common_environment.yaml @@ -10,13 +10,13 @@ instructions: variableValue: https://ci-files02-hki.ci.qt.io/packages/jenkins/qtcreator_libclang/libclang-release_17.0.1-based - type: EnvironmentVariable variableName: QTC_QT_BASE_URL - variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.6/6.6.0-released/Qt" + variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.6/6.6.2-released/Qt" - type: EnvironmentVariable variableName: QTC_QT_MODULES variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine" - type: EnvironmentVariable variableName: MACOSX_DEPLOYMENT_TARGET - variableValue: 10.15 + variableValue: 11.0 - type: EnvironmentVariable variableName: SDKTOOL_MACOSX_DEPLOYMENT_TARGET variableValue: 10.14 @@ -39,7 +39,7 @@ instructions: instructions: - type: EnvironmentVariable variableName: QTC_QT_POSTFIX - variableValue: "-Linux-RHEL_8_6-GCC-Linux-RHEL_8_6-X86_64.7z" + variableValue: "-Linux-RHEL_8_8-GCC-Linux-RHEL_8_8-X86_64.7z" - type: EnvironmentVariable variableName: QTC_SDKTOOL_QT_EXT variableValue: ".tar.xz" @@ -51,7 +51,7 @@ instructions: instructions: - type: EnvironmentVariable variableName: QTC_QT_POSTFIX - variableValue: "-MacOS-MacOS_12-Clang-MacOS-MacOS_12-X86_64-ARM64.7z" + variableValue: "-MacOS-MacOS_13-Clang-MacOS-MacOS_13-X86_64-ARM64.7z" - type: EnvironmentVariable variableName: QTC_SDKTOOL_QT_EXT variableValue: ".tar.xz" From 568118af8b48b56fe567b8b8c19ff229f5a87e9e Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 5 Mar 2024 09:41:55 +0100 Subject: [PATCH 39/56] Terminal: Fix copying Japanese text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously if you tried to copy text such as "惣流・アスカ・ラングレー" an invalid char would be added after each character. This patch fixes the code so that "-1" cells are ignored. They are created because the previous cell had a width of 2. Change-Id: Iff8e60d3a4080068e188b08ded13a8c78df952f2 Reviewed-by: Cristian Adam --- src/libs/solutions/terminal/terminalsurface.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/solutions/terminal/terminalsurface.cpp b/src/libs/solutions/terminal/terminalsurface.cpp index e51c09d8944..00f26ce188f 100644 --- a/src/libs/solutions/terminal/terminalsurface.cpp +++ b/src/libs/solutions/terminal/terminalsurface.cpp @@ -456,6 +456,9 @@ std::u32string::value_type TerminalSurface::fetchCharAt(int x, int y) const if (cell->width == 0) return 0; + if (cell->chars[0] == 0xffffffff) + return 0; + QString s = QString::fromUcs4(cell->chars, 6).normalized(QString::NormalizationForm_C); const QList ucs4 = s.toUcs4(); return std::u32string(ucs4.begin(), ucs4.end()).front(); From 369105376008101ef710130bf17ebda84d24cbb7 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 5 Mar 2024 09:24:42 +0100 Subject: [PATCH 40/56] TextEditor: fix finding whole words '_' was handled as a word separator, in contrast the global search did not. So the user received different results when using find toolbar or the advanced search while searching with the same option and pattern. Fixes: QTCREATORBUG-10276 Change-Id: Ie07303fbaa35475bb98bdb813358169474c3ba1d Reviewed-by: Marcus Tillmanns --- src/plugins/texteditor/texteditor.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 054e65193f4..3256ee91b79 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -4154,10 +4154,17 @@ void TextEditorWidgetPrivate::highlightSearchResults(const QTextBlock &block, co l = match.capturedLength(); if (l == 0) break; - if ((m_findFlags & FindWholeWords) - && ((idx && text.at(idx-1).isLetterOrNumber()) - || (idx + l < text.length() && text.at(idx + l).isLetterOrNumber()))) - continue; + if (m_findFlags & FindWholeWords) { + auto posAtWordSeparator = [](const QString &text, int idx) { + if (idx < 0 || idx >= text.length()) + return false; + const QChar c = text.at(idx); + return !c.isLetterOrNumber() && c != QLatin1Char('_'); + }; + if (!posAtWordSeparator(text, idx - 1) || !posAtWordSeparator(text, idx + l)) + continue; + } + const int start = blockPosition + idx; const int end = start + l; From feeb72d78cb85c914b0bc17f95a7b9a00a84f22b Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 5 Mar 2024 09:00:52 +0100 Subject: [PATCH 41/56] Debugger: Rework timeout handling Extend the range to start with 10sec, but default to 40secs. Change-Id: Iede37afca0da2c9ba8fc0bb3fda65d403b8d0bcc Reviewed-by: Christian Stenger Reviewed-by: --- src/plugins/debugger/gdb/gdbengine.cpp | 10 ++-------- src/plugins/debugger/gdb/gdbengine.h | 1 - src/plugins/debugger/gdb/gdbsettings.cpp | 4 ++-- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 919ee6c7534..0f4fe9d7729 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -784,8 +784,8 @@ void GdbEngine::runCommand(const DebuggerCommand &command) } // Start Watchdog. - if (m_commandTimer.interval() <= 20000) - m_commandTimer.setInterval(commandTimeoutTime()); + const int watchDogMilliSecs = settings().gdbWatchdogTimeout() * 1000; + m_commandTimer.setInterval(watchDogMilliSecs); // The process can die for external reason between the "-gdb-exit" was // sent and a response could be retrieved. We don't want the watchdog // to bark in that case since the only possible outcome is a dead @@ -798,12 +798,6 @@ void GdbEngine::runCommand(const DebuggerCommand &command) } } -int GdbEngine::commandTimeoutTime() const -{ - const int time = settings().gdbWatchdogTimeout(); - return 1000 * qMax(20, time); -} - void GdbEngine::commandTimeout() { const QList keys = Utils::sorted(m_commandForToken.keys()); diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index c7efe0cbaf6..a396ad55079 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -116,7 +116,6 @@ private: ////////// General Interface ////////// QHash m_commandForToken; QHash m_flagsForToken; - int commandTimeoutTime() const; QTimer m_commandTimer; QString m_pendingConsoleStreamOutput; diff --git a/src/plugins/debugger/gdb/gdbsettings.cpp b/src/plugins/debugger/gdb/gdbsettings.cpp index eef19df9719..04688b54837 100644 --- a/src/plugins/debugger/gdb/gdbsettings.cpp +++ b/src/plugins/debugger/gdb/gdbsettings.cpp @@ -187,9 +187,9 @@ GdbSettings::GdbSettings() "calls and is very likely to destroy your debugging session.

")); gdbWatchdogTimeout.setSettingsKey("WatchdogTimeout"); - gdbWatchdogTimeout.setDefaultValue(20); + gdbWatchdogTimeout.setDefaultValue(40); gdbWatchdogTimeout.setSuffix(Tr::tr("sec")); - gdbWatchdogTimeout.setRange(20, 1000000); + gdbWatchdogTimeout.setRange(10, 1000000); gdbWatchdogTimeout.setLabelText(Tr::tr("GDB timeout:")); gdbWatchdogTimeout.setToolTip(Tr::tr( "The number of seconds before a non-responsive GDB process is terminated.\n" From ac67df7e7318456f3616e414caec20543764de9d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 4 Mar 2024 11:51:58 +0100 Subject: [PATCH 42/56] main: Fix leaking of a QtcSettings object Amends b619f24396ab5d446f39d2d53904829254c19a80 Change-Id: Ic93d33a09eb2b49dd899470ba88f3a7d71f5400d Reviewed-by: Reviewed-by: hjk --- src/app/main.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index b875850722a..6c5fb9a3062 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -414,9 +414,8 @@ QStringList lastSessionArgument() QString crashReportsPath() { std::unique_ptr settings(createUserSettings()); - QFileInfo(settings->fileName()).path() + "/crashpad_reports"; if (Utils::HostOsInfo::isMacHost()) - return QFileInfo(createUserSettings()->fileName()).path() + "/crashpad_reports"; + return QFileInfo(settings->fileName()).path() + "/crashpad_reports"; else return QCoreApplication::applicationDirPath() + '/' + RELATIVE_LIBEXEC_PATH + "crashpad_reports"; From 25c0fc9c45658509f4199d254646148b517c5d81 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Tue, 5 Mar 2024 13:37:17 +0100 Subject: [PATCH 43/56] Android: Add output about JDK path issues Change-Id: Ib72c5e8e2e23aa1f24d5181a060c72aaa2006d37 Reviewed-by: Marcus Tillmanns --- src/plugins/android/androidsettingswidget.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index c75ba299c5b..1e086daa9fe 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -10,6 +10,7 @@ #include "androidtr.h" #include +#include #include @@ -361,8 +362,10 @@ AndroidSettingsWidget::AndroidSettingsWidget() m_openJdkLocationPathChooser->setValidationFunction([](const QString &s) { return Utils::asyncRun([s]() -> expected_str { expected_str test = testJavaC(FilePath::fromUserInput(s)); - if (!test) + if (!test) { + Core::MessageManager::writeSilently(test.error()); return make_unexpected(test.error()); + } return s; }); }); From 911c486ff07a8314d3c6186c3a86888f84dd7817 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 1 Mar 2024 10:15:05 +0100 Subject: [PATCH 44/56] Qt/Help: Fix the "Highest Version Only" setting for the online installer The Qt support has the option to only register the documentation for "the highest Qt version", which is enabled by default. That is based on finding the help files for registered Qt versions and only registering the right set depending on the settings. Unfortunately the online installer additionally registers the Qt documentation path as a separate documentation set in the install settings. (This was originally introduced to support documentation for components that are not directly related to a Qt version.) The Help plugin that handles this setting doesn't know that the Qt support explicitly doesn't want the documentation of some Qt versions registered. Let the Qt support explicitly tell the Help plugin about documentation files that should not be registered, even if they appear in the separate install setting. Change-Id: I0512adc0dfe9969481ce83094f5349a49aae5d9f Reviewed-by: Christian Kandeler Reviewed-by: Reviewed-by: Marcus Tillmanns --- src/plugins/coreplugin/helpmanager.cpp | 6 +++ src/plugins/coreplugin/helpmanager.h | 1 + .../coreplugin/helpmanager_implementation.h | 1 + src/plugins/help/helpmanager.cpp | 13 +++++ src/plugins/help/helpmanager.h | 1 + src/plugins/qtsupport/qtversionmanager.cpp | 49 ++++++++++++++++--- 6 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/plugins/coreplugin/helpmanager.cpp b/src/plugins/coreplugin/helpmanager.cpp index 2fda96bf1e2..01fc7eff478 100644 --- a/src/plugins/coreplugin/helpmanager.cpp +++ b/src/plugins/coreplugin/helpmanager.cpp @@ -97,5 +97,11 @@ void showHelpUrl(const QString &url, HelpViewerLocation location) showHelpUrl(QUrl(url), location); } +void setBlockedDocumentation(const QStringList &fileNames) +{ + if (checkInstance()) + m_instance->setBlockedDocumentation(fileNames); +} + } // HelpManager } // Core diff --git a/src/plugins/coreplugin/helpmanager.h b/src/plugins/coreplugin/helpmanager.h index 845b508015d..55d449e696b 100644 --- a/src/plugins/coreplugin/helpmanager.h +++ b/src/plugins/coreplugin/helpmanager.h @@ -38,6 +38,7 @@ enum HelpViewerLocation { CORE_EXPORT QString documentationPath(); CORE_EXPORT void registerDocumentation(const QStringList &fileNames); +CORE_EXPORT void setBlockedDocumentation(const QStringList &fileNames); CORE_EXPORT void unregisterDocumentation(const QStringList &fileNames); CORE_EXPORT QMultiMap linksForIdentifier(const QString &id); diff --git a/src/plugins/coreplugin/helpmanager_implementation.h b/src/plugins/coreplugin/helpmanager_implementation.h index c0d23563400..798a5a340ed 100644 --- a/src/plugins/coreplugin/helpmanager_implementation.h +++ b/src/plugins/coreplugin/helpmanager_implementation.h @@ -17,6 +17,7 @@ protected: public: virtual void registerDocumentation(const QStringList &fileNames) = 0; + virtual void setBlockedDocumentation(const QStringList &fileNames) = 0; virtual void unregisterDocumentation(const QStringList &fileNames) = 0; virtual QMultiMap linksForIdentifier(const QString &id) = 0; virtual QMultiMap linksForKeyword(const QString &keyword) = 0; diff --git a/src/plugins/help/helpmanager.cpp b/src/plugins/help/helpmanager.cpp index 6a232083bd1..7ec80e700d5 100644 --- a/src/plugins/help/helpmanager.cpp +++ b/src/plugins/help/helpmanager.cpp @@ -54,6 +54,7 @@ struct HelpManagerPrivate // data for delayed initialization QSet m_filesToRegister; + QSet m_blockedDocumentation; QSet m_filesToUnregister; QHash m_customValues; @@ -146,6 +147,12 @@ void HelpManager::registerDocumentation(const QStringList &files) ProgressManager::addTask(future, Tr::tr("Update Documentation"), kUpdateDocumentationTask); } +void HelpManager::setBlockedDocumentation(const QStringList &fileNames) +{ + for (const QString &filePath : fileNames) + d->m_blockedDocumentation.insert(filePath); +} + static void unregisterDocumentationNow(QPromise &promise, const QString collectionFilePath, const QStringList &files) @@ -334,6 +341,12 @@ void HelpManager::setupHelpManager() for (const QString &filePath : d->documentationFromInstaller()) d->m_filesToRegister.insert(filePath); + // The online installer registers documentation for Qt versions explicitly via an install + // setting, which defeats that we only register the Qt versions matching the setting. + // So the Qt support explicitly blocks the files that we do _not_ want to register, so the + // Help plugin knows about this. + d->m_filesToRegister -= d->m_blockedDocumentation; + d->cleanUpDocumentation(); if (!d->m_filesToUnregister.isEmpty()) { diff --git a/src/plugins/help/helpmanager.h b/src/plugins/help/helpmanager.h index 6a5874e7df2..5f0efe56200 100644 --- a/src/plugins/help/helpmanager.h +++ b/src/plugins/help/helpmanager.h @@ -29,6 +29,7 @@ public: static QString collectionFilePath(); void registerDocumentation(const QStringList &fileNames) override; + void setBlockedDocumentation(const QStringList &fileNames) override; void unregisterDocumentation(const QStringList &fileNames) override; static void registerUserDocumentation(const QStringList &filePaths); diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index acdaba62827..063a1309846 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -120,7 +120,8 @@ public: void updateDocumentation(const QtVersions &added, const QtVersions &removed, - const QtVersions &allNew); + const QtVersions &allNew, + bool updateBlockedDocumentation = false); void setNewQtVersions(const QtVersions &newVersions); QString qmakePath(const QString &qtchooser, const QString &version); @@ -174,7 +175,7 @@ void QtVersionManagerImpl::triggerQtVersionRestore() } // exists const QtVersions vs = QtVersionManager::versions(); - updateDocumentation(vs, {}, vs); + updateDocumentation(vs, {}, vs, /*updateBlockedDocumentation=*/true); } bool QtVersionManager::isLoaded() @@ -499,9 +500,13 @@ void QtVersionManager::registerExampleSet(const QString &displayName, using Path = QString; using FileName = QString; -static QList> documentationFiles(QtVersion *v) +using DocumentationFile = std::pair; +using DocumentationFiles = QList; +using AllDocumentationFiles = QHash; + +static DocumentationFiles allDocumentationFiles(QtVersion *v) { - QList> files; + DocumentationFiles files; const QStringList docPaths = QStringList( {v->docsPath().toString() + QChar('/'), v->docsPath().toString() + "/qch/"}); for (const QString &docPath : docPaths) { @@ -512,7 +517,17 @@ static QList> documentationFiles(QtVersion *v) return files; } -static QStringList documentationFiles(const QtVersions &vs, bool highestOnly = false) +static AllDocumentationFiles allDocumentationFiles(const QtVersions &versions) +{ + AllDocumentationFiles result; + for (QtVersion *v : versions) + result.insert(v, allDocumentationFiles(v)); + return result; +} + +static QStringList documentationFiles(const QtVersions &vs, + const AllDocumentationFiles &allDocumentationFiles, + bool highestOnly = false) { // if highestOnly is true, register each file only once per major Qt version, even if // multiple minor or patch releases of that major version are installed @@ -522,7 +537,8 @@ static QStringList documentationFiles(const QtVersions &vs, bool highestOnly = f for (QtVersion *v : versions) { const int majorVersion = v->qtVersion().majorVersion(); QSet &majorVersionFileNames = includedFileNames[majorVersion]; - for (const std::pair &file : documentationFiles(v)) { + const DocumentationFiles files = allDocumentationFiles.value(v); + for (const std::pair &file : files) { if (!highestOnly || !majorVersionFileNames.contains(file.second)) { filePaths.insert(file.first + file.second); majorVersionFileNames.insert(file.second); @@ -532,15 +548,23 @@ static QStringList documentationFiles(const QtVersions &vs, bool highestOnly = f return filePaths.values(); } +static QStringList documentationFiles(const QtVersions &vs) +{ + return documentationFiles(vs, allDocumentationFiles(vs)); +} + void QtVersionManagerImpl::updateDocumentation(const QtVersions &added, const QtVersions &removed, - const QtVersions &allNew) + const QtVersions &allNew, + bool updateBlockedDocumentation) { using DocumentationSetting = QtVersionManager::DocumentationSetting; const DocumentationSetting setting = QtVersionManager::documentationSetting(); + const AllDocumentationFiles allNewDocFiles = allDocumentationFiles(allNew); const QStringList docsOfAll = setting == DocumentationSetting::None ? QStringList() : documentationFiles(allNew, + allNewDocFiles, setting == DocumentationSetting::HighestOnly); const QStringList docsToRemove = Utils::filtered(documentationFiles(removed), @@ -551,6 +575,17 @@ void QtVersionManagerImpl::updateDocumentation(const QtVersions &added, [&docsOfAll](const QString &f) { return docsOfAll.contains(f); }); + + if (updateBlockedDocumentation) { + // The online installer registers documentation for Qt versions explicitly via an install + // setting, which defeats that we only register the Qt versions matching the setting. + // So the Qt support explicitly blocks the files that we do _not_ want to register, so the + // Help plugin knows about this. + const QSet reallyAllFiles = toSet(documentationFiles(allNew, allNewDocFiles)); + const QSet toBlock = reallyAllFiles - toSet(docsOfAll); + Core::HelpManager::setBlockedDocumentation(toList(toBlock)); + } + Core::HelpManager::unregisterDocumentation(docsToRemove); Core::HelpManager::registerDocumentation(docsToAdd); } From 118e39cae2eac020c0f649f2902fd9359fea4fbd Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 4 Mar 2024 05:50:06 +0100 Subject: [PATCH 45/56] LSP: fix placeholder key see https://microsoft.github.io/language-server-protocol/specifications/ lsp/3.17/specification/#textDocument_prepareRename This fixes the empty replacement input field when renaming a global symbol with current clangd from the llvm main branch. Change-Id: I6539a17c6172e7c96088645ab7234d9b0213170c Reviewed-by: Christian Kandeler --- src/libs/languageserverprotocol/jsonkeys.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/languageserverprotocol/jsonkeys.h b/src/libs/languageserverprotocol/jsonkeys.h index f9ef7b4bedb..236d28bfda1 100644 --- a/src/libs/languageserverprotocol/jsonkeys.h +++ b/src/libs/languageserverprotocol/jsonkeys.h @@ -143,7 +143,7 @@ constexpr Key parametersKey{"parameters"}; constexpr Key paramsKey{"params"}; constexpr Key patternKey{"pattern"}; constexpr Key percentageKey{"percentage"}; -constexpr Key placeHolderKey{"placeHolder"}; +constexpr Key placeHolderKey{"placeholder"}; constexpr Key positionKey{"position"}; constexpr Key prepareProviderKey{"prepareProvider"}; constexpr Key prepareSupportKey{"prepareSupport"}; From 3517123ff48bc32a89edaf57600ca6be3c287253 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 5 Mar 2024 13:07:40 +0100 Subject: [PATCH 46/56] LanguageClient: fix assist provider leak on client destruction Change-Id: I2d932c2123f48a65be1c6406ed669feda03c93ea Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 7095c450481..90120e3174b 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -207,6 +207,9 @@ public: // do not handle messages while shutting down disconnect(m_clientInterface, &InterfaceController::messageReceived, q, &Client::handleMessage); + delete m_clientProviders.completionAssistProvider; + delete m_clientProviders.functionHintProvider; + delete m_clientProviders.quickFixAssistProvider; delete m_diagnosticManager; delete m_clientInterface; } From 5a1e5ce0583ef9bf2cafb247d2af477abf3703b5 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 4 Mar 2024 10:47:24 +0100 Subject: [PATCH 47/56] Doc: Split up "Searching with the Locator" Hide the locator docs from the QDS Manual because the locator is not visible in the Code view. Task-number: QTCREATORBUG-29361 Change-Id: Iecbbaece78b0cd6a496289fd9a00acfdd054d41f Reviewed-by: Eike Ziller --- .../src/cmake/creator-projects-cmake.qdoc | 4 +- .../src/editors/creator-locator.qdoc | 325 ------------------ .../creator-only/creator-clang-codemodel.qdoc | 2 +- .../creator-coding-edit-mode.qdoc | 6 +- .../editors/creator-only/creator-copilot.qdoc | 2 +- .../creator-only/creator-language-server.qdoc | 2 +- .../editors/creator-only/creator-locator.qdoc | 265 ++++++++++++++ .../creator-text-editing-macros.qdoc | 2 +- doc/qtcreator/src/editors/creator-search.qdoc | 2 +- .../creator-how-to-find-preferences.qdoc | 6 +- .../howto/creator-only/creator-how-tos.qdoc | 98 +++++- doc/qtcreator/src/howto/creator-sessions.qdoc | 32 +- .../creator-only/creator-files-creating.qdoc | 10 +- .../creator-projects-building.qdoc | 2 +- .../creator-projects-creating.qdoc | 2 +- .../creator-file-system-view.qdoc | 2 +- .../user-interface/creator-projects-view.qdoc | 2 +- .../src/user-interface/creator-ui.qdoc | 2 +- .../developers/studio-jump-to-the-code.qdoc | 2 +- .../src/overviews/studio-finding.qdoc | 6 - .../src/qtdesignstudio-toc.qdoc | 1 - 21 files changed, 408 insertions(+), 367 deletions(-) delete mode 100644 doc/qtcreator/src/editors/creator-locator.qdoc create mode 100644 doc/qtcreator/src/editors/creator-only/creator-locator.qdoc diff --git a/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc b/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc index f4abbfa86ee..a1130b7a89e 100644 --- a/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc +++ b/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc @@ -198,8 +198,8 @@ \uicontrol Projects view and select \uicontrol {Open With} > \uicontrol {CMake Editor}. - You can also use the \c cmo filter in the \l {Searching with the Locator} - {locator} to open the CMakeLists.txt file for the current run configuration + You can also use the \c cmo filter in the \l {Navigate with locator}{locator} + to open the CMakeLists.txt file for the current run configuration in the editor. This is the same build target as when you select \uicontrol Build > \uicontrol {Build for Run Configuration}. diff --git a/doc/qtcreator/src/editors/creator-locator.qdoc b/doc/qtcreator/src/editors/creator-locator.qdoc deleted file mode 100644 index 292b35ff30c..00000000000 --- a/doc/qtcreator/src/editors/creator-locator.qdoc +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \page creator-editor-locator.html - \previouspage creator-how-to-advanced-search.html - \if defined(qtdesignstudio) - \nextpage creator-jump-to-the-code.html - \else - \nextpage creator-how-tos.html - \endif - - \title Searching with the Locator - - The locator is the fastest way to find a particular project, file, class, or - function, or almost anything else in your project. - - By default, you can find the locator in the bottom left of the \QC window. - To open it as a centered popup, click \inlineimage icons/magnifier.png - (\uicontrol Options) in it and select \uicontrol {Open as Centered Popup}. - - \image qtcreator-locator.webp "List of locator filters" - - \section1 Activating the Locator - - To activate the locator: - - \list - - \li Press \key {Ctrl+K} (\key {Cmd+K} on \macos). - - \li Select \uicontrol Tools > \uicontrol Locate. - - \li Select \uicontrol Edit > \uicontrol {Go to Line}. - \if defined(qtcreator) - \li Click the line and column indicator on the - \l{Edit Mode}{editor toolbar}. - \endif - \endlist - - \section1 Using Locator Filters - - You can locate not only files, but any items defined by \e{locator filters}, - as well as trigger global actions and perform other tasks, such as build - projects or run external tools. - - The filters that are available depend on the file type. For more information - about what a particular locator filter does, see the tooltips that appear - when you hover over a filter in the locator. For longer descriptions of the - filters, select \uicontrol Configure to open the \uicontrol Locator - \l{Creating Locator Filters}{preferences}. - - To use a locator filter, type its prefix followed by \key Space. The prefix - is usually short, from one to three characters. Then type the search string - (for example, a filename or class name) or the command to execute. - - You can also double-click a locator filter in the filter list to use it. Use - the up and down arrow keys or the \key Ctrl+P and \key Ctrl+N - keyboard shortcuts to move up and down the list, and then press \key Enter - to use the selected filter. - - As you type a search string, - the locator shows the occurrences of that string regardless of where in the - name of an component it appears. Some locator filters, such as colon, \c m, - and \c t, support \e fuzzy matching, which means that you can enter the - uppercase letters to locate a symbol when using camel case or the letters - after the underscore when using snake case. - - To narrow down the search results, use the following wildcard characters: - - \list - - \li To match any number of any or no characters, enter \c{*}. - - \li To match a single instance of any character, enter \c{?}. - - \endlist - - \section2 Locating Lines and Columns - - To move directly to a particular line and column in the document when you - open the document, append the line and column number to the file name in - the locator, separated by plus signs (+) or colons (:). - - For example, to open \e HelloWorld.qml to line - 41 and column 2, enter: - - \code - HelloWorld.qml:41:2 - \endcode - - \section2 Creating Files and Directories from Locator - - To create a new file and open it in the editor, type \c f - followed by \key Space, followed by path and file name, and then press - \key Enter or select \uicontrol {Create and Open File}. To create a - directory, select \uicontrol {Create Directory}. - - \section2 Opening Sessions from Locator - - You can use the filter that triggers menu commands to open - \l{Manage sessions}{sessions}. Enter - \c {t yoursess} or \c {t sess yoursess} to trigger \uicontrol File > - \uicontrol Sessions > \e . - - \section2 Default Filters - - By default, you can use the following preset locator filters without a - prefix: - - \list - - \li Going to a line and column in the current file (\c {l}). - - \li Going to an open file (\c {o}). - - \li Going to a file in any open project (\c {a}). - - \endlist - - \section1 Changing Locator Filters - - You can change the preset locator filters to match your use case. For - example, you can change the filter prefix and restrict the search to - items that match the filter. - - \image qtcreator-locator-filter-edit-ai.webp {Filter Configuration dialog} - - To configure a locator filter: - - \list 1 - - \li In the locator, click \inlineimage icons/magnifier.png - (\uicontrol Options) and select \uicontrol Configure to open the - \uicontrol Locator preferences. - - \li Select a filter, and then select \uicontrol Edit. - - \li Specify the prefix string. - - \li To implicitly include the filter even when not typing a prefix as a - part of the search string, select \uicontrol {Include by default}. - - \li Set other available preferences. - - \endlist - - \section2 Adding Web Search Engines - - You can use the \uicontrol {Web Search (r)} locator filter to perform - web searches. URLs and search commands for Bing, Google, Yahoo! Search, - cplusplus.com, and Wikipedia are configured by default. - - To find out the format of the search command to use for your favorite - web search engine, perform a search in your browser and copy the resulting - URL to the locator filter configuration. Replace the search term with the - variable \c {%1}. - - To add URLs and search commands to the list: - - \list 1 - - \li Select \preferences > \uicontrol Environment > \uicontrol Locator > - \uicontrol {Web Search} > \uicontrol Edit. - - \li Select \uicontrol Add to add a new entry to the list. - - \image qtcreator-add-online-doc.webp "List of URLs in Filter Configuration dialog" - - \li Double-click the new entry to specify a URL and a search command. - For example, \c {http://www.google.com/search?q=%1}. - - \li Click \uicontrol OK. - - \endlist - - \section1 Creating Locator Filters - - You can create custom locator filters for searching in a directory structure - or on the web. - - To quickly access files not directly mentioned in your project, you can - create your own directory filters. That way you can locate files in a - directory structure you have defined. - - To create custom locator filters: - - \list 1 - - \li In the locator, select \uicontrol Options > - \uicontrol Configure to open the \uicontrol Locator preferences. - - \image qtcreator-locator-customize.webp "Locator preferences" - - \li Select \uicontrol Add > \uicontrol {Files in Directories} to add - a directory filter or \uicontrol {URL Template} to add a URL - filter. The settings to specify depend on the filter type. - - \image qtcreator-locator-generic-directory-filter.png "Filter Configuration dialog" - - \li In the \uicontrol Name field, enter a name for your filter. - - \li In the \uicontrol Directories field, select at least one - directory. The locator searches directories recursively. - - \li In the \uicontrol {File pattern} field, specify file patterns to - restrict the search to files that match the pattern. - Separate the patterns with commas. For example, to search for all - \c {.qml} and \c {.ui.qml} files, enter \c{*.qml,*.ui.qml} - - \li In the \uicontrol {Exclusion pattern} field, specify file - patterns to omit files from the search. - - \li In the \uicontrol Prefix field, specify the prefix string. - - To implicitly include the filter even when not typing a prefix - as a part of the search string, select - \uicontrol {Include by default}. - - \li Select \uicontrol OK. - - \endlist - - \section1 Configuring Locator Cache - - The locator searches the files matching your file pattern in the directories - you have selected and caches that information. \QC updates the cache for all - preset filters as you write code. By default, \QC updates your custom - filters once an hour. - - To update the cached information manually, select \uicontrol Options > - \uicontrol Refresh in the locator. - - To set a new cache update time: - - \list 1 - - \li Select \preferences > \uicontrol Environment > \uicontrol Locator. - - \li In \uicontrol {Refresh interval}, define new time in minutes. - - \endlist - - \section1 Executing JavaScript - - The locator has a JavaScript interpreter for performing calculations. - - Beside simple mathematical operations, like ((1 + 2) * 3), the following - built-in functions exist: - - \table - \header - \li Function - \li Purpose - \row - \li abs(x) - \li Returns the absolute value of x - \row - \li acos(x) - \li Returns the arccosine of x, in radians - \row - \li asin(x) - \li Returns the arcsine of x, in radians - \row - \li atan(x) - \li Returns the arctangent of x, in radians - \row - \li atan2(x, y) - \li Returns the arctangent of the quotient of its arguments - \row - \li bin(x) - \li Returns the binary representation of x - \row - \li ceil(x) - \li Returns the value of x rounded up to the next integer - \row - \li cos(x) - \li Returns the cosine of x (x is in radians) - \row - \li exp(x) - \li Returns the value of E to the power of x - \row - \li e() - \li Returns Euler's number E (2.71828...) - \row - \li floor(x) - \li Returns the value of x rounded down to the next integer - \row - \li hex(x) - \li Returns the hexadecimal representation of x - \row - \li log(x) - \li Returns the natural logarithm (base E) of x - \row - \li max([value1[, value2[, ...]]]) - \li Returns the highest value of the given numbers - \row - \li min([value1[, value2[, ...]]]) - \li Returns the lowest value of the given numbers - \row - \li oct(x) - \li Returns the octal representation of x - \row - \li pi() - \li Returns PI (3.14159...) - \row - \li pow(x, y) - \li Returns the value of x to the power of y - \row - \li random() - \li Returns a random number between 0 and 1 - \row - \li round(x) - \li Returns the value of x rounded to the next integer - \row - \li sin(x) - \li Returns the sine of x (x is in radians) - \row - \li sqrt(x) - \li Returns the square root of x - \row - \li tan(x) - \li Returns the tangent of x (x is in radians) - \endtable -*/ diff --git a/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc b/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc index b958f836558..e4706d67111 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-clang-codemodel.qdoc @@ -27,7 +27,7 @@ \li Syntactic and \l{Semantic Highlighting}{semantic highlighting} - \li Navigating in the code by using the \l{Searching with the Locator} + \li Navigating in the code by using the \l{Navigate with locator} {locator}, \l{Move to symbol definition or declaration} {following symbols}, and so on diff --git a/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc b/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc index 8e0105b18be..bb730e402a4 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc @@ -173,7 +173,7 @@ \sa {Edit Code}{How To: Edit Code}, {Manage Language Servers}{How To: Manage Language Servers}, - {Searching with the Locator}, {Keyboard Shortcuts}, {Sidebar Views} + {Navigate with locator}, {Keyboard Shortcuts}, {Sidebar Views} */ /*! @@ -258,7 +258,7 @@ \endlist \sa {Edit Code}{How To: Edit Code}, {Edit Mode}, - {Searching with the Locator}, {File System}, {Projects} + {Navigate with locator}, {File System}, {Projects} */ /*! @@ -378,7 +378,7 @@ \image qtcreator-add-resource.png {Resource Browser} \sa {Edit Code}{How To: Edit Code}, {Edit Mode}, {Editing Keyboard Shortcuts}, - {Searching with the Locator} + {Navigate with locator} */ /*! diff --git a/doc/qtcreator/src/editors/creator-only/creator-copilot.qdoc b/doc/qtcreator/src/editors/creator-only/creator-copilot.qdoc index 8855d4017fa..d2ca2681303 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-copilot.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-copilot.qdoc @@ -78,7 +78,7 @@ To manually request a suggestion at the current editor's cursor position, enter \uicontrol {t} (\uicontrol {Request Copilot Suggestion}) in the - \l{Searching with the Locator}{locator}. + \l{Navigate with locator}{locator}. Hover the mouse over a suggestion to show a toolbar with \inlineimage icons/prev.png diff --git a/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc b/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc index 7572451a83e..897facbe4ac 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc @@ -29,7 +29,7 @@ \li \l{Semantic Highlighting}{Semantic highlighting}, as defined in \l{https://github.com/microsoft/vscode-languageserver-node/pull/367} {Proposal of the semantic highlighting protocol extension} - \li Navigating in the code by using the \l{Searching with the Locator} + \li Navigating in the code by using the \l{Navigate with locator} {locator} or \l{Move to symbol definition or declaration} {moving to the symbol definition} \li Inspecting code by viewing the document outline in the diff --git a/doc/qtcreator/src/editors/creator-only/creator-locator.qdoc b/doc/qtcreator/src/editors/creator-only/creator-locator.qdoc new file mode 100644 index 00000000000..af9f3a3d828 --- /dev/null +++ b/doc/qtcreator/src/editors/creator-only/creator-locator.qdoc @@ -0,0 +1,265 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page creator-editor-locator.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-search + + \title Navigate with locator + + Locate not only files, but any items defined by \e{locator filters}, + as well as trigger global actions and perform other tasks, such as build + projects or run external tools. + + \image qtcreator-locator.webp {List of locator filters} + + \section1 Go to the locator + + To activate the locator: + + \list + + \li Press \key {Ctrl+K} (\key {Cmd+K} on \macos). + + \li Go to \uicontrol Tools, and then select \uicontrol Locate. + + \li Go to \uicontrol Edit, and then select \uicontrol {Go to Line}. + + \li Click the line and column indicator on the + \l{Edit Mode}{editor toolbar}. + + \endlist + + By default, you can find the locator in the bottom left of the \QC window. + To open it as a centered popup, select \inlineimage icons/magnifier.png, and + then select \uicontrol {Open as Centered Popup}. + + \section1 Use locator filters + + The filters that are available depend on the file type. For more information + about what a particular locator filter does, see the tooltips that appear + when you hover over a filter in the locator. For longer descriptions of the + filters, select \inlineimage icons/magnifier.png > \uicontrol Configure to + open the \l{Locator} preferences. + + To use a locator filter: + + \list + \li Type the locator filter prefix followed by \key Space. The prefix + is usually short, from one to three characters. Then type the search + string (for example, a filename or class name) or the command to + execute. + + \li Double-click a locator filter in the filter list to use it. Press + the up and down arrow keys or press \key Ctrl+P and \key Ctrl+N + to move up and down the list, and then press \key Enter to use the + selected filter. + \endlist + + As you type a search string, + the locator shows the occurrences of that string regardless of where in the + name of an object it appears. Some locator filters, such as colon, \c m, + and \c t, support \e fuzzy matching, which means that you can enter the + uppercase letters to locate a symbol when using camel case or the letters + after the underscore when using snake case. + + \section2 Use wildcard characters in search strings + + To narrow down the search results, use the following wildcard characters: + + \list + + \li To match any number of any or no characters, enter \c{*}. + + \li To match a single instance of any character, enter \c{?}. + + \endlist + + \section1 Omit default filters + + By default, you can use the following preset locator filters without a + prefix: + + \list + + \li Going to a line and column in the current file (\c {l}). + + \li Going to an open file (\c {o}). + + \li Going to a file in any open project (\c {a}). + + \endlist + + \section1 Locate lines and columns + + To move directly to a particular line and column in the document when you + open the document, append the line and column number to the file name in + the locator, separated by plus signs (+) or colons (:). + + For example, to open \e HelloWorld.qml to line + 41 and column 2, enter: + + \code + HelloWorld.qml:41:2 + \endcode + + \section1 Search the web + + Use the \uicontrol {Web Search (r)} locator filter to perform web searches. + + URLs and search commands for Bing, Google, Yahoo! Search, cplusplus.com, and + Wikipedia are configured by default. Add search commands for other web search + engines in the locator preferences. + + \section1 Create files and directories from the locator + + To create a new file and open it in the editor: + + \list 1 + \li Type \c f followed by \key Space, followed by path and file name + \li Press \key Enter or select \uicontrol {Create and Open File}. + \endlist + + To create a directory, select \uicontrol {Create Directory}. + + \sa {Search}{How To: Search}, {Manage sessions}, {Perform calculations}, + {Locator} + +*/ + +/*! + \page creator-preferences-locator.html + \previouspage creator-reference.html + + \ingroup creator-reference-preferences + + \title Locator + + \brief Add and change locator filters. + + To set locator preferences, go to \preferences > \uicontrol Environment > + \uicontrol Locator. + + \image qtcreator-locator-customize.webp {Locator preferences} + + \section1 Changing Locator Filters + + You can change the preset locator filters to match your use case. For + example, change the filter prefix and restrict the search to + items that match the filter. + + To configure a locator filter: + + \list 1 + + \li Go to \preferences > \uicontrol Environment > \uicontrol Locator. + + \li Select a filter, and then select \uicontrol Edit. + + \li Specify the prefix string. + + \image qtcreator-locator-filter-edit-ai.webp {Filter Configuration dialog} + + \li To implicitly include the filter even when not typing a prefix as a + part of the search string, select \uicontrol {Include by default}. + + \endlist + + \section1 Adding Web Search Engines + + By default, the \uicontrol {Web Search (r)} locator filter includes the URLs + and search commands for Bing, Google, Yahoo! Search, cplusplus.com, and + Wikipedia. + + To find out the format of the search command to use for your favorite + web search engine, perform a search in your browser and copy the resulting + URL to the locator filter configuration. Replace the search term with the + variable \c {%1}. + + To add URLs and search commands to the list: + + \list 1 + + \li Go to \preferences > \uicontrol Environment > \uicontrol Locator. + + \li Select \uicontrol {Web Search} > \uicontrol Edit. + + \li Select \uicontrol Add to add a URL filter to the list. + + \image qtcreator-add-online-doc.webp {List of URLs in Filter Configuration dialog} + + \li Double-click the new entry to specify a URL and a search command. + For example, \c {http://www.google.com/search?q=%1}. + + \li Click \uicontrol OK. + + \endlist + + To add a new separate web search locator filter instead of updating the + default filter, select \uicontrol Add > \uicontrol {URL Template}. + + \section1 Creating Locator Filters + + To quickly access files not directly mentioned in your project, + create your own directory filters. That way you can locate files in a + directory structure you have defined. + + To create custom locator filters: + + \list 1 + + \li Go to \preferences > \uicontrol Environment > \uicontrol Locator. + + \li Select \uicontrol Add > \uicontrol {Files in Directories} to add + a directory filter. + + \image qtcreator-locator-generic-directory-filter.png {Filter Configuration dialog} + + \li In \uicontrol Name, enter a name for your filter. + + \li Select \uicontrol Add to add directories to \uicontrol Directories. + The locator searches directories recursively. + + \li In \uicontrol {File pattern}, specify file patterns to + restrict the search to files that match the pattern. + Separate the patterns with commas. For example, to search for all + \c {.qml} and \c {.ui.qml} files, enter \c{*.qml,*.ui.qml} + + \li In \uicontrol {Exclusion pattern}, specify file + patterns to omit files from the search. + + \li In \uicontrol Prefix, specify the prefix string. + + To implicitly include the filter even when not typing a prefix + as a part of the search string, select + \uicontrol {Include by default}. + + \li Select \uicontrol OK. + + \endlist + + \section1 Configuring Locator Cache + + The locator searches the files matching your file pattern in the directories + you have selected and caches that information. \QC updates the cache for all + preset filters as you write code. By default, \QC updates your custom + filters once an hour. + + To update the cached information manually, select + \inlineimage icons/magnifier.png > \uicontrol Refresh in the locator. + + To set a new cache update time: + + \list 1 + + \li Go to \preferences > \uicontrol Environment > \uicontrol Locator. + + \li In \uicontrol {Refresh interval}, set a new time in minutes. + + \endlist + + \sa {Navigate with locator}, {Search}{How To: Search}, {Perform calculations}, + {Locator} +*/ diff --git a/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc b/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc index 1ea89d69d8f..fd4b4a8b709 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc @@ -28,7 +28,7 @@ \uicontrol Keyboard. For more information, see \l{Assign keyboard shortcuts}. You can also use the \c rm locator filter to run a macro. For more - information, see \l{Searching with the Locator}. + information, see \l{Navigate with locator}. To view and remove saved macros, select \preferences > \uicontrol {Text Editor} > \uicontrol Macros. diff --git a/doc/qtcreator/src/editors/creator-search.qdoc b/doc/qtcreator/src/editors/creator-search.qdoc index e47957f48e1..c3bd9e1fa22 100644 --- a/doc/qtcreator/src/editors/creator-search.qdoc +++ b/doc/qtcreator/src/editors/creator-search.qdoc @@ -131,7 +131,7 @@ \page creator-how-to-advanced-search.html \if defined(qtdesignstudio) \previouspage creator-editor-finding.html - \nextpage creator-editor-locator.html + \nextpage creator-how-to-rename-symbols.html \else \previouspage creator-how-tos.html \endif diff --git a/doc/qtcreator/src/howto/creator-how-to-find-preferences.qdoc b/doc/qtcreator/src/howto/creator-how-to-find-preferences.qdoc index b59e9709212..b0be3871e32 100644 --- a/doc/qtcreator/src/howto/creator-how-to-find-preferences.qdoc +++ b/doc/qtcreator/src/howto/creator-how-to-find-preferences.qdoc @@ -40,12 +40,16 @@ \image qtcreator-preferences.webp {Filtering preferences} + \if defined(qtcreator) \section1 Go to tabs in Preferences To go to a tab in the \uicontrol Preferences dialog from anywhere in \QC, - use the \c t \l{Searching with the Locator}{locator} filter. For example, + use the \c t \l{Navigate with locator}{locator} filter. For example, to open the \uicontrol Interface tab, enter \c {t preferences interface} in the locator. \image qtcreator-locator-filter-t.webp {Using the locator to open a tab in Preferences} + + \sa {Navigate with locator} + \endif */ 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 a715f171cb5..07459d9a9bc 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc @@ -230,13 +230,99 @@ \title Perform calculations - Open the \uicontrol Locator with \key {Ctrl+K} and type =, followed by a space. - You can now do basic calculations, with options to copy the results to the clipboard - by navigating through the entries and pressing \key {Enter}. + To do basic calculations in the locator: - \image qtcreator-locator.webp "List of locator filters" + \list 1 + \li Press \key {Ctrl+K} (\key {Cmd+K} on \macos) to activate the locator. + \li Enter \c =, followed by a space. + \image qtcreator-locator.webp {List of locator filters} + \li Perform calculations. + \endlist - \sa {Executing JavaScript} + Navigate through the entries and press \key {Enter} to copy the results to + the clipboard + + \section1 Built-in functions + + Beside simple mathematical operations, like ((1 + 2) * 3), the following + built-in functions exist: + + \table + \header + \li Function + \li Purpose + \row + \li abs(x) + \li Returns the absolute value of x + \row + \li acos(x) + \li Returns the arccosine of x, in radians + \row + \li asin(x) + \li Returns the arcsine of x, in radians + \row + \li atan(x) + \li Returns the arctangent of x, in radians + \row + \li atan2(x, y) + \li Returns the arctangent of the quotient of its arguments + \row + \li bin(x) + \li Returns the binary representation of x + \row + \li ceil(x) + \li Returns the value of x rounded up to the next integer + \row + \li cos(x) + \li Returns the cosine of x (x is in radians) + \row + \li exp(x) + \li Returns the value of E to the power of x + \row + \li e() + \li Returns Euler's number E (2.71828...) + \row + \li floor(x) + \li Returns the value of x rounded down to the next integer + \row + \li hex(x) + \li Returns the hexadecimal representation of x + \row + \li log(x) + \li Returns the natural logarithm (base E) of x + \row + \li max([value1[, value2[, ...]]]) + \li Returns the highest value of the given numbers + \row + \li min([value1[, value2[, ...]]]) + \li Returns the lowest value of the given numbers + \row + \li oct(x) + \li Returns the octal representation of x + \row + \li pi() + \li Returns PI (3.14159...) + \row + \li pow(x, y) + \li Returns the value of x to the power of y + \row + \li random() + \li Returns a random number between 0 and 1 + \row + \li round(x) + \li Returns the value of x rounded to the next integer + \row + \li sin(x) + \li Returns the sine of x (x is in radians) + \row + \li sqrt(x) + \li Returns the square root of x + \row + \li tan(x) + \li Returns the tangent of x (x is in radians) + \endtable + + \sa {Navigate with locator}, {Locator} */ /*! @@ -281,7 +367,7 @@ \li Go to \uicontrol {Follow Symbol Under Cursor} in the context menu. \endlist - \sa {Edit Code}{How To: Edit Code}, {Edit Mode}, {Searching with the Locator} + \sa {Edit Code}{How To: Edit Code}, {Edit Mode}, {Navigate with locator} */ /*! diff --git a/doc/qtcreator/src/howto/creator-sessions.qdoc b/doc/qtcreator/src/howto/creator-sessions.qdoc index 348bea2139a..e047169118b 100644 --- a/doc/qtcreator/src/howto/creator-sessions.qdoc +++ b/doc/qtcreator/src/howto/creator-sessions.qdoc @@ -82,7 +82,12 @@ \section1 Open sessions - To switch between sessions, select \uicontrol {Open}. + To switch between sessions: + + \list + \li Go to \uicontrol File > \uicontrol Sessions, and select a session. + \li Select \uicontrol {Open} in \uicontrol {Session Manager}. + \endlist \if defined(qtcreator) @@ -93,17 +98,30 @@ \image qtcreator-welcome-session.png - You can also use the \c t locator filter to open a session. For more - information, see \l{Searching with the Locator}. - To view more information about a session, select the down arrow icon that appears when you move the mouse cursor over the session name. Select actions to clone, rename, and delete sessions. When you start \QC from the command line, you can give the name of - a session as an argument and \QC will start with this session. + a session as an argument to start \QC with this session. - \sa {Command-Line Options}, {Searching with the Locator} + \section1 Open sessions from the locator + + Use the \c t filter that triggers menu commands to open sessions. + + To locate a session: + + \list 1 + \li Press \key {Ctrl+K} (\key {Cmd+K} on \macos) to activate the locator. + \li Enter: + \list + \li \c {t} \e {} + \li \c {t sess} \e {} + \endlist + where \e is the name of the session to open. + \li Double-click the session name to open it. + \endlist + + \sa {Navigate with locator}, {Command-Line Options} \endif - */ diff --git a/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc b/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc index 084bc90c1ab..83808a6a1e0 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-files-creating.qdoc @@ -18,9 +18,8 @@ \image qtcreator-new-file.webp {New File wizard} \note You can also use the \c f locator filter to create a new - file and open it in the editor. For more information, see - \l {Creating Files and Directories from Locator}. However, you must - manually add the created file to a project. + file and open it in the editor. However, you must manually add + the created file to a project. \section1 Select file type @@ -74,8 +73,9 @@ \li Empty Nim source and script files. \endtable - \sa {Add Files}{How To: Add Files}, {Add tests to existing test projects}, - {Create UML-style models}, {Use project wizards} + \sa {Navigate with locator}, {Add Files}{How To: Add Files}, + {Add tests to existing test projects}, {Create UML-style models}, + {Use project wizards} */ /*! diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc index 13b7d6eb9a9..512a3886ab4 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc @@ -81,7 +81,7 @@ Select \uicontrol {Build for Run Configuration} to build the executable that corresponds to the selected run configuration. - You can also use the \c cm filter in the \l {Searching with the Locator} + You can also use the \c cm filter in the \l {Navigate with locator} {locator}. To remove all build artifacts, select one of \uicontrol {Clean} menu commands. diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc index 914516417a1..1efac95137c 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc @@ -198,7 +198,7 @@ directory in the \l {File System} view. Declaring files as a part of the project also makes them visible to the - \l{Searching with the Locator}{locator} and + \l{Navigate with locator}{locator} and \l{Search in projects or file systems}{project-wide search}. \section1 CMake Projects diff --git a/doc/qtcreator/src/user-interface/creator-file-system-view.qdoc b/doc/qtcreator/src/user-interface/creator-file-system-view.qdoc index 3b8a7d59cf7..06226006d58 100644 --- a/doc/qtcreator/src/user-interface/creator-file-system-view.qdoc +++ b/doc/qtcreator/src/user-interface/creator-file-system-view.qdoc @@ -18,7 +18,7 @@ \brief Shows all the files in the current directory. \if defined(qtcreator) - \note Usually, \l{Searching with the Locator}{searching with the locator} + \note Usually, \l{Navigate with locator}{searching with the locator} is the fastest way to find a particular project, file, class, or function, or almost anything else in your project. Use the \e {file system (f)} filter to open files from anywhere in the file system. diff --git a/doc/qtcreator/src/user-interface/creator-projects-view.qdoc b/doc/qtcreator/src/user-interface/creator-projects-view.qdoc index 99e3b469cc1..b6b74f0993b 100644 --- a/doc/qtcreator/src/user-interface/creator-projects-view.qdoc +++ b/doc/qtcreator/src/user-interface/creator-projects-view.qdoc @@ -25,7 +25,7 @@ \image qtcreator-projects-view-edit.png {Projects view in the sidebar} - \note Usually, \l{Searching with the Locator}{searching with the locator} + \note Usually, \l{Navigate with locator}{searching with the locator} is the fastest way to find a particular project, file, class, or function, or almost anything else in your project. \else diff --git a/doc/qtcreator/src/user-interface/creator-ui.qdoc b/doc/qtcreator/src/user-interface/creator-ui.qdoc index d70c94d90ee..066e93fbbf6 100644 --- a/doc/qtcreator/src/user-interface/creator-ui.qdoc +++ b/doc/qtcreator/src/user-interface/creator-ui.qdoc @@ -55,7 +55,7 @@ \li \inlineimage numbers/06.png \li Locator \li Find a particular project, file, class, or function. - \li \l{Searching with the Locator} + \li \l{Navigate with locator} \row \li \inlineimage numbers/07.png \li Output diff --git a/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc b/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc index f5e9425e009..d7178236e3a 100644 --- a/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc +++ b/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! - \previouspage creator-editor-locator.html + \previouspage creator-how-to-rename-symbols.html \page creator-jump-to-the-code.html \nextpage creator-editor-quick-fixes.html diff --git a/doc/qtdesignstudio/src/overviews/studio-finding.qdoc b/doc/qtdesignstudio/src/overviews/studio-finding.qdoc index 188c7a6cc64..ead5bc33af1 100644 --- a/doc/qtdesignstudio/src/overviews/studio-finding.qdoc +++ b/doc/qtdesignstudio/src/overviews/studio-finding.qdoc @@ -24,12 +24,6 @@ Search for QML types and rename them in all files in a project. - \li \l{Searching with the Locator} - - Use the locator to browse - through projects, files, classes, functions, documentation and - file systems. - \li \l{Jump to the Code} Jump to the code for a specific component directly from diff --git a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc index 5c34bad6e86..d0b451e6299 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc +++ b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc @@ -214,7 +214,6 @@ \li \l{Search in current file} \li \l{Search in projects or file systems} \li \l{Rename symbols} - \li \l{Searching with the Locator} \li \l{Jump to the Code} \endlist \li \l{Apply quick fixes} From 124c62a5a0bca8d64c26a64478b9875664d9fb9c Mon Sep 17 00:00:00 2001 From: Yasser Grimes Date: Wed, 28 Feb 2024 11:55:31 +0200 Subject: [PATCH 48/56] McuSupport: Fix kit creation dialog crash Use copies of messages to avoid their reference going out of scope Fix increment current message index for when there is only one message Fixes: QTCREATORBUG-30360 Change-Id: I26fac50ed171aaed7d178cc8f97ace401bf49e7c Reviewed-by: Eike Ziller --- .../mcusupport/dialogs/mcukitcreationdialog.cpp | 10 ++++++++-- src/plugins/mcusupport/mcusupportoptions.cpp | 4 ++-- src/plugins/mcusupport/mcusupportoptions.h | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp b/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp index 897fcd0aa14..4100052cbd5 100644 --- a/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp +++ b/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp @@ -78,12 +78,18 @@ McuKitCreationDialog::McuKitCreationDialog(const MessagesList &messages, QPushButton *fixButton = buttonBox->addButton(Tr::tr("Fix"), QDialogButtonBox::ActionRole); QPushButton *helpButton = buttonBox->addButton(Tr::tr("Help"), QDialogButtonBox::HelpRole); - if (messages.size() == 1) { + if (messages.empty()) { + fixButton->setVisible(false); + m_informationLabel->setText( + QCoreApplication::translate("QtC::Autotest", "No errors detected")); + } + + if (messages.size() < 2) { m_nextButton->setVisible(false); m_previousButton->setVisible(false); } //display first message - if (messages.size() > 1) + if (!messages.empty()) updateMessage(1); if (qtMCUPackage->isValidStatus()) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 187591298cf..a8b25013546 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -255,7 +255,7 @@ McuKitManager::UpgradeOption McuSupportOptions::askForKitUpgrades() return McuKitManager::UpgradeOption::Ignore; } -void McuSupportOptions::displayKitCreationMessages(const MessagesList &messages, +void McuSupportOptions::displayKitCreationMessages(const MessagesList messages, const SettingsHandler::Ptr &settingsHandler, McuPackagePtr qtMCUsPackage) { @@ -269,7 +269,7 @@ void McuSupportOptions::displayKitCreationMessages(const MessagesList &messages, Tr::tr("Errors while creating Qt for MCUs kits"), Utils::InfoBarEntry::GlobalSuppression::Enabled); - info.addCustomButton(Tr::tr("Details"), [=] { + info.addCustomButton(Tr::tr("Details"), [messages, &settingsHandler, qtMCUsPackage] { auto popup = new McuKitCreationDialog(messages, settingsHandler, qtMCUsPackage); popup->exec(); delete popup; diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index d8a5c3fdbf4..1c0a902ba14 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -59,7 +59,7 @@ public: [[nodiscard]] Utils::FilePath qulDirFromSettings() const; [[nodiscard]] Utils::FilePath qulDocsDir() const; static McuKitManager::UpgradeOption askForKitUpgrades(); - static void displayKitCreationMessages(const MessagesList &messages, + static void displayKitCreationMessages(const MessagesList messages, const SettingsHandler::Ptr &settingsHandler, McuPackagePtr qtMCUsPackage); From 9bb85fabf7eb6557961dd7d72fd444bfbaeac87f Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 5 Mar 2024 13:08:02 +0100 Subject: [PATCH 49/56] Welcome: Don't hide Links Fixes: QTCREATORBUG-30466 Change-Id: I399826d67e1bb7eba7ef96f3fd0717d08133a3de Reviewed-by: Alessandro Portale --- src/plugins/welcome/welcomeplugin.cpp | 29 ++++++++++++++------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index 2513ebaa10f..4b3a5074f95 100644 --- a/src/plugins/welcome/welcomeplugin.cpp +++ b/src/plugins/welcome/welcomeplugin.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -292,25 +293,25 @@ WelcomeMode::WelcomeMode() m_modeWidget = new ResizeSignallingWidget; setBackgroundColor(m_modeWidget, Theme::Token_Background_Default); - connect(m_modeWidget, &ResizeSignallingWidget::resized, this, + connect(m_modeWidget, + &ResizeSignallingWidget::resized, + this, [this](const QSize &size, const QSize &) { - const QSize essentialsS = m_sideArea->m_essentials->size(); - const QSize linksS = m_sideArea->m_links->size(); - const QSize sideAreaS = m_sideArea->size(); - const QSize topAreaS = m_topArea->size(); - const QSize mainWindowS = ICore::mainWindow()->size(); + const QSize sideAreaS = m_sideArea->size(); + const QSize topAreaS = m_topArea->size(); + const QSize mainWindowS = ICore::mainWindow()->size(); - const bool showSideArea = sideAreaS.width() < size.width() / 4; - const bool showTopArea = topAreaS.height() < mainWindowS.height() / 7.75; - const bool showLinks = - linksS.height() + essentialsS.height() < sideAreaS.height() && showTopArea; + const bool showSideArea = sideAreaS.width() < size.width() / 4; + const bool showTopArea = topAreaS.height() < mainWindowS.height() / 8.85; + const bool showLinks = true; - m_sideArea->m_links->setVisible(showLinks); - m_sideArea->setVisible(showSideArea); - m_topArea->setVisible(showTopArea); - }); + m_sideArea->m_links->setVisible(showLinks); + m_sideArea->setVisible(showSideArea); + m_topArea->setVisible(showTopArea); + }); m_sideArea = new SideArea(m_modeWidget); + m_sideArea->verticalScrollBar()->setEnabled(false); m_buttonGroup = new QButtonGroup(m_modeWidget); m_buttonGroup->setExclusive(true); From 681d2da3b391d5e213b782a7059c832e45daed33 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 5 Mar 2024 09:51:37 +0100 Subject: [PATCH 50/56] Doc: Update info about environment settings They are now edited in an editor next to the variable list. Task-number: QTCREATORBUG-30209 Change-Id: I8eb46272a2b4b3b92ebf93247f4ef33ee4114b6f Reviewed-by: Christian Kandeler --- .../images/qtcreator-build-environment.png | Bin 34736 -> 0 bytes .../images/qtcreator-build-environment.webp | Bin 0 -> 15496 bytes .../qtcreator-edit-cmake-configuration.webp | Bin 0 -> 4844 bytes ...reator-environment-settings-hierarchy.webp | Bin 3662 -> 70100 bytes .../qtcreator-projects-environment.webp | Bin 4728 -> 6582 bytes .../images/qtcreator-run-environment.png | Bin 28561 -> 0 bytes .../images/qtcreator-run-environment.webp | Bin 0 -> 15872 bytes .../creator-projects-cmake-building.qdoc | 6 +- .../src/howto/creator-external-tools.qdoc | 2 +- .../creator-how-to-silver-searcher.qdoc | 2 +- .../creator-only/creator-projects-kits.qdoc | 2 +- ...creator-projects-settings-environment.qdoc | 63 +++++++++--------- 12 files changed, 38 insertions(+), 37 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-build-environment.png create mode 100644 doc/qtcreator/images/qtcreator-build-environment.webp create mode 100644 doc/qtcreator/images/qtcreator-edit-cmake-configuration.webp delete mode 100644 doc/qtcreator/images/qtcreator-run-environment.png create mode 100644 doc/qtcreator/images/qtcreator-run-environment.webp diff --git a/doc/qtcreator/images/qtcreator-build-environment.png b/doc/qtcreator/images/qtcreator-build-environment.png deleted file mode 100644 index 9c1dc18281464c78a874ef31ff15c3b32baf8946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34736 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%0AJyBYx@L%&x`Pz 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 _RdzuDzacnV(m2 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-environment-settings-hierarchy.webp b/doc/qtcreator/images/qtcreator-environment-settings-hierarchy.webp index 574b2a7547009417503ca5eb57719f2810c1b850..98015123323ed89b390b23e49e162fb62b732fec 100644 GIT binary patch literal 70100 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 literal 3662 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 diff --git a/doc/qtcreator/images/qtcreator-projects-environment.webp b/doc/qtcreator/images/qtcreator-projects-environment.webp index 36011d22263463bf752ae30442bff0589d7ffe12..eeaed5eaa00e560fdc16ca2b501bdcf89b96d02c 100644 GIT binary patch literal 6582 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 literal 4728 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 $C!W_v-$VlT+qIRz9vN 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⪻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 diff --git a/doc/qtcreator/images/qtcreator-run-environment.webp b/doc/qtcreator/images/qtcreator-run-environment.webp new file mode 100644 index 0000000000000000000000000000000000000000..3a0313f994ddb1c44ab80b63696bb58d45b19fd8 GIT binary patch literal 15872 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 YFRmw^2wb|m;)h{#=AHVyAC2q`0CHtq2mk;8 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc b/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc index 6f5508312f5..0bf54dde2fb 100644 --- a/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc +++ b/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc @@ -94,9 +94,9 @@ You can select several variables and apply an action to them. To clear the selection, click anywhere in the view. - To change the environment variable values for the CMake build environment, - select \uicontrol {Batch Edit}. For more information, see - \l{Batch edit environment settings}. + To batch edit variable values, select \uicontrol {Batch Edit}. + + \image qtcreator-edit-cmake-configuration.webp {Edit CMake Configuration dialog} To build using the current configuration, select \uicontrol {Run CMake}. While building, the button text changes to \uicontrol {Stop CMake}. Select diff --git a/doc/qtcreator/src/howto/creator-external-tools.qdoc b/doc/qtcreator/src/howto/creator-external-tools.qdoc index dda7eeb62ae..13927f3d677 100644 --- a/doc/qtcreator/src/howto/creator-external-tools.qdoc +++ b/doc/qtcreator/src/howto/creator-external-tools.qdoc @@ -117,7 +117,7 @@ \sa {Run QML files}, {Use external text editors}, {Use Qt Linguist} \if defined(qtcreator) - \sa {Batch edit environment settings}, {Specify the environment for projects}, + \sa {Edit environment settings}, {Specify the environment for projects}, {Use Qt Creator variables} \endif */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-silver-searcher.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-silver-searcher.qdoc index b632145832d..4f60c3b5692 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-silver-searcher.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-silver-searcher.qdoc @@ -49,5 +49,5 @@ \endlist \sa {Enable and disable plugins}, {Search}{How To: Search}, - {Batch edit environment settings} + {Edit environment settings} */ diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc index d856f420c5e..4d0e9038639 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc @@ -152,7 +152,7 @@ \li Select \uicontrol Change to modify environment variable values for build environments in the \uicontrol {Edit Environment Changes} dialog. For more information about how to add and remove variable - values, see \l{Batch edit environment settings}. + values, see \l{Edit environment settings}. \row \li \uicontrol {Force UTF-8 MSVC compiler output} \li Either switches the language of MSVC to English or keeps the diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc index 3f200320fc1..ce809fc536d 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc @@ -16,7 +16,7 @@ By default, the environment in which \QC was started is used and modified to include the Qt version. Depending on the selected Qt version, \QC automatically sets the necessary environment variables. You can edit - existing environment variables or add, reset and unset new variables + existing environment variables or add, reset, and unset variables based on your project requirements. The final environment is specified separately for each kit. With @@ -35,7 +35,7 @@ To globally change the environment from the one in which \QC is started, select \preferences > \uicontrol Environment > \uicontrol System, and then - select \uicontrol Change in the \uicontrol Environment field. + select \uicontrol Change in \uicontrol Environment. \image qtcreator-preferences-environment-system.webp "Environment preferences System tab" @@ -47,42 +47,43 @@ \image qtcreator-projects-environment.webp {Environment tab in Project Settings} + You can edit existing environment variables or add, reset, unset, or + temporarily disable variables. + \section1 Specify the build environment - Specify the build environment to use for a kit in \uicontrol Projects > - \uicontrol {Build Settings} > \uicontrol {Build Environment}. + To specify the build environment to use for a kit, go to \uicontrol Projects + > \uicontrol {Build Settings} and select \uicontrol {Build Environment}. - \image qtcreator-build-environment.png {Build Environment section in Build Settings} + \image qtcreator-build-environment.webp {Build Environment section in Build Settings} + + To change the values of environment variables for the build environment, + select the variable and then select \uicontrol Edit. Enter the new value + in the editor on the righ side. + + To add new variables, select \uicontrol {Add}. \section2 Clear the build environment - To build with a clean system environment, select the \uicontrol {Clear - system environment} check box. \QC discards the current environment, and - populates a clean system environment with the environment variables that + To build with a clean system environment, select + \uicontrol {Clear system environment}. \QC discards the current environment, + and populates a clean system environment with the environment variables that the compilers and tools need. Therefore, the environment is never totally empty, even after you clear it. \section1 Specify the run environment \QC automatically selects the environment used for running the application - based on the \l{glossary-device}{device} type. You can edit the environment - or select another environment in \uicontrol Projects > - \uicontrol {Run Settings} > \uicontrol {Environment}. + based on the \l{glossary-device}{device} type. To edit the environment + or select another environment, go to \uicontrol Projects > + \uicontrol {Run Settings} and select \uicontrol {Environment}. - You can edit existing environment variables or add, reset and unset new - variables. - - \image qtcreator-run-environment.png {Environment section in Run Settings} + \image qtcreator-run-environment.webp {Environment section in Run Settings} When running on the desktop, the \uicontrol {Build Environment} is used by default, but you can also use the \uicontrol {System Environment} without the additions made to the build environment. - To modify the environment variable values for the run environment, - double-click environment variables or their values and change them inline, - or select \uicontrol {Batch Edit} to change several variable values at a - time. - \section2 Clean the run environment To run in a clean system environment, select \uicontrol {Clean Environment}. @@ -107,32 +108,32 @@ \section2 Use device environment - When running on a mobile device connected to the development host, \QC + When you run applications on a mobile device connected to the computer, \QC fetches information about the \uicontrol {Device Environment} from the device. Usually, it does not make sense to edit the device environment. - \sa {Batch edit environment settings}, {Configure projects for building}, + \sa {Edit environment settings}, {Configure projects for building}, {Configure projects for running}, {Use Qt Creator variables} */ /*! - \page creator-how-to-batch-edit-environment-settings.html + \page creator-how-to-edit-environment-settings.html \previouspage creator-how-tos.html \ingroup creator-how-to-projects - \title Batch edit environment settings + \title Edit environment settings You can change the environment variable values for build or run environments - either for a particular project or globally for all projects in the - \uicontrol {Edit Environment} dialog: + either for a particular project or globally: \list - \li To change values globally, select \uicontrol Change in the - \l {Globally change the environment}{global environment preferences}. - \li To change values for a project, select \uicontrol {Batch Edit} in the - \l {Change the environment for a project}{project}, - \l {Specify the build environment}{build}, or + \li To change values globally, go to \preferences > + \uicontrol Environment > \uicontrol System, and select + \uicontrol Change in \uicontrol {Environment}. + \li To change values for a project, select \uicontrol Edit or + \uicontrol {Add} in the \l {Change the environment for a project} + {project}, \l {Specify the build environment}{build}, or \l {Specify the run environment}{run} environment settings. \endlist From 21e48c1a596867064a76a840eac783d46c07eb14 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 5 Mar 2024 16:35:49 +0100 Subject: [PATCH 51/56] Android: Enable writing to the jdb process Amends 97461f6f189e7bfbc0aff7c567f21230b7a22226 Fixes: QTCREATORBUG-29928 Fixes: QTCREATORBUG-30405 Change-Id: I3d4dad5bbc72a17f1246510ba10370811fda293a Reviewed-by: Alessandro Portale --- src/plugins/android/androidrunnerworker.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index d18f645165f..f152b7c5380 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -754,6 +754,7 @@ void AndroidRunnerWorker::handleJdbWaiting() m_jdbProcess->setProcessChannelMode(QProcess::MergedChannels); m_jdbProcess->setCommand({jdbPath, jdbArgs}); m_jdbProcess->setReaperTimeout(s_jdbTimeout); + m_jdbProcess->setProcessMode(ProcessMode::Writer); m_jdbProcess->start(); if (!m_jdbProcess->waitForStarted()) { emit remoteProcessFinished(Tr::tr("Failed to start JDB.")); From 97db1645ad36196a9a920efe86dcb14930936fa8 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 5 Mar 2024 20:54:12 +0100 Subject: [PATCH 52/56] Android: Log jdb communication Change-Id: If4833de2b65e57dd55c58c82bf707e57d4561031 Reviewed-by: Alessandro Portale --- src/plugins/android/androidrunnerworker.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index f152b7c5380..64979ef948c 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -771,6 +771,7 @@ void AndroidRunnerWorker::handleJdbSettled() for (int i = 0; i < 120 && m_jdbProcess->state() == QProcess::Running; ++i) { m_jdbProcess->waitForReadyRead(500ms); const QByteArray lines = m_jdbProcess->readAllRawStandardOutput(); + qCDebug(androidRunWorkerLog) << "JDB output:" << lines; const auto linesList = lines.split('\n'); for (const auto &line : linesList) { auto msg = line.trimmed(); @@ -784,8 +785,10 @@ void AndroidRunnerWorker::handleJdbSettled() const QStringList commands{"threads", "cont", "exit"}; for (const QString &command : commands) { - if (waitForCommand()) + if (waitForCommand()) { + qCDebug(androidRunWorkerLog) << "JDB input:" << command; m_jdbProcess->write(QString("%1\n").arg(command)); + } } if (!m_jdbProcess->waitForFinished(s_jdbTimeout)) { From db307978bfd4a037a91341e066d63dcde3de71d6 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 5 Mar 2024 21:14:52 +0100 Subject: [PATCH 53/56] Android: Send suspend/resume instead of threads in handleJdbSettled "threads" causes an exception in my jdb on my machine. "suspend" and "resume" do not, and they also cause enough delay for JDB to settle. Change-Id: I5297d720c5fdbe5ee2eaa421624491af50bc40bf Reviewed-by: Cristian Adam --- src/plugins/android/androidrunnerworker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 64979ef948c..8f114f28dbc 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -782,7 +782,7 @@ void AndroidRunnerWorker::handleJdbSettled() return false; }; - const QStringList commands{"threads", "cont", "exit"}; + const QStringList commands{"suspend", "resume", "cont", "exit"}; for (const QString &command : commands) { if (waitForCommand()) { From 6b6aa896500c76aab6a9cbd1a20bb513fa6bfa46 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 4 Mar 2024 12:12:28 +0100 Subject: [PATCH 54/56] German translation: lupdate for 13.0 Check out with submodules (`git submodule update --init --recursive`). Configure Qt Creator: cmake "-DCMAKE_PREFIX_PATH=;" -DCMAKE_BUILD_TYPE=Debug -G Ninja Generate ts file: cmake --build . --target ts_de_cleaned Change-Id: I1c38da74f87352eeb6bc65b979d1e18d35668da8 Reviewed-by: Christian Stenger Reviewed-by: --- share/qtcreator/translations/qtcreator_de.ts | 2855 ++++++++++++++---- 1 file changed, 2284 insertions(+), 571 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index b15b6a1af2e..d8edc96b619 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -72,13 +72,6 @@ - - AccountImage - - Account - - - AddImageToResources @@ -447,7 +440,7 @@ Bind to AmbientSound.Infinite to loop the current sound forever. Animated image - + Animiertes Bild Speed @@ -466,6 +459,165 @@ Bind to AmbientSound.Infinite to loop the current sound forever. + + AnimatedSpriteSpecifics + + Animated Sprite + + + + Source + + + + Adds an image from the local file system. + + + + Frame size + + + + Sets the width and height of the frame. + + + + W + width + The width of the animated sprite frame + + + + Width. + + + + H + height + The height of the animated sprite frame + H + + + Height. + + + + Frame coordinates + + + + Sets the coordinates of the first frame of the animated sprite. + + + + X + Frame X + The width of the animated sprite frame + X + + + Frame X coordinate. + + + + Y + Frame Y + The height of the animated sprite frame + Y + + + Frame Y coordinate. + + + + Frame count + + + + Sets the number of frames in this animated sprite. + + + + Frame rate + + + + Sets the number of frames per second to show in the animation. + + + + Frame duration + + + + Sets the duration of each frame of the animation in milliseconds. + + + + Frame sync + + + + Sets frame advancements one frame each time a frame is rendered to the screen. + + + + Loops + + + + After playing the animation this many times, the animation will automatically stop. + + + + Interpolate + + + + If true, interpolation will occur between sprite frames to make the animation appear smoother. + + + + Finish behavior + + + + Sets the behavior when the animation finishes on its own. + + + + Reverse + + + + If true, the animation will be played in reverse. + + + + Running + Läuft + + + Whether the sprite is animating or not. + + + + Paused + + + + When paused, the current frame can be advanced manually. + + + + Current frame + + + + When paused, the current frame can be advanced manually by setting this property. + + + AnimationSection @@ -790,117 +942,6 @@ A positive value will increase reverb for higher frequencies and dampen lower fr - - Axivion - - Project: - - - - Lines of code: - - - - Analysis timestamp: - - - - unknown - unbekannt - - - Total: - - - - Show dashboard - - - - Axivion - - - - Show rule details - - - - Certificate Error - Zertifikatsfehler - - - Server certificate for %1 cannot be authenticated. -Do you want to disable SSL verification for this server? -Note: This can expose you to man-in-the-middle attack. - Server-Zertifikat für %1 kann nicht authentifiziert werden. -Möchten Sie die SSL-Verifikation für diesen Server abschalten? -Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe. - - - Dashboard projects: - - - - Fetch Projects - - - - Link Project - - - - Unlink Project - - - - This project is not linked to a dashboard project. - - - - This project is linked to "%1". - - - - Incomplete or misconfigured settings. - - - - curl: - curl: - - - Dashboard URL: - - - - Description: - Beschreibung: - - - Non-empty description - - - - Access token: - Zugriffstoken: - - - IDE Access Token - - - - Edit... - Bearbeiten... - - - Edit Dashboard Configuration - - - - General - Allgemein - - BackgroundColorMenuActions @@ -1197,6 +1238,29 @@ It should be a relative path. Größe der Bildquelle + + BrandBar + + Welcome to + Willkommen bei + + + Qt Design Studio + Qt Design Studio + + + Community Edition + + + + Enterprise Edition + + + + Professional Edition + + + BusyIndicatorSpecifics @@ -1396,7 +1460,7 @@ It should be a relative path. Emphasis - + Hervorherbung Sets the text to bold, italic, underlined, or strikethrough. @@ -1504,6 +1568,112 @@ It should be a relative path. Anwenden + + CollectionDetailsToolbar + + Add property left + + + + Add property right + + + + Delete selected property + + + + Insert row below + + + + Insert row above + + + + Delete selected row + + + + Save changes + + + + Export model + + + + Add Column + + + + Column name: + + + + The model already contains "%1"! + + + + Type: + Typ: + + + Add + Hinzufügen + + + Cancel + Abbrechen + + + + CollectionDetailsView + + Edit + + + + Delete + + + + Sort Ascending + + + + Sort Descending + + + + Add row above + + + + Add row below + + + + Delete this row + + + + Select a model to continue + + + + Delete Column + + + + Are you sure that you want to delete column "%1"? + + + + Cancel + Abbrechen + + CollectionItem @@ -1515,17 +1685,31 @@ It should be a relative path. Umbenennen - Deleting whole collection + Assign to the selected node + + + + Deleting the model + + + + Are you sure that you want to delete model "%1"? +The model will be deleted permanently. + + + + Are you sure that you want to delete model "%1"? +The model will be removed from the project but the file will not be deleted. + + + + Rename model Cancel Abbrechen - - Rename collection - - New name: Neuer Name: @@ -1534,19 +1718,15 @@ It should be a relative path. CollectionView - Collections + Data Models - Import Json + Import a model - Import CSV - - - - Add new collection + Add a new model @@ -1980,6 +2160,10 @@ It should be a relative path. Write the conditions for the components and the signals manually. + + Jump to the code. + + ConnectionsListView @@ -2313,53 +2497,6 @@ It should be a relative path. - - CsvImport - - Import A CSV File - - - - New CSV File - - - - Could not load the file - - - - An error occurred while trying to load the file. - - - - File name: - - - - Open - Öffnen - - - Collection name: - - - - File name can not be empty - - - - Collection name can not be empty - - - - Import - - - - Cancel - Abbrechen - - DelayButtonSpecifics @@ -2524,6 +2661,25 @@ defined in <b>Step size</b>. Titel + + DownloadButton + + Update available. + + + + Example was already downloaded. + + + + Network or example is not available or the link is broken. + + + + Download the example. + + + DownloadPane @@ -2539,6 +2695,21 @@ defined in <b>Step size</b>. % + + DownloadPanel + + Progress: + + + + % + % + + + Open + Öffnen + + DrawerSpecifics @@ -2597,37 +2768,76 @@ defined in <b>Step size</b>. - EffectCompositionNode + EditPropertyDialog - Remove + Edit Column - Enable/Disable Node + Name + Name + + + Type + Typ + + + Conversion from %1 to %2 may lead to data loss + + Apply + Anwenden + + + Cancel + Abbrechen + - EffectMaker + EffectComposer - Open Shader in Code Editor + Remove all effect nodes. + + + + Open Shader in Code Editor. Add an effect node to start - - - EffectMakerPreview - Zoom out + Effect Composer is disabled on MCU projects + + + EffectComposer::EffectComposerView + + Effect Composer [beta] + + + + + EffectComposer::EffectComposerWidget + + Effect Composer + Title of effect composer widget + + + + + EffectComposerPreview Zoom In Vergrößern + + Zoom out + + Zoom Fit @@ -2642,13 +2852,29 @@ defined in <b>Step size</b>. - EffectMakerTopBar + EffectComposerTopBar - Save in Library + Add new composition - How to use Effect Maker: + Save current composition + + + + Save current composition with a new name + + + + Assign current composition to selected item + + + + Untitled + Unbenannt + + + How to use Effect Composer: 1. Click "+ Add Effect" to add effect node 2. Adjust the effect nodes properties 3. Change the order of the effects, if you like @@ -2657,6 +2883,24 @@ defined in <b>Step size</b>. + + EffectCompositionNode + + Remove + + + + Enable/Disable Node + + + + + EffectNode + + Existing effect has conflicting properties, this effect cannot be added. + + + EffectNodesComboBox @@ -3060,7 +3304,7 @@ defined in <b>Step size</b>. Emphasis - + Hervorherbung Sets the text to bold, italic, underlined, or strikethrough. @@ -3674,6 +3918,57 @@ a highlight component. + + ImportDialog + + Import a model + + + + Model path + + + + Select a model file + + + + Open + Öffnen + + + Could not load the file + + + + An error occurred while trying to load the file. + + + + File name + + + + The model name + + + + File name can not be empty + + + + The model name can not be empty + + + + Import + + + + Cancel + Abbrechen + + InsetSection @@ -3723,10 +4018,6 @@ a highlight component. [None] - - Category - Kategorie - Object name @@ -3843,45 +4134,6 @@ IDs müssen außerdem mit einem Kleinbuchstaben beginnen. - - JsonImport - - Import Collections - - - - New Json File - - - - Could not load the file - - - - An error occurred while trying to load the file. - - - - File name: - - - - Open - Öffnen - - - File name cannot be empty. - - - - Import - - - - Cancel - Abbrechen - - Label @@ -4282,6 +4534,10 @@ a highlight component. State Group + + State Groups are not supported with Qt for MCUs + + Switch State Group @@ -4346,30 +4602,6 @@ a highlight component. minutes - - Predefined Categories - - - - Select the categories to track - - - - Select all - - - - Custom Categories - - - - Manage your own categories - - - - Add new Category - - Set runtime configuration for the project. @@ -4422,6 +4654,10 @@ a highlight component. Close Schließen + + Sets the visible <b>Views</b> to immovable across the Workspaces. + + Workspace @@ -4467,6 +4703,83 @@ a highlight component. + + MainGridStack + + Create a new project using the "<b>Create Project</b>" or open an existing project using the "<b>Open Project</b>" option. + + + + Remove Project from Recent Projects + Projekt aus der Liste der zuletzt bearbeiteten Projekte entfernen + + + Clear Recent Project List + Liste der zuletzt bearbeiteten Projekte löschen + + + + MainScreen + + Create Project ... + + + + Open Project ... + + + + New to Qt? + Neu bei Qt? + + + Get Started + Schnelleinstieg + + + Recent Projects + Zuletzt bearbeitete Projekte + + + Examples + Beispiele + + + Tutorials + Anleitungen + + + UI Tour + Oberfläche vorführen + + + User Guide + Handbuch + + + Blog + + + + Forums + + + + Account + + + + Get Qt + Qt + + + + MainWindow + + MainWindow + + + MarginSection @@ -4664,6 +4977,14 @@ a highlight component. Media Player + + Source + + + + Adds an image from the local file system. + + Playback rate @@ -4750,33 +5071,6 @@ Error: - - ModelSourceItem - - Delete - - - - Rename - Umbenennen - - - Deleting source - - - - Cancel - Abbrechen - - - Rename source - - - - New name: - Neuer Name: - - MouseAreaSpecifics @@ -4917,15 +5211,23 @@ Error: NewCollectionDialog - Add a new Collection + Add a new Model - Collection name: + Model + Modell + + + The model name - Collection name can not be empty + The model name can not be empty + + + + The model name already exists %1 @@ -5662,6 +5964,77 @@ operation is in progress. Schließt das Dock-Widget + + QKeychain::Job + + No error + + + + The specified item could not be found in the keychain + + + + User canceled the operation + + + + User interaction is not allowed + + + + No keychain is available. You may need to restart your computer + + + + The user name or passphrase you entered is not correct + + + + A cryptographic verification failure has occurred + + + + Function or operation not implemented + + + + I/O error + + + + Already open with with write permission + + + + Invalid parameters passed to a function + + + + Failed to allocate memory + + + + Bad parameter or invalid state for operation + + + + An internal component failed + + + + The specified item already exists in the keychain + + + + Unable to decode the provided data + + + + Unknown error + + + QObject @@ -5759,10 +6132,14 @@ operation is in progress. - Ensure that you have saved it in Qt Quick Effect Maker. + Ensure that you have saved it in the Effect Composer. Do you want to edit this effect? + + Minimize + Minimieren + QmlDesigner::AbstractEditorDialog @@ -5938,7 +6315,7 @@ Do you want to edit this effect? Advanced Options - + Erweiterte Optionen Export assets @@ -6098,6 +6475,14 @@ Exporting assets: %2 Title of assets library widget + + Failed to Delete Effect Resources + + + + Could not delete "%1". + + Failed to Add Files Dateien konnten nicht hinzugefügt werden @@ -6248,21 +6633,143 @@ Exporting assets: %2 - QmlDesigner::CollectionView + QmlDesigner::CollectionSourceModel - Collection Editor + Node is not indexed in the models. - Collection Editor view + Node should be a JSON model. + + + + A model with the identical name already exists. + + + + Selected node must have a valid source file address + + + + Can't read or write "%1". +%2 + + + + "%1" is corrupted. +%2 + + + + Can't clean "%1". + + + + Can't write to "%1". + + + + No model is available for the JSON model group. + + + + JSON document type should be an object containing models. + + + + Rename Model + + + + Invalid node + + + + Can't rename the node + + + + Invalid node type + + + + The model group doesn't contain the old model name (%1). + + + + The model name "%1" already exists in the model group. + + + + Delete Model + + + + The selected node has an invalid source address + + + + The model group doesn't contain the model name (%1). + + + + + QmlDesigner::CollectionView + + Model Editor + Model-Editor + + + Model Editor view QmlDesigner::CollectionWidget - Collection View - Title of collection view widget + Model Editor + Title of model editor widget + Model-Editor + + + Cannot Create QtQuick View + QtQuick View konnte nicht erzeugt werden + + + StatesEditorWidget: %1 cannot be created.%2 + + + + File error + + + + Can not open the file to write. + + + + + Can not add a model to the JSON file + + + + The imported model is empty or is not supported. + + + + Can not import to the main model + + + + The data store is not available. + + + + The default model node is not available. + + + + Failed to add a model to the default model group @@ -6657,6 +7164,106 @@ Exporting assets: %2 Group Selection Mode + + Viewport Shading + + + + Wireframe + + + + Show models as wireframe. + + + + Default + Vorgabe + + + Rendering occurs as normal. + + + + Base Color + + + + The base or diffuse color of a material is passed through without any lighting. + + + + Roughness + + + + The roughness of a material is passed through as an unlit greyscale value. + + + + Metalness + + + + The metalness of a material is passed through as an unlit greyscale value. + + + + Normals + + + + The interpolated world space normal value of the material mapped to an RGB color. + + + + Ambient Occlusion + + + + Only the ambient occlusion of the material. + + + + Emission + + + + Only the emissive contribution of the material. + + + + Shadow Occlusion + + + + The occlusion caused by shadows as a greyscale value. + + + + Diffuse + + + + Only the diffuse contribution of the material after all lighting. + + + + Specular + + + + Only the specular contribution of the material after all lighting. + + + + Reset All Viewports + + + + Reset all shading options for all viewports. + + 3D view is not supported in MCU projects. @@ -7035,6 +7642,10 @@ Exporting assets: %2 Manage... Verwalten... + + Lock Workspaces + + Reset Active @@ -7203,6 +7814,10 @@ Exporting assets: %2 Always auto-format ui.qml files in Design mode + + Enable DockWidget content minimum size + + Show property editor warnings Zeige Warnungen des Eigenschafteneditors @@ -7300,6 +7915,41 @@ Exporting assets: %2 + + QmlDesigner::Internal::TypeAnnotationReader + + Illegal state while parsing. + Ungültiger Zustand bei der Auswertung. + + + No property definition allowed. + Eigenschaftsdefinition nicht zulässig. + + + Invalid type %1 + Ungültiger Typ %1 + + + Unknown property for Type %1 + Unbekannte Eigenschaft für Typ %1 + + + Unknown property for ItemLibraryEntry %1 + Unbekannte Eigenschaft für ItemLibraryEntry %1 + + + Unknown property for Property %1 + Unbekannte Eigenschaft für Eigenschaft %1 + + + Unknown property for QmlSource %1 + Unbekannte Eigenschaft für QmlSource %1 + + + Unknown property for ExtraFile %1 + + + QmlDesigner::InvalidArgumentException @@ -8239,6 +8889,10 @@ Locked components cannot be modified or selected. Tools Werkzeuge + + Enable Experimental Features + + Hide top-level menus with advanced functionality to simplify the UI. <b>Build</b> is generally not required in the context of Qt Design Studio. <b>Debug</b> and <b>Analyze</b> are only required for debugging and profiling. <b>Tools</b> can be useful for bookmarks and git integration. @@ -8267,6 +8921,14 @@ Locked components cannot be modified or selected. Bundles path: + + Experimental Features + + + + This option enables experimental features in Qt Design Studio. Please provide feedback and bug reports at: %1 + + The menu visibility change will take effect after restart. @@ -8870,7 +9532,7 @@ Locked components cannot be modified or selected. - Effect Maker Files + Effect Composer Files @@ -8925,11 +9587,15 @@ Locked components cannot be modified or selected. - Remove This Handler + Edit the Connection - Add Signal Handler + Remove the Connection + + + + Add new Connection @@ -9008,6 +9674,10 @@ Locked components cannot be modified or selected. Edit Component + + Jump to the Code + + Go to Implementation Zu Implementierung gehen @@ -9593,6 +10263,10 @@ Locked components cannot be modified or selected. Pin Group To... + + Minimize + Minimieren + Close Other Groups @@ -9936,6 +10610,26 @@ Locked components cannot be modified or selected. All essential packages installed for all installed Qt versions. Für alle installierten Qt-Versionen sind alle notwendigen Pakete installiert. + + The selected path does not exist or is not readable. + + + + Could not find "%1" in the selected path. + + + + The selected path does not contain a valid JDK. (%1 failed: %2) + + + + Unexpected output from "%1": %2 + + + + Unsupported JDK version (needs to be %1): %2 (parsed: %3) + + OpenSSL path exists. Pfad zu OpenSSL existiert. @@ -11520,6 +12214,129 @@ und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlaube Bilder (*.png *.jpg *.jpeg) + + QtC::AppManager + + Create Application Manager package with CMake + + + + Create Application Manager package + + + + Source directory: + Quellverzeichnis: + + + Package file: + + + + Automatic Application Manager Deploy Configuration + + + + Deploy Application Manager package + + + + Target directory: + Zielverzeichnis: + + + Uploading finished. + + + + Uploading failed. + + + + Install Application Manager package + + + + Starting command "%1". + Starte Kommando "%1". + + + Command finished successfully. + + + + Process failed: %1 + + + + Process finished with exit code %1. + + + + Run an Application Manager Package + + + + Run and Debug an Application Manager Package + + + + Clean Environment + Saubere Umgebung + + + %1 exited. + + + + Starting Application Manager debugging... + + + + Using: %1. + + + + Cannot debug: Only QML and native applications are supported. + + + + Cannot debug: Local executable is not set. + Kann nicht debuggen: Lokale ausführbare Datei ist nicht angegeben. + + + Application ID: + + + + Application Manager instance ID: + + + + Default instance + + + + Document URL: + + + + Customize step + + + + Disables the automatic updates based on the current run configuration and allows customizing the values. + + + + Controller: + + + + Packager: + + + QtC::Autotest @@ -12448,6 +13265,14 @@ Weitere Informationen über GTest-Filter finden Sie in der Dokumenation von Goog Uses Valgrind Callgrind when executing benchmarks (it must be installed). "Valgrind Callgrind" zur Benchmarkausführung benutzen (dazu muss es installiert sein). + + Find user-defined locations + + + + Parse messages for the following pattern and use it as location information:<pre>file://filepath:line</pre>where ":line" is optional.<p>Warning: If the patterns are used in code, the location information for debug messages and other messages might improve,at the risk of some incorrect locations and lower performance. + + Callgrind Callgrind @@ -12809,6 +13634,14 @@ Siehe auch die Einstellungen für Google Test. Running tests for "%1". Führe Tests für "%1" aus. + + Locate Qt Test data tags + + + + Locates Qt Test data tags found inside the active project. + + QtC::AutotoolsProjectManager @@ -12856,6 +13689,184 @@ Siehe auch die Einstellungen für Google Test. Werte Verzeichnis %1 aus + + QtC::Axivion + + Project: + + + + Lines of code: + + + + Analysis timestamp: + + + + unknown + unbekannt + + + Total: + + + + Owner + + + + Path globbing + + + + Total rows: + + + + Axivion + + + + Show dashboard + + + + Search for issues + + + + Show rule details + + + + Certificate Error + Zertifikatsfehler + + + Server certificate for %1 cannot be authenticated. +Do you want to disable SSL verification for this server? +Note: This can expose you to man-in-the-middle attack. + Server-Zertifikat für %1 kann nicht authentifiziert werden. +Möchten Sie die SSL-Verifikation für diesen Server abschalten? +Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe. + + + Unknown Dto structure deserialization error. + + + + The ApiToken cannot be read in a secure way. + + + + The ApiToken cannot be stored in a secure way. + + + + The ApiToken cannot be deleted in a secure way. + + + + Key chain message: "%1". + + + + Enter the password for: +Dashboard: %1 +User: %2 + + + + Axivion Server Password + + + + The stored ApiToken is not valid anymore, removing it. + + + + Fetching DashboardInfo error. + + + + The DashboardInfo doesn't contain project "%1". + + + + The activated link appears to be external. +Do you want to open "%1" with its default application? + + + + Open External Links + + + + Fetch Projects + + + + Link Project + + + + Unlink Project + + + + Dashboard projects: + + + + This project is not linked to a dashboard project. + + + + This project is linked to "%1". + + + + Incomplete or misconfigured settings. + + + + Highlight marks + + + + Marks issues on the scroll bar. + + + + Dashboard URL: + + + + Username: + + + + User name + Benutzername + + + Edit... + Bearbeiten... + + + Edit Dashboard Configuration + + + + General + Allgemein + + + Fetching... + + + QtC::BareMetal @@ -14959,6 +15970,14 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev Show advanced options by default Erweiterte Optionen standardmäßig anzeigen + + Use junctions for CMake configuration and build operations + + + + Create and use junctions for the source and build directories to overcome issues with long paths on Windows.<br><br>Junctions are stored under <tt>C:\ProgramData\QtCreator\Links</tt> (overridable via the <tt>QTC_CMAKE_JUNCTIONS_DIR</tt> environment variable).<br><br>With <tt>QTC_CMAKE_JUNCTIONS_HASH_LENGTH</tt>, you can shorten the MD5 hash key length to a value smaller than the default length value of 32.<br><br>Junctions are used for CMake configure, build and install operations. + + General Allgemein @@ -15215,22 +16234,6 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev Configuring "%1" Konfiguriere "%1" - - CMake process failed to start. - Der CMake-Prozess konnte nicht gestartet werden. - - - CMake process was canceled by the user. - Der CMake-Prozess wurde vom Benutzer abgebrochen. - - - CMake process crashed. - Der CMake-Prozess ist abgestürzt. - - - CMake process exited with exit code %1. - Der CMake-Prozess wurde mit dem Rückgabewert %1 beendet. - <Build Directory> <Build-Verzeichnis> @@ -15787,6 +16790,10 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der C++ code issues that Clangd found in the current document. C++-Probleme, die Clangd im aktuellen Dokument gefunden hat. + + Update Potentially Stale Clangd Index Entries + + Generate Compilation Database Kompilierungsdatenbank erzeugen @@ -15927,17 +16934,17 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der QtC::ClangFormat - - Clang-Format Style - Clang-Format-Stil - Current ClangFormat version: %1. Aktuelle ClangFormat-Version: %1. - The widget was generated for ClangFormat %1. If you use a different version, the widget may work incorrectly. - Diese Benutzeroberfläche wurde für ClangFormat %1 generiert. Sie funktioniert möglicherweise nicht korrekt, wenn Sie eine andere ClangFormat-Version verwenden. + Warning: + + + + The current ClangFormat (C++ > Code Style > ClangFormat) settings are not valid. Are you sure you want to apply them? + Open Used .clang-format Configuration File @@ -15966,13 +16973,21 @@ Das integrierte Codemodell übernimmt das Einrücken. Bearbeiteten Quelltext beim Speichern der Datei formatieren - Override .clang-format file - .clang-format-Datei außer Kraft setzen + Use custom settings + + + + Use built-in indenter + Use global settings Globale Einstellungen verwenden + + Please note that the current project includes a .clang-format file, which will be used for code indenting and formatting. + + ClangFormat settings: Einstellungen für ClangFormat: @@ -15985,10 +17000,6 @@ Das integrierte Codemodell übernimmt das Einrücken. Full formatting Komplette Formatierung - - Disable - Deaktivieren - The current project has its own .clang-format file which can be overridden by the settings below. Das aktuelle Projekt hat ihre eigene .clang-format-Datei, die in den untenstehenden Einstellungen überschrieben werden kann. @@ -16318,6 +17329,10 @@ Setzen Sie erst eine gültige ausführbare Datei. Failed to build the project. Das Projekt konnte nicht erstellt werden. + + Diagnostics + + Failed to start the analyzer. Das Analyse-Werkzeug konnte nicht gestartet werden. @@ -16838,10 +17853,6 @@ Setzen Sie erst eine gültige ausführbare Datei. Undo Check Out Auschecken rückgängig machen - - &Undo Check Out "%1" - A&uschecken von "%1" rückgängig machen - Meta+L,Meta+U Meta+L,Meta+U @@ -17845,6 +18856,15 @@ Trotzdem fortfahren? Show keyboard shortcuts in context menus (default: %1) Tastenkombinationen in Kontextmenüs anzeigen (Vorgabe: %1) + + Override cursors for views + + + + Provide cursors for resizing views. +If the system cursors for resizing views are not displayed properly, you can use the cursors provided by %1. + + Toolbar style: Werkzeugleisten-Stil: @@ -17873,10 +18893,22 @@ Trotzdem fortfahren? DPI rounding policy: DPI-Rundungsstrategie: + + The following environment variables are set and can influence the UI scaling behavior of %1: + + + + Environment influences UI scaling behavior. + + Text codec for tools: Zeichenkodierung für Werkzeuge: + + The cursors for resizing views will change after restart. + + The language change will take effect after restart. Die Änderung der Sprache wird nach einem Neustart wirksam. @@ -18075,10 +19107,6 @@ Trotzdem fortfahren? Hide Menu Bar Menüleiste verbergen - - This will hide the menu bar completely. You can show it again by typing %1. - Dies verbirgt die Menüleiste. Sie können Sie durch Eingeben von %1 wieder anzeigen. - Version: Version: @@ -18115,6 +19143,10 @@ Trotzdem fortfahren? Ctrl+Meta+W Ctrl+Meta+W + + This will hide the menu bar completely. You can show it again by typing %1.<br><br>Or, trigger the "%2" action from the "%3" locator filter (%4). + + Change Log... Änderungshistorie... @@ -18326,10 +19358,6 @@ Trotzdem fortfahren? Plugin changes will take effect after restart. Änderungen der Plugins werden nach einem Neustart wirksam. - - Plugin Details of %1 - Beschreibung zu %1 - Plugin Errors of %1 Fehler in %1 @@ -18438,6 +19466,10 @@ Trotzdem fortfahren? About %1 Über %1 + + Copy and Close + + <br/>From revision %1<br/> <br/>Revision %1<br/> @@ -19358,6 +20390,14 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche Directories: Verzeichnisse: + + Cannot Create File + + + + Cannot create file "%1". + + Create Directory Verzeichnis erzeugen @@ -19604,6 +20644,10 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche Expand All Alle aufklappen + + Show Paths in Relation to Active Project + + Filter Results Resultate filtern @@ -19616,6 +20660,10 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche Collapse All Alle einklappen + + Show Full Paths + + Search Results Suchergebnisse @@ -19780,6 +20828,14 @@ Möchten Sie es beenden? Enter Full Screen Vollbildmodus einschalten + + Proxy Authentication Required + + + + Do not ask again. + + No themes found in installation. Keine Themen in der Installation gefunden. @@ -19860,6 +20916,10 @@ Möchten Sie es beenden? A comment. Ein Kommentar. + + Convert string to pure ASCII. + + Create Folder Verzeichnis erzeugen @@ -20036,10 +21096,6 @@ Möchten Sie sie jetzt auschecken? Ctrl+W Ctrl+W - - Alternative Close - Schließen (alternativ) - Ctrl+F4 Ctrl+F4 @@ -20549,14 +21605,6 @@ provided they were unmodified before the refactoring. Case sensitive: Mit Groß-/Kleinschreibung: - - (%1) - (%1) - - - %1 %2%3 - %1 %2%3 - Based on Qt %1 (%2, %3) Auf Qt %1 (%2, %3) beruhend @@ -21418,6 +22466,10 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Move All Function Definitions to %1 Alle Funktionsdefinitionen nach %1 verschieben + + Move Definition Here + + Move Definition to Class Definition in Klasse verschieben @@ -22071,6 +23123,14 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- Use "#pragma once" instead of "#ifndef" guards "#pragma once" statt Include-Guards mit "#ifndef" verwenden + + Headers + Header-Dateien + + + Sources + Quelldateien + S&uffix: E&ndung: @@ -22620,6 +23680,10 @@ Das integrierte Codemodell übernimmt Syntaxhervorhebung, Code-Vervollständigun Insert header files on completion Bei Code-Vervollständigung Header-Dateien hinzufügen + + Automatic + Automatisch + Ignore files greater than Dateien ignorieren, wenn sie größer sind als @@ -25170,6 +26234,10 @@ markers in the source code editor. Treat All Characters as Printable Alle Zeichen als druckbar betrachten + + %1 of length %2 + + Show Unprintable Characters as Escape Sequences Nicht druckbare Zeichen als Escape-Sequenz anzeigen @@ -26377,28 +27445,24 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">Was sind die Voraussetzungen?</a> - Enable C++ debugger. - C++-Debugger aktivieren. + Enable %1 debugger. + - Try to determine need for C++ debugger. - Versuche, die Notwendigkeit eines C++-Debuggers automatisch festzustellen. + Disable %1 debugger. + - Enable QML debugger. - QML-Debugger aktivieren. + Try to determine need for %1 debugger. + - Try to determine need for QML debugger. - Versuche, die Notwendigkeit eines QML-Debuggers automatisch festzustellen. + No additional startup commands. + - Without additional startup commands. - Ohne zusätzliche Kommandos beim Start. - - - With additional startup commands. - Mit zusätzlichen Kommandos beim Start. + Use additional startup commands. + C++ debugger: @@ -26408,6 +27472,10 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve QML debugger: QML-Debugger: + + Python debugger: + + Enable Debugging of Subprocesses Debuggen von Unterprozessen zulassen @@ -28682,6 +29750,85 @@ Versuchen Sie, das Projekt neu zu erstellen. Eine halbe Bildschirmseite aufwärts + + QtC::ExtensionManager + + Extensions + + + + Get started + + + + Install the extension from above. Installation starts automatically. You can always uninstall the extension afterwards. + + + + More information + + + + Online Documentation + + + + Tutorials + Anleitungen + + + Examples + Beispiele + + + Extension library details + + + + Size + Größe + + + Version + Version + + + Location + + + + Extension details + + + + Released + + + + Related tags + + + + Platforms + + + + Dependencies + Abhängigkeiten + + + Extensions in pack + + + + Manage Extensions + + + + Install... + + + QtC::ExtensionSystem @@ -28716,6 +29863,10 @@ Versuchen Sie, das Projekt neu zu erstellen. Dependencies: Abhängigkeiten: + + Plugin Details of %1 + Beschreibung zu %1 + Group: Gruppe: @@ -28980,8 +30131,14 @@ Grund: %3 Plugin is not available on this platform. Plugin ist auf dieser Plattform nicht verfügbar. + + %1 (deprecated) + %1 is a plugin name + + %1 (experimental) + %1 is a plugin name %1 (experimentell) @@ -29050,6 +30207,10 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins: %2 + + Details + Details + The following plugins have errors and cannot be loaded: Die folgenden Plugins sind fehlerhaft und können nicht geladen werden: @@ -29062,6 +30223,10 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins: Continue Fortsetzen + + Multiple versions of the same plugin have been found. + + %1 > About Plugins %1 > Plugins @@ -30693,6 +31858,10 @@ Jetzt Commit ausführen? Pull with rebase pull mit rebase + + Git command: + + Set "HOME" environment variable Umgebungsvariable "HOME" setzen @@ -31157,18 +32326,6 @@ wenn es außerhalb von git bash aufgerufen wird. Querying Gerrit Anfrage an Gerrit - - Error running %1: %2 - Fehler bei Ausführung von %1: %2 - - - %1 crashed. - %1 ist abgestürzt. - - - %1 returned %2. - %1 gab %2 zurück. - Timeout Zeitüberschreitung @@ -31966,15 +33123,6 @@ Leer lassen, um das Dateisystem zu durchsuchen. Avoid translating "Diff" Diff für aktuelle Datei - - Git Blame - Git Blame - - - <b>Note:</b> "%1" or "%2" is enabled in the instant blame settings. - %1 and %2 are the "ignore whitespace changes" and "ignore line moves" options - <b>Hinweis:</b> "%1" oder "%2" ist in den Einstellungen für Instant Blame aktiviert. - Diff of "%1" Avoid translating "Diff" @@ -32149,10 +33297,6 @@ Leer lassen, um das Dateisystem zu durchsuchen. Unsupported version of Git found. Git %1 or later required. Es wurde eine nicht unterstützte Version von Git festgestellt. Es wird Git %1 oder neuer benötigt. - - You - Sie selbst - Amend %1 Abgabe %1 ändern (amend) @@ -33621,6 +34765,18 @@ Möchten Sie sie überschreiben? The Info.plist might be incorrect. Die Info.plist ist möglicherweise fehlerhaft. + + Deployment canceled. + + + + Failed to run devicectl: %1. + + + + devicectl returned unexpected output ... deployment might have failed. + + The provisioning profile "%1" (%2) used to sign the application does not cover the device %3 (%4). Deployment to it will fail. Das zum Signieren der Anwendung verwendete Provisioning-Profil "%1" (%2) deckt das Gerät %3 (%4) nicht ab. Deployment auf dieses wird scheitern. @@ -33735,6 +34891,10 @@ Möchten Sie sie überschreiben? %1 is not connected. Keine Verbindung zu %1. + + Debugging and profiling is currently not supported for devices with iOS 17 and later. + + Device type: Gerätetyp: @@ -33756,8 +34916,8 @@ Möchten Sie sie überschreiben? Der Start der Anwendung im Simulator ist gescheitert. Der Bundle-Pfad %1 ist ungültig - Application launch on simulator failed. Simulator not running. - Der Start der Anwendung im Simulator ist gescheitert. Der Simulator läuft nicht. + Application launch on simulator failed. Simulator not running. %1 + Application install on simulator failed. %1 @@ -33779,6 +34939,26 @@ Möchten Sie sie überschreiben? Invalid simulator response. Device Id mismatch. Device Id = %1 Response Id = %2 Ungültige Antwort des Simulators. Die Geräte-IDs stimmen nicht überein. Geräte-ID = %1 Antwort-ID = %2 + + Running failed. No iOS device found. + + + + Running canceled. + + + + "%1" exited. + + + + Failed to determine bundle identifier. + + + + Running "%1" on %2... + + Could not find %1. %1 konnte nicht gefunden werden. @@ -34141,6 +35321,82 @@ Ablaufdatum: %3 Reset to Default Auf Vorgabe zurücksetzen + + Failed to parse devicectl output: %1. + + + + Operation failed: %1 + + + + Failed to parse devicectl output: "result" is missing. + + + + devicectl returned unexpected output ... running failed. + + + + Failed to start process. + + + + Process was canceled. + + + + Process was forced to exit. + + + + Cannot find xcrun. + + + + xcrun is not executable. + + + + Invalid Empty UDID. + + + + Failed to start simulator app. + + + + Simulator device is not available. (%1) + + + + Simulator start was canceled. + + + + Cannot start Simulator device. Previous instance taking too long to shut down. (%1) + + + + Cannot start Simulator device. Simulator not in shutdown state. (%1) + + + + Cannot start Simulator device. Simulator not in booted state. (%1) + + + + Bundle path does not exist. + + + + Invalid (empty) bundle identifier. + + + + Failed to convert inferior pid. (%1) + + QtC::LanguageClient @@ -34208,6 +35464,46 @@ Ablaufdatum: %3 Manage... Verwalten... + + Install npm Package + + + + Running "%1" to install %2. + Führe "%1" aus, um %2 zu installieren. + + + The installation of "%1" was canceled by timeout. + Die Installation von "%1" wurde wegen Zeitüberschreitung abgebrochen. + + + The installation of "%1" was canceled by the user. + Die Installation von "%1" wurde vom Benutzer abgebrochen. + + + Installing "%1" failed with exit code %2. + Die Installation von "%1" ist mit dem Rückgabewert %2 fehlgeschlagen. + + + Install %1 language server via npm. + + + + Setup %1 language server (%2). + + + + Install + Installieren + + + Setup + + + + %1 Language Server + + Name: Name: @@ -34427,6 +35723,10 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des benutzten Langu Expand All Alle aufklappen + + Collapse All + Alle einklappen + Client Message Client-Nachricht @@ -35119,6 +36419,14 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des benutzten Langu Remove + + Read about Using QtMCUs in the Qt Design Studio + + + + Go to the Documentation + + Create new kits @@ -36858,6 +38166,11 @@ Weitere Erklärungen sind möglicherweise in "Ausgabe der Anwendung" z &Hijack &Hijack + + Error running "where" on %1: The file is not mapped. + Failed to run p4 "where" to resolve a Perforce file name to a local file system name. + + p4 revert Rückgängig machen @@ -36898,18 +38211,6 @@ Weitere Erklärungen sind möglicherweise in "Ausgabe der Anwendung" z p4 changelists %1 p4 changelists %1 - - Could not start perforce "%1". Please check your settings in the preferences. - Das Perforce-Kommando "%1" konnte nicht gestartet werden. Bitte überprüfen Sie die Einstellungen. - - - Perforce did not respond within timeout limit (%1 s). - Perforce reagierte nicht innerhalb des Zeitlimits (%1 s). - - - The process terminated with exit code %1. - Der Prozess wurde beendet, Rückgabewert %1. - Close Submit Editor Submit-Editor schließen @@ -36926,20 +38227,6 @@ Weitere Erklärungen sind möglicherweise in "Ausgabe der Anwendung" z Cannot submit: %1. Submit fehlgeschlagen: %1. - - p4 submit failed: %1 - Fehler beim Submit: %1 - - - Error running "where" on %1: %2 - Failed to run p4 "where" to resolve a Perforce file name to a local file system name. - Fehler bei der Ausführung von "where" bei Datei "%1": %2 - - - The file is not mapped - File is not managed by Perforce - Die Datei wird nicht von Perforce verwaltet - Perforce repository: %1 Perforce-Repository: %1 @@ -36948,10 +38235,6 @@ Weitere Erklärungen sind möglicherweise in "Ausgabe der Anwendung" z Perforce: Unable to determine the repository: %1 Perforce: Das Repository von konnte nicht bestimmt werden: %1 - - The process terminated abnormally. - Der Prozess wurde unnormal beendet. - Perforce is not correctly configured. Perforce ist nicht richtig konfiguriert. @@ -37230,10 +38513,6 @@ Weitere Erklärungen sind möglicherweise in "Ausgabe der Anwendung" z Skipping disabled step %1. Überspringe deaktivierten Schritt %1. - - Variable already exists. - Variable existiert bereits. - Ed&it Bearbe&iten @@ -37262,10 +38541,6 @@ Weitere Erklärungen sind möglicherweise in "Ausgabe der Anwendung" z Prepend Path... Pfad voranstellen... - - &Batch Edit... - Als &Text bearbeiten... - Open &Terminal &Terminalfenster öffnen @@ -38182,6 +39457,14 @@ Bitte versuchen Sie es erneut. Runs a run configuration of the active project. Führt eine Ausführungskonfiguration des aktiven Projekts aus. + + Debug Run Configuration + + + + Starts debugging a run configuration of the active project. + + Switch Run Configuration Ausführungskonfiguration auswählen @@ -38820,6 +40103,10 @@ The name of the build configuration created by default for a generic project.&Keep Running &Fortsetzen + + Remote process did not finish in time. Connectivity lost? + + Starting %1... Starte %1... @@ -39889,14 +41176,6 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen. Include QMainWindow QMainWindow einbinden - - Include QDeclarativeItem - Qt Quick 1 - QDeclarativeItem einbinden - Qt Quick 1 - - - Include QQuickItem - Qt Quick 2 - QQuickItem einbinden - Qt Quick 2 - Include QSharedData QSharedData einbinden @@ -40631,6 +41910,10 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.PySide 6 PySide 6 + + Include QQuickItem + + Qt 6.2 Qt 6.2 @@ -40855,6 +42138,26 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.Qt Quick Test Project Qt Quick Test-Projekt + + Creates a translation file that you can add to a Qt project. + + + + Qt Translation File + + + + 2.x + + + + 3.x + + + + Catch2 version: + + Creates a CMake-based test project for which a code snippet can be entered. Erstellt ein CMake-basiertes Testprojekt, für welches ein Code-Ausschnitt angegeben werden kann. @@ -41379,6 +42682,11 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.* Version %1 nicht unterstützt. + + * Failed to create: %1 + + + The platform selected for the wizard. Die für den Assistenten ausgewählte Plattform. @@ -41508,16 +42816,8 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.Wählen Sie das Wurzelverzeichnis - Replacement for - Ersatz für - - - Replacement for "%1" - Ersatz für "%1" - - - Project "%1" was configured for kit "%2" with id %3, which does not exist anymore. The new kit "%4" was created in its place, in an attempt not to lose custom project settings. - Das Projekt "%1" wurde für das Kit "%2" mit dem Bezeichner %3 konfiguriert. Dieses Kit existiert nicht mehr. Das neue Kit "%4" wurde an seiner Stelle erzeugt, um den Verlust von benutzerdefinierten Projekteinstellungen zu verhindern. + Project "%1" was configured for kit "%2" with id %3, which does not exist anymore. You can create a new kit or copy the steps of the vanished kit to another kit in %4 mode. + Could not find any qml_*.qm file at "%1" @@ -41767,6 +43067,43 @@ Sie werden erhalten. Show Non-matching Lines Nicht passende Zeilen anzeigen + + The project was configured for kits that no longer exist. Select one of the following options in the context menu to restore the project's settings: + + + + Create a new kit with the same name for the same device type, with the original build, deploy, and run steps. Other kit settings are not restored. + + + + Copy the build, deploy, and run steps to another kit. + + + + %1 (%2) + vanished target display role: vanished target name (device type name) + %1 (%2) + + + Create a New Kit + + + + Copy Steps to Another Kit + + + + Remove Vanished Target "%1" + + + + Remove All Vanished Targets + + + + Vanished Targets + + Project Settings Projekteinstellungen @@ -42040,10 +43377,6 @@ Was soll %1 tun? Use debug version of frameworks (DYLD_IMAGE_SUFFIX=_debug) Debug-Version von Frameworks verwenden (DYLD_IMAGE_SUFFIX=_debug) - - Interpreter: - Interpreter: - X11 Forwarding: X11-Weiterleitung: @@ -42064,10 +43397,6 @@ Was soll %1 tun? Override MAKEFLAGS MAKEFLAGS überschreiben - - <code>MAKEFLAGS</code> specifies parallel jobs. Check "%1" to override. - <code>MAKEFLAGS</code> legt parallele Jobs fest. Wählen Sie "%1", um dies zu überstimmen. - Disable in subdirectories: In Unterverzeichnissen deaktivieren: @@ -42108,6 +43437,18 @@ Was soll %1 tun? <b>Make:</b> %1 not found in the environment. <b>Make:</b> %1 konnte in der Umgebung nicht gefunden werden. + + Overriding <code>MAKEFLAGS</code> environment variable. + + + + <code>MAKEFLAGS</code> specifies a conflicting job count. + + + + No conflict with <code>MAKEFLAGS</code> environment variable. + + Enable connection sharing: Verbindungsfreigabe aktivieren: @@ -42214,6 +43555,14 @@ Was soll %1 tun? Shadow build: Shadow-Build: + + Build directory contains potentially problematic character "%1". + + + + This warning can be suppressed <a href="dummy">here</a>. + + The project is currently being parsed. Das Projekt wird gerade ausgewertet. @@ -42523,6 +43872,14 @@ Was soll %1 tun? Start build processes with low priority Erstellungsprozesse mit niedriger Priorität starten + + Warn against build directories with spaces or non-ASCII characters + + + + Some legacy build tools do not deal well with paths that contain "special" characters such as spaces, potentially resulting in spurious build errors.<p>Uncheck this option if you do not work with such tools. + + Do Not Build Anything Nichts erstellen @@ -42567,6 +43924,14 @@ Was soll %1 tun? Use jom instead of nmake jom statt nmake verwenden + + Environment changes to apply to run configurations, but not build configurations. + + + + Application environment: + + Projects Directory Projektverzeichnis @@ -42965,6 +44330,10 @@ fails because Clang does not understand the target architecture. &Make Default Als &Vorgabe setzen + + &Generate Kit + + &Clean Up &Bereiningen @@ -43001,11 +44370,6 @@ fails because Clang does not understand the target architecture. Language Server Configuration Language Server-Konfiguration - - %1 (Windowed) - <python display name> (Windowed) - %1 (mit Fenster) - Python interpreter: Python-Interpreter: @@ -43035,12 +44399,20 @@ fails because Clang does not understand the target architecture. PySide-Version auswählen - Select which PySide version to install: - Wählen Sie die zu installierende PySide-Version aus: + Installing PySide + - Latest PySide from the Python Package Index - Letzte PySide-Version aus dem Python-Paketindex + You can install PySide from PyPi (Community OSS version) or from your Qt installation location, if you are using the Qt Installer and have a commercial license. + + + + Select which version to install: + + + + Latest PySide from the PyPI + PySide %1 Wheel (%2) @@ -43091,8 +44463,28 @@ fails because Clang does not understand the target architecture. Geben Sie den Ort des PySide Projektwerkzeugs ein. - General - Allgemein + PySide uic tool: + + + + Enter location of PySide uic tool. + + + + Effective venv: + + + + New Virtual Environment + + + + Global Python + + + + Virtual Environment + REPL @@ -43166,18 +44558,50 @@ fails because Clang does not understand the target architecture. PySide version: PySide-Version: - - Create new virtual environment - Neue virtuelle Umgebung erstellen - - - Path to virtual environment: - Pfad zur virtuellen Umgebung: - Issues parsed from Python runtime output. Probleme, die in der Laufzeitausgabe von Python gefunden wurden. + + None + + + + The interpreter used for Python based projects. + + + + No Python setup. + + + + Python "%1" not found. + + + + Python "%1" is not executable. + + + + Python "%1" does not contain a usable pip. pip is needed to install Python packages from the Python Package Index, like PySide and the Python language server. To use any of that functionality ensure that pip is installed for that Python. + + + + Python "%1" does not contain a usable venv. venv is the recommended way to isolate a development environment for a project from the globally installed Python. + + + + Name of Python Interpreter + + + + Path to Python Interpreter + + + + No Python interpreter set for kit "%1" + + QtC::QbsProjectManager @@ -43545,6 +44969,10 @@ The affected files are: Die betroffenen Dateien sind: %2 + + Qbs Editor + + QtC::Qdb @@ -46867,7 +48295,7 @@ Speichern fehlgeschlagen. Advanced Options - + Erweiterte Optionen File %1 will be created. @@ -47059,6 +48487,14 @@ Are you sure? Build directory: Build-Verzeichnis: + + The Selected Kit Is Not Supported + + + + You cannot use the selected kit to preview Qt for MCUs applications. + + Failed to find valid Qt for MCUs kit @@ -47213,10 +48649,6 @@ Möchten Sie fortfahren? Local file "%1" does not exist. Es gibt keine lokale Datei "%1". - - Remote chmod failed for file "%1": %2 - "chmod" für die entfernte Datei "%1" ist fehlgeschlagen: %2 - No device configuration set. Es ist keine Gerätekonfiguration gesetzt. @@ -47383,6 +48815,10 @@ wirklich löschen? Qt %{Qt:Version} (%2) Qt %{Qt:Version} (%2) + + (on %1) + + Qt version is not properly installed, please run make install Die Qt-Version ist nicht richtig installiert, führen Sie bitte make install aus @@ -47892,8 +49328,12 @@ wirklich löschen? Deaktiviert QML-Debuggen. QML-Profiling funktioniert weiterhin. - If you plan to provide translations for your project's user interface via the Qt Linguist tool, please select a language here. A corresponding translation (.ts) file will be generated for you. - Falls Sie planen, Übersetzungen für die Benutzeroberfläche Ihres Projekts über das Qt Linguist-Werkzeug bereit zu stellen, wählen Sie hier eine Sprache. Eine zugehörige Übersetzungsdatei (.ts) wird für Sie erzeugt. + Select a language for which a corresponding translation (.ts) file will be generated for you. + + + + If you plan to provide translations for your project's user interface via the Qt Linguist tool, select a language here. A corresponding translation (.ts) file will be generated for you. + <none> @@ -48079,10 +49519,6 @@ Zusätzlich wird die Verbindung zum Gerät getestet. Local file "%1" does not exist. Es gibt keine lokale Datei "%1". - - Remote chmod failed for file "%1": %2 - "chmod" für die entfernte Datei "%1" ist fehlgeschlagen: %2 - Incremental deployment Inkrementelles Deployment @@ -48131,6 +49567,19 @@ Zusätzlich wird die Verbindung zum Gerät getestet. All specified ports are available. Alle angegebenen Ports sind verfügbar. + + Connecting to device... + + + + Connected. Now doing extended checks. + + + + + Basic connectivity test failed, device is considered unusable. + + Device replied to echo with unexpected contents: "%1" Das Gerät hat auf das Echo mit unerwartetem Inhalt geantwortet: "%1" @@ -48443,6 +49892,14 @@ Der Kontrollprozess konnte nicht gestartet werden. SSH connection failure: SSH-Verbindungsfehler: + + Device is disconnected. + + + + Can't send control signal to the %1 device. The device might have been disconnected. + + Remote Linux Entferntes Linuxgerät @@ -48451,10 +49908,26 @@ Der Kontrollprozess konnte nicht gestartet werden. Error Fehler + + Establishing initial connection to device "%1". This might take a moment. + + + + Device "%1" is currently marked as disconnected. + + + + The device was not available when trying to connect previously.<br>No further connection attempts will be made until the device is manually reset by running a successful connection test via the <a href="dummy">settings page</a>. + + Failed: %1 Fehlgeschlagen: %1 + + Device is considered unconnected. Re-run device test to reset state. + + Remote Linux Device Entferntes Linuxgerät @@ -48589,10 +50062,6 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Transfer method: Übertragungsmethode: - - Use rsync if available. Otherwise use default transfer. - Benutze rsync, sofern verfügbar. Sonst Standardmethode verwenden. - Use sftp if available. Otherwise use default transfer. Benutze SFTP, sofern verfügbar. Sonst Standardmethode verwenden. @@ -48605,6 +50074,10 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Unknown error occurred while trying to create remote directories Beim Erstellen von entfernten Verzeichnissen ist ein unbekannter Fehler aufgetreten + + Transfer method was downgraded from "%1" to "%2". If this is unexpected, please re-test device "%3". + + rsync failed to start: %1 rsync konnte nicht gestartet werden: %1 @@ -48625,6 +50098,10 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Ignore missing files: Fehlende Dateien ignorieren: + + Use rsync or sftp if available, but prefer rsync. Otherwise use default transfer. + + rsync is only supported for transfers between different devices. rsync wird nur für das Übertragen zwischen unterschiedlichen Geräten unterstützt. @@ -50212,6 +51689,22 @@ Testfall "%2" wird nicht aufgezeichnet. Test Suites Test-Suites + + Do you really want to delete "%1" permanently? + + + + Remove Shared File + + + + Cancel + Abbrechen + + + Failed to remove "%1". + + Remove "%1" from the list of shared folders? "%1" aus der Liste der gemeinsamen Verzeichnisse entfernen? @@ -50952,7 +52445,6 @@ Die Datei "%1" konnte nicht geöffnet werden. Sends Esc to terminal instead of %1. - %1 is the application name (Qt Creator) Sendet Escape zum Terminal statt zu %1. @@ -50965,12 +52457,10 @@ Die Datei "%1" konnte nicht geöffnet werden. %1 shortcuts are blocked when focus is inside the terminal. - %1 is the application name (Qt Creator) Tastenkombinationen von %1 werden blockiert, wenn der Fokus im Terminal ist. %1 shortcuts take precedence. - %1 is the application name (Qt Creator) Tastenkombinationen von %1 werden bevorzugt. @@ -51177,6 +52667,10 @@ Die Datei "%1" konnte nicht geöffnet werden. Paste Einfügen + + Select All + + Clear Selection Auswahl löschen @@ -51482,6 +52976,10 @@ Werte kleiner als 100% können überlappende und falsch ausgerichtete Darstellun Copy... Kopieren... + + Custom settings: + + Delete Löschen @@ -51756,10 +53254,6 @@ Werte kleiner als 100% können überlappende und falsch ausgerichtete Darstellun Import... Importieren... - - Current settings: - Aktuelle Einstellungen: - Copy Code Style Coding Style kopieren @@ -51804,6 +53298,10 @@ Werte kleiner als 100% können überlappende und falsch ausgerichtete Darstellun %1 [built-in] %1 [eingebaut] + + %1 [customizable] + + Files in File System Dateien aus Dateisystem @@ -52201,6 +53699,14 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Display file line ending Zeilenende-Kodierung anzeigen + + &Highlight selection + + + + Adds a colored background and a marker to the scrollbar to occurrences of the selected text. + + Next to editor content Neben Editorinhalt @@ -52912,8 +54418,8 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. Alt+U - &Sort Selected Lines - Auswahl &sortieren + &Sort Lines + Meta+Shift+S @@ -54126,10 +55632,23 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Copy to Clipboard In die Zwischenablage kopieren + + Git Blame + Git Blame + Copy SHA1 to Clipboard SHA1 in die Zwischenablage kopieren + + <b>Note:</b> "%1" or "%2" is enabled in the instant blame settings. + %1 and %2 are the "ignore whitespace changes" and "ignore line moves" options + <b>Hinweis:</b> "%1" oder "%2" ist in den Einstellungen für Instant Blame aktiviert. + + + You + Sie selbst + Show Preview Vorschau anzeigen @@ -54142,10 +55661,6 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Emphasis Hervorherbung - - Strong - Fett - Inline Code Inline-Quelltext @@ -54760,10 +56275,6 @@ Die Trace-Daten sind verloren. Reset to Default Layout Vorgabe wiederherstellen - - Automatically Hide View Title Bars - Titelleisten von Anzeigen automatisch ausblenden - Name contains white space. Der Name enthält Leerzeichen. @@ -54837,8 +56348,8 @@ Die Trace-Daten sind verloren. Das Kommando "%1" konnte nicht gestartet werden. - The command "%1" did not respond within the timeout limit (%2 s). - Das Kommando "%1" hat nicht innerhalb des Zeitlimits (%2 s) geantwortet. + The command "%1" was canceled after %2 ms. + Invalid command @@ -54880,6 +56391,10 @@ Die Trace-Daten sind verloren. Cannot execute "%1": %2 Das Kommando "%1" konnte nicht ausgeführt werden: %2 + + Failed to start terminal process. The stub exited before the inferior was started. + + Cannot set permissions on temporary directory "%1": %2 Die Berechtigungen für das temporäre Verzeichnis "%1" konnten nicht gesetzt werden: %2 @@ -54916,6 +56431,10 @@ Die Trace-Daten sind verloren. createTempFile is not implemented for "%1". createTempFile ist für "%1" nicht implementiert. + + Refusing to remove the standard directory "%1". + + Refusing to remove root directory. Das Wurzelverzeichnis kann nicht entfernt werden. @@ -54971,6 +56490,10 @@ Die Trace-Daten sind verloren. Die Datei "%1" konnte nicht geschrieben werden (es wurden nur %2 von %n Bytes geschrieben). + + Device is not connected + + Failed reading file "%1": %2 Die Datei "%1" konnte nicht gelesen werden: %2 @@ -55023,6 +56546,10 @@ Die Trace-Daten sind verloren. Cannot create temporary file in %1: %2 Es konnte keine temporäre Datei erstellt in %1 werden: %2 + + Cannot create temporary file %1: %2 + + Overwrite File? Datei überschreiben? @@ -55353,14 +56880,8 @@ Um eine Variable zu deaktivieren, stellen Sie der Zeile "#" voran. <VARIABLE> - Name when inserting a new variable <VARIABLE> - - <VALUE> - Value when inserting a new variable - <VALUE> - Elapsed time: %1. Verstrichene Zeit: %1. @@ -57124,8 +58645,8 @@ Check settings or ensure Valgrind is installed and available in PATH. Führe aus: %1 - Running in "%1": %2. - Führe in "%1" aus: %2. + Running in "%1": %2 + Failed to retrieve data. @@ -57465,8 +58986,8 @@ should a repository require SSH-authentication (see documentation on SSH and the Willkommen - New to Qt? - Neu bei Qt? + Welcome to %1 + Create Project... @@ -57476,6 +58997,10 @@ should a repository require SSH-authentication (see documentation on SSH and the Open Project... Projekt öffnen... + + Explore more + + Get Started Schnelleinstieg @@ -58311,13 +59836,6 @@ defined in step size. - - RemoteLinux::SshProcessInterface - - Can't send control signal to the %1 device. The device might have been disconnected. - - - RenameFolderDialog @@ -58462,6 +59980,64 @@ defined in step size. + + SaveAsDialog + + Save Effect + + + + Effect name: + + + + Name contains invalid characters. + + + + Name must start with a capital letter + + + + Name must have at least 3 characters + + + + Name cannot contain white space + + + + Save + Speichern + + + Cancel + Abbrechen + + + + SaveChangesDialog + + Save Changes + Änderungen speichern + + + Current composition has unsaved changes. + + + + Cancel + Abbrechen + + + Save + Speichern + + + Discard Changes + + + ScaleToolAction @@ -58815,6 +60391,13 @@ This is used for calculating the total implicit size. + + SocialButton + + Text + Text + + SpatialSoundSection @@ -58996,6 +60579,13 @@ it reaches the start or end. Ausrichtung des Split View. + + SplitViewToggleAction + + Toggle Split View On/Off + + + StackLayoutSpecifics @@ -59135,6 +60725,10 @@ it reaches the start or end. Extend + + Jump to the code + + Reset when Condition Zurücksetzen bei Bedingung @@ -59511,6 +61105,13 @@ This is used for calculating the total implicit size. Bestimmt die Position der Tabs. + + Tag + + tag name + + + TemplateMerge @@ -59530,6 +61131,41 @@ This is used for calculating the total implicit size. + + TestControlPanel + + X + X + + + Theme + + + + light + + + + dark + + + + + + + + Basic + Grundlegend + + + Community + + + + < + + + TextAreaSpecifics @@ -59974,6 +61610,29 @@ This is used for calculating the total implicit size. + + ThumbnailDelegate + + Overwrite Example? + + + + Example already exists.<br>Do you want to replace it? + + + + Downloading... + + + + Extracting... + + + + Recently Downloaded + + + TimelineBarItem @@ -60077,6 +61736,104 @@ This is used for calculating the total implicit size. + + TourModel + + Welcome Page + + + + The welcome page of Qt Design Studio. + + + + Workspaces + + + + Introduction to the most important workspaces. + + + + Top Toolbar + + + + Short explanation of the top toolbar. + + + + States + + + + An introduction to states. + + + + Sorting Components + + + + A way to organize multiple components. + + + + Connecting Components + + + + A way to connect components with actions. + + + + Adding Assets + + + + A way to add new assets to the project. + + + + Creating 2D Animation + + + + A way to create a 2D Animation. + + + + Border and Arc + + + + Work with Border and Arc Studio Components. + + + + Ellipse and Pie + + + + Work with Ellipse and Pie Studio Components. + + + + Complex Shapes + + + + Work with Polygon, Triangle and Rectangle Studio Components. + + + + + TourRestartButton + + Restart + + + TumblerSpecifics @@ -60186,7 +61943,7 @@ Are you sure you want to remove the %1? VideoSection Video - + Video Source @@ -60342,50 +62099,6 @@ Are you sure you want to remove the %1? main - - Recent Projects - Zuletzt bearbeitete Projekte - - - Examples - Beispiele - - - Tutorials - Anleitungen - - - Welcome to - Willkommen bei - - - Qt Design Studio - Qt Design Studio - - - Create New - Neu erstellen - - - Open Project - Projekt öffnen - - - Help - Hilfe - - - Community - - - - Blog - - - - Community Edition - - Continue Fortsetzen From 3c94f63e67a0d58f160ff7635b8b6c0ca2cd4680 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 5 Mar 2024 13:22:25 +0100 Subject: [PATCH 55/56] Android: Guard against assert due to invalid access Change-Id: I4f98f18b786c95acae09a3be3b924953f1292e61 Reviewed-by: Artem Sokolovskii Reviewed-by: --- src/plugins/android/androidbuildapkstep.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index 34c6a9b619a..c57d008705d 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -228,11 +228,12 @@ AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step) m_step->setBuildToolsVersion(buildToolsSdkComboBox->itemData(idx).value()); }); - const int initIdx = (m_step->buildToolsVersion().majorVersion() < 1) - ? buildToolsVersions.indexOf(buildToolsVersions.last()) - : buildToolsVersions.indexOf(m_step->buildToolsVersion()); - buildToolsSdkComboBox->setCurrentIndex(initIdx); - + if (!buildToolsVersions.isEmpty()) { + const int initIdx = (m_step->buildToolsVersion().majorVersion() < 1) + ? buildToolsVersions.indexOf(buildToolsVersions.last()) + : buildToolsVersions.indexOf(m_step->buildToolsVersion()); + buildToolsSdkComboBox->setCurrentIndex(initIdx); + } auto createAndroidTemplatesButton = new QPushButton(Tr::tr("Create Templates")); createAndroidTemplatesButton->setToolTip( From 7b8f274b9e3956a2e8668f932ee9717f96568678 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 6 Mar 2024 10:30:42 +0100 Subject: [PATCH 56/56] Help: Update qlitehtml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Includes layout fixes Fixes: QTCREATORBUG-30459 Change-Id: I561e018f7c99a00048db04643fc3d62c3282e509 Reviewed-by: Robert Löhning --- src/libs/qlitehtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/qlitehtml b/src/libs/qlitehtml index 7e8eb0f5eae..9c7b5d073bf 160000 --- a/src/libs/qlitehtml +++ b/src/libs/qlitehtml @@ -1 +1 @@ -Subproject commit 7e8eb0f5eaee53b0aeb04208bdaba74fcffc3a3f +Subproject commit 9c7b5d073bf4713250648cf7ea35580f489f7fd7