From 8a15dae077a30021791cb0d9fbde8b9527adc267 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 18 Feb 2025 09:26:46 +0100 Subject: [PATCH 001/117] Docker: Set future after connecting Fixes a "QFutureWatcher::connect: connecting after calling setFuture() is likely to produce race". Amends 2a7bf0fdaf2ab. Change-Id: I69391984e2e583491bb978e41812b4f5a4c7b1a6 Reviewed-by: Marcus Tillmanns --- src/plugins/docker/dockerdevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 8eac541f36a..a2696c8ee61 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -602,7 +602,6 @@ DockerDevice::DockerDevice() auto future = DockerApi::instance()->networks(); auto watcher = new QFutureWatcher>>(this); - watcher->setFuture(future); QObject::connect(watcher, &QFutureWatcher>>::finished, this, @@ -622,6 +621,7 @@ DockerDevice::DockerDevice() cb({errorItem}); } }); + watcher->setFuture(future); }); connect(DockerApi::instance(), From dc75648b0d86b6b898f2486646a4eab4aa6ab40f Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 17 Feb 2025 09:41:12 +0100 Subject: [PATCH 002/117] Debugger: Effectively require Python 3.5.2 only But keep the docs and the error message referring to 3.7. Pythoon 3.5.2 is apparently used in 5.15.10 Boot2Qt BSPs, and some people rely on this. Amends 9f5d30907490181. Task-number: QTCREATORBUG-32475 Change-Id: I939716edb4e2c12211e21293ec2315a12ac8ee0b Reviewed-by: Christian Stenger --- src/plugins/debugger/gdb/gdbengine.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index c75712a8146..d2e29aeef81 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1511,7 +1511,9 @@ void GdbEngine::handlePythonSetup(const DebuggerResponse &response) GdbMi data = response.data; watchHandler()->addDumpers(data["dumpers"]); m_pythonVersion = data["python"].toInt(); - if (m_pythonVersion < 30700) { + // Python 3.5.x: Released 2016-06-27, supported until 2018-12-24, security until 2021-12-23, + // used in Ubuntu 16.04 and Qt 5.15.10 Boot2Qt BSPs. + if (m_pythonVersion < 30502) { int pythonMajor = m_pythonVersion / 10000; int pythonMinor = (m_pythonVersion / 100) % 100; QString out = "

" From c639aa82d40b136626571857d31825ab00c74796 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 17 Feb 2025 14:24:13 +0100 Subject: [PATCH 003/117] EditorManager: Guard against potential crash At this point `entry` should not be nullptr, since the editors passed to closeEditor should be ones that are managed by EditorManager/ DocumentModel. But there could be misusage of the EditorManager API, or some other corruption of the managed data in DocumentModel, so be defensive. Amends 119a0920c119e1bf631b16babab72b5c71740495 Task-number: QTCREATORBUG-32484 Change-Id: I3f173d1fe7c3533d4f044fd23171c69ab65bb9d8 Reviewed-by: Mitch Curtis Reviewed-by: David Schulz --- src/plugins/coreplugin/editormanager/editormanager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 8e95d7bcf08..cb882f9f000 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1618,7 +1618,8 @@ bool EditorManagerPrivate::closeEditors(const QList &editors, CloseFla emit m_instance->editorAboutToClose(editor); const DocumentModel::Entry *entry = DocumentModel::entryForDocument(editor->document()); // If the file is pinned, closing it should remove the editor but keep it in Open Documents. - const bool removeSuspendedEntry = !entry->pinned && flag != CloseFlag::Suspend; + const bool isPinned = QTC_GUARD(entry) && entry->pinned; + const bool removeSuspendedEntry = !isPinned && flag != CloseFlag::Suspend; removeEditor(editor, removeSuspendedEntry); if (EditorView *view = viewForEditor(editor)) { editorsPerView.insert(view, editor); From 1a5198d88c0b5800b2a6360911612bdd38ed5f2f Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 15 Jan 2025 13:17:58 +0100 Subject: [PATCH 004/117] Doc: Remove instructions for the Marketplace tab The tab has been removed from the Welcome mode. Qt Marketplace still exists, so leave direct links to it. Update screenshots of the Welcome mode and kit selector. Task-number: QTCREATORBUG-32016 Change-Id: Ia5427e44990f340b697ddb050a2b67fcb3296219 Reviewed-by: Alessandro Portale --- .../qtcreator-examples-kit-selector.webp | Bin 5468 -> 5270 bytes .../images/qtcreator-examples-open.webp | Bin 78868 -> 56332 bytes .../qtcreator-welcome-open-projects.webp | Bin 12290 -> 11256 bytes doc/qtcreator/images/qtcreator-welcome.webp | Bin 23436 -> 22146 bytes .../creator-how-to-install-plugins.qdoc | 3 +-- 5 files changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/qtcreator/images/qtcreator-examples-kit-selector.webp b/doc/qtcreator/images/qtcreator-examples-kit-selector.webp index 0f712f9e29fefbac8221193d8951b5a0de30b9dd..de1e2f83372ec6ea1f99ab31a7fe604a7605052c 100644 GIT binary patch literal 5270 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≶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 z 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 J*-Z&11_0P_^REB^ literal 12290 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≶c$T{knV>->PSkAWc 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 Ky?x)MmUjSbmAg&= literal 23436 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 Ng0<#8f98}k004!wAOQdX diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc index d643381c2b3..5a2235ed7e6 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc @@ -11,8 +11,7 @@ \l{https://marketplace.qt.io/}{Qt Marketplace} has links to \QC plugins that you can download and install either for free or for a price set by their - publisher. Browse the available plugins in the \uicontrol Marketplace tab - in the \uicontrol Welcome mode. + publisher. You can also install plugins from other sources, such as \l{https://github.com/}{GitHub}. From f93da92893e1c3531fc19d077a8e513636363adc Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 18 Feb 2025 10:46:45 +0100 Subject: [PATCH 005/117] Utils: Fix toggling the "enabled" status ... of the first entry in a list of environment variables. Commit 727be63dacaff6a8327f2c74852a7d907f4ca7e3 changed an assertion from testing against end() to begin(), which was likely unintended. Task-number: QTCREATORBUG-32495 Change-Id: I7814018d914219b4aebff70ab4aa6f185dbfcff0 Reviewed-by: Marcus Tillmanns --- src/libs/utils/environmentmodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/utils/environmentmodel.cpp b/src/libs/utils/environmentmodel.cpp index 9d5edb684fd..46681742158 100644 --- a/src/libs/utils/environmentmodel.cpp +++ b/src/libs/utils/environmentmodel.cpp @@ -356,7 +356,7 @@ void EnvironmentModel::toggleVariable(const QModelIndex &idx) { const QString name = indexToVariable(idx); const auto newIt = d->m_resultNameValueDictionary.find(name); - QTC_ASSERT(newIt != d->m_resultNameValueDictionary.begin(), return); + QTC_ASSERT(newIt != d->m_resultNameValueDictionary.end(), return); const auto op = newIt.enabled() ? EnvironmentItem::SetDisabled : EnvironmentItem::SetEnabled; const int changesPos = d->findInChanges(name); if (changesPos != -1) { From fce61829b9324bcfefac7712800bb574d205a9e7 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 18 Feb 2025 08:43:26 +0100 Subject: [PATCH 006/117] Terminal: Don't forcibly kill conpty process Sometimes (especially for the git bash.exe) closing a terminal seemed to not kill the shell process. This seemed to happen because we forcibly killed the conpty process which we rely on to actually kill the shell. Since we killed the conpty before it was able to close the shell, the shell would continue to run. This became evident during debugging, as the shell was killed if we stepped through the function, thereby delaying the killing of the conpty process. Fixes: QTCREATORBUG-32509 Change-Id: I468ec23d8a13c11cbd8d4b31c9a99736b0cdd07c Reviewed-by: Cristian Adam --- src/libs/3rdparty/libptyqt/conptyprocess.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libs/3rdparty/libptyqt/conptyprocess.cpp b/src/libs/3rdparty/libptyqt/conptyprocess.cpp index 31497d3333a..32035f32202 100644 --- a/src/libs/3rdparty/libptyqt/conptyprocess.cpp +++ b/src/libs/3rdparty/libptyqt/conptyprocess.cpp @@ -582,7 +582,6 @@ void _ClosePseudoConsoleMembers(_In_ PseudoConsole* pPty) // has yet to send before we hard kill it. if (_HandleIsValid(pPty->hConPtyProcess)) { - TerminateProcess(pPty->hConPtyProcess, 0); CloseHandle(pPty->hConPtyProcess); pPty->hConPtyProcess = nullptr; } From 890c99d73969c1bc278052b5c6a4b74005d56d96 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 18 Feb 2025 08:55:28 +0100 Subject: [PATCH 007/117] Terminal: Apply changes from upstream The upstream github.com/microsoft/terminal did change the function and the order in which the handles are closed. This updates our copy of the function to follow those changes. Change-Id: I9eceaa607e63ee4981d06ebc8f3b6920106247da Reviewed-by: Cristian Adam --- src/libs/3rdparty/libptyqt/conptyprocess.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/libs/3rdparty/libptyqt/conptyprocess.cpp b/src/libs/3rdparty/libptyqt/conptyprocess.cpp index 32035f32202..8e9358386ec 100644 --- a/src/libs/3rdparty/libptyqt/conptyprocess.cpp +++ b/src/libs/3rdparty/libptyqt/conptyprocess.cpp @@ -570,29 +570,21 @@ void _ClosePseudoConsoleMembers(_In_ PseudoConsole* pPty) { if (pPty != nullptr) { - // See MSFT:19918626 - // First break the signal pipe - this will trigger conhost to tear itself down if (_HandleIsValid(pPty->hSignal)) { CloseHandle(pPty->hSignal); pPty->hSignal = nullptr; } - // Then, wait on the conhost process before killing it. - // We do this to make sure the conhost finishes flushing any output it - // has yet to send before we hard kill it. - if (_HandleIsValid(pPty->hConPtyProcess)) - { - CloseHandle(pPty->hConPtyProcess); - pPty->hConPtyProcess = nullptr; - } - // Then take care of the reference handle. - // TODO GH#1810: Closing the reference handle late leaves conhost thinking - // that we have an outstanding connected client. if (_HandleIsValid(pPty->hPtyReference)) { CloseHandle(pPty->hPtyReference); pPty->hPtyReference = nullptr; } + if (_HandleIsValid(pPty->hConPtyProcess)) + { + CloseHandle(pPty->hConPtyProcess); + pPty->hConPtyProcess = nullptr; + } } } From f3c2cfdaee1a3e4d46f64bd3c07c2553fc176bde Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 18 Feb 2025 09:56:32 +0100 Subject: [PATCH 008/117] Axivion: Take vertical position into account too Amends b265219e9b53f8c9a09cf4f5091be1618a1d17d8. Task-number: QTCREATORBUG-32506 Change-Id: I4901848476b991f03302721d3d826fa1dddb6ec2 Reviewed-by: David Schulz --- src/plugins/axivion/issueheaderview.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/axivion/issueheaderview.cpp b/src/plugins/axivion/issueheaderview.cpp index 0726188f0a5..893d181de22 100644 --- a/src/plugins/axivion/issueheaderview.cpp +++ b/src/plugins/axivion/issueheaderview.cpp @@ -48,7 +48,8 @@ static QPoint globalPosOnScreen(const QPoint &orig, const QSize &size) qscreen = QGuiApplication::primaryScreen(); const QRect screen = qscreen->availableGeometry(); - return QPoint(std::max(screen.x(), orig.x() - size.width()), orig.y() - size.height()); + return QPoint(std::max(screen.x(), orig.x() - size.width()), + std::max(screen.y(), orig.y() - size.height())); } class FilterPopupWidget : public QFrame From c3224d51588dbb467f8d155ebf9340fa537c13e7 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 14 Feb 2025 10:48:15 +0100 Subject: [PATCH 009/117] COIN: Bump to Qt 6.8.2 Change-Id: I15b82b353011614116a0004c2ffb4916d613c228 Reviewed-by: Eike Ziller --- .github/workflows/build_cmake.yml | 2 +- coin/instructions/common_environment.yaml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index 3d61517d7a7..6665ca55add 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -7,7 +7,7 @@ on: - 'doc/**' env: - QT_VERSION: 6.8.1 + QT_VERSION: 6.8.2 MACOS_DEPLOYMENT_TARGET: 11.0 CLANG_VERSION: 19.1.6 ELFUTILS_VERSION: 0.175 diff --git a/coin/instructions/common_environment.yaml b/coin/instructions/common_environment.yaml index 74f0ab2e1f9..deceddb7a4a 100644 --- a/coin/instructions/common_environment.yaml +++ b/coin/instructions/common_environment.yaml @@ -7,7 +7,7 @@ instructions: instructions: - type: EnvironmentVariable variableName: QTC_QT_BASE_URL - variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/qt/6.8.0/release_content/" + variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/qt/6.8.2/release_content/" - type: EnvironmentVariable variableName: MACOSX_DEPLOYMENT_TARGET variableValue: 12.0 @@ -88,7 +88,7 @@ instructions: instructions: - type: EnvironmentVariable variableName: QTC_QT_POSTFIX - variableValue: "-Linux-RHEL_8_8-GCC-Linux-RHEL_8_8-X86_64.7z" + variableValue: "-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z" - type: EnvironmentVariable variableName: QTC_ICU_URL variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/development_releases/prebuilt/icu/prebuilt/73.2/icu-linux-g++-Rhel8.6-x64.7z" @@ -141,7 +141,7 @@ instructions: instructions: - type: EnvironmentVariable variableName: QTC_QT_POSTFIX - variableValue: "-Linux-Debian_11_6-GCC-Linux-Debian_11_6-AARCH64.7z" + variableValue: "-Linux-Ubuntu_24_04-GCC-Linux-Ubuntu_24_04-AARCH64.7z" - type: EnvironmentVariable variableName: QTC_SDKTOOL_QT_EXT variableValue: ".tar.xz" From d3c1fe6b6dc9bad1a734dd941c5e5202f09b3006 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 18 Feb 2025 13:33:32 +0100 Subject: [PATCH 010/117] Skip Welcome mode when loading session or file at startup Fixes: QTCREATORBUG-32321 Change-Id: I469437ab4b5dea917cdaff2341264f5eebf675e8 Reviewed-by: Christian Kandeler Reviewed-by: hjk --- src/plugins/coreplugin/session.cpp | 6 ++++++ src/plugins/coreplugin/session.h | 2 ++ src/plugins/welcome/welcomeplugin.cpp | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/session.cpp b/src/plugins/coreplugin/session.cpp index a174ddeec52..c995c80ec28 100644 --- a/src/plugins/coreplugin/session.cpp +++ b/src/plugins/coreplugin/session.cpp @@ -409,6 +409,12 @@ static QString determineSessionToRestoreAtStartup() return {}; } +bool SessionManager::loadsSessionOrFileAtStartup() +{ + // "left-over arguments" usually mean a session or files + return !PluginManager::arguments().isEmpty() || !determineSessionToRestoreAtStartup().isEmpty(); +} + void SessionManagerPrivate::restoreStartupSession() { NANOTRACE_SCOPE("Core", "SessionManagerPrivate::restoreStartupSession"); diff --git a/src/plugins/coreplugin/session.h b/src/plugins/coreplugin/session.h index 6c0bef6d954..71769125d76 100644 --- a/src/plugins/coreplugin/session.h +++ b/src/plugins/coreplugin/session.h @@ -28,6 +28,8 @@ public: static SessionManager *instance(); + static bool loadsSessionOrFileAtStartup(); + // higher level session management static QString activeSession(); static QString lastSession(); diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index f8f80d1e0a4..59dcf453435 100644 --- a/src/plugins/welcome/welcomeplugin.cpp +++ b/src/plugins/welcome/welcomeplugin.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -360,7 +361,8 @@ public: void extensionsInitialized() { m_modeWidget->initPlugins(); - ModeManager::activateMode(id()); + if (!SessionManager::loadsSessionOrFileAtStartup()) + ModeManager::activateMode(id()); } private: From 1ca2ecdb3c812ece0cb0f50de21f8ed3a8f7e438 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 14 Feb 2025 12:49:35 +0100 Subject: [PATCH 011/117] TextEditor: Fix tab detection for short+simpler files It was only detecting the usage of tabs if there were at least 3 *different* indentations with tabs. So a file that had all lines starting with tab wasn't detected to have tab indentation. In the case that we checked the whole file, it makes sense to assume that any indentation that we find should be considered for the setting for the whole file. If we only took a sample of the whole file, we do not want to make a guess for the whole file from only one or two indented lines. Amends 08a66b778064ece5f01ee3323d8a5b5171b02c09 Change-Id: I615a35c7ad4e7e9ab3537eb76aad544603b47c4c Reviewed-by: David Schulz --- src/plugins/texteditor/tabsettings.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/tabsettings.cpp b/src/plugins/texteditor/tabsettings.cpp index debc9e199ac..ea982bad9ef 100644 --- a/src/plugins/texteditor/tabsettings.cpp +++ b/src/plugins/texteditor/tabsettings.cpp @@ -91,10 +91,13 @@ TabSettings TabSettings::autoDetect(const QTextDocument *document) const }; const int blockCount = document->blockCount(); + bool useDefault = true; if (blockCount < 200) { // check the indentation of all blocks if the document is shorter than 200 lines for (QTextBlock block = document->firstBlock(); block.isValid(); block = block.next()) checkText(block); + // We checked all, so if we find any indented line, it makes sense to use it: + useDefault = totalIndentations == 0; } else { // scanning the first and last 25 lines specifically since those most probably contain // different indentations @@ -115,9 +118,12 @@ TabSettings TabSettings::autoDetect(const QTextDocument *document) const const int blockNummer = gen.bounded(startEndDelta + 1, blockCount - startEndDelta - 2); checkText(document->findBlockByNumber(blockNummer)); } + // Don't determine indentation for the whole file from few actually indented lines that we + // managed to find: + useDefault = totalIndentations < 3; } - if (indentCount.size() < 3) + if (useDefault) return *this; // find the most common indent From 27aa01d2517aacb834f641a555baa2ecff47db70 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 14 Feb 2025 11:35:41 +0100 Subject: [PATCH 012/117] QNX: Fix debugging Before the amended change, when running QNX debugger, d->useDebugServer was false (DebuggerRunTool::setUseDebugServer() wasn't called in this case), so we called directly continueAfterDebugServerStart() from inside startDebugServerIfNeededAndContinueStartup(). After the amended change, usedDebugChannel() returns true, thus we are skipping direct execution of continueAfterDebugServerStart(), and we are starting a process that never ends instead. The fix is to introduce DebuggerRunParameters::m_skipDebugServer field, defaulting to false, and to set it to true in case of qnx debugging. Amends 1ebd3c1750a9044f753eaff5e343543c1983910f Fixes: QTCREATORBUG-32478 Change-Id: I06c377ec6762371ab16582ae0fcdef6cacff1f83 Reviewed-by: hjk --- src/plugins/debugger/debuggerengine.h | 4 ++++ src/plugins/debugger/debuggerruncontrol.cpp | 2 +- src/plugins/qnx/qnxdebugsupport.cpp | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index c7732607426..daa5dd278f6 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -268,6 +268,9 @@ public: void setServerEssential(bool on) { m_serverEssential = on; } bool serverEssential() const { return m_serverEssential; } + void setSkipDebugServer(bool on) { m_skipDebugServer = on; } + bool skipDebugServer() const { return m_skipDebugServer; } + void setAddQmlServerInferiorCmdArgIfNeeded(bool on) { m_addQmlServerInferiorCmdArgIfNeeded = on; } bool isAddQmlServerInferiorCmdArgIfNeeded() const { return m_addQmlServerInferiorCmdArgIfNeeded; } @@ -367,6 +370,7 @@ private: Utils::ProcessHandle m_serverAttachPid; bool m_serverUseMulti = true; bool m_serverEssential = true; + bool m_skipDebugServer = false; bool m_addQmlServerInferiorCmdArgIfNeeded = false; }; diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index c5a931d5d54..5fb02fbfae5 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -562,7 +562,7 @@ void DebuggerRunTool::showMessage(const QString &msg, int channel, int timeout) void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() { - if (!runControl()->usesDebugChannel()) { + if (!runControl()->usesDebugChannel() || m_runParameters.skipDebugServer()) { continueAfterDebugServerStart(); return; } diff --git a/src/plugins/qnx/qnxdebugsupport.cpp b/src/plugins/qnx/qnxdebugsupport.cpp index 6a90fef38c8..f61fb097776 100644 --- a/src/plugins/qnx/qnxdebugsupport.cpp +++ b/src/plugins/qnx/qnxdebugsupport.cpp @@ -208,6 +208,7 @@ public: rp.setCloseMode(KillAtClose); rp.setUseCtrlCStub(true); rp.setSolibSearchPath(FileUtils::toFilePathList(searchPaths(k))); + rp.setSkipDebugServer(true); if (auto qtVersion = dynamic_cast(QtSupport::QtKitAspect::qtVersion(k))) { rp.setSysRoot(qtVersion->qnxTarget()); rp.modifyDebuggerEnvironment(qtVersion->environment()); From 7d9ea2a9d5da2efce49bd066057a71973dedb23f Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Wed, 19 Feb 2025 10:46:01 +0100 Subject: [PATCH 013/117] CMakePM: Only watch for CMake index json file reply chages Previously the whole directory was watched, and the directory can have lots of json files that would change. And since we are only interested in the index file, make sure to just watch for the index file changes. Change-Id: Ifda794dbd0c4012a1551dfbe8ecaa4f13e16259a Reviewed-by: Eike Ziller Reviewed-by: David Schulz --- .../cmakeprojectmanager/fileapireader.cpp | 28 ++++++++++--------- .../cmakeprojectmanager/fileapireader.h | 3 +- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/fileapireader.cpp b/src/plugins/cmakeprojectmanager/fileapireader.cpp index 53239b40d68..df542f13dfc 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.cpp +++ b/src/plugins/cmakeprojectmanager/fileapireader.cpp @@ -40,9 +40,9 @@ FileApiReader::FileApiReader() : m_lastReplyTimestamp() { QObject::connect(&m_watcher, - &FileSystemWatcher::directoryChanged, + &FileSystemWatcher::fileChanged, this, - &FileApiReader::handleReplyDirectoryChange); + &FileApiReader::handleReplyIndexFileChange); } FileApiReader::~FileApiReader() @@ -60,11 +60,7 @@ void FileApiReader::setParameters(const BuildDirParameters &p) m_parameters = p; qCDebug(cmakeFileApiMode) << "Work directory:" << m_parameters.buildDirectory.toUserOutput(); - FileApiParser::setupCMakeFileApi(m_parameters.buildDirectory); - - const FilePath replyDirectory = FileApiParser::cmakeReplyDirectory(m_parameters.buildDirectory); - if (!m_watcher.watchesDirectory(replyDirectory)) - m_watcher.addDirectory(replyDirectory.path(), FileSystemWatcher::WatchAllChanges); + setupCMakeFileApi(); resetData(); } @@ -351,6 +347,15 @@ void FileApiReader::writeConfigurationIntoBuildDirectory(const QStringList &conf QTC_ASSERT_EXPECTED(settingsFile.writeFileContents(contents), return); } +void FileApiReader::setupCMakeFileApi() +{ + FileApiParser::setupCMakeFileApi(m_parameters.buildDirectory); + + const FilePath replyIndexfile = FileApiParser::scanForCMakeReplyFile(m_parameters.buildDirectory); + if (!replyIndexfile.isEmpty() && !m_watcher.watchesFile(replyIndexfile)) + m_watcher.addFile(replyIndexfile.path(), FileSystemWatcher::WatchAllChanges); +} + QString FileApiReader::cmakeGenerator() const { return m_cmakeGenerator; @@ -403,16 +408,13 @@ void FileApiReader::cmakeFinishedState(int exitCode) if (m_lastCMakeExitCode != 0) makeBackupConfiguration(false); - FileApiParser::setupCMakeFileApi(m_parameters.buildDirectory); - - m_watcher.addDirectory(FileApiParser::cmakeReplyDirectory(m_parameters.buildDirectory).path(), - FileSystemWatcher::WatchAllChanges); + setupCMakeFileApi(); endState(FileApiParser::scanForCMakeReplyFile(m_parameters.buildDirectory), m_lastCMakeExitCode != 0); } -void FileApiReader::handleReplyDirectoryChange(const QString &directory) +void FileApiReader::handleReplyIndexFileChange(const QString &indexFile) { if (m_isParsing) return; // This has been triggered by ourselves, ignore. @@ -422,7 +424,7 @@ void FileApiReader::handleReplyDirectoryChange(const QString &directory) if (dir.isEmpty()) return; // CMake started to fill the result dir, but has not written a result file yet QTC_CHECK(dir.isLocal()); - QTC_ASSERT(dir.path() == directory, return); + QTC_ASSERT(dir == FilePath::fromString(indexFile).parentDir(), return); if (m_lastReplyTimestamp.isValid() && reply.lastModified() > m_lastReplyTimestamp) { m_lastReplyTimestamp = reply.lastModified(); diff --git a/src/plugins/cmakeprojectmanager/fileapireader.h b/src/plugins/cmakeprojectmanager/fileapireader.h index de56ad900d8..56908313a5f 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.h +++ b/src/plugins/cmakeprojectmanager/fileapireader.h @@ -78,10 +78,11 @@ private: void startCMakeState(const QStringList &configurationArguments); void cmakeFinishedState(int exitCode); - void handleReplyDirectoryChange(const QString &directory); + void handleReplyIndexFileChange(const QString &indexFile); void makeBackupConfiguration(bool store); void writeConfigurationIntoBuildDirectory(const QStringList &configuration); + void setupCMakeFileApi(); std::unique_ptr m_cmakeProcess; From 5d3b507441cbfdbc41b1b0c11a78c6273f4beaf4 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 17 Feb 2025 17:22:01 +0100 Subject: [PATCH 014/117] CMakePM: Fix build steps setup for multi-config CMake Presets If "configuration" is set for a build preset, make sure to enable it for the corresponding CMake build configuration. Fixes: QTCREATORBUG-31554 Change-Id: I320b03a8e015e4208f04e54bf7fa73757050c12b Reviewed-by: Marcus Tillmanns --- .../cmakeprojectmanager/cmakebuildconfiguration.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 7ab76749aa0..20b87c1f8a1 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -2007,12 +2007,14 @@ void CMakeBuildConfiguration::setBuildPresetToBuildSteps(const ProjectExplorer:: cbs->setToolArguments(nativeToolOptions.split(" ")); } - if (buildPresets[i].configuration) + if (buildPresets[i].configuration) { cbs->setConfiguration(*buildPresets[i].configuration); - - // Leave only the first build step enabled - if (i > 0) - cbs->setStepEnabled(false); + cbs->setStepEnabled(buildTypeAspect() == buildPresets[i].configuration); + } else { + // Leave only the first build step enabled + if (i > 0) + cbs->setStepEnabled(false); + } } } From 366d06b17e3b1def05c77937030c398ff5d97745 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 19 Feb 2025 13:09:15 +0100 Subject: [PATCH 015/117] Application icon: Fix qtcreator.ico It had faulty image masks in DIB-encoded images. Fixes: QTCREATORBUG-32511 Change-Id: Ic4e5597700e23874d8a21392eda3b9f370098c05 Reviewed-by: Eike Ziller --- src/app/qtcreator.ico | Bin 36849 -> 154559 bytes .../qml/testfiles_quick2/images/qtcreator.ico | Bin 36849 -> 154559 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/app/qtcreator.ico b/src/app/qtcreator.ico index 1a4a16d9d86503098f98699afaddae1ce619747f..890e4dba4a298360626eef28d5de164694d2d4b9 100644 GIT binary patch literal 154559 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 sTP3z2=+MoI7CTRVjr>mdKI;Vst0D=peApigX delta 21762 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 diff --git a/tests/manual/qml/testfiles_quick2/images/qtcreator.ico b/tests/manual/qml/testfiles_quick2/images/qtcreator.ico index c3ef8ac9c3f6ca0de619e3e254be162e2775f6c9..890e4dba4a298360626eef28d5de164694d2d4b9 100644 GIT binary patch literal 154559 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 sTP3z2=+MoI7CTRVjr>mdKI;Vst0D=peApigX delta 21762 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 From d132cecc50b3147c15c506e1e9962baa2d5e1212 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 19 Feb 2025 12:39:06 +0100 Subject: [PATCH 016/117] Doc: Expand on the documentation for indentation auto detection Describe what auto detection does, and how to fix the setting for an open document. Change-Id: Ic55f15094e6f25795e3428200eb92f43f07b1d6a Reviewed-by: Leena Miettinen --- .../src/editors/creator-code-indentation.qdoc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/qtcreator/src/editors/creator-code-indentation.qdoc b/doc/qtcreator/src/editors/creator-code-indentation.qdoc index 7438cffeb45..6e29cc1fb7f 100644 --- a/doc/qtcreator/src/editors/creator-code-indentation.qdoc +++ b/doc/qtcreator/src/editors/creator-code-indentation.qdoc @@ -20,6 +20,10 @@ \section1 Don't detect indentation settings + When you open a document, the editor tries to automatically detect if it uses tabs or + spaces for indentation and the indentation width, by inspecting its contents. + If the automatic detection fails, the default setting is used. + To turn off the automatic detection of indentation settings, go to \preferences > \uicontrol {Text Editor} > \uicontrol Behavior and clear \uicontrol {Auto detect}. @@ -28,10 +32,14 @@ \section1 Fix indentation in an open file + To fix the indentation settings for the file currently open in the editor, select a + different setting with \uicontrol {Spaces} > \uicontrol {Document Settings} or + \uicontrol {Tabs} > \uicontrol {Document Settings} on the editor toolbar. + To fix the indentation in the file currently open in the editor: \list - \li On the editor toolbar, select \uicontrol {Spaces}, and then select + \li On the editor toolbar, select \uicontrol {Spaces} or \uicontrol {Tabs}, and then select \uicontrol {Auto-indent Selection} to automatically indent the selected text using the current settings. \li Go to \uicontrol Edit > \uicontrol Advanced, and select an From 1d7b13cbc4d4c3e83aded4d646beed99c9d8c472 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 19 Feb 2025 17:52:53 +0100 Subject: [PATCH 017/117] "2024" Themes: Make Debugger WatchItem items more readable Especially in the dark variant, Debugger_WatchItem_ValueChanged and Debugger_WatchItem_ValueInvalid were hard to read. Task-number: QTCREATORBUG-32485 Change-Id: I225198c2e1839199942a0f57b871642030c067f1 Reviewed-by: Orgad Shaneh --- share/qtcreator/themes/2024.tokenmapping | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/themes/2024.tokenmapping b/share/qtcreator/themes/2024.tokenmapping index 761883e2b05..738cd0e9a79 100644 --- a/share/qtcreator/themes/2024.tokenmapping +++ b/share/qtcreator/themes/2024.tokenmapping @@ -15,8 +15,8 @@ CodeModel_Info_TextMarkColor=Token_Notification_Neutral_Default CodeModel_Warning_TextMarkColor=Token_Notification_Alert_Default ComboBoxTextColor=Token_Text_Muted Debugger_Breakpoint_TextMarkColor=Token_Notification_Danger_Default -Debugger_WatchItem_ValueChanged=Token_Notification_Danger_Muted -Debugger_WatchItem_ValueInvalid=Token_Background_Subtle +Debugger_WatchItem_ValueChanged=Token_Notification_Danger_Default +Debugger_WatchItem_ValueInvalid=Token_Text_Muted Debugger_WatchItem_ValueNormal=Token_Text_Default DockWidgetResizeHandleColor=Token_Stroke_Subtle EditorPlaceholderColor=Token_Background_Muted From 44c70b0f232c305adedec6ea4d7f1b92a8baa622 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 19 Feb 2025 14:03:44 +0100 Subject: [PATCH 018/117] Terminal: Stop auto scrolling when user scrolls Fixes: QTCREATORBUG-32167 Change-Id: Ie652f6684f10bf444f84f2f8dd7fce0ace410d3e Reviewed-by: Cristian Adam --- src/libs/solutions/terminal/terminalview.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index fd4cf66a6d8..5223962e2ef 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -1015,8 +1015,10 @@ void TerminalView::applySizeChange() void TerminalView::updateScrollBars() { int scrollSize = d->m_surface->fullSize().height() - d->m_surface->liveSize().height(); + const bool shouldScroll = verticalScrollBar()->value() == verticalScrollBar()->maximum(); verticalScrollBar()->setRange(0, scrollSize); - verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + if (shouldScroll) + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); updateViewport(); } From ef2402368bf2a052ea7f5a63beefbef73aed7512 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 19 Feb 2025 14:17:47 +0100 Subject: [PATCH 019/117] QtSupport: Register MIME type for Qt Remote Objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Tika MIME database registers the glob "*.rep" for "application/vnd.businessobjects". Overwrite that with a new MIME type with higher priority. Fixes: QTCREATORBUG-32522 Change-Id: I3bd7a909c5c99931320b2b9f35da42b788814842 Reviewed-by: André Hartmann Reviewed-by: David Schulz --- src/plugins/qtsupport/QtSupport.json.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/qtsupport/QtSupport.json.in b/src/plugins/qtsupport/QtSupport.json.in index fb1571c3302..395c2a6e1d3 100644 --- a/src/plugins/qtsupport/QtSupport.json.in +++ b/src/plugins/qtsupport/QtSupport.json.in @@ -43,6 +43,11 @@ " ", " ", " ", + " ", + " Qt Remote Objects file", + " ", + " ", + " ", "" ] } From 36bcd0876b7a26cc0030966ad2cf8a523c58f395 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 19 Feb 2025 11:09:19 +0100 Subject: [PATCH 020/117] Debugger: Fix displaying break point path Use the internal representation of the file paths when calculating the relative path. Otherwise we end up in a weird full path prefixed with ../ on Windows. Change-Id: I967f2d0e96674cb7dfa56b94bc4f1b11a63487d6 Reviewed-by: David Schulz Reviewed-by: hjk --- src/plugins/debugger/breakhandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index dd161efd42d..a0f94e4f2ee 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1019,7 +1019,7 @@ static QString trimmedFileName(const FilePath &fullPath) const Project *project = ProjectTree::currentProject(); const FilePath projectDirectory = project ? project->projectDirectory() : FilePath(); if (projectDirectory.exists()) - return FilePath::calcRelativePath(fullPath.path(), projectDirectory.toUserOutput()); + return fullPath.relativePathFrom(projectDirectory).toUserOutput(); return fullPath.toUserOutput(); } From 012c6c8a8e1d3a6fad8b2ba5b3f384bf4e6300b4 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 17 Feb 2025 14:57:17 +0100 Subject: [PATCH 021/117] German translation: lupdate for 16.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: Ibd297c91e08786777712ceacc4721ebc2f602792 Reviewed-by: Christian Stenger --- share/qtcreator/translations/qtcreator_de.ts | 7881 +++++++++++++----- 1 file changed, 6007 insertions(+), 1874 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 5b248654b4b..4f4a7d1532b 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -73,26 +73,50 @@ - AddImageToResources + AbstractLightSection - File Name - Dateiname + Light + - Size - Größe + Color + Farbe - Add Resources - Ressourcen hinzufügen + Sets the color applied to models illuminated by this light. + - &Browse... - &Auswählen... + Ambient Color + - Target Directory - Zielverzeichnis + Sets the ambient color applied to materials before being lit by this light. + + + + Brightness + + + + Sets an overall multiplier for this light’s effects. + + + + Scope + Gültigkeitsbereich + + + Sets a Node in the scene to be the scope of this light. Only that node and it's children are affected by this light. + + + + Bake Mode + + + + Controls if the light is active in baked lighting, such as when generating lightmaps. + @@ -102,6 +126,133 @@ + + AddPropertyForm + + Integer + + + + Float + Schweben + + + Boolean + + + + Vector 2D + + + + Vector 3D + + + + Vector 4D + + + + Color + Farbe + + + Color channel + + + + Texture sampler + + + + Define (integer) + + + + Define (boolean) + + + + Add property + + + + Edit property + + + + Display Name + + + + Sets the display name of the property. + + + + Display name of the property has to be unique. + + + + Uniform Name + + + + Sets the uniform name of the property. + + + + Uniform name has to be unique. + + + + Description + Beschreibung + + + Sets the property description. + + + + Type + Typ + + + Sets the property type. + + + + Default Value + Standardwert + + + Sets the default value of the property. + + + + Min Value + + + + Sets the minimum value of the property. + + + + Max Value + + + + Sets the maximum value of the property. + + + + Cancel + Abbrechen + + + Apply + Anwenden + + AddSignalHandlerDialog @@ -188,13 +339,6 @@ - - AlignCamerasToViewAction - - Align Cameras to View - - - AlignDistributeSection @@ -310,13 +454,6 @@ - - AlignViewToCameraAction - - Align View to Camera - - - AmbientSoundSection @@ -950,24 +1087,6 @@ A positive value will increase reverb for higher frequencies and dampen lower fr - - BackgroundColorMenuActions - - Background Color Actions - - - - - BakeLights - - Bake Lights - - - - Bake lights for the current 3D scene. - - - BakeLightsProgressDialog @@ -1256,6 +1375,10 @@ It should be a relative path. Qt Design Studio Qt Design Studio + + Lite QML Designer + + Community Edition @@ -1269,6 +1392,84 @@ It should be a relative path. + + BufferInputSection + + Buffer Input + + + + Buffer + + + + Sets input buffer for a pass. + + + + Parameter + Parameter + + + Sets buffer input buffer name in the shader. + + + + + BufferSection + + Buffer + + + + Name + Name + + + Sets the buffer name. + + + + Format + Format + + + Sets the format of the buffer. + + + + Filter + Filter + + + Sets the texture filter for the buffer. + + + + Coordinate Operation + + + + Sets the texture coordinate operation for the buffer. + + + + Allocation Flags + + + + Sets the allocation flags for the buffer. + + + + Size Multiplier + + + + Sets the size multiplier for the buffer. + + + BusyIndicatorSpecifics @@ -1383,40 +1584,33 @@ It should be a relative path. - CameraActionsModel + CameraSection - Hide Camera View + Camera - Never show the camera view. + Frustum Culling - Show Selected Camera View + When this property is true, objects outside the camera frustum will be culled, meaning they will not be passed to the renderer. - Show the selected camera in the camera view. + LOD Bias - Always Show Camera View + This property changes the threshold for when the automatic level of detail meshes get used. - Show the last selected camera in the camera view. + Look-at Node - Camera view settings - - - - - CameraSpeedConfigAction - - Open camera speed configuration dialog + Sets the look-at node for the camera. @@ -1448,13 +1642,6 @@ It should be a relative path. - - CameraToggleAction - - Toggle Perspective/Orthographic Camera Mode - - - ChangeStyleWidgetAction @@ -1642,6 +1829,61 @@ It should be a relative path. Anwenden + + Coco + + Coco + + + + + CodeEditorFooter + + Live Update + + + + Close + Schließen + + + Apply + Anwenden + + + + CodeEditorHeader + + Columns + Spalten + + + Open Effect Composer Help. + + + + + CodeEditorTabs + + Fragment Shader + + + + Vertex Shader + + + + + CodeEditorUniformsView + + Insert into the editor cursor position. + + + + Copy uniform name to clipboard. + + + ColorAnimationSpecifics @@ -2020,6 +2262,22 @@ This can not be undone. Abbrechen + + ConfirmPropertyRemoveForm + + The property is in use in the shader code. +Are you sure you want to remove it? + + + + Cancel + Abbrechen + + + Remove + Entfernen + + ConnectionsDialog @@ -2406,18 +2664,10 @@ This can not be undone. <b>Content Library</b> is not supported in Qt5 projects. - - To use <b>Content Library</b>, first add the QtQuick3D module in the <b>Components</b> view. - - <b>Content Library</b> is disabled inside a non-visual component. - - There are no user assets in the <b>Content Library</b>. - - ContextMenu @@ -2497,6 +2747,392 @@ This can not be undone. + + CustomMaterialSection + + Custom Material + + + + Shading Mode + + + + Sets the material type. +Unshaded materials are not affected by the environment (for example, lights). + + + + Vertex Shader + + + + Sets the path to the vertex shader source file. + + + + Fragment Shader + + + + Sets the path to the fragment shader source file. + + + + Source Blend + + + + Sets the source blend factor. + + + + Destination Blend + + + + Sets the destination blend factor. + + + + Always Dirty + + + + Sets the material to refresh every time it is used by QtQuick3D. + + + + Line Width + + + + Sets the width of the lines when the geometry is using a primitive type of lines or line strips. + + + + + DSStore + + Can not locate design system module + + + + Can not read Design System qmldir + + + + Can not find component file. + + + + Can not create design system module directory %1. + + + + Can not write design system qmldir. %1 + + + + Can not write theme interface %1. +%2 + + + + Can not write collection %1. +%2 + + + + + DSThemeManager + + No themes objects in the collection. + + + + + DebugSettingsSection + + Debug Settings + + + + Enable Wireframe + + + + Meshes will be rendered as wireframes. + + + + Override Mode + + + + Changes how all materials are rendered to only reflect a particular aspect of the overall rendering process + + + + + DefaultMaterialSection + + Default Material + + + + Lighting + + + + Sets the lighting method. NoLighting is faster while FragmentLighting +calculates diffuse and specular lighting for each rendered pixel. + + + + Blend Mode + + + + Sets how the colors of the model blend with colors behind it. + + + + Enable Vertex Colors + + + + Sets the material to use vertex colors from the mesh. +Vertex colors are multiplied with any other color for the material. + + + + Point Size + + + + Sets the size of the points rendered when the geometry is using a primitive type of points. + + + + Line Width + + + + Sets the width of the lines rendered when the geometry is using a primitive type of lines or line strips. + + + + Diffuse + + + + Color + Farbe + + + Sets the base color. + + + + Map + + + + Sets a texture to apply to the material. + + + + Emissive + + + + Factor + + + + Sets the color of self-illumination. +The default value (0, 0, 0) means no self-illumination. + + + + R + + + + G + + + + B + + + + Sets a texture to define the intensity of the emissive color. + + + + Specular + + + + Tint + + + + Sets the color tint for the specular reflections. +Use white for no color effect. + + + + Amount + + + + Sets the strength of specularity (highlights and reflections). +The default value (0) disables specularity. + + + + Sets a texture to define the amount and the color of specularity. + + + + Model + Modell + + + Sets the functions to calculate specular highlights for lights in the scene. +Default is faster while KGGX is more physically accurate. + + + + Reflection Map + + + + Sets a texture to define specular highlights. + + + + Index of Refraction + + + + Sets the angles of reflections affected by the fresnel power. + + + + Fresnel Power + + + + Sets the strength of the fresnel power. The default value (0) means no fresnel power while a higher value +decreases head-on reflections (looking directly at the surface) while maintaining reflections seen at grazing angles. + + + + Specular Roughness + + + + Sets the size of the specular highlight generated from lights and the clarity of reflections in general. + + + + Roughness Map + + + + Sets a texture to define the specular roughness. + + + + Roughness Channel + + + + Sets the texture channel to read the roughness value from roughnessMap. + + + + Opacity + Deckkraft + + + Sets the opacity of just this material, separate from the model. + + + + Sets a texture to control the opacity differently for different parts. + + + + Channel + + + + Sets the texture channel to read the opacity value from the opacity map. + + + + Bump/Normal + + + + Bump Amount + + + + Sets the amount of simulated displacement for the bump map or normal map. + + + + Bump Map + + + + Sets a grayscale texture to simulate fine geometry displacement across the surface. + + + + Normal Map + + + + Sets a image to simulate fine geometry displacement across the surface. + + + + Translucency + + + + Falloff + + + + Sets the amount of falloff for the translucency based on the angle of the normals of the object to the light source. + + + + Diffuse Light Wrap + + + + Sets the amount of light wrap for the translucency map. +A value of 0 will not wrap the light at all, while a value of 1 will wrap the light all around the object. + + + + Sets a grayscale texture to control how much light can pass through the material from behind. + + + + Sets the texture channel to read the translucency value from translucencyMap. + + + DelayButtonSpecifics @@ -2535,25 +3171,6 @@ This can not be undone. Abbrechen - - DesignerActionManager - - Document Has Errors - - - - The document which contains the list model contains errors. So we cannot edit it. - - - - Document Cannot Be Written - - - - An error occurred during a write attemp. - - - Details @@ -2580,6 +3197,10 @@ This can not be undone. Use Qt Virtual Keyboard Qt Virtual Keyboard verwenden + + Enable Cmake Generation + + Target Qt Version: @@ -2796,9 +3417,33 @@ defined in <b>Step size</b>. - EditLightToggleAction + Edit3DCameraViewAction - Toggle Edit Light On/Off + Camera view mode + + + + Hide Camera View + + + + Never show the camera view. + + + + Show Selected Camera View + + + + Show the selected camera in the camera view. + + + + Always Show Camera View + + + + Show the last selected camera in the camera view. @@ -2821,83 +3466,6 @@ defined in <b>Step size</b>. - - EffectComposer::EffectComposerModel - - Animation - Animation - - - Running - Läuft - - - Set this property to animate the effect. - - - - Time - Zeit - - - This property allows explicit control of current animation time. - - - - Frame - Frame - - - This property allows explicit control of current animation frame. - - - - General - Allgemein - - - Extra Margin - - - - This property specifies how much of extra space is reserved for the effect outside the parent geometry. - - - - - EffectComposer::EffectComposerView - - Effect Composer [beta] - - - - - EffectComposer::EffectComposerWidget - - Effect Composer - Title of effect composer widget - - - - - EffectComposer::Uniform - - X - X - - - Y - Y - - - Z - - - - W - - - EffectComposerPreview @@ -2943,6 +3511,10 @@ defined in <b>Step size</b>. Untitled Unbenannt + + In advanced mode, you can manage effect properties and edit shader code for all effects. + + How to use Effect Composer: 1. Click "+ Add Effect" to add effect node @@ -2963,18 +3535,59 @@ defined in <b>Step size</b>. Enable/Disable Node + + A node with this name already exists. +Suffix was added to make the name unique. + + + + Edit effect node name + + + + Add Property + + + + Show Code + + EffectCompositionNodeUniform + + [Editing] + + Reset value + + This property is not used in the shader code of the effect. + + + + Additional actions disabled while editing existing property. + + + + Access additional property actions. + + + + Edit + + + + Remove + Entfernen + EffectNode - Existing effect has conflicting properties, this effect cannot be added. + An effect with same properties already exists, this effect cannot be added. @@ -2985,6 +3598,21 @@ defined in <b>Step size</b>. + + EffectSection + + Effect + + + + Passes + + + + Sets the render passes of the effect. + + + EffectsSection @@ -3000,7 +3628,11 @@ defined in <b>Step size</b>. - Adds visual effects on the component. + Removes all the visual effects from the component. + + + + Adds visual effects to the component. @@ -3220,6 +3852,21 @@ The foreground component should be transparent, and the background component sho Keyframe einfügen + + FileInstancingSection + + File Instancing + + + + Source + + + + Sets the location of an XML or binary file containing the instance data. + + + FileResourcesModel @@ -3227,13 +3874,6 @@ The foreground component should be transparent, and the background component sho Datei öffnen - - FitToViewAction - - Fit Selected Object to View - - - FlagsComboBox @@ -3457,6 +4097,109 @@ The foreground component should be transparent, and the background component sho + + FogSection + + Fog + + + + Enabled + Aktiviert + + + Controls whether fog is applied to the scene + + + + Color + Farbe + + + The color of the fog + + + + Density + + + + Controls the density of the fog + + + + Depth + + + + Controls if the fog appears in the distance + + + + Start Distance + + + + Starting distance from the camera + + + + End Distance + + + + Ending distance from the camera + + + + Intensity Curve + + + + Controls the intensity curve of depth fog + + + + Height + Höhe + + + Controls if height fog is enabled + + + + Least Intense Height + + + + Specifies the height where the fog is the least intense. + + + + Most Intense Height + + + + Specifies the height where the fog is the most intense. + + + + Controls the intensity curve of height fog + + + + Transmission + + + + Controls if the fog has a light transmission effect enabled + + + + Controls the intensity curve of the light transmission effect + + + FontExtrasSection @@ -3630,6 +4373,45 @@ The foreground component should be transparent, and the background component sho Zeichensatz + + FrustumCameraSection + + Frustum Camera + + + + Top + + + + Sets the top plane of the camera view frustum. + + + + Bottom + + + + Sets the bottom plane of the camera view frustum. + + + + Right + + + + Sets the right plane of the camera view frustum. + + + + Left + + + + Sets the left plane of the camera view frustum. + + + GeometrySection @@ -3640,6 +4422,10 @@ The foreground component should be transparent, and the background component sho This property is defined by an anchor or a layout. + + Adjust this property manually from the 2D view or by changing margins from Layout. + + Position Position @@ -4237,22 +5023,88 @@ a highlight component. - InvalidIdException + InstanceListEntrySection - Only alphanumeric characters and underscore allowed. -Ids must begin with a lowercase letter. - Es sind nur alphanumerische Zeichen und Unterstriche zulässig. -IDs müssen außerdem mit einem Kleinbuchstaben beginnen. + Instance List Entry + - Ids have to be unique. - IDs müssen eindeutig sein. + Color + Farbe - Invalid Id: %1 -%2 - Ungültige ID: %1 -%2 + Sets the color for the instance. + + + + Position + Position + + + Sets the position for the instance. + + + + Scale + Skalieren + + + Sets the scale for the instance. + + + + Rotation + Drehung + + + Sets the rotation for the instance. + + + + + InstanceListSection + + Instance List + + + + Instances + Instanzen + + + Sets the list of instance definitions. Modifying this list, or any of its elements, will cause the instance table to be updated. + + + + + InstancingSection + + Instancing + + + + Depth Sorting + + + + Enable depth sorting for instanced objects. + + + + Has Transparency + + + + Set this to true if the instancing table contains alpha values that should be used when rendering the model. + + + + Instance Count + + + + Sets a limit on the number of instances that can be rendered regardless of the number of instances in the instancing table. + @@ -4358,6 +5210,29 @@ IDs müssen außerdem mit einem Kleinbuchstaben beginnen. + + JointSection + + Joint + + + + Index + Index + + + Sets the index of this joint. + + + + Skeleton Root + + + + Sets the skeleton that contains this joint. + + + Label @@ -4578,6 +5453,77 @@ be rendered into the texture. Anker + + LightmapperSection + + Lightmapper + + + + Adaptive Bias + + + + Enables additional dynamic biasing based on the surface normal. + + + + Bias + + + + Raycasting bias to avoid self-intersection artifacts. + + + + Opacity Threshold + + + + Bounces against materials with opacity values below this threshold are ignored when calculating lighting via raytracing. + + + + Samples + Samples + + + The number of samples per lightmap texel. + + + + Indirect Lighting + + + + Enables the baking of indirect lighting. + + + + Bounces + + + + The maximum number of indirect light bounces per sample. + + + + Indirect Light Factor + + + + Multiplier for the indirect light amount. + + + + Indirect Workgroup Size + + + + The size of the workgroup used for indirect light computation. + + + ListViewSpecifics @@ -4709,6 +5655,45 @@ a highlight component. Aktuellem Element folgen + + Loader3DSection + + Loader3D + + + + Active + Aktiv + + + Sets if the Loader3D is currently active. + + + + Source + + + + Sets the URL of the QML component to instantiate. + + + + Source Component + + + + Sets the component to instantiate. + + + + Asynchronous + Asynchron + + + Sets whether the component will be instantiated asynchronously. + + + LoaderSpecifics @@ -4717,7 +5702,7 @@ a highlight component. Active - + Aktiv Whether the loader is currently active. @@ -4866,14 +5851,6 @@ a highlight component. Return to Design - - Run Project - - - - Live Preview - - Go Back Vorheriges @@ -4894,6 +5871,42 @@ a highlight component. Workspace + + You can share your project to Qt Design Viewer web service.<br><br>To be able to use the sharing service, you need to sign in with your Qt Account details. + + + + Sign in + + + + Upload succeeded. + + + + Upload failed. Please check your internet connection. + + + + Packing + + + + Packing failed. + + + + Uploading + + + + Manage shared projects + + + + Sign out + + Edit Annotations @@ -4902,14 +5915,6 @@ a highlight component. Share - - Share your project online. - - - - Sharing your project online is disabled in the Community Version. - - More Items @@ -4942,6 +5947,90 @@ a highlight component. Adds a Connection, Binding, or Custom Property to the components. + + Rename + Umbenennen + + + Delete + Löschen + + + Create collection + + + + load + + + + Create mode + + + + Create variable + + + + Color + Farbe + + + Number + + + + String + + + + Boolean + + + + Online + + + + Offline + + + + How to see a preview on Android device + + + + Scan the QR code below or click on the link to go to the Google Play store with your device and seek for Qt Viewer application. + + + + Install the Qt Viewer application on your phone. + + + + Open up this window again, if you already closed it, and click on "Add Run Target" button in this window. + + + + Run target IP + + + + Add Run Target + + + + Remove Run Target + + + + Columns + Spalten + + + Manage target devices to be used to display the project + + MainGridStack @@ -5219,6 +6308,38 @@ a highlight component. Typ + + MaterialSection + + Material + + + + Light Probe + + + + Sets a texture to use as image based lighting. +This overrides the scene's light probe. + + + + Culling Mode + + + + Sets which primitives to discard, if any. + + + + Depth Draw Mode + + + + Sets if and when depth rendering takes place. + + + MediaPlayerSection @@ -5255,60 +6376,188 @@ a highlight component. - ModelNodeOperations + ModelSection - Go to Implementation - Zu Implementierung gehen + Model + Modell - Invalid component. + Source - Cannot find an implementation. - Keine Implementierung gefunden. - - - Cannot Set Property %1 - Eigenschaft %1 kann nicht zugewiesen werden - - - The property %1 is bound to an expression. - Die Eigenschaft %1 ist an einen Ausdruck gebunden. - - - Overwrite Existing File? + Sets the location of the mesh file containing the geometry of this model. - File already exists. Overwrite? -"%1" + Geometry - Asset import data file "%1" is invalid. + Sets a custom geometry for the model - Unable to locate source scene "%1". + Materials - Opening asset import data file "%1" failed. + Edit material - Unable to resolve asset import path. + Casts Shadows - Import Update Failed + Enables the geometry of this model to be rendered to the shadow maps. - Failed to update import. -Error: -%1 + Receives Shadows + + + + Enables the geometry of this model to receive shadows. + + + + Casts Reflections + + + + Enables reflection probes to reflect this model. + + + + Receives Reflections + + + + Enables the geometry of this model to receive reflections from the nearest reflection probe. The model must be inside at least one reflection probe to start receiving reflections. + + + + Is Pickable + + + + Enables ray cast based picking for this model. + + + + Used in Baked Lighting + + + + This model is static and suitable to contribute to baked lighting. + + + + Depth Bias + + + + Sets the depth bias of the model. + + + + LOD Bias + + + + Sets the size a model needs to be when rendered before the automatic level of detail meshes are used + + + + Instancing + + + + Data Source + + + + If this property is set, the model will not be rendered normally. Instead, a number of instances of the model will be rendered, as defined by the instance table. + + + + Origin Node + + + + Sets the origin of the instance’s coordinate system. + + + + Animation + Animation + + + Skeleton + + + + Sets the skeleton for the model. + + + + Morph Targets + + + + Sets a list of MorphTargets used to render the provided geometry. + + + + Skin + + + + Sets the skin for the model. + + + + Lightmapping + + + + Resolution + + + + Sets the target resolution of the baked lightmap texture for the model. + + + + Lightmap + + + + Sets the baked lightmap data for the model. + + + + + MorphTargetSection + + Morph Target + + + + Weight + + + + Sets the weight of the current morph target. + + + + Attributes + Attribute + + + Sets the set of attributes of the current morph target. @@ -5431,24 +6680,6 @@ Error: Mouse Area - - MoveToolAction - - Activate Move Tool - - - - - NavigatorTreeModel - - Warning - Warnung - - - Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? - Das Verschieben der Komponente %1 an diese Stelle bewirkt das Löschen der Komponente %2. Möchten Sie den Vorgang fortsetzen? - - NewEffectDialog @@ -5637,9 +6868,48 @@ Error: - OrientationToggleAction + Object3DSection - Toggle Global/Local Orientation + Object + + + + + OrthographicCameraSection + + Orthographic Camera + + + + Clip Near + + + + Sets the near value of the camera view frustum. + + + + Clip Far + + + + Sets the far value of the camera view frustum. + + + + Horizontal Magnification + + + + Sets the horizontal magnification of the OrthographicCamera's frustum. + + + + Vertical Magnification + + + + Sets the vertical magnification of the OrthographicCamera's frustum. @@ -5809,38 +7079,34 @@ the total implicit size. - ParticleViewModeAction + PassSection - Toggle particle animation On/Off + Pass + Bestanden + + + Commands - - - ParticlesPlayAction - Play Particles + Sets the render commands of the pass. - - - ParticlesRestartAction - Restart Particles + Buffer - - - PathTool - Path Tool - Pfad-Werkzeug + Sets the output buffer for the pass. + - - - PathToolAction - Edit Path - Pfad bearbeiten + Shaders + + + + Sets the shaders for the pass. + @@ -5931,6 +7197,45 @@ a highlight component. Bereich + + PerspectiveCameraSection + + Perspective Camera + + + + Clip Near + + + + Sets the near value of the view frustum of the camera. + + + + Clip Far + + + + Sets the far value of the view frustum of the camera. + + + + Field of View + + + + Sets the field of view of the camera in degrees. + + + + FOV Orientation + + + + Sets if the field of view property reflects the vertical or the horizontal field of view. + + + PluginManager @@ -5938,6 +7243,37 @@ a highlight component. Nicht geladene Plugins (Fehlschlag beim Ladevorgang) + + PointLightSection + + Point Light + + + + Constant Fade + + + + Sets the constant attenuation of the light. + + + + Linear Fade + + + + Sets the linear attenuation of the light. + + + + Quadratic Fade + + + + Sets the quadratic attenuation of the light. + + + PopupLabel @@ -6023,6 +7359,419 @@ a highlight component. + + PreviewError + + Show Less + + + + We are not able to create a preview of this effect. + + + + <html><a href="#showmore">Show More</a></html> + + + + + PreviewImagesComboBox + + Add Custom Image + + + + Remove custom image. + + + + + PrincipledMaterialSection + + Principled Material + + + + Alpha Mode + + + + Sets the mode for how the alpha channel of base color is used. + + + + Alpha Cutoff + + + + Sets the cutoff value when using the Mask alphaMode. + + + + Blend Mode + + + + Sets how the colors of the model rendered blend with those behind it. + + + + Lighting + + + + Sets which lighting method is used when generating this material. + + + + Base Color + + + + Color + Farbe + + + Map + + + + Sets a texture used to set the base color of the material. + + + + Metalness + + + + Amount + + + + Sets the metalness of the the material. + + + + Sets a texture to be used to set the metalness amount for the different parts of the material. + + + + Channel + + + + Sets the texture channel used to read the metalness value from metalnessMap. + + + + Roughness + + + + Sets the size of the specular highlight generated from lights, and the clarity of reflections in general. + + + + Sets a texture to control the specular roughness of the material. + + + + Sets the texture channel used to read the roughness value from roughnessMap. + + + + Normal + Normal + + + Sets an RGB image used to simulate fine geometry displacement across the surface of the material. + + + + Strength + + + + Sets the amount of simulated displacement for the normalMap. + + + + Occlusion + + + + Sets the factor used to modify the values from the occlusionMap texture. + + + + Sets a texture used to determine how much indirect light the different areas of the material should receive. + + + + Sets the texture channel used to read the occlusion value from occlusionMap. + + + + Opacity + Deckkraft + + + Sets the opacity of just this material, separate from the model. + + + + Sets a texture used to control the opacity differently for different parts of the material. + + + + Sets the texture channel used to read the opacity value from opacityMap. + + + + Emissive Color + + + + Sets a texture to be used to set the emissive factor for different parts of the material. + + + + Factor + + + + Sets the color of self-illumination for this material. + + + + Height + Höhe + + + Sets the factor used to modify the values from the heightMap texture. + + + + Sets a texture used to determine the height the texture will be displaced when rendered through the use of Parallax Mapping. + + + + Sets the texture channel used to read the height value from heightMap. + + + + Min Map Samples + + + + Sets the minimum number of samples used for performing Parallex Occlusion Mapping using the heightMap. + + + + Max Map Samples + + + + Sets the maximum number of samples used for performing Parallex Occlusion Mapping using the heightMap. + + + + Clearcoat + + + + Sets the intensity of the clearcoat layer. + + + + Sets a texture used to determine the intensity of the clearcoat layer. + + + + Sets the texture channel used to read the intensity from clearcoatMap. + + + + Roughness Amount + + + + Sets the roughness of the clearcoat layer. + + + + Roughness Map + + + + Sets a texture used to determine the roughness of the clearcoat layer. + + + + Roughness Channel + + + + Sets the texture channel used to read the roughness from clearcoatRoughnessMap. + + + + Normal Map + + + + Sets a texture used as a normalMap for the clearcoat layer. + + + + Refraction + + + + Transmission Factor + + + + Sets the base percentage of light that is transmitted through the surface. + + + + Transmission Map + + + + Sets a texture that contains the transmission percentage of a the surface. + + + + Transmission Channel + + + + Sets the texture channel used to read the transmission percentage from transmissionMap. + + + + Index of Refraction + + + + Sets the index of refraction of the material. + + + + Thickness Factor + + + + Sets the thickness of the volume beneath the surface in model coordinate space. + + + + Thickness Map + + + + Sets a texture that contains the thickness of a the material volume. + + + + Thickness Channel + + + + Sets the texture channel used to read the thickness amount from thicknessMap. + + + + Attenuation Color + + + + Sets the color that white lights turn into due to absorption when reaching the attenuation distance. + + + + Attenuation Distance + + + + Sets the average distance in world space that light travels in the medium before interacting with a particle. + + + + Advanced + Erweitert + + + Vertex Colors + + + + Sets whether vertex colors are used to modulate the base color. + + + + Enabled + Aktiviert + + + Disabled + Deaktiviert + + + Point Size + + + + Sets the size of the points rendered, when the geometry is using a primitive type of points. + + + + Line Width + + + + Sets the width of the lines rendered, when the geometry is using a primitive type of lines or line strips. + + + + Overrides + + + + Specular Amount + + + + Override the strength of specularity (highlights and reflections). + + + + Specular Map + + + + An RGB Texture to override the amount and the color of specularity across the surface of the material. + + + + Reflection Map + + + + Sets a texture used for specular highlights on the material. + + + + Specular Tint + + + + Override how much of the base color contributes to the specular reflections. + + + ProgressBarSpecifics @@ -6125,21 +7874,21 @@ operation is in progress. - PropertyLabel + PropertyEditorPane - This property is not available in this configuration. + Current State + + + + The current state of the States View. - PuppetStarter + PropertyLabel - Puppet is starting... - Puppet wird gestartet... - - - You can now attach your debugger to the %1 puppet with process id: %2. - Sie können jetzt Ihren Debugger an die Puppet (%1) mit der Prozess-ID %2 anhängen. + This property is not available in this configuration. + @@ -6175,73 +7924,43 @@ operation is in progress. - QKeychain::Job + QKeychain::DeletePasswordJobPrivate - No error + Password entry not found - The specified item could not be found in the keychain + Could not decrypt data + + + + + QKeychain::ReadPasswordJobPrivate + + Password entry not found - User canceled the operation + Could not decrypt data + + + + + QKeychain::WritePasswordJobPrivate + + Credential size exceeds maximum size of %1 - User interaction is not allowed + Credential key exceeds maximum size of %1 - No keychain is available. You may need to restart your computer + Writing credentials failed: Win32 error code %1 - 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 + Encryption failed @@ -6261,137 +7980,19 @@ operation is in progress. @info - - <Filter> - Library search input hint text - <Filter> - - - Show Event List - - - - Assign Events to Actions - - Connect Signal to Event - - Connected Events - - - - Connected Signals - - - - Exposed Custom Properties - - - - ID cannot start with an uppercase character (%1). - - - - ID cannot start with a number (%1). - - - - ID cannot include whitespace (%1). - - - - %1 is a reserved QML keyword. - - - - %1 is a reserved Qml type. - - - - %1 is a reserved property keyword. - - - - ID includes invalid characters (%1). - - - - Empty document - - - - Start Nanotrace - - - - Shut Down Nanotrace - - UntitledProject File path suggestion for a new project. If you choose to translate it, make sure it is a valid path name without blanks and using only ascii chars. - - Failed to Add Texture - - - - Could not add %1 to project. - %1 konnte nicht zum Projekt hinzugefügt werden. - - - Effect file %1 not found in the project. - - - - Effect %1 is not complete. - - - - Ensure that you have saved it in the Effect Composer. -Do you want to edit this effect? - - Minimize Minimieren - - Unsupported bundle file - - - - The chosen bundle was created with an incompatible version of Qt Design Studio - - - - Component Exists - - - - A component with the same name '%1' already exists in the project, are you sure you want to overwrite it? - - - - Import Component - - - - Qt Design Studio Bundle Files (*.%1) - - - - Export Material - - - - Export Component - - QmlDesigner::AbstractEditorDialog @@ -6674,14 +8275,6 @@ Exporting assets: %2 Export finished. - - Error creating asset directory. %1 - - - - Error saving asset. %1 - - QmlDesigner::AssetExporterPlugin @@ -6702,17 +8295,6 @@ Exporting assets: %2 - - QmlDesigner::AssetsLibraryModel - - Failed to Delete File - - - - Could not delete "%1". - - - QmlDesigner::AssetsLibraryView @@ -6720,42 +8302,6 @@ Exporting assets: %2 Assets - - QmlDesigner::AssetsLibraryWidget - - Assets Library - Title of assets library widget - - - - Failed to Delete Effect Resources - - - - Could not delete "%1". - - - - Failed to Add Files - Dateien konnten nicht hinzugefügt werden - - - Could not add %1 to project. - %1 konnte nicht zum Projekt hinzugefügt werden. - - - All Files (%1) - Alle Dateien (%1) - - - Add Assets - Assets hinzufügen - - - Could not add %1 to project. Unsupported file format. - - - QmlDesigner::AssignEventDialog @@ -6768,13 +8314,6 @@ Exporting assets: %2 - - QmlDesigner::BackgroundAction - - Set the color of the canvas. - Die Farbe der Leinwand einstellen - - QmlDesigner::BakeLights @@ -6842,12 +8381,12 @@ Exporting assets: %2 QmlDesigner::CapturingConnectionManager - QML Emulation Layer (QML Puppet - %1) Crashed + QML Puppet (%1) Crashed - You are recording a puppet stream and the emulations layer crashed. It is recommended to reopen the Qt Quick Designer and start again. - Sie nehmen einen Ausgabestrom von Puppet auf, welche abgestürzt ist. Es wird empfohlen, Qt Quick Designer neu zu öffnen und von vorn zu beginnen. + The QML Puppet crashed while recording a stream. Please reopen %1 and try it again. + @@ -7142,26 +8681,89 @@ Exporting assets: %2 - QmlDesigner::DocumentMessage + QmlDesigner::DesignSystemView - Error parsing - Fehler beim Parsen + Design System + + + + + QmlDesigner::DesignSystemWidget + + Design System + Title of Editor widget + - Internal error - Interner Fehler + Cannot Create QtQuick View + QtQuick View konnte nicht erzeugt werden - line %1 - - Zeile %1 - + StatesEditorWidget: %1 cannot be created.%2 + + + + + QmlDesigner::DeviceShare::DeviceManagerModel + + Active + Aktiv - column %1 - - Spalte %1 - + Status + Status + + + Alias + Alias + + + IPv4 Address + + + + OS + + + + OS Version + + + + Architecture + + + + Screen Size + + + + App Version + + + + Self ID + + + + Device ID + + + + + QmlDesigner::DeviceShare::DeviceManagerWidget + + Device Manager + Title of device manager widget + + + + Cannot Create QtQuick View + QtQuick View konnte nicht erzeugt werden + + + StatesEditorWidget: %1 cannot be created.%2 + @@ -7497,189 +9099,6 @@ Exporting assets: %2 - - QmlDesigner::FormEditorAnnotationIcon - - Annotation - Annotation - - - Edit Annotation - - - - Remove Annotation - - - - By: - - - - Edited: - - - - Delete this annotation? - - - - - QmlDesigner::FormEditorView - - 2D - 2D - - - 2D view - - - - %1 is not supported as the root element by the 2D view. - - - - - QmlDesigner::FormEditorWidget - - Override Width - Breite überschreiben - - - Override Height - Höhe überschreiben - - - No Snapping - - - - Snap with Anchors - - - - Snap without Anchors - - - - Show Bounds - - - - Override width of root component. - - - - Override height of root component. - - - - Zoom In - Vergrößern - - - Zoom Out - Verkleinern - - - Zoom screen to fit all content. - - - - Ctrl+Alt+0 - - - - Zoom screen to fit current selection. - - - - Ctrl+Alt+i - - - - Reload View - - - - Export Current QML File as Image - Aktuelle QML-Datei als Bild exportieren - - - PNG (*.png);;JPG (*.jpg) - PNG (*.png);;JPG (*.jpg) - - - - QmlDesigner::GenerateResource - - Save Project as QRC File - - - - QML Resource File (*.qrc) - - - - Successfully generated QRC resource file - %1 - - - - Generating deployable package. Please wait... - - - - Failed to generate deployable package! - - - - Error - Fehler - - - Failed to generate deployable package! - -Please check the output pane for more information. - - - - Successfully generated deployable package - - - - Unable to generate resource file: %1 - - - - A timeout occurred running "%1". - Zeitüberschreitung bei Ausführung von "%1". - - - "%1" crashed. - "%1" ist abgestürzt. - - - "%1" failed (exit code %2). - "%1" schlug fehl (Rückgabewert %2). - - - Generate QRC Resource File... - - - - Generate Deployable Package... - - - - Success - - - - Save Project as Resource - - - QmlDesigner::GlobalAnnotationDialog @@ -7792,7 +9211,7 @@ Please check the output pane for more information. Accept - + Annehmen Object Type: %1 @@ -7958,12 +9377,12 @@ Please check the output pane for more information. QmlDesigner::InteractiveConnectionManager - Cannot Connect to QML Emulation Layer (QML Puppet) - Konnte keine Verbindung zur QML-Emulationsschicht (QML Puppet) herstellen + Cannot Connect to QML Puppet + - The executable of the QML emulation layer (QML Puppet) may not be responding. Switching to another kit might help. - Die ausführbare Datei der QML-Emulationsschicht (QML-Puppet) reagiert nicht. Versuchen Sie ein anderes Kit zu verwenden. + The executable of the QML Puppet may not be responding. Switching to another kit might help. + @@ -8027,52 +9446,6 @@ Please check the output pane for more information. - - QmlDesigner::Internal::MetaInfoPrivate - - Invalid meta info - Ungültige Metainformation - - - - QmlDesigner::Internal::MetaInfoReader - - 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 - - - - Invalid or duplicate library entry %1 - - - QmlDesigner::Internal::ModelPrivate @@ -8082,256 +9455,10 @@ Please check the output pane for more information. QmlDesigner::Internal::SettingsPage - - Snapping - Raster - - - Qt Quick Designer - Qt Quick-Designer - - - Restart Required - Neustart erforderlich - - - The made changes will take effect after a restart of the QML Emulation layer or %1. - Die Änderungen werden nach einem Neustart der QML-Emulationsschicht oder von %1 wirksam. - - - Canvas - Leinwand - - - Warnings - Warnungen - - - Debugging - Debuggen - - - Show the debugging view - Debugansicht anzeigen - - - Enable the debugging view - Debugansicht aktivieren - - - Subcomponents - Subkomponenten - - - Always save when leaving subcomponent in bread crumb - Immer speichern, wenn eine Subkomponente per Breadcrumb Navigation verlassen wird - - - QML Emulation Layer - QML-Emulationsschicht - - - Styling - Stil - - - Controls style: - Controls Stil: - - - Default style - Vorgabestil - - - Reset Style - Stil zurücksetzen - - - Use fallback QML emulation layer - Fallback QML-Emulationsschicht verwenden - - - Path: - Pfad: - Reset Path Pfad zurücksetzen - - Top level build path: - Oberstes Build-Verzeichnis: - - - Also warns in the code editor about QML features that are not properly supported by the Qt Quick Designer. - Zeigt auch im Code-Editor eine Warnung bei QML-Funktionen an, die vom Qt Quick Designer nicht vollständig unterstützt werden. - - - Internationalization - Internationalisierung - - - qsTr() - qsTr() - - - If you select this radio button, Qt Design Studio always uses the QML emulation layer (QML Puppet) located at the following path. - - - - Warns about QML features that are not properly supported by the Qt Design Studio. - - - - qsTrId() - qsTrId() - - - Always auto-format ui.qml files in Design mode - - - - Enable DockWidget content minimum size - - - - Show property editor warnings - Zeige Warnungen des Eigenschafteneditors - - - Show warn exceptions - Zeige Warnungsausnahmen - - - Forward QML emulation layer output: - Ausgabe der QML-Emulationsschicht weiterleiten: - - - Debug QML emulation layer: - Debug-QML-Emulationsschicht: - - - Qt Quick Designer will propose to open .ui.qml files instead of opening a .qml file. - Qt Quick Designer wird vorschlagen, .ui.qml-Dateien statt einer .qml-Datei zu öffnen. - - - Warn about using .qml files instead of .ui.qml files - Bei der Verwendung von .qml-Dateien statt .ui.qml-Dateien warnen - - - Width: - Breite: - - - Height: - Höhe: - - - Controls 2 style: - Controls-2-Stil: - - - Use QML emulation layer that is built with the selected Qt - Mit dem gewählten Qt erstellte QML-Emulationsschicht verwenden - - - qsTranslate() - qsTranslate() - - - Path to the QML emulation layer executable (qmlpuppet). - Pfad zur ausführbaren Datei der QML-Emulationsschicht (qmlpuppet). - - - Resets the path to the built-in QML emulation layer. - Setzt den Pfad zurück auf die integrierte QML-Emulationsschicht. - - - Features - Zusatzfunktionen - - - Enable Timeline editor - Timeline-Editor aktivieren - - - Always open ui.qml files in Design mode - ui.qml-Dateien immer im Design-Modus öffnen - - - Parent component padding: - - - - Sibling component spacing: - - - - Enable smooth rendering in the 2D view. - - - - Smooth rendering: - - - - Root Component Init Size - - - - Warn about unsupported features of .ui.qml files in code editor - - - - Warn about unsupported features in .ui.qml files - - - - Ask for confirmation before deleting asset - - - - - 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 - - Failed to create item of type %1 - Es konnte kein Element des Typs %1 erzeugt werden - QmlDesigner::ItemLibraryImport @@ -8482,13 +9609,6 @@ Please check the output pane for more information. - - QmlDesigner::Model - - Invalid Id - Ungültige ID - - QmlDesigner::NavigatorSearchWidget @@ -8498,10 +9618,6 @@ Please check the output pane for more information. QmlDesigner::NavigatorTreeModel - - Unknown component: %1 - - Toggles whether this component is exported as an alias property of the root component. @@ -8517,17 +9633,6 @@ Locked components cannot be modified or selected. - - QmlDesigner::NavigatorTreeView - - Invalid Id - Ungültige ID - - - %1 already exists. - %1 existiert bereits. - - QmlDesigner::NavigatorView @@ -8571,21 +9676,6 @@ Locked components cannot be modified or selected. - - QmlDesigner::NodeInstanceView - - Qt Quick emulation layer crashed. - Die Qt-Quick-Emulationsschicht ist abgestürzt. - - - Source item: %1 - - - - Failed to generate QSB file for: %1 - - - QmlDesigner::NodeListModel @@ -8706,21 +9796,9 @@ Locked components cannot be modified or selected. Property Editor view - - Invalid QML source - - QmlDesigner::QmlDesignerPlugin - - Cannot Open Design Mode - Design-Modus kann nicht geöffnet werden - - - The QML file is not currently opened in a QML Editor. - Die QML-Datei ist in keinem QML-Editor geöffnet. - Qml Designer Lite @@ -8733,10 +9811,6 @@ Locked components cannot be modified or selected. Give Feedback... - - Enjoying the %1? - - QmlDesigner::QmlModelNodeProxy @@ -8941,13 +10015,6 @@ Locked components cannot be modified or selected. Andere schließen - - QmlDesigner::SignalList - - Signal List for %1 - - - QmlDesigner::SignalListDelegate @@ -9158,13 +10225,6 @@ Locked components cannot be modified or selected. - - QmlDesigner::SubComponentManager - - My 3D Components - - - QmlDesigner::SwitchLanguageComboboxAction @@ -9187,25 +10247,6 @@ Locked components cannot be modified or selected. - - QmlDesigner::TextToModelMerger - - No import statements found. - - - - Qt Quick 6 is not supported with a Qt 5 kit. - - - - The Design Mode requires a valid Qt kit. - - - - No import for Qt Quick found. - Es konnte kein Import für Qt Quick gefunden werden. - - QmlDesigner::TextureEditorView @@ -9447,10 +10488,6 @@ Locked components cannot be modified or selected. QmlDesigner::TimelineSettingsModel - - None - Keine - State State @@ -9467,10 +10504,6 @@ Locked components cannot be modified or selected. Fixed Frame Fester Frame - - Base State - Grundzustand - Error Fehler @@ -9665,6 +10698,10 @@ Locked components cannot be modified or selected. %1 already exists. %1 existiert bereits. + + Default + Vorgabe + QmlDesigner::TransitionTool @@ -10324,7 +11361,7 @@ Locked components cannot be modified or selected. Workspace Manager - + Workspace-Manager Restore last workspace on startup @@ -11085,10 +12122,6 @@ manuellen Herunterladen im Browser des System zu öffnen. Physical device Physisches Gerät - - None - Kein - Erase the Android AVD "%1"? This cannot be undone. @@ -11115,6 +12148,11 @@ Dies kann nicht rückgängig gemacht werden. Connecting to the device IP "%1" failed. Die Verbindung zur Geräte-IP "%1" ist fehlgeschlagen. + + None + No skin + + An error occurred while removing the Android AVD "%1" using avdmanager tool. Beim Entfernen des Android-AVD "%1" mit dem avdmanager-Werkzeug ist ein Fehler aufgetreten. @@ -11421,14 +12459,6 @@ Dies kann nicht rückgängig gemacht werden. The kit's build configuration is invalid. Die Build-Konfiguration des Kits ist ungültig. - - The kit's build steps list is invalid. - Die Liste der Build-Schritte des Kits sind ungültig. - - - The kit's deploy configuration is invalid. - Die Deployment-Konfiguration des Kits ist ungültig. - No valid deployment device is set. Es ist kein gültiges Gerät für das Deployment gesetzt. @@ -11527,10 +12557,6 @@ Das Kit unterstützt "%2", aber das Gerät verwendet "%3".The Qt version for kit %1 is invalid. Die Qt-Version für das Kit %1 ist ungültig. - - The minimum Qt version required for Gradle build to work is %1. It is recommended to install the latest Qt version. - Die älteste Qt-Version, die Gradle-Builds unterstützt, ist %1. Es ist ratsam, die neueste Qt-Version zu verwenden. - The API level set for the APK is less than the minimum required by the kit. The minimum API level required by the kit is %1. @@ -11666,6 +12692,22 @@ Der vom Kit mindestens benötigte API-Level ist %1. Cannot copy C++ debug server. C++-Debug-Server kann nicht kopiert werden. + + Art: Cleared App Profiles. + + + + Art: Clearing App Profiles failed. + + + + Art: Compiled App Profiles. + + + + Art: Compiling App Profiles failed. + + Android SDK Manager Android SDK-Manager @@ -11678,6 +12720,11 @@ Der vom Kit mindestens benötigte API-Level ist %1. Update Installed Aktualisierung installiert + + All + Show all packages + Alle + Show Packages Pakete anzeigen @@ -11714,10 +12761,6 @@ Der vom Kit mindestens benötigte API-Level ist %1. Installed Installiert - - All - Alle - Advanced Options... Erweiterte Optionen... @@ -12341,6 +13384,10 @@ und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlaube Using: %1. Verwende: %1. + + Cannot debug: Invalid target information. + + Cannot debug: Only QML and native applications are supported. Kann nicht debuggen: Es werden nur QML- und native Anwendungen unterstützt. @@ -12551,12 +13598,13 @@ Warnung: Dies ist eine experimentelle Funktion und könnte dazu führen, dass di Tests automatisch nach dem Erstellen ausführen - None - Keine + No Tests + All - Alle + Run tests after build + Alle Selected @@ -13768,6 +14816,10 @@ Siehe auch die Einstellungen für Google Test. Path globbing Pfad-Globbing + + Named filters + + Total rows: Gesamtzeilen: @@ -13776,14 +14828,6 @@ Siehe auch die Einstellungen für Google Test. Open Preferences... Einstellungen öffnen... - - Configure dashboards in Preferences > Axivion > General. - Konfigurieren Sie Dashboards in Einstellungen > Axivion > Allgemein. - - - None - Kein - No Data Keine Daten @@ -13804,10 +14848,6 @@ Siehe auch die Einstellungen für Google Test. Reload Neu laden - - Show Inline Issues - Problem im Code anzeigen - Show Issue Annotations Inline Inline-Annotationen für Probleme anzeigen @@ -13816,6 +14856,22 @@ Siehe auch die Einstellungen für Google Test. Show Online Filter Help Online-Filterhilfe anzeigen + + Show All + Alle anzeigen + + + Configure dashboards in Preferences > Analyzer > Axivion. + + + + No Dashboard + + + + Show Issues in Editor + + Open Issue in Dashboard Problem im Dashboard anzeigen @@ -13926,6 +14982,10 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? User name Benutzername + + Project name must be non-empty. + + Add... Hinzufügen... @@ -13938,10 +14998,18 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Remove Entfernen + + Dashboard Servers + + Default dashboard server: Vorgabe-Dashboardserver: + + Misc Options + + unset nicht gesetzt @@ -13966,6 +15034,14 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Project name: Projektname: + + Path must be relative. + + + + Invalid path elements (. or ..). + + Analysis path: Analysepfad: @@ -14002,10 +15078,6 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Move Down Nach unten - - General - Allgemein - Path Mapping Pfadzuordnung @@ -14125,10 +15197,6 @@ a entspricht Problemen, deren Wert den Buchstaben 'a' enthält Target driver: Zieltreiber: - - Starting %1... - Starte %1... - Choose the desired startup mode of the GDB server provider. Wählen Sie den gewünschten Startmodus des GDB-Server-Providers. @@ -14252,7 +15320,8 @@ a entspricht Problemen, deren Wert den Buchstaben 'a' enthält None - Keine + No debug server provider + Not recognized @@ -15874,6 +16943,11 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev no nein + + None + No CMake tool + + (Default) (Vorgabe) @@ -15910,10 +16984,6 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev Detection source: "%1" Quelle: "%1" - - None - Keins - CMake executable path does not exist. Pfad für das CMake-Werkzeug existiert nicht. @@ -16592,8 +17662,8 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der Umbenennen von "%1" nach "%2" ist fehlgeschlagen. - Failed to copy "%1" to "%2". - Kopieren von "%1" nach "%2" ist fehlgeschlagen. + Failed to copy "%1" to "%2": %3 + Failed to read file "%1". @@ -18429,14 +19499,6 @@ Setzen Sie erst eine gültige ausführbare Datei. QtC::Coco - - Select a Squish Coco CoverageBrowser Executable - Wählen Sie eine ausführbare Datei für den Squish-Coco-CoverageBrowser - - - CoverageBrowser: - CoverageBrowser: - Coco instrumentation files (*.csmes) Coco-Instrumentierungsdateien (*.csmes) @@ -18446,8 +19508,216 @@ Setzen Sie erst eine gültige ausführbare Datei. Wählen Sie eine Squish-Coco-Instrumentierungsdatei - CSMes: - CSMes: + CSMes file: + + + + No valid CoverageScanner found. + + + + Configure + + + + Coco Code Coverage: Reconfiguring... + + + + Coco Code Coverage: No working Coco installation. + + + + Coco Code Coverage: Enabled. + + + + Disable Coverage + + + + Coco Code Coverage: Disabled. + + + + Enable Coverage + + + + Save && Re-configure + + + + Additional CMake options: + + + + Initial cache script: + + + + Overwrite file "%1". + + + + Write file "%1". + + + + Coco Code Coverage + + + + Documentation + Dokumentation + + + Revert + Rückgängig machen + + + CoverageScanner options: + + + + Exclude File... + + + + Exclude Directory... + + + + These settings are stored in + + + + Changed Build Settings + + + + Code for the end of the file "%1" to override the built-in declarations. Only needed in special cases. + + + + Enable code coverage for build configuration "%1" + + + + Coco is not installed correctly: %1 + + + + Build Configuration changed to "%1". + + + + Re-configuring stopped by user. + + + + Error when configuring with "%1". Check General Messages for more information. + + + + Stop Re-configuring + + + + Re-configure + + + + Override << + + + + Override >> + + + + The Coco installation path is not set correctly. + + + + Edit + + + + Stop re-configuring. + + + + Re-configure. + + + + Reload file "%1". + + + + File to Exclude from Instrumentation + + + + Directory to Exclude from Instrumentation + + + + Save + Speichern + + + Additional qmake arguments: + + + + Build environment: + + + + Feature file: + + + + Error: Coco installation directory not set. (This can't happen.) + + + + Coco Installation Directory + + + + Error: Coco installation directory not found at "%1". + + + + Error: CoverageScanner at "%1" did not start. + + + + Error: CoverageScanner at "%1" did not finish. + + + + Valid CoverageScanner found at "%1": + + + + Error: CoverageScanner at "%1" did not run correctly. + + + + Found Coco directory "%1". + + + + Checked Coco directory "%1". + + + + Coco Directory + @@ -19904,10 +21174,6 @@ Wenn die Systemzeiger für das Verändern der Größe von Ansichten nicht korrek Compilation Database Kompilierungsdatenbank - - Qt Quick Designer - Qt Quick-Designer - Show Left Sidebar Linke Seitenleiste anzeigen @@ -20093,6 +21359,18 @@ Wenn die Systemzeiger für das Verändern der Größe von Ansichten nicht korrek Activate %1 View Anzeige "%1" aktivieren + + A directory under version control was detected that is supported by the %1 plugin. + + + + Enable %1 + + + + The directory "%1" seems to be under version control that can be handled by the disabled %2 plugin. + + %1 repository was detected but %1 is not configured. Ein Repository des Versionskontrollsystems %1 wurde gefunden, aber %1 ist noch nicht konfiguriert. @@ -20936,7 +22214,8 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche None - Keine + No find flags + , @@ -21224,14 +22503,14 @@ Möchten Sie es beenden? The plugin %1 requires you to accept the following terms and conditions: Das Plugin %1 erfordert, dass Sie folgende Bedingungen und Konditionen annehmen: - - Do you wish to accept? - Wollen Sie diese annehmen? - No themes found in installation. Keine Themen in der Installation gefunden. + + Help + Hilfe + The current date (ISO). Das aktuelle Datum (ISO). @@ -22202,6 +23481,18 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Plugin failed to resolve dependencies: Plugin konnte Abhängigkeiten nicht auflösen: + + Plugin is already installed. + + + + A plugin with ID "%1" is already installed. + + + + No plugin with ID "%1" is installed. + + Check Archive Archiv überprüfen @@ -22222,10 +23513,6 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Accept Terms and Conditions Bedingungen und Konditionen annehmen - - I accept the terms and conditions. - Ich nehme die Bedingungen und Konditionen an. - Canceled. Abgebrochen. @@ -22238,30 +23525,6 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Archive is OK. Archiv ist OK. - - Install Location - Installationsort - - - Choose install location. - Wählen Sie einen Ort für die Installation. - - - User plugins - Benutzer-Plugins - - - The plugin will be available to all compatible %1 installations, but only for the current user. - Das Plugin wird für alle kompatiblen Installationen von %1 verfügbar sein, aber nur für den aktuellen Benutzer. - - - %1 installation - %1-Installation - - - The plugin will be available only to this %1 installation, but for all users that can access it. - Das Plugin wird nur für diese Installation von %1 verfügbar sein, aber für alle Benutzer, die diese Ausführen können. - Summary Zusammenfassung @@ -22282,6 +23545,10 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Failed to Write File Datei konnte nicht geschrieben werden + + Failed to create directory "%1". + Das Verzeichnis "%1" konnte nicht erstellt werden. + Failed to write file "%1". Die Datei "%1" konnte nicht geschrieben werden. @@ -22657,10 +23924,6 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Haskell Editor Haskell-Editor - - Binding Editor - Binding-Editor - Switches to an open document. Wechselt zu einem offenen Dokument. @@ -22716,6 +23979,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Add Definition Outside Class Definition außerhalb der Klasse erstellen + + None + No default implementation location + + Add %1 Declaration Deklaration für %1 hinzufügen @@ -23661,10 +24929,6 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- Getter name: Getter-Name: - - For example, new<Name> - Zum Beispiel new<Name> - Setter name: Setter-Name: @@ -23673,10 +24937,36 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- Setters should be slots Setter sollen Slots sein + + A JavaScript expression acting as the return value of a function with two parameters <b>name</b> and <b>memberName</b>, where<ul><li><b>name</b> is the "semantic name" as it would be used for a Qt property</li><li><b>memberName</b> is the name of the member variable.</li></ul> + + + + A JavaScript expression acting as the return value of a function with a parameter <b>name</b>, which is the "semantic name" as it would be used for a Qt property. + + Generate signals with the new value as parameter Signale mit dem neuen Wert als Parameter erzeugen + + How to get from the member variable to the semantic name. +This is the reverse of the operation above. +Leave empty to apply heuristics. + + + + Test + Test + + + Hide Test Results + + + + The content of the "name" variable. + + Getter attributes: Getter-Attribute: @@ -23693,30 +24983,14 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- Signal name: Signal-Name: - - See tool tip for more information - Mehr Informationen finden Sie im Tooltip - - - Normally reset<Name> - Normalerweise reset<Name> - For example, [[nodiscard]] Zum Beispiel [[nodiscard]] - - Normally <name>Changed - Normalerweise <name>Changed - Member variable name: Member-Variablenname: - - For example, m_<name> - Zum Beispiel m_<name> - Missing Namespace Handling Handhabung fehlender Namensräume @@ -23741,6 +25015,14 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- Use type "auto" when creating new variables Typ "auto" beim Erstellen von neuen Variablen verwenden + + Name from member variable: + + + + Test input: + + Custom Getter Setter Templates Benutzerdefinierte Getter/Setter-Vorlagen @@ -23799,24 +25081,6 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- Return non-value types by const reference Nicht-Werttypen als konstante Referenz zurückgeben - - Use <name> for the variable -Use <camel> for camel case -Use <snake> for snake case -Use <Name>, <Camel> and <Snake> for upper case -e.g. name = "m_test_foo_": -"set_<name> => "set_test_foo" -"set<Name> => "setTest_foo" -"set<Camel> => "setTestFoo" - Nutzen Sie <name> für die Variable -Nutzen Sie <camel> für Camel-Case -Nutzen Sie <snake> für Snake-Case -Nutzen Sie <Name>, <Camel> und <Snake> für Großschreibung -z.B. name = "m_test_foo_": -"set_<name> => "set_test_foo" -"set<Name> => "setTest_foo" -"set<Camel> => "setTestFoo" - The file name. Der Dateiname. @@ -24338,10 +25602,6 @@ Dies ist normalerweise nicht empfehlenswert, da die Datei wahrscheinlich währen Member Function Implementations Implementationen von Memberfunktionen - - None - Keine - Inline Inline @@ -24524,7 +25784,8 @@ Flags: %3 All - Alle + Symbol search scope + Alle Projects @@ -25478,6 +26739,14 @@ Möchten Sie die Daten trotzdem anzeigen? Attempts to correct the location of a breakpoint based on file and line number should it be in a comment or in a line for which no code is generated. The correction is based on the code model. Versucht, die Position eines zeilenbasierten Haltepunkts zu korrigieren, sofern er sich in einem Kommentar oder in einer Zeile, die keinen Code generiert, befindet. Die Korrektur basiert auf dem Codemodell. + + Enable heap debugging + + + + Allocate memory using the debug heap rather than the normal heap. The debug heap enables additional checks to help diagnose heap related bugs. However it comes at a performance cost when allocating memory in the debugged process. + + Show "std::" Namespace in Types "std::"-Namensraum in Typnamen anzeigen @@ -25724,6 +26993,10 @@ Sie haben die Wahl zu warten oder das Debuggen abzubrechen. Application exited after receiving signal %1 Die Anwendung wurde nach Empfang des Signals %1 beendet + + The selected build of GDB supports Python scripting, but the used version %1.%2 is not sufficient for %3. Python %4 or later is required. + + Retrieving data for stack view thread %1... Daten der Stackanzeige für Thread %1 werden empfangen... @@ -25950,10 +27223,6 @@ Sie haben die Wahl zu warten oder das Debuggen abzubrechen. Application exited normally. Die Anwendung wurde normal beendet. - - The selected build of GDB supports Python scripting, but the used version %1.%2 is not sufficient for %3. Supported versions are Python 2.7 and 3.x. - Dieser GDB versteht zwar Python-Skripte, aber diese Version %1.%2 ist für %3 ungeeignet. Unterstützte Python-Versionen sind 2.7 und 3.x. - Failed to Shut Down Application Die Anwendung konnte nicht beendet werden @@ -27010,6 +28279,10 @@ markers in the source code editor. Malformed stop response received. Es wurde eine ungültige Stop-Antwort erhalten. + + Attaching to %1... + + Internal error: The extension %1 cannot be found. If you have updated %2 via Maintenance Tool, you may need to rerun the Tool and select "Add or remove components" and then select the Qt > Tools > Qt Creator CDB Debugger Support component. @@ -27480,14 +28753,6 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie CMake Preset CMake-Voreinstellung - - GDB Preset - GDB-Voreinstellung - - - LLDB Preset - LLDB Voreinstellung - Python Preset Python-Voreinstellung @@ -27702,46 +28967,6 @@ Soll es erneut versucht werden? &Port: &Port: - - Start Remote Engine - Entfernte Engine starten - - - &Host: - &Host: - - - &Username: - &Benutzername: - - - &Password: - &Passwort: - - - &Engine path: - &Engine-Pfad: - - - &Inferior path: - Zu &debuggende Anwendung: - - - Type Formats - Formate der Datentypen - - - Qt Types - Qt-Datentypen - - - Standard Types - Standard-Datentypen - - - Misc Types - Andere Datentypen - No Nein @@ -27750,6 +28975,11 @@ Soll es erneut versucht werden? Yes Ja + + None + Symbols Type (No debug information found) + + Plain Einfach @@ -27987,10 +29217,22 @@ Einzelschritte in das Modul und das Setzen von Haltepunkten nach Datei und Zeile Debug &information: Debug&information: + + Cannot Debug + + + + Cannot debug application: Kit has no device. + + Attach to %1 An %1 anhängen + + Attach to QML Port + + Normally, the running server is identified by the IP of the device in the kit and the server port selected above. You can choose another communication channel here, such as a serial line or custom ip:port. @@ -28126,7 +29368,6 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve System %1 at %2 - %1: Debugger engine type (GDB, LLDB, CDB...), %2: Path %1 von System in %2 @@ -28330,10 +29571,6 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve Display string length: Anzuzeigende Länge von Zeichenketten: - - %1 (Previous) - %1 (Vorherig) - Expression %1 in function %2 from line %3 to %4 Ausdruck %1 in Funktion %2 von Zeile %3 bis %4 @@ -28813,6 +30050,14 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Type Typ + + Added a surrogate GDB DAP item for existing entry "%1". + + + + Added a surrogate GDB DAP item for "%1". + + Add Hinzufügen @@ -28865,26 +30110,6 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Terminal: Read failed: %1 Terminal: Lesen schlug fehl: %1 - - Global - Global - - - Custom - Benutzerdefiniert - - - Restore Global - Globale Einstellungen wiederherstellen - - - Use Customized Settings - Benutzerdefinierte Einstellungen verwenden - - - Use Global Settings - Globale Einstellungen verwenden - Copy Kopieren @@ -28950,10 +30175,6 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Unpacking core file to %1 Entpacke Core-Datei nach %1 - - Cannot debug: Local executable is not set. - Kann nicht debuggen: Lokale ausführbare Datei ist nicht angegeben. - No executable specified. Es wurde keine ausführbare Datei angegeben. @@ -29242,10 +30463,6 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Unknown debugger ABI Unbekannte Debugger-ABI - - None - Keine - The debugger to use for this kit. Der für dieses Kit zu verwendende Debugger. @@ -29254,6 +30471,11 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl No debugger set up. Es ist kein Debugger eingerichtet. + + None + No debugger + + Debugger "%1" not found. Der Debugger "%1" konnte nicht gefunden werden. @@ -29644,10 +30866,6 @@ Versuchen Sie, das Projekt neu zu erstellen. File "%1" not found in project. Datei "%1" wurde nicht im Projekt gefunden. - - No active target. - Kein Ziel aktiv. - No active build system. Kein Build-System aktiv. @@ -29809,6 +31027,145 @@ Versuchen Sie, das Projekt neu zu erstellen. Ungültiger Form-Dateiname: "%1" + + QtC::DesignerCore + + Failed to create item of type %1. + + + + Only alphanumeric characters and underscore allowed. +Ids must begin with a lowercase letter. + Es sind nur alphanumerische Zeichen und Unterstriche zulässig. +IDs müssen außerdem mit einem Kleinbuchstaben beginnen. + + + Ids have to be unique. + IDs müssen eindeutig sein. + + + Invalid Id: %1 +%2 + Ungültige ID: %1 +%2 + + + Invalid meta info. + + + + Illegal state while parsing. + Ungültiger Zustand bei der Auswertung. + + + No property definition allowed. + Eigenschaftsdefinition nicht zulässig. + + + Invalid type %1. + + + + Unknown property for Type %1. + + + + Unknown property for ItemLibraryEntry %1. + + + + Unknown property for Property %1. + + + + Unknown property for QmlSource %1. + + + + Unknown property for ExtraFile %1. + + + + Invalid or duplicate library entry %1. + + + + My 3D Components + + + + Error parsing + Fehler beim Parsen + + + Internal error + Interner Fehler + + + line %1 + + + + column %1 + + + + ID cannot start with an uppercase character (%1). + + + + ID cannot start with a number (%1). + + + + ID cannot include whitespace (%1). + + + + %1 is a reserved QML keyword. + + + + %1 is a reserved Qml type. + + + + %1 is a reserved property keyword. + + + + ID includes invalid characters (%1). + + + + Failed to create instance of file "%1": %2 + Es konnte keine Instanz der Datei "%1" erzeugt werden: %2 + + + Failed to create instance of file "%1". + Es konnte keine Instanz der Datei "%1" erzeugt werden. + + + Empty document. + + + + No import statements found. + + + + Qt Quick 6 is not supported with a Qt 5 kit. + + + + The Design Mode requires a valid Qt kit. + + + + No import for Qt Quick found. + Es konnte kein Import für Qt Quick gefunden werden. + + QtC::DiffEditor @@ -30077,6 +31434,10 @@ Versuchen Sie, das Projekt neu zu erstellen. Failed creating Docker container. No container ID received. Docker-Container konnte nicht erstellt werden. Keine Container-ID erhalten. + + Failed to start container "%1". + + Device is shut down Das Gerät ist heruntergefahren @@ -30262,6 +31623,162 @@ Versuchen Sie, das Projekt neu zu erstellen. Konfiguration + + QtC::EffectComposer + + Trigger Completion + Code-Vervollständigung auslösen + + + Meta+Space + Meta+Space + + + Ctrl+Space + Ctrl+Space + + + Effect Code Editor + + + + Main + + + + New Property + + + + Select Custom Effect Background Image + + + + Image Files (%1) + + + + Common error: %1 + + + + QML parsing error: %1 + + + + Shader error: %1 + + + + Preprocessor error: %1 + + + + Animation + Animation + + + Running + Läuft + + + Set this property to animate the effect. + + + + Time + Zeit + + + This property allows explicit control of current animation time when Running property is false. + + + + Frame + Frame + + + This property allows explicit control of current animation frame when Running property is false. + + + + General + Allgemein + + + Extra Margin + + + + This property specifies how much of extra space is reserved for the effect outside the parent geometry. + + + + Uniform Name + + + + Property Name + + + + Type + Typ + + + Min + Min + + + Max + Max + + + Description + Beschreibung + + + Unsupported type + + + + Effect Composer [beta] + + + + Effect Composer + Title of effect composer widget + + + + Shaders Code Editor + + + + X + X + + + Y + Y + + + Z + + + + W + + + + %1 Item + + + + Set this to use an item in the scene as %1 instead of the above image. + + + QtC::EmacsKeys @@ -30367,6 +31884,14 @@ Versuchen Sie, das Projekt neu zu erstellen. Restart Now Jetzt neu starten + + Remove... + Entfernen... + + + Update... + Aktualisieren... + Error Fehler @@ -30445,7 +31970,8 @@ Versuchen Sie, das Projekt neu zu erstellen. All - Alle + Extensions filter + Alle Extension packs @@ -30523,6 +32049,10 @@ Versuchen Sie, das Projekt neu zu erstellen. New Neu + + Updated + Aktualisiert + QtC::ExtensionSystem @@ -30570,6 +32100,16 @@ Versuchen Sie, das Projekt neu zu erstellen. Loadable without restart: Kann ohne Neustart geladen werden: + + None + No category + + + + All + Platforms: All + Alle + Plugin Details of %1 Beschreibung zu %1 @@ -30722,6 +32262,14 @@ Reason: %3 Das Plugin kann nicht geladen werden, weil eine Abhängigkeit nicht geladen werden konnte: %1(%2) Grund: %3 + + Plugin not found. + + + + It does not exist. + + The plugin "%1" is specified twice for testing. Das Plugin "%1" ist in der Testliste doppelt vorhanden. @@ -30831,12 +32379,12 @@ Grund: %3 Interner Fehler: Es existiert keine Plugininstanz zur Abarbeitung von delayedInitialize - None - Keine + Cannot remove system plugins. + - All - Alle + Could not determine root folder. + %1 (current: "%2") @@ -32146,10 +33694,6 @@ Jetzt Commit ausführen? Auswahl aus Commit entfernen (%n Zeilen) - - All - Alle - Show log for all local branches. Log für alle lokalen Branches anzeigen @@ -32285,6 +33829,10 @@ Möchten Sie den Branch "%1" im entfernten Repository erzeugen und ihn Cancel %1. %1 Abbrechen. + + Create &Branch from %1... + + &Reset to Change %1 Zu&rücksetzen auf Änderung %1 @@ -32377,6 +33925,7 @@ Möchten Sie den Branch "%1" im entfernten Repository erzeugen und ihn Continue Rebase + Avoid translating "Rebase" Rebase fortsetzen @@ -32385,6 +33934,7 @@ Möchten Sie den Branch "%1" im entfernten Repository erzeugen und ihn Continue Revert + Avoid translating "Revert" Revert fortsetzen @@ -32439,6 +33989,11 @@ Jetzt Commit ausführen? Filter commits by message or content. Commits nach Nachricht oder Inhalt filtern. + + All + All branches + Alle + Show Date Datum anzeigen @@ -33687,6 +35242,16 @@ Leer lassen, um das Dateisystem zu durchsuchen. Current &File Aktuelle &Datei + + Diff Current File + Avoid translating "Diff" + + + + Diff of "%1" + Avoid translating "Diff" + Diff für "%1" + Meta+G,Meta+D Meta+G,Meta+D @@ -33695,6 +35260,16 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+D Alt+G,Alt+D + + Log Current File + Avoid translating "Log" + + + + Log of "%1" + Avoid translating "Log" + Log für "%1" + Meta+G,Meta+L Meta+G,Meta+L @@ -33703,16 +35278,6 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+L Alt+G,Alt+L - - Log Current Selection - Avoid translating "Log" - Log der aktuellen Auswahl - - - Log of "%1" Selection - Avoid translating "Log" - Log der Auswahl in "%1 - Meta+G,Meta+S Meta+G,Meta+S @@ -33721,6 +35286,16 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+S Alt+G,Alt+S + + Blame Current File + Avoid translating "Blame" + Blame für aktuelle Datei + + + Blame for "%1" + Avoid translating "Blame" + Blame für "%1" + Meta+G,Meta+B Meta+G,Meta+B @@ -33729,6 +35304,16 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+B Alt+G,Alt+B + + Instant Blame Current Line + Avoid translating "Blame" + Instant Blame für aktuelle Zeile + + + Instant Blame for "%1" + Avoid translating "Blame" + Instant Blame für "%1" + Stage File for Commit Datei zu Commit hinzufügen (stage) @@ -33777,6 +35362,36 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+U Alt+G,Alt+U + + Diff Project Directory + Avoid translating "Diff" + Diff des Projektverzeichnisses + + + Diff Directory of Project "%1" + Avoid translating "Diff" + + + + Log Project Directory + Avoid translating "Log" + Log des Projektverzeichnisses + + + Log Directory of Project "%1" + Avoid translating "Log" + Log des Projektverzeichnisses von "%1" + + + Clean Project Directory... + Avoid translating "Clean" + Clean des Projektverzeichnisses... + + + Clean Directory of Project "%1"... + Avoid translating "Clean" + Clean des Projektverzeichnisses von "%1"... + Meta+G,Meta+Shift+D Meta+G,Meta+Shift+D @@ -33793,44 +35408,29 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+K Alt+G,Alt+K + + Status (Include All Untracked) + Avoid translating "Status" + + &Local Repository &Lokales Repository + + Log Current Selection + Avoid translating "Log" + Log der aktuellen Auswahl + + + Log of "%1" Selection + Avoid translating "Log" + Log der Auswahl in "%1 + Current &Project Directory Aktuelles &Projektverzeichnis - - Diff Project Directory - Avoid translating "Diff" - Diff des Projektverzeichnisses - - - Diff Directory of Project "%1" - Avoid translating "Diff" - Diff des Projektverzeichnisses von "%1 - - - Log Project Directory - Avoid translating "Log" - Log des Projektverzeichnisses - - - Log Directory of Project "%1" - Avoid translating "Log" - Log des Projektverzeichnisses von "%1" - - - Clean Project Directory... - Avoid translating "Clean" - Clean des Projektverzeichnisses... - - - Clean Directory of Project "%1"... - Avoid translating "Clean" - Clean des Projektverzeichnisses von "%1"... - Meta+G,Meta+C Meta+G,Meta+C @@ -33839,22 +35439,59 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+C Alt+G,Alt+C + + Amend Last Commit... + Avoid translating "Commit" + Letzten Commit ändern (Amend)... + + + Fixup Previous Commit... + Avoid translating "Commit" + Vorangehenden Commit verbessern (Fixup)... + Recover Deleted Files Gelöschte Dateien wiederherstellen + + Interactive Rebase... + Avoid translating "Rebase" + Interaktives Rebase... + Update Submodules Submodule aktualisieren + + Abort Merge + Avoid translating "Merge" + Merge abbrechen + + + Abort Rebase + Avoid translating "Rebase" + Rebase abbrechen + Skip Rebase + Avoid translating "Rebase" Rebase überspringen + + Abort Cherry Pick + Avoid translating "Cherry Pick" + Cherry-Pick abbrechen + Continue Cherry Pick + Avoid translating "Cherry Pick" Cherry-Pick fortsetzen + + Abort Revert + Avoid translating "Revert" + Revert abbrechen + Branches... Branches... @@ -33883,6 +35520,11 @@ Leer lassen, um das Dateisystem zu durchsuchen. Saves the current state of your work and resets the repository. Speichert den aktuellen Stand der Arbeit und setzt das Repository zurück. + + Stash Unstaged Files + Avoid translating "Stash" + Stash nicht bereitgestellter Dateien (unstaged) + Saves the current state of your unstaged files and resets the repository to its staged state. Speichert den aktuellen Stand der nicht bereitgestellten Dateien und setzt das Repository auf den bereitgestellten Zustand zurück. @@ -33895,6 +35537,11 @@ Leer lassen, um das Dateisystem zu durchsuchen. Saves the current state of your work. Sichert den aktuellen Arbeitsstand. + + Stash Pop + Avoid translating "Stash" + Stash Pop + Restores changes saved to the stash list using "Stash". Stellt den gesicherten Zustand von "Stash" wieder her. @@ -33919,46 +35566,6 @@ Leer lassen, um das Dateisystem zu durchsuchen. Archive... Archive... - - Diff Current File - Avoid translating "Diff" - Diff für aktuelle Datei - - - Diff of "%1" - Avoid translating "Diff" - Diff für "%1" - - - Log Current File - Avoid translating "Log" - Log für aktuelle Datei - - - Log of "%1" - Avoid translating "Log" - Log für "%1" - - - Blame Current File - Avoid translating "Blame" - Blame für aktuelle Datei - - - Blame for "%1" - Avoid translating "Blame" - Blame für "%1" - - - Instant Blame Current Line - Avoid translating "Blame" - Instant Blame für aktuelle Zeile - - - Instant Blame for "%1" - Avoid translating "Blame" - Instant Blame für "%1" - Meta+G,Meta+I Meta+G,Meta+I @@ -33967,51 +35574,6 @@ Leer lassen, um das Dateisystem zu durchsuchen. Alt+G,Alt+I Alt+G,Alt+I - - Amend Last Commit... - Avoid translating "Commit" - Letzten Commit ändern (Amend)... - - - Fixup Previous Commit... - Avoid translating "Commit" - Vorangehenden Commit verbessern (Fixup)... - - - Interactive Rebase... - Avoid translating "Rebase" - Interaktives Rebase... - - - Abort Merge - Avoid translating "Merge" - Merge abbrechen - - - Abort Rebase - Avoid translating "Rebase" - Rebase abbrechen - - - Abort Cherry Pick - Avoid translating "Cherry Pick" - Cherry-Pick abbrechen - - - Abort Revert - Avoid translating "Revert" - Revert abbrechen - - - Stash Unstaged Files - Avoid translating "Stash" - Stash nicht bereitgestellter Dateien (unstaged) - - - Stash Pop - Avoid translating "Stash" - Stash Pop - Git &Tools Git-&Werkzeuge @@ -34064,10 +35626,6 @@ Leer lassen, um das Dateisystem zu durchsuchen. Another submit is currently being executed. Ein weiterer Submit-Vorgang findet gerade statt. - - 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. - Amend %1 Abgabe %1 ändern (amend) @@ -35504,6 +37062,14 @@ Möchten Sie sie überschreiben? Could not find device specific debug symbols at %1. Debugging initialization will be slow until you open the Organizer window of Xcode with the device connected to have the symbols generated. Die gerätespezifischen Debugsymbole konnten nicht bei %1 gefunden werden. Die Initialisierung des Debuggers wird langsam sein, bis Sie das Organizer-Fenster von Xcode bei verbundenem Gerät öffnen, um die Symbole erzeugen zu lassen. + + Internal error. + + + + Only C++ debugging is supported for devices with iOS 17 and later. + + The dSYM %1 seems to be outdated, it might confuse the debugger. Der dSYM %1 scheint veraltet zu sein, dies kann den Debugger stören. @@ -35667,8 +37233,8 @@ Möchten Sie sie überschreiben? Keine Verbindung zu %1. - Debugging and profiling is currently not supported for devices with iOS 17 and later. - Debuggen und Profiling wird für Geräte mit iOS 17 und später im Moment nicht unterstützt. + Debugging on devices with iOS 17 and later requires Xcode 16 or later. + Device type: @@ -35738,10 +37304,30 @@ Möchten Sie sie überschreiben? Running "%1" on %2... Führe "%1" auf %2 aus... + + Running failed. Failed to create the temporary output file. + + + + Failed to retrieve process ID. + + Could not find %1. %1 konnte nicht gefunden werden. + + Failed to get a local debugger port. + + + + Listening for debugger on local port %1. + + + + Listening for QML debugger on local port %1 (port %2 on the device). + + Could not get necessary ports for the debugger connection. Auf die für die Debugger-Verbindung notwendigen Ports konnte nicht zugegriffen werden. @@ -35844,7 +37430,8 @@ Ablaufdatum: %3 None - Keine + No signing identity + Development team is not selected. @@ -36131,6 +37718,22 @@ Beispiel: *.cpp%1*.h JSON Error JSON-Fehler + + Project Specific Language Servers + + + + Use Global Settings + Globale Einstellungen verwenden + + + Enabled + Aktiviert + + + Disabled + Deaktiviert + Workspace Configuration Workspace-Konfiguration @@ -36196,6 +37799,11 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan language client state abgeschaltet + + failed to shutdown + language client state + + Language Server "%1" Initialization Error Fehler beim Initialisieren von Language Server "%1" @@ -36312,6 +37920,10 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Collapse All Alle einklappen + + <Select Symbol> + <Symbol auswählen> + Client Message Client-Nachricht @@ -36553,10 +38165,18 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Failed to run script %1: %2 Das Ausführen des Skripts %1 ist fehlgeschlagen: %2 + + Non-string key encountered in Lua table at path "%1". + + No hook with the name "%1" found. Kein Einsprungpunkt mit dem Namen "%1" gefunden. + + Unsupported value type "%1" at path "%2". + + Script did not return a table. Das Skript hat keine Tabelle zurückgeliefert. @@ -36729,21 +38349,6 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Makro-Modus. Geben Sie "%1" ein, um die Aufnahme zu stoppen und "%2", um sie abzuspielen. - - QtC::Marketplace - - Marketplace - Marketplace - - - Search in Marketplace... - Im Marketplace suchen... - - - <p>Could not fetch data from Qt Marketplace.</p><p>Try with your browser instead: <a href='https://marketplace.qt.io'>https://marketplace.qt.io</a></p><br/><p><small><i>Error: %1</i></small></p> - <p>Es konnten keine Daten vom Qt Marketplace abgerufen werden.</p><p>Versuchen Sie es stattdessen im Browser: <a href='https://marketplace.qt.io'>https://marketplace.qt.io</a></p><br/><p><small><i>Fehler: %1</i></small></p> - - QtC::McuSupport @@ -36782,6 +38387,14 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Error registering Kit for %1. + + Path %1 does not exist. Add the path in Edit > Preferences > SDKs > MCU. + + + + Missing %1. Add the path in Edit > Preferences > SDKs > MCU. + + Qt for MCUs Kit Creation @@ -36871,14 +38484,6 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Path %1 exists, but does not contain %2. - - Path %1 does not exist. Add the path in Edit > Preferences > Devices > MCU. - - - - Missing %1. Add the path in Edit > Preferences > Devices > MCU. - - No CMake tool was detected. Add a CMake tool in Edit > Preferences > Kits > CMake. @@ -36928,7 +38533,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan - Download from "%1" + Download from "%1". @@ -37164,7 +38769,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan - Cannot apply changes in Devices > MCU. + Cannot apply changes in SDKs > MCU. @@ -37176,7 +38781,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan - Create Kits for Qt for MCUs? To do it later, select Edit > Preferences > Devices > MCU. + Create Kits for Qt for MCUs? To do it later, select Edit > Preferences > SDKs > MCU. @@ -37616,6 +39221,34 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Running %1 in %2. Führe %1 in %2 aus. + + Source Files + Quelldateien + + + Header Files + + + + Python Files + + + + Qt Designer Files + + + + Qt Resource Files + + + + QML Files + + + + Other Files + + Executable does not exist: %1 Ausführbare Datei existiert nicht: %1 @@ -37628,10 +39261,6 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt No Meson tool set. Kein Meson-Werkzeug konfiguriert. - - No Ninja tool set. - Kein Ninja-Werkzeug konfiguriert. - No compilers set in kit. Im Kit sind keine Compiler eingerichtet. @@ -37645,12 +39274,12 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Führt Meson bei Bedarf automatisch aus. - Ninja verbose mode - Ausführlicher Ninja-Modus + Meson verbose mode + - Enables verbose mode by default when invoking Ninja. - Aktiviert standardmäßig den ausführlichen Modus beim Ausführen von Ninja. + Enables verbose mode by default when invoking Meson. + General @@ -37680,10 +39309,6 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Location Pfad - - New Meson or Ninja tool - Neues Meson- oder Ninja-Werkzeug - Tools Werkzeuge @@ -37712,26 +39337,14 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Cannot get tool version. Das Ermitteln der Werkzeug-Version ist fehlgeschlagen. + + New Meson + + Meson build: Parsing failed Erstellen mit Meson: Fehler beim Auswerten - - Ninja Tool - Ninja-Werkzeug - - - The Ninja tool to use when building a project with Meson.<br>This setting is ignored when using other build systems. - Das zum Erstellen eines Projektes mit Meson zu verwendende Ninja-Werkzeug.<br>Diese Einstellung wird bei der Verwendung anderer Build-Systeme ignoriert. - - - Cannot validate this Ninja executable. - Die Überprüfung der ausführbaren Ninja-Datei ist fehlgeschlagen. - - - Ninja - Ninja - Name: Name: @@ -38039,6 +39652,11 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt QtC::Nim + + None + No default arguments + + Target: Ziel: @@ -38055,10 +39673,6 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Default arguments: Standardargumente: - - None - Keine - Debug Debug @@ -38329,8 +39943,8 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Soll das folgende Skript als root ausgeführt werden, um Tracepoints zu erzeugen? - Error: No device available for active target. - Fehler: Für das aktive Ziel ist kein Gerät verfügbar. + Error: No device available for active kit. + Error: Failed to load trace point script %1: %2. @@ -38472,14 +40086,6 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Failed to transfer Perf data to perfparser. Perf-Daten konnten nicht zum perfparser übertragen werden. - - Perf Process Failed to Start - Der Perf-Prozess konnte nicht gestartet werden - - - Make sure that you are running a recent Linux kernel and that the "perf" utility is available. - Stellen Sie sicher, dass Sie einen aktuellen Linux-Kernel verwenden und das Programm "perf" verfügbar ist. - Performance Analyzer Options Einstellungen zur Leistungsanalyse @@ -40437,6 +42043,10 @@ Bitte versuchen Sie es erneut. Close All Files in Project Alle Dateien im Projekt schließen + + SDKs + + Close All Files in Project "%1" Alle Dateien im Projekt "%1" schließen @@ -41068,6 +42678,11 @@ The name of the build configuration created by default for a generic project.<nobr><b>ABI:</b> %1 <nobr><b>ABI:</b> %1 + + None + Toolchain bundle display name + + Not all compilers are set up correctly. Nicht alle Compiler sind richtig konfiguriert. @@ -41408,10 +43023,6 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein Fetching process list. This might take a while. Rufe Prozessliste ab. Dies kann eine Weile dauern. - - Remote error output was: %1 - Fehlerausgabe: %1 - Remote Error Entfernter Fehler @@ -41501,6 +43112,18 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein Mark up a kit as the default one. %1 (Vorgabe) + + Global + Global + + + Use Customized Settings + Benutzerdefinierte Einstellungen verwenden + + + Use Global Settings + Globale Einstellungen verwenden + Variables in the run environment. Variablen in der Ausführungsumgebung. @@ -41809,6 +43432,10 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen. Import Build Build importieren + + %1 (imported) + + %1 - temporary %1 - temporär @@ -41833,6 +43460,10 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen. Type to filter kits by name... Kits nach Namen filtern... + + Hide unsuitable kits + + Select Kits for Your Project Kits des Projekts einrichten @@ -42912,10 +44543,6 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.Nimble Application Nimble-Anwendung - - Qt 6.4 - Qt 6.4 - Qt 6.5 Qt 6.5 @@ -43176,6 +44803,10 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen.Qt Quick Application - Empty Qt Quick-Anwendung - Leer + + Qt 6.8 + + Repository URL is not valid Die URL des Repositorys ist ungültig @@ -44553,6 +46184,11 @@ Was soll %1 tun? Compilers produce code for different ABIs: %1 Compiler erzeugen Code für verschiedene ABIs: %1 + + None + No compiler + + Path to the compiler executable Pfad zur ausführbaren Datei des Compilers @@ -44581,10 +46217,50 @@ Was soll %1 tun? Run device type Gerätetyp (Ausführung) + + Device: + Geräte: + Unknown device type Unbekannter Gerätetyp + + No run device set. + + + + Build device is incompatible with this kit. + + + + Run device is incompatible with this kit. + + + + Host address (%1) + + + + SSH port (%1) + + + + User name (%1) + + + + Private key file (%1) + + + + Device name (%1) + + + + Device root directory (%1) + + Run device Gerät (Ausführung) @@ -44594,40 +46270,12 @@ Was soll %1 tun? Das Gerät, auf dem die Anwendungen laufen sollen. - No device set. - Es ist kein Gerät gesetzt. + Build device type + - Device is incompatible with this kit. - Das Gerät ist inkompatibel zu diesem Kit. - - - Host address - Host-Adresse - - - SSH port - SSH-Port - - - User name - Benutzername - - - Private key file - Private Schlüsseldatei - - - Device name - Gerätename - - - Device root directory - Wurzelverzeichnis des Geräts - - - Build device root directory - Wurzelverzeichnis des Geräts (Erstellung) + The type of device to build on. + Change... @@ -44638,8 +46286,24 @@ Was soll %1 tun? Keine anzuwendenden Änderungen. - Force UTF-8 MSVC compiler output - UTF-8-Ausgabe von MSVC-Compiler erzwingen + Edit Build Environment... + + + + Edit Run Environment... + + + + Edit Build Environment + + + + Edit Run Environment + + + + Force UTF-8 MSVC output + Either switches MSVC to English or keeps the language and just forces UTF-8 output (may vary depending on the used MSVC compiler). @@ -44807,9 +46471,15 @@ Was soll %1 tun? Build Only the Application to Be Run Nur die auszuführende Anwendung erstellen + + None + Stop applications before building: None + + All - Alle + Stop all projects + Alle Same Project @@ -45088,26 +46758,6 @@ fails because Clang does not understand the target architecture. No build device set. Kein Gerät für die Erstellung gesetzt. - - Build host address - Hostadresse des Geräts (Erstellung) - - - Build SSH port - SSH-Port des Geräts (Erstellung) - - - Build user name - Benutzername des Geräts (Erstellung) - - - Build private key file - Private Schlüsseldatei des Geräts (Erstellung) - - - Build device name - Gerätename (Erstellung) - Run as root user Als root-Benutzer ausführen @@ -45161,10 +46811,6 @@ fails because Clang does not understand the target architecture. The name of the profile build configuration created by default for a qmake project. Profile - - Profiling - Profiling - Source: Quelle: @@ -45245,6 +46891,187 @@ fails because Clang does not understand the target architecture. Provide manually Manuell bestimmen + + None + Add to project: None + + + + None + No compiler language + + + + None + No compiler category + + + + Could not open "%1" for writing: %2. + Die Datei "%1" konnte nicht zum Schreiben geöffnet werden: %2. + + + Windows Configuration + + + + Select the download path of NuGet and Windows App SDK. + + + + Select Download Path + + + + Select the path of NuGet. + + + + Select nuget.exe File + + + + Download NuGet + + + + Automatically download NuGet. + +NuGet is needed for downloading Windows App SDK. + + + + Select the path of the Windows App SDK. + + + + Download Windows App SDK + + + + Automatically download Windows App SDK with NuGet. + +If the automatic download fails, Qt Creator proposes to open the download URL +in the system browser for manual download. + + + + Download path exists. + + + + NuGet path exists. + + + + Windows App SDK path exists. + + + + Windows App SDK settings are OK. + + + + Windows App SDK settings have errors. + + + + Select Windows App SDK Path + + + + Download Path + + + + Download location: + + + + NuGet + + + + NuGet location: + + + + Windows App SDK Settings + + + + Windows App SDK location: + + + + NuGet download failed. + + + + Open NuGet URL for manual download? + + + + Open Download URL + URL zum Herunterladen öffnen + + + Downloading NuGet... + + + + Downloading + + + + The SDK Tools download URL is empty. + Die URL zum Herunterladen der SDK-Werkzeuge ist nicht gesetzt. + + + Encountered SSL errors, download is aborted. + Es sind SSL-Fehler aufgetreten, das Herunterladen wurde abgebrochen. + + + Downloading NuGet from URL %1 has failed: %2. + + + + Download from %1 was redirected. + Das Herunterladen von %1 wurde umgeleitet. + + + The selected download path (%1) for NuGet already exists. +Select a different path. + + + + Download path is not configured. + + + + Downloading Windows App SDK + + + + Windows App SDK is already configured. + + + + Downloading Windows App SDK... + + + + Windows App SDK download failed. + + + + Open Windows App SDK URL for manual download? + + + + Windows App SDK + + QtC::Python @@ -45280,6 +47107,11 @@ fails because Clang does not understand the target architecture. Executable Ausführbare Datei + + None + No Python interpreter + + Executable is empty. Ausführbare Datei ist leer. @@ -45574,10 +47406,6 @@ fails because Clang does not understand the target architecture. Issues parsed from Python runtime output. Probleme, die in der Laufzeitausgabe von Python gefunden wurden. - - None - Kein - The interpreter used for Python based projects. Der für Python-basierte Projekte verwendete Interpreter. @@ -45714,22 +47542,8 @@ fails because Clang does not understand the target architecture. Das Wurzelverzeichnis zum Erstellen von qbs-Projekten - Debug - Shadow build directory suffix - Non-ASCII characters in directory suffix may cause build issues. - Debug - - - Release - Shadow build directory suffix - Non-ASCII characters in directory suffix may cause build issues. - Release - - - Profile - Shadow build directory suffix - Non-ASCII characters in directory suffix may cause build issues. - Profile + <No build device> + Qbs Build @@ -45947,8 +47761,8 @@ Dies ist selten nötig. Es wurde keine ausführbare qbs-Datei gefunden, bitte setzen Sie den Pfad in den Einstellungen. - The qbs executable was not found at the specified path, or it is not executable ("%1"). - Die ausführbare qbs-Datei wurde am angegebenen Pfad nicht gefunden oder ist nicht ausführbar ("%1"). + The qbs executable was not found at the specified path, or it is not executable. + The qbs process quit unexpectedly. @@ -47046,10 +48860,88 @@ Bitte aktualisieren Sie Ihr Kit (%3) oder wählen Sie eine mkspec für qmake, di QtC::QmlDesigner + + "%1" failed (exit code %2). + "%1" schlug fehl (Rückgabewert %2). + + + Failed to generate deployable package! + + + + "%1" crashed. + "%1" ist abgestürzt. + + + Generate QRC Resource File... + + + + Save Project as QRC File + + + + QML Resource File (*.qrc) + + + + QmlDesigner::GenerateResource + Success + + + + QmlDesigner::GenerateResource + Successfully generated QRC resource file + %1 + + + + Generate Deployable Package... + + + + Save Project as Resource + + + + Generating deployable package. Please wait... + + Error Fehler + + Failed to generate deployable package! + +Please check the output pane for more information. + + + + Success + + + + Successfully generated deployable package + + + + Failed to open file to write QRC XML: %1 + + + + Resource generator is already running. + + + + QmlDesigner::GenerateResource + Unable to generate resource file: %1 + + + + A timeout occurred running "%1". + Zeitüberschreitung bei Ausführung von "%1". + Export Components @@ -47098,6 +48990,820 @@ Bitte aktualisieren Sie Ihr Kit (%3) oder wählen Sie eine mkspec für qmake, di Property Value Eigenschaftswert + + Error creating asset directory. %1 + + + + Error saving asset. %1 + + + + Failed to Delete File + + + + Could not delete "%1". + + + + Assets Library + Title of assets library widget + + + + Failed to Delete Effect Resources + + + + Folder move failure + + + + Failed to move folder "%1". The folder might contain subfolders or one of its files is in use. + + + + Failed to Add Files + Dateien konnten nicht hinzugefügt werden + + + Could not add %1 to project. + %1 konnte nicht zum Projekt hinzugefügt werden. + + + All Files (%1) + Alle Dateien (%1) + + + Add Assets + Assets hinzufügen + + + Could not add %1 to project. Unsupported file format. + + + + Binding Editor + Binding-Editor + + + Signal List for %1 + + + + <Filter> + Library search input hint text + <Filter> + + + File Name + Dateiname + + + Size + Größe + + + Add Resources + Ressourcen hinzufügen + + + &Browse... + &Auswählen... + + + Target Directory + Zielverzeichnis + + + Unsupported bundle file + + + + The chosen bundle was created with an incompatible version of Qt Design Studio + + + + Component Exists + + + + A component with the same name '%1' already exists in the project, are you sure you want to overwrite it? + + + + Import Component + + + + Qt Design Studio Bundle Files (*.%1) + + + + Export Material + + + + Export Component + + + + Failed to Add Texture + + + + Document Has Errors + + + + The document which contains the list model contains errors. So we cannot edit it. + + + + Document Cannot Be Written + + + + An error occurred during a write attemp. + + + + Invalid Id + Ungültige ID + + + Go to Implementation + Zu Implementierung gehen + + + Invalid component. + + + + Cannot find an implementation. + Keine Implementierung gefunden. + + + Cannot Set Property %1 + Eigenschaft %1 kann nicht zugewiesen werden + + + The property %1 is bound to an expression. + Die Eigenschaft %1 ist an einen Ausdruck gebunden. + + + Overwrite Existing File? + + + + File already exists. Overwrite? +"%1" + + + + TemplateMerge + Merge With Template + + + + TemplateMerge + &Browse... + + + + TemplateMerge + Template: + + + + TemplateMerge + Browse Template + + + + Effect file %1 not found in the project. + + + + Effect %1 is not complete. + + + + Ensure that you have saved it in the Effect Composer. +Do you want to edit this effect? + + + + Exposed Custom Properties + + + + Start Nanotrace + + + + Shut Down Nanotrace + + + + Bake Lights + + + + Bake lights for the current 3D scene. + + + + Select Background Color + + + + Select a color for the background of the 3D view. + + + + Select Grid Color + + + + Select a color for the grid lines of the 3D view. + + + + Reset Colors + + + + Reset the background color and the color of the grid lines of the 3D view to the default values. + + + + Use Scene Environment + + + + Sets the 3D view to use the Scene Environment color or skybox as background color. + + + + Toggle Group/Single Selection Mode + + + + Activate Move Tool + + + + Activate Rotate Tool + + + + Activate Scale Tool + + + + Fit Selected Object to View + + + + Align Cameras to View + + + + Align View to Camera + + + + Toggle Perspective/Orthographic Camera Mode + + + + Toggle Global/Local Orientation + + + + Toggle Edit Light On/Off + + + + Show Grid + + + + Toggle the visibility of the helper grid. + + + + Show Look-at + + + + Toggle the visibility of the edit camera look-at indicator. + + + + Show Selection Boxes + + + + Toggle the visibility of selection boxes. + + + + Show Icon Gizmos + + + + Toggle the visibility of icon gizmos, such as light and camera icons. + + + + Always Show Camera Frustums + + + + Toggle between always showing the camera frustum visualization and only showing it when the camera is selected. + + + + Always Show Particle Emitters And Attractors + + + + Toggle between always showing the particle emitter and attractor visualizations and only showing them when the emitter or attractor is selected. + + + + Toggle particle animation On/Off + + + + Play Particles + + + + Restart Particles + + + + Reset View + Ansicht zurücksetzen + + + Visibility Toggles + + + + Background Color Actions + + + + Toggle snapping during node drag + + + + Open snap configuration dialog + + + + Toggle Split View On/Off + + + + Open camera speed configuration dialog + + + + Show Event List + + + + Assign Events to Actions + + + + Set the color of the canvas. + Die Farbe der Leinwand einstellen + + + Annotation + Annotation + + + Edit Annotation + + + + Remove Annotation + + + + By: + + + + Edited: + + + + Delete this annotation? + + + + Connected Events + + + + Connected Signals + + + + 2D + 2D + + + 2D view + + + + %1 is not supported as the root element by the 2D view. + + + + No Snapping + + + + Snap with Anchors + + + + Snap without Anchors + + + + Show Bounds + + + + Override Width + Breite überschreiben + + + Override width of root component. + + + + Override Height + Höhe überschreiben + + + Override height of root component. + + + + Zoom In + Vergrößern + + + Zoom Out + Verkleinern + + + Zoom screen to fit all content. + + + + Ctrl+Alt+0 + + + + Zoom screen to fit current selection. + + + + Ctrl+Alt+i + + + + Reload View + + + + Export Current QML File as Image + Aktuelle QML-Datei als Bild exportieren + + + PNG (*.png);;JPG (*.jpg) + PNG (*.png);;JPG (*.jpg) + + + Asset import data file "%1" is invalid. + + + + Unable to locate source scene "%1". + + + + Opening asset import data file "%1" failed. + + + + Unable to resolve asset import path. + + + + Import Update Failed + + + + Failed to update import. +Error: +%1 + + + + %1 already exists. + %1 existiert bereits. + + + Unknown component: %1 + + + + Warning + Warnung + + + Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? + Das Verschieben der Komponente %1 an diese Stelle bewirkt das Löschen der Komponente %2. Möchten Sie den Vorgang fortsetzen? + + + Edit Path + Pfad bearbeiten + + + Path Tool + Pfad-Werkzeug + + + Invalid QML source + + + + Text Tool + Textwerkzeug + + + None + + + + Base State + Grundzustand + + + Internal process (QML Puppet) crashed. + + + + Source item: %1 + + + + Failed to generate QSB file for: %1 + + + + Puppet is starting... + Puppet wird gestartet... + + + You can now attach your debugger to the %1 QML Puppet with process id: %2. + + + + Qt Quick Designer + Qt Quick-Designer + + + Cannot Open Design Mode + Design-Modus kann nicht geöffnet werden + + + The QML file is not currently opened in a QML Editor. + Die QML-Datei ist in keinem QML-Editor geöffnet. + + + Enjoying the %1? + + + + Enable smooth rendering in the 2D view. + + + + Default style + Vorgabestil + + + Reset Style + Stil zurücksetzen + + + QML Puppet + + + + Use fallback QML Puppet + + + + If you select this radio button, Qt Design Studio always uses the QML Puppet located at the following path. + + + + Path to the QML Puppet executable. + + + + Resets the path to the built-in QML Puppet. + + + + Use QML Puppet that is built with the selected Qt + + + + Reset Path + Pfad zurücksetzen + + + Always save when leaving subcomponent in bread crumb + Immer speichern, wenn eine Subkomponente per Breadcrumb Navigation verlassen wird + + + Warn about unsupported features of .ui.qml files in code editor + + + + Also warns in the code editor about QML features that are not properly supported by the Qt Quick Designer. + Zeigt auch im Code-Editor eine Warnung bei QML-Funktionen an, die vom Qt Quick Designer nicht vollständig unterstützt werden. + + + Warn about unsupported features in .ui.qml files + + + + Warns about QML features that are not properly supported by the Qt Design Studio. + + + + Warn about using .qml files instead of .ui.qml files + Bei der Verwendung von .qml-Dateien statt .ui.qml-Dateien warnen + + + Qt Quick Designer will propose to open .ui.qml files instead of opening a .qml file. + Qt Quick Designer wird vorschlagen, .ui.qml-Dateien statt einer .qml-Datei zu öffnen. + + + qsTr() + qsTr() + + + qsTrId() + qsTrId() + + + qsTranslate() + qsTranslate() + + + Always open ui.qml files in Design mode + ui.qml-Dateien immer im Design-Modus öffnen + + + Ask for confirmation before deleting asset + + + + Always auto-format ui.qml files in Design mode + + + + Enable Timeline editor + Timeline-Editor aktivieren + + + Enable DockWidget content minimum size + + + + Debugging + Debuggen + + + Show the debugging view + Debugansicht anzeigen + + + Show property editor warnings + Zeige Warnungen des Eigenschafteneditors + + + Enable the debugging view + Debugansicht aktivieren + + + Show warn exceptions + Zeige Warnungsausnahmen + + + Path: + Pfad: + + + Top level build path: + Oberstes Build-Verzeichnis: + + + Forward QML Puppet output: + + + + Debug QML Puppet: + + + + Snapping + Raster + + + Parent component padding: + + + + Sibling component spacing: + + + + Canvas + Leinwand + + + Width: + Breite: + + + Height: + Höhe: + + + Smooth rendering: + + + + Root Component Init Size + + + + Styling + Stil + + + Controls style: + Controls Stil: + + + Controls 2 style: + Controls-2-Stil: + + + Subcomponents + Subkomponenten + + + Warnings + Warnungen + + + Internationalization + Internationalisierung + + + Features + Zusatzfunktionen + + + Restart Required + Neustart erforderlich + + + The made changes will take effect after a restart of the QML Puppet or %1. + + QtC::QmlEditorWidgets @@ -48087,10 +50793,6 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Qt Creator Qt Creator - - Turn on - Einschalten - Allow versions below Qt %1 Versionen niedriger als Qt %1 erlauben @@ -48099,6 +50801,10 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Use advanced features (renaming, find usages, and so on) (experimental) Erweiterte Funktionen verwenden (umbenennen, Verweise finden und weiteres) (experimentell) + + Current kit does not have a valid Qt version, disabling QML Language Server. + + Use from latest Qt version Neueste Qt-Version verwenden @@ -48139,10 +50845,6 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Automatic Formatting on File Save Automatische Formatierung beim Speichern einer Datei - - Enable QML Language Server on this project. - Aktiviere QML Language Server für dieses Projekt. - Qt Quick Qt Quick @@ -48151,6 +50853,10 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Open .ui.qml files with: .ui.qml-Dateien öffnen mit: + + Open Language Server preferences... + + Static Analyzer Statische Analyse @@ -48227,10 +50933,6 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Read typeinfo files successfully. typeinfo-Dateien erfolgreich gelesen. - - Qmlls (%1) - Qmlls (%1) - QtC::QmlJSTools @@ -49173,11 +51875,18 @@ Speichern fehlgeschlagen. All - Alle + All frames + Alle None - Keine + Compare Frame: None + + + + All + All View3D frames + Alle Quick3D Frame @@ -49191,6 +51900,11 @@ Speichern fehlgeschlagen. Compare Frame Frame vergleichen + + All + Compare Frame: All + Alle + QtC::QmlProjectManager @@ -49441,6 +52155,10 @@ Sind Sie sicher? Enable CMake Generator CMake-Generator aktivieren + + The project was created with a Qt Design Studio version earlier than Qt Design Studio 4.5. Due to limitations of the project structure in earlier Qt Design Studio versions, the resulting application might not display all the assets. Referring to assets between different QML modules does not work in the compiled application.<br><a href="https://doc.qt.io/qtdesignstudio/studio-designer-developer-workflow.html">See the documentation for details.</a> + + QtC::Qnx @@ -49753,10 +52471,6 @@ wirklich entfernen? (on %1) (auf %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 - Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong? Der Pfad zu den ausführbaren Dateien der Qt-Installation konnte nicht bestimmt werden, möglicherweise ist der Pfad zu qmake falsch? @@ -49785,10 +52499,6 @@ wirklich entfernen? qmake "%1" is not an executable. qmake "%1" ist keine ausführbare Datei. - - No QML utility installed. - Kein QML-Werkzeug installiert. - Desktop Qt Version is meant for the desktop @@ -49871,10 +52581,6 @@ wirklich entfernen? Highest Version Only Nur höchste Version - - All - Alle - Remove Invalid Qt Versions Ungültige Qt-Versionen entfernen @@ -49891,6 +52597,16 @@ wirklich entfernen? Warning Warnung + + All + All documentation + Alle + + + None + No documentation + + Not all possible target environments can be supported due to missing compilers. Es können nicht alle Zielumgebungen unterstützt werden, da einige Compiler fehlen. @@ -50081,6 +52797,10 @@ wirklich entfernen? The kit has a Qt version, but no C++ compiler. Das Kit hat eine Qt-Version, aber keinen C++-Compiler. + + Qt version is not properly installed + + Name: Name: @@ -50113,6 +52833,10 @@ wirklich entfernen? Version: Version: + + Cannot update Qt version information from %1: %2. + + Qt version Qt-Version @@ -50233,9 +52957,14 @@ wirklich entfernen? The Qt library to use for all projects using this kit.<br>A Qt version is required for qmake-based projects and optional when using other build systems. Die zu verwendende Qt-Bibliothek für alle Projekte, die dieses Kit verwenden.<br>Für qmake-basierende Projekte ist diese Angabe erforderlich, für andere Build-Systeme optional. + + Mkspec: + + None - Keine + No Qt version + Name of Qt Version @@ -50341,6 +53070,26 @@ wirklich entfernen? Category for all other examples Andere + + Could not determine target OS + + + + Could not determine target architecture + + + + Could not determine OS sub-type + + + + Error reading "%1": %2 + + + + Core.json not found for Qt at "%1" + + QtC::RemoteLinux @@ -51052,10 +53801,6 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Use rsync or sftp if available, but prefer rsync. Otherwise use default transfer. Verwende rsync oder sftp, sofern verfügbar, bevorzuge aber rsync. Sonst verwende Standardmethode. - - rsync is only supported for transfers between different devices. - rsync wird nur für das Übertragen zwischen unterschiedlichen Geräten unterstützt. - Command: Kommando: @@ -51160,6 +53905,10 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Refusing to overwrite existing private key file "%1". Die private Schlüsseldatei "%1" wird nicht überschrieben. + + Unknown error + + The ssh-keygen tool at "%1" failed: %2 Das Programm "ssh-keygen" in "%1" hat einen Fehler festgestellt: %2 @@ -52242,6 +54991,93 @@ Zeile: %4, Spalte: %5 Modus umschalten + + QtC::SerialTerminal + + Unable to open port %1: %2. + + + + Session resumed. + + + + Starting new session on %1... + + + + Session finished on %1. + + + + Session paused... + + + + No Port + + + + Serial port error: %1 (%2) + + + + Close Tab + Reiter schließen + + + Close All Tabs + Alle schließen + + + Close Other Tabs + Andere Reiter schließen + + + Type text and hit Enter to send. + + + + Serial Terminal Window + + + + Connect + Verbinden + + + Disconnect + + + + Reset Board + + + + Add New Terminal + + + + Serial Terminal + + + + None + + + + LF + LF + + + CR + + + + CRLF + CRLF + + QtC::SilverSearcher @@ -53542,6 +56378,14 @@ Die Datei "%1" konnte nicht geöffnet werden. Clear Selection Auswahl löschen + + Delete Word Left + + + + Delete Line Left + + Clear Terminal Terminal-Inhalt löschen @@ -54262,10 +57106,6 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. </ul></body></html> - - None - Keine - Follows Previous Indents Vorangehender Einrückung folgen @@ -54382,6 +57222,11 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Enable &mouse navigation &Mausnavigation aktivieren + + None + Backspace indentation: None + + Enable scroll &wheel zooming Zoom mittels Maus&rad aktivieren @@ -54582,6 +57427,10 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Display file line ending Zeilenende-Kodierung anzeigen + + Display tab settings + + &Highlight selection Aus&wahl hervorheben @@ -54698,10 +57547,6 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Tabs And Indentation Tabulatoren und Einrückung - - Tab policy: - Tabulatorverhalten: - Spaces Only Nur Leerzeichen @@ -54710,18 +57555,10 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Tabs Only Nur Tabulatoren - - Mixed - Gemischt - Ta&b size: Tabulator&weite: - - &Indent size: - &Einrückung: - Align continuation lines: Einrückung von Fortsetzungszeilen: @@ -54778,6 +57615,14 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. </li> </ul></body></html> + + Auto detect + + + + %1 tries to detect the indentation settings based on the file contents. It will fallback to the settings below if the detection fails. + + Not At All Keine Einrückung @@ -54790,6 +57635,14 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. With Regular Indent Verwende normale Einrückung + + Default tab policy: + + + + Default &indent size: + + The text editor indentation setting is used for non-code files only. See the C++ and Qt Quick coding style settings to configure indentation for code files. Die Einstellungen des Texteditors bezüglich Einrückung werden nur für Dateien verwendet, die keinen Code enthalten. Verwenden Sie die Einstellungen zu C++ und Qt Quick Coding-Style, um Einrückungen in Code-Dateien festzulegen. @@ -54864,6 +57717,34 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. Anchor: Anker: + + Spaces + + + + Tabs + Tabulatoren + + + Document Settings + + + + Tab Settings + + + + Indent Size + + + + Tab Size + + + + Global Settings... + + Unix Line Endings (LF) Unix-Zeilenenden (LF) @@ -55512,6 +58393,11 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. Full Vollständig + + None + Case-sensitivity: None + + First Letter Erster Buchstabe @@ -56266,6 +59152,22 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Underline color of the contexts of warning diagnostics. Unterstreichung der Kontexte von Warnungen. + + Info + Info + + + Underline color of info diagnostics. + + + + Info Context + + + + Underline color of the contexts of info diagnostics. + + Static Member Statische Member @@ -56547,11 +59449,35 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Copy Hash to Clipboard Hash in die Zwischenablage kopieren + + Blame %1 + + + + Blame Parent + + + + File at %1 + + + + Log for line %1 + + <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. + + Not Committed Yet + + + + Modified line in %1 + + You Sie selbst @@ -57302,10 +60228,6 @@ Die Trace-Daten sind verloren. Invalid command Ungültiges Kommando - - Internal socket error: %1 - Interner Socketfehler: %1 - Cannot set up communication channel: %1 Es konnte kein Kommunikationskanal hergestellt werden: %1 @@ -57386,6 +60308,10 @@ Die Trace-Daten sind verloren. watch is not implemented. "watch" ist nicht implementiert. + + Device is unavailable. + + Failed to watch "%1". Watch für "%1" ist fehlgeschlagen. @@ -57461,10 +60387,6 @@ Die Trace-Daten sind verloren. Die Datei "%1" konnte nicht geschrieben werden (es wurden nur %2 von %n Bytes geschrieben). - - Device is not connected - Gerät ist nicht verbunden - Failed reading file "%1": %2 Die Datei "%1" konnte nicht gelesen werden: %2 @@ -57529,6 +60451,10 @@ Die Trace-Daten sind verloren. Overwrite existing file "%1"? Soll die Datei "%1" überschrieben werden? + + File %1 does not exist. + + Failed to set up scratch buffer in "%1". Notizbereich in "%1" konnte nicht erzeugt werden. @@ -57954,34 +60880,6 @@ in "%2" aus. Date Modified Zuletzt geändert - - Failed to start process launcher at "%1": %2 - Prozess-Launcher "%1" konnte nicht gestartet werden: %2 - - - Process launcher closed unexpectedly: %1 - Prozess-Launcher wurde unerwartet beendet: %1 - - - Socket error: %1 - Socketfehler: %1 - - - Internal protocol error: invalid packet size %1. - Interner Protokollfehler: Ungültige Paketgröße %1. - - - Internal protocol error: invalid packet type %1. - Interner Protokollfehler: Ungültiger Pakettyp %1. - - - Launcher socket closed unexpectedly. - Launcher-Socket wurde unerwartet geschlossen. - - - Process launcher socket error. - Prozess-Launcher Socketfehler. - Minimize Minimieren @@ -58122,6 +61020,10 @@ Zeilen, die mit "##" beginnen, werden als Kommentare behandelt.No Lua interface set Keine Lua-Schnittstelle eingestellt + + Remote error output was: %1 + Fehlerausgabe: %1 + QtC::Valgrind @@ -58676,6 +61578,14 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch Start a Valgrind Memcheck with GDB analysis. Starte einen Valgrind Speichertest mit GDB Analyse. + + Starting Memory Analyzer... + + + + Memory Analyzer running... + + Open Memcheck XML Log File Memcheck-XML-Logdatei öffnen @@ -58866,6 +61776,14 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch Show costs relative to parent function's inclusive cost. Zeige Kosten relativ zu den einschließlichen Kosten der rufenden Funktion. + + Starting Function Profiler... + + + + Function Profiler running... + + Remove template parameter lists when displaying function names. Beim Anzeigen von Funktionsnamen Template-Parameterlisten entfernen. @@ -59048,7 +61966,8 @@ Check settings or ensure Valgrind is installed and available in PATH. None - Keine + Leak details: None + Simple @@ -59296,6 +62215,10 @@ Check settings or ensure Valgrind is installed and available in PATH. Insert Name... Namen einfügen... + + File Error + Dateifehler + &Close &Schließen @@ -59839,6 +62762,14 @@ should a repository require SSH-authentication (see documentation on SSH and the characters Zeichen + + Show VCS file status + + + + Request file status updates from files and reflect them on the project tree. + + Reset VCS Cache VCS-Cache zurücksetzen @@ -60909,6 +63840,86 @@ defined in step size. + + ReflectionProbeSection + + Reflection Probe + + + + Box Size + + + + Sets the reflection probe box size. + + + + Box Offset + + + + Sets the reflection probe box position relative to the probe position. + + + + Parallax Correction + + + + Reflection maps are considered to be at infinite distance by default. This is unsuitable for indoor area as it produces parallax issues. +Setting this property to true corrects the cubemap by taking the camera position and the box's dimension into account. + + + + Debug View + Debugansicht + + + Enables rendering a wireframe to visualize the reflection probe box. + + + + Clear Color + + + + Sets the color that will be used to clear the reflection map. + + + + Reflection Map Quality + + + + Sets the quality of the reflection map. + + + + Refresh Mode + + + + Sets how often the reflection map will be updated. + + + + Time Slicing + + + + Sets how often the faces of the reflection cube map are updated. + + + + Override Texture + + + + Sets an override texture to use for the reflection map instead of rendering the scene. + + + RenameFolderDialog @@ -60936,6 +63947,29 @@ defined in step size. Abbrechen + + Repeater3DSection + + Repeater + + + + Model + Modell + + + The model providing data for the repeater. This can simply specify the number of delegate instances to create or it can be bound to an actual model. + + + + Delegate + + + + The delegate provides a template defining each object instantiated by the repeater. + + + RepeaterSpecifics @@ -60960,27 +63994,37 @@ defined in step size. - ResetEdit3DColorsAction + ResourceLoaderSection - Reset Colors + Resource Loader - Reset the background color and the color of the grid lines of the 3D view to the default values. + Geometries - - - ResetView - Reset View - Ansicht zurücksetzen + A list of custom geometries to be loaded and cached. + - - - RotateToolAction - Activate Rotate Tool + Mesh Sources + + + + A list of mesh assets to be loaded and cached. + + + + Currently only editable in QML. + + + + Textures + + + + A list of textures to be loaded and cached. @@ -61132,9 +64176,241 @@ defined in step size. - ScaleToolAction + SceneEnvironmentSection - Activate Scale Tool + Scene Environment + + + + Background Mode + + + + Sets if and how the background of the scene should be cleared. + + + + Clear Color + + + + Sets which color will be used to clear the viewport when using SceneEnvironment.Color for the backgroundMode property. + + + + Skybox Cube Map + + + + Sets a cubemap to be used as a skybox when the background mode is SkyBoxCubeMap. + + + + Skybox Blur + + + + Sets how much to blur the skybox when using SceneEnvironment.SkyBox for the backgroundMode property. + + + + Effects + + + + Post Processing effects applied to this scene. + + + + Tonemap Mode + + + + Sets how colors are tonemapped before rendering. + + + + Fog + + + + Settings for Fog applied to the scene. + + + + Antialiasing + Kantenglättung + + + Antialiasing Mode + + + + Sets the antialiasing mode applied to the scene. + + + + Antialiasing Quality + + + + Sets the level of antialiasing applied to the scene. + + + + Specular AA + + + + Enables specular antialiasing. + + + + Temporal AA + + + + Enables temporal antialiasing using camera jittering and frame blending. + + + + Temporal AA Strength + + + + Sets the amount of temporal antialiasing applied. + + + + Ambient Occlusion + + + + Enabled + Aktiviert + + + Enables ambient occlusion. + + + + Strength + + + + Sets the amount of ambient occulusion applied. + + + + Distance + + + + Sets roughly how far ambient occlusion shadows spread away from objects. + + + + Softness + + + + Sets how smooth the edges of the ambient occlusion shading are. + + + + Sample Rate + + + + Sets ambient occlusion quality (more shades of gray) at the expense of performance. + + + + Bias + + + + Sets a cutoff distance preventing objects from exhibiting ambient occlusion at close distances. + + + + Dither + + + + Enables scattering the edges of the ambient occlusion shadow bands to improve smoothness. + + + + Image Based Lighting + + + + HDR Image + + + + Sets an image to use to light the scene, either instead of, or in addition to standard lights. + + + + Exposure + + + + Sets the amount of light emitted by the light probe. + + + + Horizon + + + + Sets the light probe horizon. When set, adds darkness (black) to the bottom of the environment, forcing the lighting to come predominantly from the top of the image. + + + + Orientation + Ausrichtung + + + Sets the orientation of the light probe. + + + + Advanced + Erweitert + + + Enable Depth Test + + + + Enables depth testing. Disable to optimize render speed for layers with mostly transparent objects. + + + + Enable Depth Prepass + + + + Enables draw depth buffer as a separate pass. Disable to optimize render speed for layers with low depth complexity. + + + + Debug Settings + + + + Additional render settings for debugging scenes. + + + + Light Mapper + + + + Sets the light mapper object for the scene. @@ -61197,97 +64473,110 @@ This is used for calculating the total implicit size. - SelectBackgroundColorAction + SetUniformValueSection - Select Background Color + Set Uniform Value - Select a color for the background of the 3D view. + Target + Ziel + + + Sets the name of the uniform to change value for a pass. + + + + Value + Wert + + + Sets the value of the uniform. - SelectGridColorAction + ShaderSection - Select Grid Color + Shader - Select a color for the grid lines of the 3D view. + Source + + + + Sets the shader source code. + + + + Stage + Phase + + + Sets the shader stage. - SelectionModeToggleAction + ShadowSection - Toggle Group/Single Selection Mode + Shadows + + + + Casts Shadow + + + + Enables shadow casting for this light. + + + + Amount + + + + Sets how dark the cast shadows should be. + + + + Filter + Filter + + + Sets how much blur is applied to the shadows. + + + + Quality + + + + Sets the quality of the shadow map created for shadow rendering. + + + + Bias + + + + Sets a slight offset to avoid self-shadowing artifacts. + + + + Far Distance + + + + Sets the maximum distance for the shadow map. - ShowCameraFrustumAction + SkinSection - Always Show Camera Frustums - - - - Toggle between always showing the camera frustum visualization and only showing it when the camera is selected. - - - - - ShowGridAction - - Show Grid - - - - Toggle the visibility of the helper grid. - - - - - ShowIconGizmoAction - - Show Icon Gizmos - - - - Toggle the visibility of icon gizmos, such as light and camera icons. - - - - - ShowLookAtAction - - Show Look-at - - - - Toggle the visibility of the edit camera look-at indicator. - - - - - ShowParticleEmitterAction - - Always Show Particle Emitters And Attractors - - - - Toggle between always showing the particle emitter and attractor visualizations and only showing them when the emitter or attractor is selected. - - - - - ShowSelectionBoxAction - - Show Selection Boxes - - - - Toggle the visibility of selection boxes. + Skin @@ -61414,13 +64703,6 @@ This is used for calculating the total implicit size. Legt fest, ob der aktuelle Wert aktualisiert werden soll, während der Benutzer den Slider verschiebt, oder nur aktualisiert wird, wenn er losgelassen wird. - - SnapConfigAction - - Open snap configuration dialog - - - SnapConfigurationDialog @@ -61488,13 +64770,6 @@ This is used for calculating the total implicit size. Alle zurücksetzen - - SnapToggleAction - - Toggle snapping during node drag - - - SocialButton @@ -61612,6 +64887,349 @@ A near field gain of 1 will raise the volume of the sound signal by approx 20 dB + + SpecularGlossyMaterialSection + + Specular Glossy Material + + + + Alpha Mode + + + + Sets the mode for how the alpha channel of material color is used. + + + + Alpha Cutoff + + + + Sets the cutoff value when using the Mask alphaMode. + + + + Blend Mode + + + + Sets how the colors of the model rendered blend with those behind it. + + + + Lighting + + + + Sets which lighting method is used when generating this material. + + + + Albedo + + + + Color + Farbe + + + Sets the albedo color of the material. + + + + Map + + + + Sets a texture used to set the albedo color of the material. + + + + Specular + + + + Sets the specular color of the material. + + + + Sets a texture used to set the specular color of the material. + + + + Glossiness + + + + Amount + + + + Sets the size of the specular highlight generated from lights, and the clarity of reflections in general. + + + + Sets a texture to control the glossiness of the material. + + + + Channel + + + + Sets the texture channel used to read the glossiness value from glossinessMap. + + + + Normal + Normal + + + Sets an RGB image used to simulate fine geometry displacement across the surface of the material. + + + + Strength + + + + Sets the amount of simulated displacement for the normalMap. + + + + Occlusion + + + + Sets the factor used to modify the values from the occlusionMap texture. + + + + Sets a texture used to determine how much indirect light the different areas of the material should receive. + + + + Sets the texture channel used to read the occlusion value from occlusionMap. + + + + Opacity + Deckkraft + + + Sets the opacity of just this material, separate from the model. + + + + Sets a texture used to control the opacity differently for different parts of the material. + + + + Sets the texture channel used to read the opacity value from opacityMap. + + + + Emissive Color + + + + Sets a texture to be used to set the emissive factor for different parts of the material. + + + + Factor + + + + Sets the color of self-illumination for this material. + + + + Height + Höhe + + + Sets the factor used to modify the values from the heightMap texture. + + + + Sets a texture used to determine the height the texture will be displaced when rendered through the use of Parallax Mapping. + + + + Sets the texture channel used to read the height value from heightMap. + + + + Min Map Samples + + + + Sets the minimum number of samples used for performing Parallax Occlusion Mapping using the heightMap. + + + + Max Map Samples + + + + Sets the maximum number of samples used for performing Parallax Occlusion Mapping using the heightMap. + + + + Clearcoat + + + + Sets the intensity of the clearcoat layer. + + + + Sets a texture used to determine the intensity of the clearcoat layer. + + + + Sets the texture channel used to read the intensity from clearcoatMap. + + + + Roughness Amount + + + + Sets the roughness of the clearcoat layer. + + + + Roughness Map + + + + Sets a texture used to determine the roughness of the clearcoat layer. + + + + Roughness Channel + + + + Sets the texture channel used to read the roughness from clearcoatRoughnessMap. + + + + Normal Map + + + + Sets a texture used as a normalMap for the clearcoat layer. + + + + Refraction + + + + Transmission Factor + + + + Sets the base percentage of light that is transmitted through the surface. + + + + Transmission Map + + + + Sets a texture that contains the transmission percentage of a the surface. + + + + Transmission Channel + + + + Sets the texture channel used to read the transmission percentage from transmissionMap. + + + + Thickness Factor + + + + Sets the thickness of the volume beneath the surface in model coordinate space. + + + + Thickness Map + + + + Sets a texture that contains the thickness of a the material volume. + + + + Thickness Channel + + + + Sets the texture channel used to read the thickness amount from thicknessMap. + + + + Attenuation Color + + + + Sets the color that white lights turn into due to absorption when reaching the attenuation distance. + + + + Attenuation Distance + + + + Sets the average distance in world space that light travels in the medium before interacting with a particle. + + + + Advanced + Erweitert + + + Vertex Colors + + + + Sets whether vertex colors are used to modulate the base color. + + + + Enabled + Aktiviert + + + Disabled + Deaktiviert + + + Point Size + + + + Sets the size of the points rendered, when the geometry is using a primitive type of points. + + + + Line Width + + + + Sets the width of the lines rendered, when the geometry is using a primitive type of lines or line strips. + + + SpinBoxSpecifics @@ -61668,6 +65286,25 @@ it reaches the start or end. + + SplitButton + + Packing + + + + Sending + + + + Starting + + + + Manage run targets + + + SplitViewSpecifics @@ -61684,9 +65321,49 @@ it reaches the start or end. - SplitViewToggleAction + SpotLightSection - Toggle Split View On/Off + Spot Light + + + + Constant Fade + + + + Sets the constant attenuation of the light. + + + + Linear Fade + + + + Sets the linear attenuation of the light. + + + + Quadratic Fade + + + + Sets the quadratic attenuation of the light. + + + + Cone Angle + + + + Sets the angle of the light cone. + + + + Inner Cone Angle + + + + Sets the angle of the inner light cone. @@ -62089,13 +65766,6 @@ it reaches the start or end. - - SubComponentManager::parseDirectory - - Invalid meta info - Ungültige Metainformation - - SwipeViewSpecifics @@ -62123,17 +65793,6 @@ it reaches the start or end. Ausrichtung - - SyncEnvBackgroundAction - - Use Scene Environment - - - - Sets the 3D view to use the Scene Environment color or skybox as background color. - - - TabBarSpecifics @@ -62220,25 +65879,6 @@ This is used for calculating the total implicit size. - - TemplateMerge - - Merge With Template - - - - &Browse... - &Auswählen... - - - Template: - Template: - - - Browse Template - - - TestControlPanel @@ -62665,13 +66305,6 @@ This is used for calculating the total implicit size. - - TextTool - - Text Tool - Textwerkzeug - - TextureBrowserContextMenu @@ -62718,6 +66351,199 @@ This is used for calculating the total implicit size. + + TextureEditorTopSection + + Name + Name + + + Texture name + + + + + TextureInputSection + + Texture Input + + + + Texture + + + + Sets the input texture. + + + + Enabled + Aktiviert + + + Sets the texture enabled state. + + + + + TextureSection + + Texture + + + + Source + + + + Sets the location of an image file containing the data used by the texture. + + + + Source Item + Quell-Item + + + Sets an item to be used as the source of the texture. + + + + Texture Data + + + + Sets a reference to a TextureData component which defines the contents and properties of raw texture data. + + + + Scale + Skalieren + + + Sets how to scale the U texture coordinate when mapping to UV coordinates of a mesh. + + + + Sets how to scale the V texture coordinate when mapping to UV coordinates of a mesh. + + + + Flip V + + + + Sets the use of the vertically flipped coordinates. + + + + Flip U + + + + Sets the use of the horizontally flipped texture coordinates. + + + + Auto Orientation + + + + Sets if a texture transformation, such as flipping the V texture coordinate, is applied automatically for textures where this is typically relevant. + + + + Texture Mapping + + + + Sets which method of mapping to use when sampling this texture. + + + + U Tiling + + + + Sets how the texture is mapped when the U scaling value is greater than 1. + + + + V Tiling + + + + Sets how the texture is mapped when the V scaling value is greater than 1. + + + + UV Index + + + + Sets the UV coordinate index used by this texture. + + + + UV Rotation + + + + Sets the rotation of the texture around the pivot point. + + + + Position + Position + + + Sets the U coordinate mapping offset from left to right. + + + + Sets the V coordinate mapping offset from bottom to top. + + + + Pivot + + + + Sets the pivot U position. + + + + Sets the pivot V position. + + + + Generate Mipmaps + + + + Sets if mipmaps are generated for textures that do not provide mipmap levels themselves. + + + + Mag Filter + + + + Sets how the texture is sampled when a texel covers more than one pixel. + + + + Min Filter + + + + Mip Filter + + + + Sets how the texture mipmaps are sampled when a texel covers less than one pixel. + + + ThumbnailDelegate @@ -63067,9 +66893,41 @@ Are you sure you want to remove it? - VisibilityTogglesAction + View3DSection - Visibility Toggles + View3D + View3D + + + Camera + + + + Sets which camera is used to render the scene. + + + + Environment + Umgebung + + + Sets the scene environment used to render the scene. + + + + Import Scene + + + + Sets the reference node of the scene to render to the viewport. + + + + Render Format + + + + Sets the format of the backing texture. @@ -63110,14 +66968,6 @@ Are you sure you want to remove it? WidgetPluginManager - - Failed to create instance of file "%1": %2 - Es konnte keine Instanz der Datei "%1" erzeugt werden: %2 - - - Failed to create instance of file "%1". - Es konnte keine Instanz der Datei "%1" erzeugt werden. - File "%1" is not a Qt Quick Designer plugin. Die Datei "%1" ist kein Qt Quick Designer-Plugin. @@ -63205,6 +67055,289 @@ Are you sure you want to remove it? + + itemlibrary + + Item + Element + + + Rectangle + + + + Text + Text + + + Text Edit + Text Edit + + + Text Input + Texteingabe + + + Mouse Area + Mouse Area + + + Image + Bild + + + Animated Image + + + + Animated Sprite + + + + Border Image + Border Image + + + Flickable + Flickable + + + Grid View + Gitteranzeige + + + List View + List View + + + Path View + Path View + + + Focus Scope + + + + Column + Spalte + + + Row + Zeile + + + Grid + Gitter + + + Flow + Anordnung + + + Property + Eigenschaft + + + Pause + + + + Sequential + + + + Parallel + Parallel + + + Script + + + + Color + Farbe + + + Number + + + + Loader + + + + Repeater + + + + Busy Indicator + + + + Button + + + + Check Box + Checkbox + + + Check Delegate + + + + Combo Box + Combobox + + + Control + + + + Delay Button + + + + Dial + + + + Frame + Frame + + + Group Box + + + + Item Delegate + + + + Label + + + + Page + + + + Page Indicator + + + + Pane + + + + Progress Bar + + + + Radio Button + Radioknopf + + + Radio Delegate + + + + Range Slider + + + + Round Button + + + + Slider + + + + Spin Box + + + + Scroll View + + + + Stack View + + + + Swipe Delegate + + + + Swipe View + + + + Switch + + + + Switch Delegate + + + + Tab Bar + + + + Tab Button + + + + Text Area + Textfeld + + + Text Field + Textzeile + + + Tool Bar + + + + Tool Button + + + + Tool Separator + + + + Tumbler + + + + Views + + + + Positioner + + + + Animation + Animation + + + Instancers + + + + Basic + Grundlegend + + + Controls 2 + + + main From d7a50e7e539c5845e49341cc3d80c4d4038304e0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 18 Feb 2025 11:07:16 +0100 Subject: [PATCH 022/117] Utils: Allow editing disabled environment variables Task-number: QTCREATORBUG-32495 Change-Id: Ic2a8d9ea4f3e6884dde02e706ee4ef801ab52b6c Reviewed-by: Christian Stenger --- src/libs/utils/namevaluesdialog.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libs/utils/namevaluesdialog.cpp b/src/libs/utils/namevaluesdialog.cpp index cd34a23955f..c5cf7a6dc50 100644 --- a/src/libs/utils/namevaluesdialog.cpp +++ b/src/libs/utils/namevaluesdialog.cpp @@ -115,6 +115,10 @@ bool NameValueItemsWidget::editVariable(const QString &name, Selection selection } }; skipWhiteSpace(); + if (offset < line.length() && line.at(offset) == '#') { + ++offset; + skipWhiteSpace(); + } if (line.mid(offset, name.size()) != name) continue; offset += name.size(); From 691e08c63e804ed6840b46b47888f4b884daa351 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 13 Feb 2025 10:29:04 +0100 Subject: [PATCH 023/117] Tests: Add testing overview documentation Change-Id: I37ca6b6207b9da8653331b367fb66ba147490101 Reviewed-by: Eike Ziller --- TESTING.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 TESTING.md diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 00000000000..4da1cc03064 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,70 @@ +# Testing Qt Creator + +There are four kinds of tests in Qt Creator, you can find some more documentation +[online here](https://doc-snapshots.qt.io/qtcreator-extending/plugin-tests.html). + +## Manual Tests + +Located in `tests/manual/...`, these need to be run manually as separate executables and require +user interaction for "playing around" with some piece of code. + +## Squish-Based Tests + +`tests/system/...` are run with [Squish](https://www.qt.io/product/quality-assurance/squish) +at irregular intervals and specifically checked for releases (RTA). + +## Auto/Unit Tests + +`tests/auto/...` are separate QTest-based executables (tst_...) that are run with tools like +cmake/ctest. They run automatically with the PRECHECK in Gerrit, etc. + +## Plugin/Integration Tests + +These tests are integrated into the plugins themselves and are executed within +the context of a fully running Qt Creator. They are run with the `-test ` +command line parameter of the qtcreator executable. +This starts Qt Creator with only that plugin and its dependencies loaded, executes any test +functions that the plugin registers, prints the QTest output, and then closes. + +For plugin tests, plugins register test functions if Qt Creator was compiled with WITH_TESTS, +like this: + +```c++ +void TextEditorPlugin::initialize() +{ +#ifdef WITH_TESTS + addTestCreator(createFormatTextTest); + addTestCreator(createTextDocumentTest); + addTestCreator(createTextEditorTest); + addTestCreator(createSnippetParserTest); +#endif + ... +} +``` + +The "test creator" is a factory function that returns a QObject, which functions the same as the +tstSomething QObjects used in standalone unit tests. + +```c++ +QObject *createFormatTextTest() +{ + return new FormatTextTest; +} +``` + +Slots are executed as QTest tests, and there can be init and cleanup functions, etc. + +```c++ +class FormatTextTest final : public QObject +{ + Q_OBJECT + +private slots: + void testFormatting_data(); + void testFormatting(); +}; +``` + +These tests are executed after Qt Creator plugins have fully initialized and can access the full +Qt Creator state, open files, load projects, etc. (depending on the declared dependencies of +the tested plugin). From 881f15da6b66b613faa72dc428c3b3352db6a2dd Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 19 Feb 2025 07:54:03 +0100 Subject: [PATCH 024/117] Docker: Replace mutex+value with SynchronizedValue Change-Id: Id7ca66be635abbb479602e040889c7ccfa889179 Reviewed-by: hjk --- src/plugins/docker/dockerdevice.cpp | 14 +++++++------- src/plugins/docker/dockerdevice.h | 5 ++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index a2696c8ee61..361c09639dc 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -1385,19 +1385,19 @@ DockerDeviceFactory::DockerDeviceFactory() }); setConstructionFunction([this] { auto device = DockerDevice::create(); - QMutexLocker lk(&m_deviceListMutex); - m_existingDevices.push_back(device); + m_existingDevices.writeLocked()->push_back(device); return device; }); } void DockerDeviceFactory::shutdownExistingDevices() { - QMutexLocker lk(&m_deviceListMutex); - for (const auto &weakDevice : m_existingDevices) { - if (std::shared_ptr device = weakDevice.lock()) - device->shutdown(); - } + m_existingDevices.read([](const std::vector> &devices) { + for (const std::weak_ptr &weakDevice : devices) { + if (std::shared_ptr device = weakDevice.lock()) + device->shutdown(); + } + }); } expected_str> DockerDevicePrivate::osTypeAndArch() const diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h index ea2f0d21feb..8c575b08ad6 100644 --- a/src/plugins/docker/dockerdevice.h +++ b/src/plugins/docker/dockerdevice.h @@ -8,7 +8,7 @@ #include #include -#include +#include namespace Docker::Internal { @@ -92,8 +92,7 @@ public: void shutdownExistingDevices(); private: - QMutex m_deviceListMutex; - std::vector> m_existingDevices; + Utils::SynchronizedValue>> m_existingDevices; }; } // namespace Docker::Internal From e5a3566362306c5cfe54ee9dcc9d9389c0b1d8cb Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 18 Feb 2025 13:34:04 +0100 Subject: [PATCH 025/117] Docker: Improve DockerApi::canConnect Replaced Process::start with Process::runBlocking and some general cleanup. Change-Id: I5e2be010b4e6d799d586dbbcd86ca5bf64294ccb Reviewed-by: hjk --- src/plugins/docker/dockerapi.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/plugins/docker/dockerapi.cpp b/src/plugins/docker/dockerapi.cpp index f19bee6abe1..7096b66e006 100644 --- a/src/plugins/docker/dockerapi.cpp +++ b/src/plugins/docker/dockerapi.cpp @@ -38,22 +38,19 @@ bool DockerApi::canConnect() { Process process; FilePath dockerExe = dockerClient(); - if (dockerExe.isEmpty() || !dockerExe.isExecutableFile()) + if (dockerExe.isEmpty()) return false; - bool result = false; - process.setCommand({dockerExe, {"info"}}); - connect(&process, &Process::done, [&process, &result] { + process.runBlocking(); + + const bool success = process.result() == ProcessResult::FinishedWithSuccess; + if (!success) + qCWarning(dockerApiLog) << "Failed to connect to docker daemon:" << process.allOutput(); + else qCInfo(dockerApiLog) << "'docker info' result:\n" << qPrintable(process.allOutput()); - if (process.result() == ProcessResult::FinishedWithSuccess) - result = true; - }); - process.start(); - process.waitForFinished(); - - return result; + return process.result() == ProcessResult::FinishedWithSuccess; } bool DockerApi::isContainerRunning(const QString &containerId) From 9cbdfcd13ea8b19ab0bb905eb015abca6ff39a7f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 18 Feb 2025 08:51:57 +0100 Subject: [PATCH 026/117] SquishTests: Fix welcome page test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix path used for the new MinGW Qt. Correctly clean up examples - newer Qt versions use cmake instead of qmake. 'Example' seems to have been removed from the title of the example docs. Change-Id: I6751d9b26a24bf0e53d79a8d4203c8f11bb2e026 Reviewed-by: Robert Löhning --- tests/system/shared/classes.py | 5 ++++- tests/system/suite_WELP/tst_WELP03/test.py | 21 ++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py index 755234eacd5..74722c23ad2 100644 --- a/tests/system/shared/classes.py +++ b/tests/system/shared/classes.py @@ -32,7 +32,10 @@ class Targets: @staticmethod def isOnlineInstaller(target): - return target == Targets.DESKTOP_6_2_4 + onlineInstallerTargets = [Targets.DESKTOP_6_2_4] + if os.getenv("SYSTEST_NEW_SETTINGS") == "1": + onlineInstallerTargets.append(Targets.DESKTOP_6_7_3_GCC) + return target in onlineInstallerTargets @staticmethod def availableTargetClasses(ignoreValidity=False): diff --git a/tests/system/suite_WELP/tst_WELP03/test.py b/tests/system/suite_WELP/tst_WELP03/test.py index 8d4fa29a9bb..d73a84e35fa 100644 --- a/tests/system/suite_WELP/tst_WELP03/test.py +++ b/tests/system/suite_WELP/tst_WELP03/test.py @@ -38,8 +38,9 @@ def openExample(examplesLineEdit, input, exampleRegex, exampleName, waitForChild mouseClick(waitForObjectItem(listView, str(example.text))) handlePackagingMessageBoxes() helpWidget = waitForObject(":Help Widget_Help::Internal::HelpWidget") - test.verify(waitFor('exampleName in str(helpWidget.windowTitle)', 5000), - "Verifying: The example application is opened inside Help.") + if not test.verify(waitFor('exampleName in str(helpWidget.windowTitle)', 5000), + "Verifying: The example application is opened inside Help."): + test.log("%s vs %s" % (str(helpWidget.windowTitle), exampleName)) sendEvent("QCloseEvent", helpWidget) # assume the correct kit is selected, hit Configure Project clickButton(waitForObject(":Qt Creator.Configure Project_QPushButton")) @@ -80,8 +81,10 @@ def main(): example = findExampleOrTutorial(listView, ".*", True) test.verify(example is None, "Verifying: No example is shown.") - proFiles = [os.path.join(p, "opengl", "2dpainting", "2dpainting.pro") - for p in QtPath.getPaths(QtPath.EXAMPLES)] + proFiles = [] + for p in QtPath.getPaths(QtPath.EXAMPLES): + proFiles.append(os.path.join(p, "opengl", "2dpainting", "2dpainting.pro")) + proFiles.append(os.path.join(p, "opengl", "2dpainting", "CMakeLists.txt")) cleanUpUserFiles(proFiles) example = openExample(examplesLineEdit, "2d painting", "2D Painting.*", "2D Painting Example") @@ -97,12 +100,16 @@ def main(): # go to "Welcome" page and choose another example switchViewTo(ViewConstants.WELCOME) - proFiles = [os.path.join(p, "widgets", "itemviews", "addressbook", "addressbook.pro") - for p in QtPath.getPaths(QtPath.EXAMPLES)] + + proFiles = [] + for p in QtPath.getPaths(QtPath.EXAMPLES): + proFiles.append(os.path.join(p, "widgets", "itemviews", "addressbook", "addressbook.pro")) + proFiles.append(os.path.join(p, "widgets", "itemviews", "addressbook", "CMakeLists.txt")) + cleanUpUserFiles(proFiles) examplesLineEdit = waitForObject(search %(expect[1][0], expect[1][1])) example = openExample(examplesLineEdit, "address book", "(0000 )?Address Book.*", - "Address Book Example", 3) + "Address Book ", 3) if example is not None: # close second example application test.verify(checkIfObjectExists("{column='0' container=':Qt Creator_Utils::NavigationTreeView'" From 20ac87e9539f192d5cf9c61b39cc49d2e49537e1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 20 Feb 2025 13:42:49 +0100 Subject: [PATCH 027/117] Wizards/QtCreatorPlugin: Modernize Use ActionBuilder and dialogParent Change-Id: Id80fb91cda9453d3fdbb316db3e699933a7760ca Reviewed-by: hjk --- .../wizards/qtcreatorplugin/myplugin.cpp | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.cpp b/share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.cpp index 9a6a54b2c21..7623760a534 100644 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.cpp +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/myplugin.cpp @@ -16,6 +16,8 @@ #include #include +using namespace Core; + namespace %{PluginName}::Internal { class %{CN} final : public ExtensionSystem::IPlugin @@ -46,16 +48,15 @@ public: // bool IPlugin::initialize(const QStringList &arguments, QString *errorString) // overload. - auto action = new QAction(Tr::tr("%{PluginName} Action"), this); - Core::Command *cmd = Core::ActionManager::registerAction( - action, Constants::ACTION_ID, Core::Context(Core::Constants::C_GLOBAL)); - cmd->setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Alt+Meta+A"))); - connect(action, &QAction::triggered, this, &%{CN}::triggerAction); - - Core::ActionContainer *menu = Core::ActionManager::createMenu(Constants::MENU_ID); + ActionContainer *menu = ActionManager::createMenu(Constants::MENU_ID); menu->menu()->setTitle(Tr::tr("%{PluginName}")); - menu->addAction(cmd); - Core::ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu); + ActionManager::actionContainer(Core::Constants::M_TOOLS)->addMenu(menu); + + ActionBuilder(this, Constants::ACTION_ID) + .addToContainer(Constants::MENU_ID) + .setText(Tr::tr("%{PluginName} Action")) + .setDefaultKeySequence(Tr::tr("Ctrl+Alt+Meta+A")) + .addOnTriggered(this, &%{CN}::triggerAction); } void extensionsInitialized() final @@ -77,7 +78,7 @@ public: private: void triggerAction() { - QMessageBox::information(Core::ICore::mainWindow(), + QMessageBox::information(ICore::dialogParent(), Tr::tr("Action Triggered"), Tr::tr("This is an action from %{PluginName}.")); } From 29ec942455190878b6b2e32395c5ccac8566aa7a Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 11 Feb 2025 08:50:55 +0100 Subject: [PATCH 028/117] SquishTests: Adapt generic highlighter test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mime database nowadays uses a unified mime type for haskell and literate haskell. Adapt the test accordingly. Change-Id: Ic21ba56f927b6472c2c021bf527dd42f17233eb1 Reviewed-by: Robert Löhning --- .../tst_generic_highlighter/test.py | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/tests/system/suite_editors/tst_generic_highlighter/test.py b/tests/system/suite_editors/tst_generic_highlighter/test.py index 13dda9badac..0d96e4e99bf 100644 --- a/tests/system/suite_editors/tst_generic_highlighter/test.py +++ b/tests/system/suite_editors/tst_generic_highlighter/test.py @@ -46,8 +46,9 @@ def getOrModifyFilePatternsFor(mimeType, filter='', toBePresent=None): if result == ['']: test.warning("MIME type '%s' seems to have no file patterns." % mimeType) return result - waitFor('model.rowCount() == 1', 2000) - if model.rowCount() == 1: + waitFor('model.rowCount() == 2', 2000) + if model.rowCount() == 2: + test.log("Checking %s" % dumpItems(model)[0]) patternsLineEd = clickTableGetPatternLineEdit(mimeTypeTable, dumpItems(model)[0]) patterns = str(patternsLineEd.text) if toBePresent: @@ -80,8 +81,8 @@ def getOrModifyFilePatternsFor(mimeType, filter='', toBePresent=None): result = toSuffixArray(patterns) else: result = toSuffixArray(patterns) - elif model.rowCount() > 1: - test.warning("MIME type '%s' has ambiguous results." % mimeType) + elif model.rowCount() > 0: + test.warning("MIME type '%s' has unexpected results." % mimeType) else: test.log("MIME type '%s' seems to be unknown to the system." % mimeType) clickButton(":Options.Cancel_QPushButton") @@ -121,11 +122,9 @@ def hasSuffix(fileName, suffixPatterns): return True return False -def displayHintForHighlighterDefinition(fileName, patterns, lPatterns, added, addedLiterate): +def displayHintForHighlighterDefinition(fileName, patterns, added): if hasSuffix(fileName, patterns): return not added - if hasSuffix(fileName, lPatterns): - return not addedLiterate test.warning("Got an unexpected suffix.", "Filename: %s, Patterns: %s" % (fileName, str(patterns + lPatterns))) return False @@ -138,7 +137,6 @@ def main(): return patterns = getOrModifyFilePatternsFor("text/x-haskell", "x-haskell") - lPatterns = getOrModifyFilePatternsFor("text/x-literate-haskell", "literate-haskell") folder = tempDir() filesToTest = ["Main.lhs", "Main.hs"] @@ -150,7 +148,7 @@ def main(): if editor == None: earlyExit("Something's really wrong! (did the UI change?)") return - expectHint = hasSuffix(current, patterns) or hasSuffix(current, lPatterns) + expectHint = hasSuffix(current, patterns) mssg = "Verifying whether hint for missing highlight definition is present. (expected: %s)" try: waitForObject("{text='%s' type='QLabel' unnamed='1' visible='1' " @@ -166,9 +164,8 @@ def main(): invokeMenuItem("File", "Save All") invokeMenuItem("File", "Close All") - addedHaskell, addedLiterateHaskell = addHighlighterDefinition("haskell", "literate-haskell") - patterns = getOrModifyFilePatternsFor('text/x-haskell', 'x-haskell', ['.hs']) - lPatterns = getOrModifyFilePatternsFor('text/x-literate-haskell', 'literate-haskell', ['.lhs']) + addedHaskell = addHighlighterDefinition("haskell") + patterns = getOrModifyFilePatternsFor('text/x-haskell', 'x-haskell', ['.hs', '.lhs']) home = os.path.expanduser("~") for current in filesToTest: @@ -177,8 +174,7 @@ def main(): recentFile = recentFile.replace(home, "~", 1) invokeMenuItem("File", "Recent Files", "%d | " + recentFile) editor = getEditorForFileSuffix(current) - display = displayHintForHighlighterDefinition(current, patterns, lPatterns, - addedHaskell, addedLiterateHaskell) + display = displayHintForHighlighterDefinition(current, patterns, addedHaskell) try: waitForObject("{text='%s' type='QLabel' unnamed='1' visible='1' " "window=':Qt Creator_Core::Internal::MainWindow'}" % miss, 2000) From f100da3bbda3e524a203878ef0a651e1b9bf5526 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 11 Feb 2025 09:07:46 +0100 Subject: [PATCH 029/117] SquishTests: Silence unexpected pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts b567fb1a33a37e16ad070e20810b4491bd7b9673 as the respective bug has been fixed as fallout of some change. Task-number: QTCREATORBUG-31809 Change-Id: I5306662f9edf2b192ce86c15da5f4dcf87a89474 Reviewed-by: Robert Löhning --- tests/system/suite_general/tst_remove_kits/test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/system/suite_general/tst_remove_kits/test.py b/tests/system/suite_general/tst_remove_kits/test.py index cb1a8e4fe1b..652390e0107 100644 --- a/tests/system/suite_general/tst_remove_kits/test.py +++ b/tests/system/suite_general/tst_remove_kits/test.py @@ -16,8 +16,7 @@ def verifyProjectsMode(expectedKits): hasKits = len(expectedKits) > 0 test.verify(checkIfObjectExists(":scrollArea.Edit build configuration:_QLabel", hasKits), "Verify if build settings are being displayed.") - squishFunct = test.xverify if JIRA.isBugStillOpen(31809) and not hasKits else test.verify - squishFunct(checkIfObjectExists(":No valid kits found._QLabel", not hasKits), + test.verify(checkIfObjectExists(":No valid kits found._QLabel", not hasKits), "Verify if Creator reports missing kits.") kitNameTemplate = "Manual.%s" From e889e8d8d4891f4e8bf6b31d3e71a95e20d1357f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 20 Feb 2025 12:19:16 +0100 Subject: [PATCH 030/117] 2024 themes: Default background color for disabled buttons Disabled elements have Token_Text_Subtle as text/icon color. Disabled buttons (at least with Fusion Style) had Token_Background_Subtle as background which gives too low contrast against the text. This sets the background colors of disabled buttons to the default background color, which increases the contrast a bit. Task-number: QTCREATORBUG-32485 Change-Id: Ied83a5bff6deef317b027b719dfb65015deda9bd Reviewed-by: Orgad Shaneh --- share/qtcreator/themes/2024.tokenmapping | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/themes/2024.tokenmapping b/share/qtcreator/themes/2024.tokenmapping index 738cd0e9a79..2eef85f8a4f 100644 --- a/share/qtcreator/themes/2024.tokenmapping +++ b/share/qtcreator/themes/2024.tokenmapping @@ -70,7 +70,7 @@ PaletteBrightText=Token_Notification_Danger_Default PaletteBrightText=Token_Text_Default PaletteBrightTextDisabled=Token_Text_Subtle PaletteButton=Token_Background_Default -PaletteButtonDisabled=Token_Background_Subtle +PaletteButtonDisabled=Token_Background_Default PaletteButtonText=Token_Text_Default PaletteButtonTextDisabled=Token_Text_Subtle PaletteDark=Token_Background_Default From 8546301dc2a17904e417a0f8f26a29ec72f795ab Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 20 Feb 2025 11:54:03 +0100 Subject: [PATCH 031/117] Themes: remove redundant line PaletteBrightText gets another value a line later Change-Id: I9dd08ec7c94eb512a047673ee3c3796561f3a2b9 Reviewed-by: Cristian Adam --- share/qtcreator/themes/2024.tokenmapping | 1 - 1 file changed, 1 deletion(-) diff --git a/share/qtcreator/themes/2024.tokenmapping b/share/qtcreator/themes/2024.tokenmapping index 2eef85f8a4f..b1a3e047d8b 100644 --- a/share/qtcreator/themes/2024.tokenmapping +++ b/share/qtcreator/themes/2024.tokenmapping @@ -66,7 +66,6 @@ PaletteAlternateBase=Token_Background_Muted PaletteAlternateBaseDisabled=Token_Background_Subtle PaletteBase=Token_Background_Default PaletteBaseDisabled=Token_Background_Subtle -PaletteBrightText=Token_Notification_Danger_Default PaletteBrightText=Token_Text_Default PaletteBrightTextDisabled=Token_Text_Subtle PaletteButton=Token_Background_Default From 6c63d968cf268dc5036003722305c08016103c56 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Fri, 21 Feb 2025 08:47:17 +0100 Subject: [PATCH 032/117] Lua: Use string_view literals as keys when calling get() and get_or() A bug in gcc (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105438) creates a lot of warnings when using get_or with a simple "" string. To workaround, we create a string_view literal in place to workaround it. Change-Id: I3167c8f9c525a9b265a2c69a7ddadad0fe13ea71 Reviewed-by: hjk --- .../lualanguageclient/lualanguageclient.cpp | 22 +++--- src/plugins/lua/bindings/fetch.cpp | 13 ++-- src/plugins/lua/bindings/gui.cpp | 67 ++++++++++--------- src/plugins/lua/bindings/install.cpp | 3 +- src/plugins/lua/bindings/project.cpp | 3 +- src/plugins/lua/bindings/qt.cpp | 4 +- src/plugins/lua/bindings/qtcprocess.cpp | 13 ++-- src/plugins/lua/bindings/settings.cpp | 19 +++--- src/plugins/lua/bindings/texteditor.cpp | 3 +- src/plugins/lua/bindings/translate.cpp | 4 +- src/plugins/lua/bindings/utils.cpp | 10 +-- src/plugins/lua/luaengine.cpp | 3 +- src/plugins/lua/luapluginspec.cpp | 3 +- src/plugins/lua/luaqttypes.cpp | 50 +++++++------- 14 files changed, 118 insertions(+), 99 deletions(-) diff --git a/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp b/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp index c1b5f094653..7f0876a3b14 100644 --- a/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp +++ b/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp @@ -29,6 +29,7 @@ using namespace Utils; using namespace Core; using namespace TextEditor; using namespace ProjectExplorer; +using namespace std::string_view_literals; namespace { @@ -264,21 +265,22 @@ public: return make_unexpected(QString("init callback did not return a table or string")); }); - if (auto initOptionsTable = options.get>("initializationOptions")) + if (auto initOptionsTable = options.get>( + "initializationOptions"sv)) m_initializationOptions = ::Lua::toJsonString(*initOptionsTable); - else if (auto initOptionsString = options.get>("initializationOptions")) + else if (auto initOptionsString = options.get>("initializationOptions"sv)) m_initializationOptions = *initOptionsString; - m_name = options.get("name"); + m_name = options.get("name"sv); m_settingsTypeId = Utils::Id::fromString(QString("Lua_%1").arg(m_name)); - m_serverName = options.get_or("serverName", ""); + m_serverName = options.get_or("serverName"sv, ""); m_startBehavior = startBehaviorFromString( - options.get_or("startBehavior", "AlwaysOn")); + options.get_or("startBehavior"sv, "AlwaysOn")); - m_startFailedCallback = options.get("onStartFailed"); + m_startFailedCallback = options.get("onStartFailed"sv); - QString transportType = options.get_or("transport", "stdio"); + QString transportType = options.get_or("transport"sv, "stdio"); if (transportType == "stdio") m_transportType = TransportType::StdIO; else if (transportType == "localsocket") @@ -286,7 +288,7 @@ public: else qWarning() << "Unknown transport type:" << transportType; - auto languageFilter = options.get>("languageFilter"); + auto languageFilter = options.get>("languageFilter"sv); if (languageFilter) { auto patterns = languageFilter->get>("patterns"); auto mimeTypes = languageFilter->get>("mimeTypes"); @@ -300,10 +302,10 @@ public: m_languageFilter.mimeTypes.push_back(v.as()); } - m_showInSettings = options.get>("showInSettings").value_or(true); + m_showInSettings = options.get>("showInSettings"sv).value_or(true); // get> because on MSVC, get_or(..., nullptr) fails to compile - m_aspects = options.get>("settings").value_or(nullptr); + m_aspects = options.get>("settings"sv).value_or(nullptr); if (m_aspects) { connect(m_aspects, &AspectContainer::applied, this, [this] { diff --git a/src/plugins/lua/bindings/fetch.cpp b/src/plugins/lua/bindings/fetch.cpp index 29a54fae264..cf642bc418b 100644 --- a/src/plugins/lua/bindings/fetch.cpp +++ b/src/plugins/lua/bindings/fetch.cpp @@ -26,6 +26,7 @@ using namespace Utils; using namespace Core; +using namespace std::string_view_literals; namespace Lua::Internal { @@ -139,7 +140,7 @@ void setupFetchModule() "Fetch", [mod = std::move(module), infoBarCleaner = InfoBarCleaner()](sol::state_view lua) mutable -> sol::object { - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); sol::table async = lua.script("return require('async')", "_fetch_").get(); sol::function wrap = async["wrap"]; @@ -257,13 +258,13 @@ void setupFetchModule() const sol::main_table &options, const sol::main_function &callback, const sol::this_state &thisState) { - auto url = options.get("url"); + auto url = options.get("url"sv); auto actualFetch = [guard, url, options, callback, thisState]() { - auto method = (options.get_or("method", "GET")).toLower(); - auto headers = options.get_or("headers", {}); - auto data = options.get_or("body", {}); + auto method = (options.get_or("method"sv, "GET")).toLower(); + auto headers = options.get_or("headers"sv, {}); + auto data = options.get_or("body"sv, {}); bool convertToTable - = options.get>("convertToTable").value_or(false); + = options.get>("convertToTable"sv).value_or(false); QNetworkRequest request((QUrl(url))); if (headers && !headers.empty()) { diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index a8bb9507702..e2d51b58a4d 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -14,6 +14,7 @@ using namespace Layouting; using namespace Utils; +using namespace std::string_view_literals; namespace Lua::Internal { @@ -67,8 +68,8 @@ static std::unique_ptr construct(const sol::table &children) template void constructWidget(std::unique_ptr &widget, const sol::table &children) { - widget->setWindowTitle(children.get_or("windowTitle", "")); - widget->setToolTip(children.get_or("toolTip", "")); + widget->setWindowTitle(children.get_or("windowTitle"sv, "")); + widget->setToolTip(children.get_or("toolTip"sv, "")); for (size_t i = 1; i <= children.size(); ++i) { const auto &child = children[i]; @@ -120,86 +121,86 @@ template void setProperties(std::unique_ptr &item, const sol::table &children, QObject *guard) { if constexpr (has_setContentsMargins) { - sol::optional margins = children.get>("contentMargins"); + sol::optional margins = children.get>("contentMargins"sv); if (margins) item->setContentsMargins(margins->left(), margins->top(), margins->right(), margins->bottom()); } if constexpr (has_setCursor) { - const auto cursor = children.get>("cursor"); + const auto cursor = children.get>("cursor"sv); if (cursor) item->setCursor(*cursor); } if constexpr (has_setMinimumWidth) { - const auto minw = children.get>("minimumWidth"); + const auto minw = children.get>("minimumWidth"sv); if (minw) item->setMinimumWidth(*minw); } if constexpr (has_setVisible) { - const auto visible = children.get>("visible"); + const auto visible = children.get>("visible"sv); if (visible) item->setVisible(*visible); } if constexpr (has_setIcon) { - const auto icon = children.get>("icon"); + const auto icon = children.get>("icon"sv); if (icon) item->setIcon(*toIcon(*icon)); } if constexpr (has_setTextInteractionFlags) { - const auto interactionFlags = children.get>("interactionFlags"); + const auto interactionFlags = children.get>("interactionFlags"sv); if (interactionFlags) { item->setTextInteractionFlags(tableToFlags(*interactionFlags)); } } if constexpr (has_setFixedSize) { - sol::optional size = children.get>("fixedSize"); + sol::optional size = children.get>("fixedSize"sv); if (size) item->setFixedSize(*size); } if constexpr (has_setWordWrap) { - const auto wrap = children.get>("wordWrap"); + const auto wrap = children.get>("wordWrap"sv); if (wrap) item->setWordWrap(*wrap); } if constexpr (has_setTextFormat) { - const auto format = children.get>("textFormat"); + const auto format = children.get>("textFormat"sv); if (format) item->setTextFormat(*format); } if constexpr (has_setRightSideIconPath) { - const auto path = children.get>("rightSideIconPath"); + const auto path = children.get>("rightSideIconPath"sv); if (path) item->setRightSideIconPath(*path); } if constexpr (has_setPlaceHolderText) { - const auto text = children.get>("placeHolderText"); + const auto text = children.get>("placeHolderText"sv); if (text) item->setPlaceHolderText(*text); } if constexpr (has_setCompleter) { - const auto completer = children.get("completer"); + const auto completer = children.get("completer"sv); if (completer) item->setCompleter(completer); } if constexpr (has_setMinimumHeight) { - const auto minHeight = children.get>("minimumHeight"); + const auto minHeight = children.get>("minimumHeight"sv); if (minHeight) item->setMinimumHeight(*minHeight); } if constexpr (has_onReturnPressed) { - const auto callback = children.get>("onReturnPressed"); + const auto callback = children.get>("onReturnPressed"sv); if (callback) { item->onReturnPressed(guard, [func = *callback]() { void_safe_call(func); }); } @@ -213,19 +214,19 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject } if constexpr (has_setFlat) { - const auto flat = children.get>("flat"); + const auto flat = children.get>("flat"sv); if (flat) item->setFlat(*flat); } if constexpr (has_setIconPath) { - const auto iconPath = children.get>("iconPath"); + const auto iconPath = children.get>("iconPath"sv); if (iconPath) item->setIconPath(*iconPath); } if constexpr (has_setIconSize) { - const auto iconSize = children.get>("iconSize"); + const auto iconSize = children.get>("iconSize"sv); if (iconSize) item->setIconSize(*iconSize); } @@ -242,7 +243,7 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject } if constexpr (has_setSize) { - sol::optional size = children.get>("size"); + sol::optional size = children.get>("size"sv); if (size) item->setSize(size->width(), size->height()); } @@ -266,7 +267,7 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject if constexpr (has_onTextChanged) { sol::optional onTextChanged - = children.get>("onTextChanged"); + = children.get>("onTextChanged"sv); if (onTextChanged) { item->onTextChanged( guard, @@ -278,7 +279,7 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject } if constexpr (has_onClicked) { sol::optional onClicked - = children.get>("onClicked"); + = children.get>("onClicked"sv); if (onClicked) { item->onClicked( guard, @@ -289,17 +290,17 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject } } if constexpr (has_setText) { - auto text = children.get>("text"); + auto text = children.get>("text"sv); if (text) item->setText(*text); } if constexpr (has_setMarkdown) { - auto markdown = children.get>("markdown"); + auto markdown = children.get>("markdown"sv); if (markdown) item->setMarkdown(*markdown); } if constexpr (has_setSizePolicy) { - auto sizePolicy = children.get>("sizePolicy"); + auto sizePolicy = children.get>("sizePolicy"sv); if (sizePolicy) { QTC_ASSERT( sizePolicy->size() == 2, @@ -312,21 +313,21 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject } } if constexpr (has_setTitle) { - item->setTitle(children.get_or("title", "")); + item->setTitle(children.get_or("title"sv, "")); } if constexpr (has_setValue) { - sol::optional value = children.get>("value"); + sol::optional value = children.get>("value"sv); if (value) item->setValue(*value); } if constexpr (has_setReadOnly) { - sol::optional readOnly = children.get>("readOnly"); + sol::optional readOnly = children.get>("readOnly"sv); if (readOnly) item->setReadOnly(*readOnly); } if constexpr (has_setOpenExternalLinks) { sol::optional openExternalLinks = children.get>( - "openExternalLinks"); + "openExternalLinks"sv); if (openExternalLinks) item->setOpenExternalLinks(*openExternalLinks); } @@ -420,7 +421,7 @@ std::unique_ptr constructSplitter(const sol::table &children) std::unique_ptr item(new Splitter({})); constructWidget(item, children); - if (const auto &orientation = children.get>("orientation")) { + if (const auto &orientation = children.get>("orientation"sv)) { if (*orientation == "horizontal") item->setOrientation(Qt::Horizontal); else if (*orientation == "vertical") @@ -429,7 +430,7 @@ std::unique_ptr constructSplitter(const sol::table &children) throw sol::error(QString("Invalid orientation: %1").arg(*orientation).toStdString()); } - if (const auto collapsible = children.get>("collapsible")) + if (const auto collapsible = children.get>("collapsible"sv)) item->setChildrenCollapsible(*collapsible); for (size_t i = 1; i <= children.size(); ++i) { @@ -444,7 +445,7 @@ std::unique_ptr constructSplitter(const sol::table &children) } } - if (const auto &stretchFactors = children.get>("stretchFactors")) { + if (const auto &stretchFactors = children.get>("stretchFactors"sv)) { for (const auto &kv : *stretchFactors) { if (kv.second.get_type() != sol::type::number) throw sol::error("Stretch factors must be numbers"); @@ -457,7 +458,7 @@ std::unique_ptr constructSplitter(const sol::table &children) void setupGuiModule() { registerProvider("Gui", [](sol::state_view l) -> sol::object { - const ScriptPluginSpec *pluginSpec = l.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = l.get("PluginSpec"sv); QObject *guard = pluginSpec->connectionGuard.get(); sol::table gui = l.create_table(); diff --git a/src/plugins/lua/bindings/install.cpp b/src/plugins/lua/bindings/install.cpp index 64708856fad..7e28422de3c 100644 --- a/src/plugins/lua/bindings/install.cpp +++ b/src/plugins/lua/bindings/install.cpp @@ -29,6 +29,7 @@ using namespace Core; using namespace Tasking; using namespace Utils; +using namespace std::string_view_literals; namespace Lua::Internal { @@ -268,7 +269,7 @@ void setupInstallModule() sol::function wrap = async["wrap"]; sol::table install = lua.create_table(); - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); install["packageInfo"] = [pluginSpec](const QString &name, sol::this_state l) -> sol::optional { diff --git a/src/plugins/lua/bindings/project.cpp b/src/plugins/lua/bindings/project.cpp index 64b0b5abb1e..6600b2db9a0 100644 --- a/src/plugins/lua/bindings/project.cpp +++ b/src/plugins/lua/bindings/project.cpp @@ -17,13 +17,14 @@ using namespace ProjectExplorer; using namespace Utils; +using namespace std::string_view_literals; namespace Lua::Internal { void setupProjectModule() { registerProvider("Project", [](sol::state_view lua) -> sol::object { - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); QObject *guard = pluginSpec->connectionGuard.get(); sol::table result = lua.create_table(); diff --git a/src/plugins/lua/bindings/qt.cpp b/src/plugins/lua/bindings/qt.cpp index 8a8b18807e1..5f0d8c2e88a 100644 --- a/src/plugins/lua/bindings/qt.cpp +++ b/src/plugins/lua/bindings/qt.cpp @@ -16,13 +16,15 @@ #include #include +using namespace std::string_view_literals; + namespace Lua::Internal { void setupQtModule() { registerProvider("Qt", [](sol::state_view lua) { sol::table qt(lua, sol::create); - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); qt.new_usertype( "QCompleter", diff --git a/src/plugins/lua/bindings/qtcprocess.cpp b/src/plugins/lua/bindings/qtcprocess.cpp index 0aa6ccfa9b3..8d6d4741f5a 100644 --- a/src/plugins/lua/bindings/qtcprocess.cpp +++ b/src/plugins/lua/bindings/qtcprocess.cpp @@ -9,13 +9,14 @@ #include using namespace Utils; +using namespace std::string_view_literals; namespace Lua::Internal { void setupProcessModule() { registerProvider("Process", [](sol::state_view lua) -> sol::object { - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); QObject *guard = pluginSpec->connectionGuard.get(); sol::table async = lua.script("return require('async')", "_process_").get(); @@ -50,17 +51,17 @@ void setupProcessModule() process["commandOutput"] = wrap(process["commandOutput_cb"]); process["create"] = [](const sol::table ¶meter) { - const auto cmd = toFilePath(parameter.get>("command")); + const auto cmd = toFilePath(parameter.get>("command"sv)); const QStringList arguments = parameter.get_or("arguments", {}); const std::optional workingDirectory = parameter.get>( "workingDirectory"); - const auto stdOut = parameter.get>("stdout"); - const auto stdErr = parameter.get>("stderr"); - const auto stdIn = parameter.get>("stdin"); - const auto onFinished = parameter.get>("onFinished"); + const auto stdOut = parameter.get>("stdout"sv); + const auto stdErr = parameter.get>("stderr"sv); + const auto stdIn = parameter.get>("stdin"sv); + const auto onFinished = parameter.get>("onFinished"sv); auto p = std::make_unique(); diff --git a/src/plugins/lua/bindings/settings.cpp b/src/plugins/lua/bindings/settings.cpp index 1d6448e33fd..154d535352e 100644 --- a/src/plugins/lua/bindings/settings.cpp +++ b/src/plugins/lua/bindings/settings.cpp @@ -14,6 +14,7 @@ using namespace Utils; using namespace Core; +using namespace std::string_view_literals; namespace Lua::Internal { @@ -318,7 +319,7 @@ public: void setupSettingsModule() { registerProvider("Settings", [pool = ObjectPool()](sol::state_view lua) -> sol::object { - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); sol::table async = lua.script("return require('async')", "_process_").get(); sol::function wrap = async["wrap"]; @@ -658,19 +659,19 @@ void setupSettingsModule() OptionsPage(const ScriptPluginSpec *spec, const sol::table &options) { setCategory(Id::fromString( - QString("%1.%2").arg(spec->id).arg(options.get("categoryId")))); - const QString catName = options.get("displayCategory"); - const FilePath catIcon = options.get>("categoryIconPath") + QString("%1.%2").arg(spec->id).arg(options.get("categoryId"sv)))); + const QString catName = options.get("displayCategory"sv); + const FilePath catIcon = options.get>("categoryIconPath"sv) .value_or(FilePath::fromUserInput( - options.get_or("categoryIconPath", {}))); + options.get_or("categoryIconPath"sv, {}))); if (!catName.isEmpty() || !catIcon.isEmpty()) IOptionsPage::registerCategory(category(), catName, catIcon); - setId( - Id::fromString(QString("%1.%2").arg(spec->id).arg(options.get("id")))); - setDisplayName(options.get("displayName")); + setId(Id::fromString( + QString("%1.%2").arg(spec->id).arg(options.get("id"sv)))); + setDisplayName(options.get("displayName"sv)); - AspectContainer *container = options.get("aspectContainer"); + AspectContainer *container = options.get("aspectContainer"sv); if (container->isAutoApply()) throw sol::error("AspectContainer must have autoApply set to false"); diff --git a/src/plugins/lua/bindings/texteditor.cpp b/src/plugins/lua/bindings/texteditor.cpp index 16abd9fcfa6..7e9de660df9 100644 --- a/src/plugins/lua/bindings/texteditor.cpp +++ b/src/plugins/lua/bindings/texteditor.cpp @@ -23,6 +23,7 @@ using namespace Utils; using namespace Text; using namespace TextEditor; +using namespace std::string_view_literals; namespace { @@ -204,7 +205,7 @@ void setupTextEditorModule() TextEditorRegistry::instance(); registerProvider("TextEditor", [](sol::state_view lua) -> sol::object { - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); QObject *guard = pluginSpec->connectionGuard.get(); sol::table result = lua.create_table(); diff --git a/src/plugins/lua/bindings/translate.cpp b/src/plugins/lua/bindings/translate.cpp index aec22c23ce1..20eb397f53b 100644 --- a/src/plugins/lua/bindings/translate.cpp +++ b/src/plugins/lua/bindings/translate.cpp @@ -5,12 +5,14 @@ #include +using namespace std::string_view_literals; + namespace Lua::Internal { void setupTranslateModule() { autoRegister([](sol::state_view lua) { - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); static const QRegularExpression regexp("[^a-zA-Z]"); const QString trContext = QString(pluginSpec->name).replace(regexp, "_"); diff --git a/src/plugins/lua/bindings/utils.cpp b/src/plugins/lua/bindings/utils.cpp index 2750518312a..e8f8ef85105 100644 --- a/src/plugins/lua/bindings/utils.cpp +++ b/src/plugins/lua/bindings/utils.cpp @@ -22,6 +22,7 @@ #include using namespace Utils; +using namespace std::string_view_literals; namespace Lua::Internal { @@ -29,7 +30,8 @@ void setupUtilsModule() { registerProvider( "Utils", [futureSync = FutureSynchronizer()](sol::state_view lua) mutable -> sol::object { - const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"); + + const ScriptPluginSpec *pluginSpec = lua.get("PluginSpec"sv); auto async = lua.script("return require('async')", "_utils_").get(); @@ -45,12 +47,12 @@ void setupUtilsModule() const FilePath &p, const sol::table &options, const sol::function &cb) { - const QStringList nameFilters = options.get_or("nameFilters", {}); + const QStringList nameFilters = options.get_or("nameFilters"sv, {}); QDir::Filters fileFilters - = (QDir::Filters) options.get_or("fileFilters", QDir::NoFilter); + = (QDir::Filters) options.get_or("fileFilters"sv, QDir::NoFilter); QDirIterator::IteratorFlags flags = (QDirIterator::IteratorFlags) - options.get_or("flags", QDirIterator::NoIteratorFlags); + options.get_or("flags"sv, QDirIterator::NoIteratorFlags); FileFilter filter(nameFilters, fileFilters, flags); diff --git a/src/plugins/lua/luaengine.cpp b/src/plugins/lua/luaengine.cpp index b0c03b296a8..5c3ae2ba097 100644 --- a/src/plugins/lua/luaengine.cpp +++ b/src/plugins/lua/luaengine.cpp @@ -22,6 +22,7 @@ #include using namespace Utils; +using namespace std::string_view_literals; namespace Lua { @@ -381,7 +382,7 @@ expected_str prepareSetup( return make_unexpected(connectResult.error()); } - auto setupFunction = pluginTable->get_or("setup", {}); + auto setupFunction = pluginTable->get_or("setup"sv, {}); if (!setupFunction) return make_unexpected(Tr::tr("Extension info table did not contain a setup function.")); diff --git a/src/plugins/lua/luapluginspec.cpp b/src/plugins/lua/luapluginspec.cpp index 5b5b2f2035b..eb406a88fcf 100644 --- a/src/plugins/lua/luapluginspec.cpp +++ b/src/plugins/lua/luapluginspec.cpp @@ -22,6 +22,7 @@ Q_LOGGING_CATEGORY(luaPluginSpecLog, "qtc.lua.pluginspec", QtWarningMsg) using namespace ExtensionSystem; using namespace Utils; +using namespace std::string_view_literals; namespace Lua { @@ -51,7 +52,7 @@ expected_str LuaPluginSpec::create(const FilePath &filePath, so const FilePath directory = filePath.parentDir(); std::unique_ptr pluginSpec(new LuaPluginSpec()); - if (!pluginTable.get_or("setup", {})) + if (!pluginTable.get_or("setup"sv, {})) return make_unexpected(QString("Plugin info table did not contain a setup function")); QJsonValue v = toJson(pluginTable); diff --git a/src/plugins/lua/luaqttypes.cpp b/src/plugins/lua/luaqttypes.cpp index 1a5e43db061..57a00a188ad 100644 --- a/src/plugins/lua/luaqttypes.cpp +++ b/src/plugins/lua/luaqttypes.cpp @@ -9,6 +9,8 @@ #include #include +using namespace std::string_view_literals; + // This defines the conversion from QString to lua_string and vice versa bool sol_lua_check(sol::types, lua_State *L, @@ -48,10 +50,10 @@ QRect sol_lua_get(sol::types, lua_State *L, int index, sol::stack::record switch (table.size()) { case 0: return QRect( - table.get("x"), - table.get("y"), - table.get("width"), - table.get("height")); + table.get("x"sv), + table.get("y"sv), + table.get("width"sv), + table.get("height"sv)); case 2: return QRect(table.get(1), table.get(2)); case 4: @@ -87,10 +89,10 @@ QMargins sol_lua_get(sol::types, lua_State *L, int index, sol::stack:: switch (table.size()) { case 0: return QMargins( - table.get("left"), - table.get("top"), - table.get("right"), - table.get("bottom")); + table.get("left"sv), + table.get("top"sv), + table.get("right"sv), + table.get("bottom"sv)); case 4: return QMargins(table.get(1), table.get(2), table.get(3), table.get(4)); default: @@ -123,7 +125,7 @@ QSize sol_lua_get(sol::types, lua_State *L, int index, sol::stack::record const sol::table table = sol::stack::get(L, index, tracking); switch (table.size()) { case 0: - return QSize(table.get("width"), table.get("height")); + return QSize(table.get("width"), table.get("height"sv)); case 2: return QSize(table.get(1), table.get(2)); default: @@ -152,7 +154,7 @@ QPoint sol_lua_get(sol::types, lua_State *L, int index, sol::stack::reco const sol::table table = sol::stack::get(L, index, tracking); switch (table.size()) { case 0: - return QPoint(table.get("x"), table.get("y")); + return QPoint(table.get("x"), table.get("y"sv)); case 2: return QPoint(table.get(1), table.get(2)); default: @@ -183,10 +185,10 @@ QRectF sol_lua_get(sol::types, lua_State *L, int index, sol::stack::reco switch (table.size()) { case 0: return QRectF( - table.get("x"), - table.get("y"), - table.get("width"), - table.get("height")); + table.get("x"sv), + table.get("y"sv), + table.get("width"sv), + table.get("height"sv)); case 2: return QRectF(table.get(1), table.get(2)); case 4: @@ -222,10 +224,10 @@ QMarginsF sol_lua_get(sol::types, lua_State *L, int index, sol::stack switch (table.size()) { case 0: return QMarginsF( - table.get("left"), - table.get("top"), - table.get("right"), - table.get("bottom")); + table.get("left"sv), + table.get("top"sv), + table.get("right"sv), + table.get("bottom"sv)); case 4: return QMarginsF( table.get(1), table.get(2), table.get(3), table.get(4)); @@ -258,7 +260,7 @@ QSizeF sol_lua_get(sol::types, lua_State *L, int index, sol::stack::reco const sol::table table = sol::stack::get(L, index, tracking); switch (table.size()) { case 0: - return QSizeF(table.get("width"), table.get("height")); + return QSizeF(table.get("width"), table.get("height"sv)); case 2: return QSizeF(table.get(1), table.get(2)); default: @@ -287,7 +289,7 @@ QPointF sol_lua_get(sol::types, lua_State *L, int index, sol::stack::re const sol::table table = sol::stack::get(L, index, tracking); switch (table.size()) { case 0: - return QPointF(table.get("x"), table.get("y")); + return QPointF(table.get("x"), table.get("y"sv)); case 2: return QPointF(table.get(1), table.get(2)); default: @@ -317,10 +319,10 @@ QColor sol_lua_get(sol::types, lua_State *L, int index, sol::stack::reco switch (table.size()) { case 0: return QColor( - table.get("red"), - table.get("green"), - table.get("blue"), - table.get("alpha")); + table.get("red"sv), + table.get("green"sv), + table.get("blue"sv), + table.get("alpha"sv)); case 4: return QColor(table.get(1), table.get(2), table.get(3), table.get(4)); default: From c7533ae10665c5d61fd16885d2e37782f50259a3 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 19 Feb 2025 18:23:47 +0100 Subject: [PATCH 033/117] Themes: Update Primitive-Neon-* values They were updated in Figma Change-Id: Ic0fced5b6f5b03af704fba45f7fbab52e45d02d4 Reviewed-by: Eike Ziller --- share/qtcreator/themes/primitive-colors.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/themes/primitive-colors.inc b/share/qtcreator/themes/primitive-colors.inc index ef7eb97abdc..390c8096795 100644 --- a/share/qtcreator/themes/primitive-colors.inc +++ b/share/qtcreator/themes/primitive-colors.inc @@ -25,12 +25,12 @@ Primitive-Neon-100=FFDBFDEC Primitive-Neon-200=FFB9F9D9 Primitive-Neon-300=FF83F2BA Primitive-Neon-400=FF2CDE85 -Primitive-Neon-500=FF1EC974 -Primitive-Neon-600=FF12A75D +Primitive-Neon-500=FF27BF73 +Primitive-Neon-600=FF1F9B5D Primitive-Neon-700=FF12834B Primitive-Neon-800=FF14673E -Primitive-Neon-900=FF0D4328 -Primitive-Neon-1000=FF092C1B +Primitive-Neon-900=FF13432B +Primitive-Neon-1000=FF133122 Primitive-Red-100=FFFACED9 Primitive-Red-200=FFF0A4B7 From f1f1ebcb9d9e482ce6a8913a78b0d3d1d2d90efe Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 21 Feb 2025 11:27:58 +0100 Subject: [PATCH 034/117] Debugger: Fix debuggerServerProc handling Amends 265491e408c514d25554c533c304da0e58310234 Change-Id: I0dcf636c5b3b39e97ab446770645e0bfa6bacd22 Reviewed-by: hjk --- src/plugins/debugger/debuggerruncontrol.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 5fb02fbfae5..c53842fe565 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -680,9 +680,9 @@ void DebuggerRunTool::startDebugServerIfNeededAndContinueStartup() }); connect(&d->debuggerServerProc, &Process::done, this, [this] { - if (d->terminalProc.error() != QProcess::UnknownError) - reportFailure(d->terminalProc.errorString()); - if (d->terminalProc.error() != QProcess::FailedToStart && m_runParameters.serverEssential()) + if (d->debuggerServerProc.error() != QProcess::UnknownError) + reportFailure(d->debuggerServerProc.errorString()); + if (d->debuggerServerProc.error() != QProcess::FailedToStart && m_runParameters.serverEssential()) reportDone(); }); From 2769353e54fcd66e1f75244bc933a6a0cde2179f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 19 Feb 2025 15:58:03 +0100 Subject: [PATCH 035/117] Nim: Fix reparse trigger It can happen that the path is typed differently, but due to case-insensitive file systems still accessible with the different spelling. But this breaks the safety net for not triggering the reparse again and again. Change-Id: I5ef833032ec521ec93bf166c95a1a5f9cf90a14c Reviewed-by: hjk --- src/plugins/nim/project/nimbleproject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/nim/project/nimbleproject.cpp b/src/plugins/nim/project/nimbleproject.cpp index eac21c26a44..8b6dd9b1173 100644 --- a/src/plugins/nim/project/nimbleproject.cpp +++ b/src/plugins/nim/project/nimbleproject.cpp @@ -136,7 +136,7 @@ NimbleBuildSystem::NimbleBuildSystem(BuildConfiguration *bc) // Workaround for nimble creating temporary files in project root directory // when querying the list of tasks. // See https://github.com/nim-lang/nimble/issues/720 - if (directory != projectDirectory().toUrlishString()) + if (FilePath::fromString(directory) != projectDirectory()) requestDelayedParse(); }); From 0c74f1a38c1a262183227cb107cef502bbd80b58 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 20 Feb 2025 09:52:10 +0100 Subject: [PATCH 036/117] Utils: replace more calcRelativePath with relativePathFrom This saves some toUrlishString/toFSPathString and fromString roundtrips. Change-Id: I5b571e108e7f71b2eff6aad6bd3be466426d4e35 Reviewed-by: Christian Stenger --- src/plugins/coreplugin/corejsextensions.cpp | 2 +- src/plugins/cppeditor/cppmodelmanager.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/coreplugin/corejsextensions.cpp b/src/plugins/coreplugin/corejsextensions.cpp index d28d4c0f190..5f38351ac75 100644 --- a/src/plugins/coreplugin/corejsextensions.cpp +++ b/src/plugins/coreplugin/corejsextensions.cpp @@ -97,7 +97,7 @@ QString UtilsJsExtension::relativeFilePath(const QString &path, const QString &b { const FilePath basePath = FilePath::fromString(base).cleanPath(); const FilePath filePath = FilePath::fromString(path).cleanPath(); - return FilePath::calcRelativePath(filePath.toFSPathString(), basePath.toFSPathString()); + return filePath.relativePathFrom(basePath).toFSPathString(); } bool UtilsJsExtension::exists(const QString &in) const diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp index 8ce2cb6f3e3..805b240fce0 100644 --- a/src/plugins/cppeditor/cppmodelmanager.cpp +++ b/src/plugins/cppeditor/cppmodelmanager.cpp @@ -1989,10 +1989,10 @@ void CppModelManager::renameIncludes(const QList> for (const RewriteCandidate &candidate : it.value()) { const QTextBlock &block = file->document()->findBlockByNumber( candidate.includeLine - 1); - const FilePath relPathOld = FilePath::fromString(FilePath::calcRelativePath( - candidate.oldHeaderFilePath.toUrlishString(), includingFileOld.parentDir().toUrlishString())); - const FilePath relPathNew = FilePath::fromString(FilePath::calcRelativePath( - candidate.newHeaderFilePath.toUrlishString(), includingFileNew.parentDir().toUrlishString())); + const FilePath relPathOld = candidate.oldHeaderFilePath.relativePathFrom( + includingFileOld.parentDir()); + const FilePath relPathNew = candidate.newHeaderFilePath.relativePathFrom( + includingFileNew.parentDir()); int replaceStart = block.text().indexOf(relPathOld.toUrlishString()); QString oldString; QString newString; From 1bf26cb1033e672fbe9d6334db26f842a89ec32b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 21 Feb 2025 12:38:36 +0100 Subject: [PATCH 037/117] Update qbs submodule to HEAD of 2.6 branch Change-Id: Id6058b136987207487354221f69fe8425e1ff840 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 94681348541..66e0959dfd9 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 94681348541c66e66b3db29225352a2156178c63 +Subproject commit 66e0959dfd9a746746ec4893e199627ad9ae6e15 From 2a9cc06a9857611d3252b7de79a6c585cd1a4a68 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 21 Feb 2025 12:55:03 +0100 Subject: [PATCH 038/117] CPlusPlus: Properly initialize a class member Otherwise, e.g. visitors might crash. Amends ed92c2d948fbd6dcaf279f99d06c3f4ac94f24e0. Change-Id: Ic60e6ed7f76a3ba966c4e176ae94801b9ab74554 Reviewed-by: Christian Stenger --- src/libs/3rdparty/cplusplus/Symbols.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/3rdparty/cplusplus/Symbols.h b/src/libs/3rdparty/cplusplus/Symbols.h index ccca5048995..14dd07b83fd 100644 --- a/src/libs/3rdparty/cplusplus/Symbols.h +++ b/src/libs/3rdparty/cplusplus/Symbols.h @@ -205,7 +205,7 @@ protected: void visitSymbol0(SymbolVisitor *visitor) override; private: FullySpecifiedType _type; - const Name *_conceptName; + const Name *_conceptName = nullptr; }; class CPLUSPLUS_EXPORT Block final : public Scope From d42583ecc992e76cb46d21e3caf25325f9dbee0f Mon Sep 17 00:00:00 2001 From: Ville Lavonius Date: Mon, 10 Feb 2025 10:28:18 +0200 Subject: [PATCH 039/117] Add course-specific icons to new Academy content (retry) Change-Id: Ib64282252b11073eae80607490e48ada9dfed7f4 Reviewed-by: Alessandro Portale --- .../qtsupport/images/icons/learn-graph.webp | Bin 0 -> 2080 bytes .../qtsupport/images/icons/learn-modvd.webp | Bin 0 -> 2216 bytes .../qtsupport/images/icons/learn-modvq.webp | Bin 0 -> 2498 bytes .../qtsupport/images/icons/learn-multh.webp | Bin 0 -> 2824 bytes .../qtsupport/images/icons/learn-qmlbp.webp | Bin 0 -> 1760 bytes .../qtsupport/images/icons/learn-qmlib.webp | Bin 0 -> 1980 bytes .../qtsupport/images/icons/learn-qmlii.webp | Bin 0 -> 2090 bytes .../qtsupport/images/icons/learn-qtwi5.webp | Bin 0 -> 2006 bytes .../qtsupport/images/icons/learn-resla.webp | Bin 0 -> 2460 bytes src/plugins/qtsupport/qtcreator_tutorials.xml | 18 +++++++++--------- src/plugins/qtsupport/qtsupport.qrc | 9 +++++++++ 11 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 src/plugins/qtsupport/images/icons/learn-graph.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-modvd.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-modvq.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-multh.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-qmlbp.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-qmlib.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-qmlii.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-qtwi5.webp create mode 100644 src/plugins/qtsupport/images/icons/learn-resla.webp diff --git a/src/plugins/qtsupport/images/icons/learn-graph.webp b/src/plugins/qtsupport/images/icons/learn-graph.webp new file mode 100644 index 0000000000000000000000000000000000000000..78fd4334db4b5b972f8c7b45b45d410d6b5a8b3b GIT binary patch literal 2080 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 literal 0 HcmV?d00001 diff --git a/src/plugins/qtsupport/images/icons/learn-multh.webp b/src/plugins/qtsupport/images/icons/learn-multh.webp new file mode 100644 index 0000000000000000000000000000000000000000..917fa1f9d8af22a653727fdba78272c111ab4b74 GIT binary patch literal 2824 zcmWIYbaP|iW?%?+bqWXzu<-f9#lWC{^?)qH{U7!8Vvd(2Q|9M{j+IT*^WM}e&%hA1x zs!3Z|kCfy{Y{-1T#KiGHiOJ&tbD^Mkp`f^+0|Vpv+rhVPl{-fN*4_N`mrioLo_t2Q3d6wZ7)>pZ4DUf2Y+K z8ZR?h`upF9W6dA$**^XC^7a4B_@CeJnjg>q?-H)_@2lVMJJS05zg;?i`A>5`-=4QW z%hyKj|8;tH{{ByIcdwUN`}O_FN8kM8|9!rDfA6oudw%r(<2zaXQ!;-4_vELS7XSVi zYrE)5)c->}=f4vC{PZKiW2cjo*w_sWu@z$td?b8g-|x^7D--z1GPr`l(qPt8kO*yE>D z6aHeI5yNH1;9fI!OP^(7;>B~)gx7HP>N!9l4r zr#J85Tlw{(pD}Z$+|3a7DcNQ68~au+mpuIQVAqF(PpwW$Z1b+)S~AgPf=S}z9bZBo z7dD43u;T7Kav^MDj`7T(4<*SN3g@4eDjCn2>9I}wc?eq@XUf^`2`6}3yHjSL3sjU) zoACH+n9|mQi8PV#%+ zXxpPHqH@K0akg^c^}rxG&-SH7SE8kbFUAUgs#|zU%&l@+Xz$`X%1W6>xVArd?ejGz z&QzoA?BbB+doRd|`D~N>G_N3Q<5YK**oC)coUB+2m(3OJ3E-OVe#9r6zsuS9sn;^& z$_rkC&rfu3a+*@fd3?gttR*gWVI|dU6OW`mo7Q!;|HdDMNqbmor)g`I#3)V5pLobD z<%MD|*FmGGR&VF|iP@}+oqWOqc{6jGZ*0zEb(5`HbKs@wila@_pKF(Pgf|Li&XMQb zIOTa%>5kN}16uKiwu$Z1>X$lIaA)12H@c72I==YDWlw1oU;W_4w1-L@ErD_ORvo@N zRbqF~jVq^jFlTNEXvXrY0}UckL)s zUvg!w316$$gWJ=!Uzg|}OWM{TB6Rd-pvMVab>79nEzv!5C6*a03c0<{`(DZ%S)weW zIwk4I7c1k#Gxs`4?F|+A=GLR3vuQ%h*Gmy0T|#OC%HNMGN-t#3+z{s*u|2Zm+AN=z zZ<{!x8&#$>Z#?O=D~w;DdE;|d6~R_k)_UcNHlHQ4U#^>x%y{ngrV|g{)jPi|4W1O> zq42WpR91FwbOrMylVnEEk|<}#Ds^`?t=EdIaodv_pU!Z3-MvbO$LK)FT=u};wT(ev z(t154Zb#;C>l0Et8hc`bPRMRf2W!+5PYoN_; z(3?_wHJNetS{L2^<$-PqrprDnxSrVcy(8jUXHry(;*9DOpXYTurQG%ZD=2E*6ZlP$ zukMo68h**FRcSpr#q%fdY~6e3j{G%O+rzF?Ec=Bodat^++oy64$92Dpuh=BpECl(* zyN+#m+}dVw^423;#sjPj*EdYudxlTH`G=jF5W~&g&fmUo)ajpm=Ifii4SoE#68`P0 zus9q#|GLce^$8{4bl40xPxx!NH#Yom?ti_HKTh>-shpF-|Ga2J+SglMA!p>b-rIRh z{q2vrB0c8cJ<7N@d}u1%8WI#z-t}gA$BD{0Cu~ZB+Uo9p+uL=s{@iC1LFcw0@e|+e zIzl)*UM2}}zpgh_dg>A()YHhRt1Na*&{+HPqwOJ5S7W%pKI)h`wb1EGa*}P~MFI7o z!^TE!T9Mn|J(Rq#Wwy-1brQ$9_hftz%)Z-o?(;*Z>{xF9Z8Pw#GN=aAx+;lfL{%K*! zm=$_v+oRb9SGy!!{XF9uTE%;I-0Oy97%TDO=Gr;;R=l4Xp?Ru=ZK3bq8wYvA?tkq5d;Q#`&Qx)jNnQ`!)lx=x&S5sQul|MZ=wzd22 z+{IQZ>PglTyzIH@#a+x!`GfYe!lNZOar~Tg01Io R6Z<-!O+9fM=ZAPcCIAUudcyz! literal 0 HcmV?d00001 diff --git a/src/plugins/qtsupport/images/icons/learn-qmlbp.webp b/src/plugins/qtsupport/images/icons/learn-qmlbp.webp new file mode 100644 index 0000000000000000000000000000000000000000..24d2a34e25e13c4c82d83f10eb94318ed83f75ea GIT binary patch literal 1760 zcmWIYbaT7G#=sEn>J$(bVBvF`je$Y`>H%4X?}rvlRB<);-Y$3V$!`0o4GS0KN^9<9 zKl1T-C3o|-UX`!X9PW>PY~DTl+#mMCeZDRxj%to4Ohkl_%5<%G$amQz(Zw{{tz*3+ zmv-A$hY1s;PjEsOuv8yPwkgake+G3Yo3u`nrkF!g@z4hz{H&w8?I?Rz^02L@9X#Rw?@ zZ=FIGrjtLb&kG0&H|U9(=H6bs?OaxmzwNvS%MuQMcbpPbz-ynq&ih66_x=1Vi3Ll~ z^}hJea^l)HPp`#UIfVfpmzeV!yj89T2YbkG+4A-N|JszoO_eei|8pK#uX$7Uwf@ut ztC)Gsr~K*rI-Rwx^ukWZx--}J|BZBWU_ZwB?GMx9SaY`X`NxD0r6nI*z}cgI!q_t=q{ z%x7*FpVT+WgsG2S1#A)4VXe4xN7E!iz^F*|*O5gfZ@fIMFNp50SoLLsDRWWT()m4W zc{`u`*yY~X8Kkj|`Fzb)GuOV7Z8IzMg0@}SSYjleFRME@_xth#nVD0y-)`KXR;sL( z^ES!niQDvZWy^2&nY}sD_#)`=zUMcUbB)`Nl-~QE%3eM7OGidW28*Dfv1|`(P`Y~2 zEZa9pX69+jic9Y=6|WjuW93`JC;i=I#5&<$Xt6 z=c2+Ks>@jmDpYQDZJN(<1g@(Vo zyfL#|+xYTQqYdBpy%1ZNwS@hI`>8W?RE{)fI@!#)*D>?un#Ai*&*jdz9Gu-KQ~fzE zIzqL(bN@T3Gx^7wy3(u<&J*^3DHn3{R>`)xXJc-3R-|9EJ^R#!%lY1t6w7@cgVPu!SBnO z)LZ8yar7*~;uQ=gtqdd24yk z-;FjBjqRJtGp8bSUKvB#lX%|At=-#W8!c3HZdteS z1mC|2qK{WkxG0!EqinnNvGB`x3+FGtqpp3wn(w%H{AF()BmMZk{ig+{1zgx=U?ZXQ z>4KJY>Hf4iIsM0?vc;7f)^5G_O#R5QNi*j?=~oP9eWSkRU)2=-my#b(38dZ#fq335EJZU2x*(QxX9jvC4}u?)tr{WANs51ad~V}E`{&0hrpLbeT6O!&uX-m2J=f~# z8|Oabo?Z4|b=uTNlkR8tX8m7&NkHJyR98KQbviXqA9XetF)ZSUXB6AFoT0R`qAKH= zv$63qftIODGq;`19_WH;7;puGM86SS}ZY+Iq*=Soy0%z1SA*Z0%MlU0dHCLuR`@wx-`U~#Tgbf{E z<~}l1vf5`KXhuP;2AVI(!HQl3Lh^8BB+E{%f9mo2pp o6)$TXzTCB(CwVINxjW1Ky&iw0W}kk2Px8;a)31;HFJ@%`0Gs()0{{R3 literal 0 HcmV?d00001 diff --git a/src/plugins/qtsupport/images/icons/learn-qmlib.webp b/src/plugins/qtsupport/images/icons/learn-qmlib.webp new file mode 100644 index 0000000000000000000000000000000000000000..675935ef48b0e3b216823146a9614844f09ac9da GIT binary patch literal 1980 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 Ty1exF&(((Kf2}|HpOqN^F-Pn{ literal 0 HcmV?d00001 diff --git a/src/plugins/qtsupport/images/icons/learn-qtwi5.webp b/src/plugins/qtsupport/images/icons/learn-qtwi5.webp new file mode 100644 index 0000000000000000000000000000000000000000..9116a28c51ab08bb3f3cec3ab8a7aedd1f1d0a1c GIT binary patch literal 2006 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 B&N=`9 literal 0 HcmV?d00001 diff --git a/src/plugins/qtsupport/qtcreator_tutorials.xml b/src/plugins/qtsupport/qtcreator_tutorials.xml index 613437cc7e0..6d83fcbe0b2 100644 --- a/src/plugins/qtsupport/qtcreator_tutorials.xml +++ b/src/plugins/qtsupport/qtcreator_tutorials.xml @@ -199,63 +199,63 @@ Learning - dig deeper - + qt,widgets,2025 Learning - dig deeper - + qt,c++,qml,2024 Learning - dig deeper - + qt,c++,qml,2024 Learning - dig deeper - + qt,qml,2024 Learning - dig deeper - + qt,qml,model,2024 Learning - dig deeper - + qt,qml,model,view,2024 Learning - dig deeper - + qt,data visualization,graphs,2024 Learning - dig deeper - + qt,qml,layouts,2024 Learning - dig deeper - + qt,multithreading,2024 diff --git a/src/plugins/qtsupport/qtsupport.qrc b/src/plugins/qtsupport/qtsupport.qrc index dd08f5c2f85..44b4f76427d 100644 --- a/src/plugins/qtsupport/qtsupport.qrc +++ b/src/plugins/qtsupport/qtsupport.qrc @@ -24,6 +24,15 @@ images/icons/learn-expcq.webp images/icons/learn-inqml.webp images/icons/learn-inq3d.webp + images/icons/learn-qmlib.webp + images/icons/learn-qmlii.webp + images/icons/learn-qmlbp.webp + images/icons/learn-modvd.webp + images/icons/learn-modvq.webp + images/icons/learn-graph.webp + images/icons/learn-resla.webp + images/icons/learn-multh.webp + images/icons/learn-qtwi5.webp images/icons/youtube1w0ak9RNNWY.webp images/icons/youtube3o2Wo4YzlII.webp images/icons/youtube9xqhq9nDiOg.webp From 60ab6d1e7e991b3a84b6712226b44c0a108e707d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 21 Feb 2025 13:40:28 +0000 Subject: [PATCH 040/117] Revert "Utils: replace more calcRelativePath with relativePathFrom" This reverts commit 0c74f1a38c1a262183227cb107cef502bbd80b58. Reason for revert: relativePathFrom doesn't do what you'd expect if the file path on which it is called doesn't exist. Namely the relative path is then deemed to be empty which breaks the refactoring action. Change-Id: Ie2d0069e565c2ec1755e33486a79438466794d2e Reviewed-by: Christian Stenger --- src/plugins/coreplugin/corejsextensions.cpp | 2 +- src/plugins/cppeditor/cppmodelmanager.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/coreplugin/corejsextensions.cpp b/src/plugins/coreplugin/corejsextensions.cpp index 5f38351ac75..d28d4c0f190 100644 --- a/src/plugins/coreplugin/corejsextensions.cpp +++ b/src/plugins/coreplugin/corejsextensions.cpp @@ -97,7 +97,7 @@ QString UtilsJsExtension::relativeFilePath(const QString &path, const QString &b { const FilePath basePath = FilePath::fromString(base).cleanPath(); const FilePath filePath = FilePath::fromString(path).cleanPath(); - return filePath.relativePathFrom(basePath).toFSPathString(); + return FilePath::calcRelativePath(filePath.toFSPathString(), basePath.toFSPathString()); } bool UtilsJsExtension::exists(const QString &in) const diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp index 805b240fce0..8ce2cb6f3e3 100644 --- a/src/plugins/cppeditor/cppmodelmanager.cpp +++ b/src/plugins/cppeditor/cppmodelmanager.cpp @@ -1989,10 +1989,10 @@ void CppModelManager::renameIncludes(const QList> for (const RewriteCandidate &candidate : it.value()) { const QTextBlock &block = file->document()->findBlockByNumber( candidate.includeLine - 1); - const FilePath relPathOld = candidate.oldHeaderFilePath.relativePathFrom( - includingFileOld.parentDir()); - const FilePath relPathNew = candidate.newHeaderFilePath.relativePathFrom( - includingFileNew.parentDir()); + const FilePath relPathOld = FilePath::fromString(FilePath::calcRelativePath( + candidate.oldHeaderFilePath.toUrlishString(), includingFileOld.parentDir().toUrlishString())); + const FilePath relPathNew = FilePath::fromString(FilePath::calcRelativePath( + candidate.newHeaderFilePath.toUrlishString(), includingFileNew.parentDir().toUrlishString())); int replaceStart = block.text().indexOf(relPathOld.toUrlishString()); QString oldString; QString newString; From 021604916837d56d42387bd7dadbd7c7372895c3 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Fri, 21 Feb 2025 15:15:58 +0100 Subject: [PATCH 041/117] QNX: Fix clangd code model with Clang 19 Amends 5a6c625c5e46aef442689a2bc691679da7a562db clang 19 has an issue with the target triple 'unknown-qnx-gnu'. I have taken the approach from the Android toolchain also for QNX toolchain. Match the targetABI with a target triple. Fixes: QTCREATORBUG-32529 Change-Id: I7bd961d7ff66c7c655c5de06a76978b4718c9c70 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/gcctoolchain.cpp | 4 ++++ src/plugins/qnx/qnxtoolchain.cpp | 23 ++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 6e487e28560..7062ab6a28c 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1083,6 +1083,10 @@ void GccToolchain::fromMap(const Store &data) m_platformCodeGenFlags = data.value(compilerPlatformCodeGenFlagsKeyC).toStringList(); m_platformLinkerFlags = data.value(compilerPlatformLinkerFlagsKeyC).toStringList(); m_originalTargetTriple = data.value(originalTargetTripleKeyC).toString(); + // clang 19 is not accepting "--target=unknown-qnx-gnu" anymore + // error: unknown target triple 'unknown-qnx-unknown-gnu' + if (m_originalTargetTriple == "unknown-qnx-gnu") + m_originalTargetTriple.clear(); const QStringList abiList = data.value(supportedAbisKeyC).toStringList(); m_supportedAbis.clear(); for (const QString &a : abiList) diff --git a/src/plugins/qnx/qnxtoolchain.cpp b/src/plugins/qnx/qnxtoolchain.cpp index 30feae7a2c7..8196ef6803d 100644 --- a/src/plugins/qnx/qnxtoolchain.cpp +++ b/src/plugins/qnx/qnxtoolchain.cpp @@ -137,13 +137,22 @@ QStringList QnxToolchain::suggestedMkspecList() const GccToolchain::DetectedAbisResult QnxToolchain::detectSupportedAbis() const { - // "unknown-qnx-gnu"is needed to get the "--target=xxx" parameter sent code model, - // which gets translated as "x86_64-qnx-gnu", which gets Clang to happily parse - // the QNX code. - // - // Without it on Windows Clang defaults to a MSVC mode, which breaks with - // the QNX code, which is mostly GNU based. - return GccToolchain::DetectedAbisResult{detectTargetAbis(sdpPath()), "unknown-qnx-gnu"}; + static const QHash qnxTargets { + {"arm-qnx-gnu", + Abi(Abi::ArmArchitecture, Abi::QnxOS, Abi::GenericFlavor, Abi::ElfFormat, 32)}, + {"i686-qnx-gnu", + Abi(Abi::X86Architecture, Abi::QnxOS, Abi::GenericFlavor, Abi::ElfFormat, 32)}, + {"x86_64-qnx-gnu", + Abi(Abi::X86Architecture, Abi::QnxOS, Abi::GenericFlavor, Abi::ElfFormat, 64)}, + {"aarch64-qnx-gnu", + Abi(Abi::ArmArchitecture, Abi::QnxOS, Abi::GenericFlavor, Abi::ElfFormat, 64)} + }; + + for (auto itr = qnxTargets.constBegin(); itr != qnxTargets.constEnd(); ++itr) { + if (itr.value() == targetAbi()) + return GccToolchain::DetectedAbisResult({targetAbi()}, itr.key()); + } + return GccToolchain::DetectedAbisResult({targetAbi()}, ""); } bool QnxToolchain::operator ==(const Toolchain &other) const From ced92090db0d6d144ef90b826a1444a3ee97b1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esa=20T=C3=B6rm=C3=A4nen?= Date: Fri, 24 Jan 2025 08:06:07 +0200 Subject: [PATCH 042/117] Doc: Update MCU-related pages in the Qt Creator doc set Updated the following MCU-related pages in the Qt Creator doc set to match the Qt Creator 16.0 and Qt for MCUs 2.10 release: - Create MCU projects - Manage MCU kits - Developing for MCUs Divided the 'Connect MCU devices' page into the following two pages to reflect the UI changes in Qt Creator 16.0: - Add MCU SDKs - Add MCU devices Task-number: QTCREATORBUG-32329 Change-Id: Id128eb6403aa3cc4574d650b01bda0ebb0e863bd Reviewed-by: Yasser Grimes Reviewed-by: Leena Miettinen Reviewed-by: Maija Metso --- doc/qtcreator/images/qtcreator-mcu-device.png | Bin 8598 -> 0 bytes .../images/qtcreator-mcu-device.webp | Bin 0 -> 6422 bytes .../images/qtcreator-mcu-new-kit.webp | Bin 0 -> 8960 bytes .../images/qtcreator-mcu-new-project.webp | Bin 10598 -> 10722 bytes .../qtcreator-preferences-kits-mcu.webp | Bin 16120 -> 16334 bytes .../images/qtcreator-preferences-mcu.webp | Bin 9356 -> 9374 bytes .../external-resources.qdoc | 10 +++- doc/qtcreator/src/mcu/creator-mcu-dev.qdoc | 56 +++++++++++++----- 8 files changed, 51 insertions(+), 15 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-mcu-device.png create mode 100644 doc/qtcreator/images/qtcreator-mcu-device.webp create mode 100644 doc/qtcreator/images/qtcreator-mcu-new-kit.webp diff --git a/doc/qtcreator/images/qtcreator-mcu-device.png b/doc/qtcreator/images/qtcreator-mcu-device.png deleted file mode 100644 index 2a2dd2beab5fe87450fcaaba301af225c63f7e20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8598 zcmeAS@N?(olHy`uVBq!ia0y~yV4Basz$nbY#K6GtU*K0F1A}6$r;B4q#jUq2iNcU)Wz}d z%uM6@K;b1TU-dm{HMgEHt>vNde_&_HqWnH54Or^ zan-}Kd`naxmYi^zw_x2|ZkYq#w&nXHw6ENWRnz#o>yCGG>PeH9H1*d2yUu z`SwjMs*f)^u68Sn|M%kcdiyB3XuUUfie>9hb|jZGyxA8MdTHZJc7Z?L^LL+~y5sul z7jLw}bIs3Ytp8eAUG0DWy5M_z(_8Xymv~66eq|WpZt6a9O77Pct4y+H8mV z&(QBzM3~;o+pqphxZOK{%yQP;IY)U+FWiu2*safRz&O5IbL7By35<1^=Dc8Gjp1n-8@;}@~ubSM7}+d@~tk)(}eq<$J-z4 zUOe8q`=!LR$hTneXIR{ukcOyVMhw$tro0t&+>=&Z#}YJF;4AQ(i9HUq5Hx*R+pi z%hu&B$yPb}S?u-1M#;(bHh~}8gmyD0d_Nfe>~H=V&zzj>y(RCr?ymn?%Wyn=>u%Gv zG2e7QhjpG@w_%#-u@@nwwdcRQT>G^3*4@h+Ha)+g96R&7?slEut{E1am*n5oaZMHL zJ^Jzfs?)Qc9x*6qZ!o-VTU21>|9yqUrRwdoZT-HlKl9vp8{aO^kD>9K)@PKzUX-h! z-=6#Z{mYY8X8UWioCzpl5CajlK6dma*Zx8wdy{fMQ< z-!T}7?N0A9d6RwYdEBb)^N-Kg{G5MvWzS9Pa?$#Rb+hh%&c1odN{;u5+$n40&6B47 ztXcQ*?2OA2=c7w28LP$LyZ;WGyH#ZV8NJKTUbf$RT($a~zr}OP@Xkh7L z3&&#CxT)`tC6qHrTzR)W?{3xJFpuWnx9{#_I+k|hqwl9n^2XlxmY1zxa*s7y`}&W! zdF$O$%w?PR-ZB5;f8^(V?6ZdTBDz2LW}Xl{{tle$zI&~&;r((+rtJ7ThK9Qve|ujSLd}Oh zyY7mMiT&FZ=F$8#OWJ8ObEc<-tkFdE6Z@%XJTMz zVA^MFZy&F}`}~Ze|7shB9^r28K6$3=9ll zu?^O!Vs~BZUcQ-Woc?2O69dCz2fYo?&(GK2#bj>x) z)&F}wPOe|O@$S=QLI0kfEYDlV$Z$Yn0{5Djw5Lh0;~G=@c6_^bd%OAeXR~yjEF9fj zj=8!mKUOw9bn(`$TURqM7??dV(iV^Y&ZX0RK>Gc^jIzRBfv5?E6ECjZemC`D$Ny>u zhR4o&n^Vi;BUD?&)DFHY3a(^jU^wRX^UmLAhqM&8G~8umcpy<$|GeE?TDz1tdcIxt zzn8b48h+(5(%ZWI_p4X0p5D4#S99fc?Z)Zd7FBojy!L%})jxJ7FrvWIl36rVf6-?x z`(lO_T`_6hZ|a`U{cWG2(=J=~?`7rs?|&}uez)+()AG~FuOw4q`m(<-j&u9&n5w&7 zPFB`7tM}TwjY_`0PuG1|c}!?(YY!RGpY)fyKIdtoibH9J!mIiY~TI^j$Nx_ z`S~k~7z|qO{(tuN_x<{0%NGUyEq~wF*Zg~X{QI7EySqC5E7K28@ zuU_MPb@t-ZAH^&J0>8d~=;+V?;Av7>*|(FE)$30v8w%wwopL&7;obLn_4WV4P9%Pw zoIk(z)8hTVx6k`C)8*dpyT-QLE57aa&G$Lm+;jTHo4j);k}n@W^84btZ~vOt<)jyv z-!xtJFYMTo6^AnSC4X<;dqwKenRku1KF(abt6Il>*;((o%f1SRW@zNNX^R^w=@!EF1lz+$7=Uq|fCml%_Nw<0Nt?1U;X#VMUlo=beE7spS z{r2CryKiUyT-tEB->&Z4pU2hS#`gb%*W`Bod^&yaz3KM-{r7&~H4j`Oz1bxA^M`94 zZ`Ylf`)B6oTCt_uCjFT6E&hAzo9ypTpFZvG3Mx|EzXa4Y-}>b09s$@WhUu#MFELkIgx9>~fW@^7mV{ z2g2Vzk&n5y=T3?JK4XuhC+7}nZr_vj{$0g6ZR-p*?UfgIuX?y_d(tnlsnzv|YD$7a zN@c5VMDQ>*Jg)IybK>20^LM^y_1dJ~{r?sD{`CB%yX_|*{dxc1%)iw$kNp2NSL0dV zj{EYPEmUW{|NC;eR`SKN1CGa1Tgv+9Em;1!(>43v0r~Ec;{|aj=xfI?zGK}y-gEDFMF?f`C7pJq-WLQTRO)+ZHzw<>FRl?X!rFc z?e1SDOETQpd*t1Fzq>IUCVT!qnVs(cF2!);(fe^Te%%Z|8S<|`UX}BX#L3&gUoGDy z^B&>~d%^S=kF%y_*+CIM{>}Xw7CUR>{JT%N+1G1cldJvvb@A5gJUtRO&qV$D$!vY< z?2XT|pVK;(LOb1h-A=uT@Qht=`yW*X`f6MTA`|n@T5RK2Zx{owYopx4)4&Ay)gjPoIjp^qSZUH3=DB5;p^k}mc6}I%E2i)Q9FE{%=LHj zH6IQtGce4^coOtJboY)W7c;g*tu5tXmgJTcl$>64@cZ`NJ-=9?3gZ5!_Gu_hyzf-c z>*NHgJj_6~8&6L8Ooer8*T%Mf096$S-!U*4^xRFAm6*!b(ZgNF&d~7i`MYohn;D?$ zvF!LeP_?*wd0BjH>|Pm>%iGPizt2~H_-^gX)B5U0dLT))6YplPysUir{yd0cwoSiJ zojSF2!Hljqc2nP+*}naDv6bE23;Mn*Q{H|{6S+KZc9fUdnkj`YTV{(b;@;xL%`Yhq zs(>eFeBb%4Y}4H9dtBVA`i|;kesP-;5u`S2e$=krcjxtYdmh!#TqLpF1gtg%TvRz0 zCTAvRS9`biE|tzp5xJJG>L$C@>`UIH?AkE1wCmfiJ%6;{e71Sb(pVloh$X@)<+<5! zV=v##+qAE2f5qaRiqgfe!=^QWgJI9z=HF*-e0_Gz&G_Q1Gdo?+e+$40pcvPa)BFsSE%6L?E| z&*_S{?Qf61)Gz1-7Kg~oW*_aaLpS&hJr_B{&n|XfBEw0QIhZ>hht7|F1%+w*Ph8P zj#m42Yp+eO-Zl+e28N!S@4P-3x$ogqR8$UH_bqUL=yZz+vCE&c->kcT&Vi`Rn_j2x3%iEtnW8mPJGA5&~W$RlDB-ImKG=>CX^p|$H35Vmk~Lk zRo5*%yEXgz55+ADCJ62{zKAd=36|j5t{E~bVDczqoS}lz|tvww* z-a8-kXP5sJKWwYd;P7Kg{JOnm(=8WuxY$J$A*cE>`5W(y9Al!RcXK^dd~9@Y{fUHf zh6c`UyVo!;zQi!G5FG!1?)>FyVJ|LcU^wuO`O~r4-{1caIP}*1*U~wW`>M+;*>*EC zIP|{Rw`*6`PnH?`w(hL0x8|F@eHr)VAN?mAf8TDsX%p&^aelhW-2D9eZ^P$YUUleM zFDoS7Dc-)jxok3FuxdLHF(H~;TU`vN{(ym+AQ<<;;CDH(T1Ax2!DG z^=a3Vn#{O`ce`h`-(_S_u-UDzuODw?n09^pwr$(5J=ePzace@a&YJV50z2`F{M zsr3BXcC*>$SKMYDogbul@>=@uuoSfk9nCx=0vRc zv~&H#H*tC$7Yp|8yg2LZHuG86#2&B@>VQns6%n?YA>erv5)4{ZxR1<&9m(-Kh^!`zmCeoZObg zyj4&Ae%Q}l`|r|CzaOSw?9|V=D5rJZOa4pM{I@CB{^u-TfA?!%&M!t5e+7XJzYX8; znLbT5r`yT&kzouSU>~;C(p6JEq z%An9~xZA$5`pxTe`^w7xdDe8^ef@3Dy-n5I66T$K=DyMB{rs}iCbsjgyzjM0t*r%XC*FOm^Q~pCpY~_D*6Mq!PHXQMT)#wohkaF(oc`w5y)hkm z3$5m_Z2x;y`}3aZ?ojP%<$q0LEA8T@hU;GuzjZhA@cR9Ch3jYA3#RMN*ezM@Ca&}2 zQL+A2>;9{~Q+{rLHD?zG3saeYCF`NK`)P;sH!BKo+^9|1{a>EtO!xfV-)j;;=`A5u zE^Cj``8#tR6a+R{CzQYOQvjv84c5@K$6O{a&o6IR!@^L|bRv~~H**;~L&ZyQz%w&I z3R8p5vgyw0=jK?lDk>@${rgi1sw)rQh?UJUky;y;EekE#dBJrJ^X=GY9ZHjyE?t@} zAOxu%K-Kwf{+#kimN;lh2};9^3>$tMlua*92$52NRQYZ5cgHt=NO;G`z>vJ*_uJ#{ z?)~|TZ%)7Y?%MT-hyEJ;?&z?ad++AO-5007`D*$4{H@g{zofr$m2aQ!9Vfb4hM^(x zEvOKUyjWK=C9bbeZu{c9FV;U!oU+o(HY~7NY{Kfl-Fr`$IvrE(+4=kQli7z4`?=50 zEqT7W$7ZmJ~11DCh^zPqN~->dJ^x_HxWJ(Z%jC$+Avxoczp#%|4B z<=~}@CY^lq@ZYt%oFji!OlR+uTDIo!nfP-h>b9|#d(Z8=_3`e5knOv7W`FIuIk&L& zn6LA;FoC57yG0l_RIdb=#;$KltMBghW_!)lE&Oao1$#r+%wQ!{lDb-J?5LXFNOWjrv&b@pZuHiwP54rr3?*swQt&9opmkd z&C(SAKG&kINg3_OqdPY!FXgT-yri^WtySd4-BqWhANQI^O}$>3XMQR@_4^#ZvdKyJ zKc;Mbed=*FYw`B{U!EJPvt~V6f9GO}+5GB=_~oXVxp#7ot&y#-*==59JGrZR`Q&rY z?n+6Uz6)Zg2rP?_i`$p6N!okg?&^)AKUXeQy1GqNSas5qz$-WB^k)oIR8+yDKoWGkazclF6t-aeOdnYeFXtVpr zp1%E{jOd+Xv-Wyu_1kkbvJAWBFTd;D@@bX!w(6YXr9V=PmmAGh^|i0s{l2VPwamP{ zeZ%glceP9RMw`~2eYOU9(Eqwtl&-SLUakdCk9Q=^J*>mV2+{R5??FJwDHn zOfGq+Q@rQp+SMAz?yoXAW%KIYEyH&&C3H`#U%0tD&DZ|i`)$9L=0DBWxaId$_Ko#t zw~)MxH!93>{))t&ef!Qn@Vm+1?3c$3^TmRn&inp;&GuIn>-iXV^Cx|e(617;{y5=n zpz+kOiHhOLmtSAEDBrTad*bo0?#H+8-c+#e?bSE$tYsHV2i={mnr?dZXvFT?%hxZy z(|fjNs%tVsgTh-qd7aAKq>2xf??1CoF4Qv8YrJ*0qEUJ`Geg36Lo3_VpgVG#Koxh* zZu8k^!xh2R6axcK^7qTj{m-8{bLQ;X#LEjN2u>`VcoEdP0Tnp&t;^rNxw-i=a!n*T z{qytl$>j_TZ|pYQWew~&Bk1qwaiU|&YFV&NM!TJT!P;d(gW{kz9HhO*{w8jw@IO-v z^^mz=xnH)giT#@ub$@&IftQQUh5yNmJMa!vmM4~fUTnCyINftvqu1&gJEAuId0!`g zL-M44&-c3W^ac6*mdf|M{iF2n>!)kqQ?$07{&Dq7@|O6E&kNgsC**!zcs+JY@k6HX zj-WOof6n(8P1^GfwD;Edb>01{e^d69_|chcZ|DE0-q3mX?799^mTSVM+??@acA0w4 z_dB(hB7@6LGM^t;oJ;SJx7y_c?97q^x^^s^72byje*?ftLU{{P(ZsP=b;QLV4` zi|G{?)?a;jes%S}^68}w^=@l^pZGp^`@H;jaS<&;9o+?lu`~M6KR1>G_g5e#h=^zWwrkaLqf04b}UR5ze?8%hOEBR+THn&Z= z61P@kdBEYCdvzapy%xF8J&|30S9I0JydLWX*JAd(zhnE_?R-RfVAkpnpTC{6pR_1c z9OTK`38mLV-ajqdK0T%Q^SZ<8{xwZ6Z}w;GEsnPh*RNUCQm%g9f!_TzI zjSn={=mC)zp~!lHT|5M zXUhEce^~6VO(D~+e}6S|y~+2r)`wrYcK*G}`|02Q*tBokrU!R@{%~mR-OWbvzl5`| z&U2Zue*4nW%3W9eCP&Y___k(@gUrC*t@NCH(?c*MAYtLTTW&feC=;H5A*Y7n9 zH)J1j@jh9k%T6u4FDhnu`mme=%SGcF_e6;RaO(3X=T>ot?OgEtFGkVi4YOZp8DWg#hJ!YwxI<6RDbW-A^psaMk5ers;Mpx->j>1XfW z4gJzIC2LaNlhbt^{_d|#enkZB4s9yGyYCnC+exYQ=dak*t$lZLa#OU}>z555WA6Sw z$5_VB@P_Y?nKT7)FUtUq0wPVQ4&A-|_FHQP1_7I*oyXqY*t_a3BSQics4WRI2W#>K z4OqS5LnKv@qTd@XzdTw}_TxM^XzHfgbocj9GVjd$e*3T4SYL7G(vlXH`#MeLZONsd6-64e7es$&ouvBy zvD?u%FNO9j`PrJ~FLt^5U;O#aH*5O0R)PJ=K4*8fc6hO zTRX+p-t&6uE$K5)85uTMm&q5U+HK7L6#g#5YW8{CHQzbIJ>%}md^wwEy5Ph+n_AGY z%Z=I>&);plepzx``1z?i($fP}A^F4L+xAzFo<9OLJu1`nA``!hr>;90?WK3-+$kFd zhO+jJ`;GHmOwY8IJg(gNfBB0!%%Yp64PQo=vd((G)(Y&#_Mf?C&(3d^Ew-KWv;>sT z6>r#nPtFAe;qJpKXYMkBrlF97wdeS|w`ITi7#LXkW7ci7E?b|4Jh-vZ8Z<=)E?yX* zZGKSY$PAjtdIJthS}Oq0*MV9KXvqNK5m503b`NMK9a5x$(g}tF&}bp3iGeZ<#187Q zfJ#qrcD?~_gV0U^xGxAwBnjX#AAw1C|I0V^RR4CKp{UBhz`)??>gTe~DWM4fWLr?I diff --git a/doc/qtcreator/images/qtcreator-mcu-device.webp b/doc/qtcreator/images/qtcreator-mcu-device.webp new file mode 100644 index 0000000000000000000000000000000000000000..599732f178b162e42f80312dd62a8ca5ecba3bce GIT binary patch literal 6422 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 D)(?2n literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-mcu-new-kit.webp b/doc/qtcreator/images/qtcreator-mcu-new-kit.webp new file mode 100644 index 0000000000000000000000000000000000000000..e248fa8899f1135848e32779c8e0c0fdc7b33067 GIT binary patch literal 8960 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-mcu-new-project.webp b/doc/qtcreator/images/qtcreator-mcu-new-project.webp index 270907c08b67016bc5175499bf6218c8f4207570..78c32c4285719c60ecd8c37ce85fcaf0558bc3ce 100644 GIT binary patch literal 10722 zcmWIYbaT6<$-ofq>J$(bVBvFClYv2BpgEM`E7#*~y)vG!_P^$x{$5s4m|?}8a2}TY zo;x28_}&ild(pCbV_L@n$x!Q^g^8)WXFl{*I7cw}S$1FDy5;NPoj*9Vg5P(ozb#q# zS<3&!m<;qW?8!zA7)~h+^`nFQH^)o^y z@*VrEt-56L#@yT6a&LbVxmfSfr=mG&O+uQOGXK>-OgZ2GYZpmtp8r;RA;3X0jmP+F zL4v`9qYG2-P5qoQGm`n>^6n^^c^mg$;b)(^eL=aw@$dZKudNLVy&merb>nrY!@RO3 zWosrc4qOs)!FuY87Lkm%>-y6)J+=F;g|Wsk=2v~&cFD`?#@&gVb8mlA6E||dz@ZoX zb@9CTgGc@+Ei!&*V0JUe#PUS@)w_59p1$~ax5~+FYj>T!cgUX6&^vb8shsl%b-e?}XA({}Ug{J{E0Z|2wyf&h+qu@sE9D)w`>n5guX{85eNXiy*&9=&)9w|`FbQ=3 zI88Hy!}!`c?c@xV=-bcC&c-nMs_qp(>#^_Xmp8YjJ>g1dk6hN?mvZHfo7aRF4~#b5 zJf}a&zi->#+`|vpU72Ry4K^2_m{e7Cdfv*lmR{GgCWcgPauup=`)6Hr`^3aGHv?K{ z%H^)O+{XTcLG8BRhO+_Y(hp3wq`DM*OlZBCwbk`lfcd8HA6knnnCCHaU4DAX^x$p2 ze|!f1@eiIvi*C)zYmeM>Me@$iy7&M7OW!`+aKGqo=EOC=V&(t-r@K3zaO)E6=)QRL zy z6GqN%O-o64t*m;32W6a23oTY&6Rv!)E0yQNB);PBEFm#buL~5GzGx}#{_3!J;>rit zv~D&lzCQQ(=5tfMQg`j<%-NHU+Mg);9?c!$!^|VqD`Uj=T=~oGM-MkX`Mz=W#=6Y4 z-HlW8rmmg8{_V^=)Ad91E?;|YJLkiC-|5_E<$i41qviK!3X9CXgof(sX~N=Z7DW#x zC4c#-JX7zQvI}qQsgusuiS@r`#@+0T)RS&g^!p>?B6sudXj53 zon!JDXZwF%m3+;H4lM13qNS%=J3L(69v}Yn^n7jI|4k-2^6z`qtq)hRdh32U^7zQQ zN3G=&J+eOwqUQfOb!2ymWt>ZnZ$dFkxsm!hCAs@AH6G-O`c$Y)ej2^uj;{8DFAZk| zHk%uN|2bbiPV>L*-;c5D)BWRa{M@n0erfcQ*rS)8y^VWd_-y6RwO0SwS?lhI?yc3C zU&$j{rk}m%*Z%3YtLh8?R9!N9?9(LEe|xdMu|bjf(x5Zw4^VZTK2l>6Ou% za-R-Qb1c-#xxDkv>98F37pV#|r(-up%((GzvSiXXt3zKZzkWLU=lPkGiEG4b8P~3k z3XaSAb+Dmpv1Z*Q-n_y&wbzO?l|=f#eGBVi=X-qT!bxua!vBxgJdN&<3*f$Pzv9Ef zXUmG)ni0ao$c2zMQ(UI zv+gu+w9Wap*ME2C*)&~{FMFx?{qB4*5k9$RSC!R561lrFABjXNzWwy%jeYT)*u=Qs zk2SK+owmQ$ec?sV1}i1|awao|$8y_jR_{^TJ|oFc+NnZw6^CFAlVyiS=Z>eQcOEuW zEp9v3%XyG-1H-by|2JklKkB^PKV9&UUb&N~Vw1lDyP&Gz_B-bv{<{4^u(9l9)RLq- zjA!4RTCh|hG0x6DJNov#!)>Q-NxkHJd-SS<^E5`G>tSyrZj0?<>AWeB9lVBZ<=U

8Ny3Xd+ZE~)6=L8KEG6E*?wL5 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 T-{>w6K7GE^eEX#Cet$*)ipXRA diff --git a/doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp b/doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp index cf61f131ecc78db38b64132b62574925377a4c30..68e52150b762327a1ece21f3b7ac2792ee6288d7 100644 GIT binary patch literal 16334 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 SzMm;p{&%>z#XO6hkpTd8g6JIp literal 16120 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� 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 diff --git a/doc/qtcreator/src/external-resources/external-resources.qdoc b/doc/qtcreator/src/external-resources/external-resources.qdoc index bfa51524ba0..90da870a42a 100644 --- a/doc/qtcreator/src/external-resources/external-resources.qdoc +++ b/doc/qtcreator/src/external-resources/external-resources.qdoc @@ -75,7 +75,15 @@ */ /*! \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp.html - \title Getting Started on NXP + \title Getting started on NXP (BareMetal and FreeRTOS) +*/ +/*! + \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp-linux.html + \title Getting started on NXP (Linux) +*/ +/*! + \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp-zephyr.html + \title Getting started on NXP (Zephyr) */ /*! \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-infineon.html diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc index 84a865b5bed..89ae1aca379 100644 --- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc +++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc @@ -41,7 +41,12 @@ The hardware-specific requirements vary depending on the hardware platform you are developing for. For more information see: \list - \li \l{Getting Started on NXP} + \li Getting Started on NXP + \list + \li \l {Getting started on NXP (BareMetal and FreeRTOS)} + \li \l {Getting started on NXP (Linux)} + \li \l {Getting started on NXP (Zephyr)} + \endlist \li \l{Getting Started on STM} \li \l{Getting Started on Renesas} \li \l{Getting Started on Infineon} @@ -57,8 +62,17 @@ \li \QC version \li \QMCU SDK version \row - \li 12.0.2 or later - \li 2.7 or later + \li 16.0.0 or later + \li 2.10 or later + \row + \li 15.0.0 + \li 2.9 + \row + \li 13.0.2 + \li 2.8 + \row + \li 12.0.2 + \li 2.7 \row \li 11.0.3 \li 2.6 @@ -91,17 +105,17 @@ \li 1.0 \endtable - \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs}, - {Developing for MCUs}, {\QMCU} + \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs}, {\QMCU} */ /*! - \page creator-how-to-create-mcu-kits.html + \page creator-how-to-add-mcu-kits.html \previouspage creator-how-tos.html \ingroup creator-how-to-mcu + \ingroup creator-how-to-sdks - \title Connect MCU devices + \title Add MCU SDKs \note Enable the McuSupport plugin to develop for MCUs. @@ -154,13 +168,25 @@ \li Select \uicontrol Apply to save the preferences. \endlist - \section1 Add MCU devices + \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs}, + {Developing for MCUs} +*/ + +/*! + \page creator-how-to-add-mcu-devices.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-mcu + + \title Add MCU devices + + \note Enable the McuSupport plugin to develop for MCUs. \QC automatically adds a default MCU device when you select - \uicontrol Apply in the \uicontrol MCU tab after configuring the - MCU toolchain. + \uicontrol Apply in \preferences > \uicontrol SDKs > \uicontrol MCU after + adding an SDK. - \image qtcreator-mcu-device.png {MCU devices} + \image qtcreator-mcu-device.webp {MCU devices} To add MCU devices, select \preferences > \uicontrol Devices > \uicontrol Add > \uicontrol {MCU Device} > \uicontrol {Start Wizard}: @@ -175,7 +201,6 @@ {Developing for MCUs} */ - /*! \page creator-how-to-manage-mcu-kits.html \previouspage creator-how-tos.html @@ -189,9 +214,10 @@ \QC automatically adds kits for all the available MCU targets if you select \uicontrol {Automatically create kits for all available targets on start} - in \preferences > \uicontrol SDKs > \uicontrol MCU. + in \preferences > \uicontrol SDKs > \uicontrol MCU. This setting is selected + by default. - \image qtcreator-preferences-kits-mcu.webp {MCU kit} + \image qtcreator-mcu-new-kit.webp {Automatically create MCU kits} \note When you update the \QMCU SDK, \QC asks you whether you want to replace the existing kits or create additional kits. To do this manually for each @@ -206,6 +232,8 @@ To change or remove individual kits, go to \preferences > \uicontrol Kits. + \image qtcreator-preferences-kits-mcu.webp {MCU kit} + The \uicontrol {MCU dependencies} field displays paths to 3rd party software required for MCU development with the current kit. From 357f5657bfc7efcd396feac7e621194c868634b8 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 24 Feb 2025 08:00:59 +0100 Subject: [PATCH 043/117] Copilot: Add "--stdio" parameter Its a new requirement from the github copilot language server. Fixes: QTCREATORBUG-32536 Change-Id: I41a6d9e550ce60fb514f8ba99084070d511bc504 Reviewed-by: Cristian Adam --- src/plugins/copilot/copilotclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/copilot/copilotclient.cpp b/src/plugins/copilot/copilotclient.cpp index 441269bb87d..3ed13801c9f 100644 --- a/src/plugins/copilot/copilotclient.cpp +++ b/src/plugins/copilot/copilotclient.cpp @@ -42,7 +42,7 @@ namespace Copilot::Internal { static LanguageClient::BaseClientInterface *clientInterface(const FilePath &nodePath, const FilePath &distPath) { - CommandLine cmd{nodePath, {distPath.toFSPathString()}}; + CommandLine cmd{nodePath, {distPath.toFSPathString(), "--stdio"}}; const auto interface = new LanguageClient::StdIOClientInterface; interface->setCommandLine(cmd); From 80f382aaba15ced32b8396176e6735b1fc16aa04 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 24 Feb 2025 11:34:07 +0100 Subject: [PATCH 044/117] DiffEditor: Don't try to moc diffeditor.h Generating moc_diffeditor.cpp diffeditor.h: note: No relevant classes found. No output generated. Amends: 35bc86d1a705cc09c645c4c960b0badf5a674d53 Change-Id: I901a77ed5f056685c307ebdff960a1e75cc56fbb Reviewed-by: Jarek Kobus --- src/plugins/diffeditor/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/diffeditor/CMakeLists.txt b/src/plugins/diffeditor/CMakeLists.txt index 34b075c97a4..e71485aa8b4 100644 --- a/src/plugins/diffeditor/CMakeLists.txt +++ b/src/plugins/diffeditor/CMakeLists.txt @@ -16,5 +16,4 @@ add_qtc_plugin(DiffEditor selectabletexteditorwidget.cpp selectabletexteditorwidget.h sidebysidediffeditorwidget.cpp sidebysidediffeditorwidget.h unifieddiffeditorwidget.cpp unifieddiffeditorwidget.h - EXPLICIT_MOC diffeditor.h ) From 83a96366a0cc69e1c85480059cf807f5ad135f00 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 18 Feb 2025 14:00:17 +0100 Subject: [PATCH 045/117] CmdBridge: Fix exit() handling The "NormalExit" case did create a warning about an exception being triggered. This change now handles it as the expected outcome. Change-Id: Ic4d978bb847cf8d1f0e32e8d7afc4fd75f2d91c3 Reviewed-by: hjk --- src/libs/gocmdbridge/client/cmdbridgeclient.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/libs/gocmdbridge/client/cmdbridgeclient.cpp b/src/libs/gocmdbridge/client/cmdbridgeclient.cpp index 21028853bf0..a2928768e84 100644 --- a/src/libs/gocmdbridge/client/cmdbridgeclient.cpp +++ b/src/libs/gocmdbridge/client/cmdbridgeclient.cpp @@ -445,8 +445,7 @@ static Utils::expected_str> createJob( std::make_exception_ptr(std::system_error(ENOENT, std::generic_category()))); promise->finish(); } else if (errType == "NormalExit") { - promise->setException( - std::make_exception_ptr(std::runtime_error(err.toStdString()))); + promise->setException(std::make_exception_ptr(std::runtime_error("NormalExit"))); promise->finish(); } else { qCWarning(clientLog) << "Error (" << errType << "):" << err; @@ -859,8 +858,17 @@ bool Client::exit() try { createVoidJob(d.get(), QCborMap{{"Type", "exit"}}, "exitres")->waitForFinished(); return true; + } catch (const std::runtime_error &e) { + if (e.what() == std::string("NormalExit")) + return true; + + qCWarning(clientLog) << "Client::exit() caught exception:" << e.what(); + return false; + } catch (const std::exception &e) { + qCWarning(clientLog) << "Client::exit() caught exception:" << e.what(); + return false; } catch (...) { - qCWarning(clientLog) << "Client::exit() caught exception"; + qCWarning(clientLog) << "Client::exit() caught unexpected exception"; return false; } } From 11c728a2e2a75d5428f2547b454ef439090b2d2b Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 21 Feb 2025 08:14:35 +0100 Subject: [PATCH 046/117] SquishTests: Expect new project wizard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I80319a476b460690651cb66f4ecd49db288ba6d6 Reviewed-by: Robert Löhning --- tests/system/shared/project.py | 2 ++ tests/system/suite_general/tst_create_proj_wizard/test.py | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index fa2567f2c05..a46d522cfa6 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -526,6 +526,8 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False, ignoreVali version = None if templateName in ("Qt Quick 2 Extension Plugin", "Qt Quick Application"): result = set([Targets.DESKTOP_6_2_4]) + elif templateName == "XR Application": + result = set() # we need Qt6.8+ elif 'Supported Platforms' in text: supports = text[text.find('Supported Platforms'):].split(":")[1].strip().split("\n") result = set() diff --git a/tests/system/suite_general/tst_create_proj_wizard/test.py b/tests/system/suite_general/tst_create_proj_wizard/test.py index daa3eacd398..ee02b72ea2e 100644 --- a/tests/system/suite_general/tst_create_proj_wizard/test.py +++ b/tests/system/suite_general/tst_create_proj_wizard/test.py @@ -72,12 +72,14 @@ def main(): handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms, skipDetails) else: + if template == "XR Application": + clickButton(waitForObject(":Next_QPushButton")) # skip XR features handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms) invokeMenuItem("File", "Exit") def verifyKitCheckboxes(kits, displayedPlatforms): - waitForObject("{type='QLabel' unnamed='1' visible='1' text='Kit Selection'}") + waitForObject("{type='QLabel' unnamed='1' visible='1' text?='Kit Selection*'}") availableCheckboxes = frozenset(filter(enabledCheckBoxExists, kits)) # verification whether expected, found and configured match From c1d3b7caba8f8ec11abcc59694c0419e93de40dd Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 24 Feb 2025 07:41:20 +0100 Subject: [PATCH 047/117] SquishTests: Keep old code path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Partially reverts d3018049923823fa86b744992ec775620609e675. Change-Id: Ie9b8fde195eb3be7ecd25cf777736a6c95505257 Reviewed-by: Robert Löhning --- tests/system/suite_debugger/tst_cli_output_console/test.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/system/suite_debugger/tst_cli_output_console/test.py b/tests/system/suite_debugger/tst_cli_output_console/test.py index 1d6d7259926..69f0b6a8b0f 100644 --- a/tests/system/suite_debugger/tst_cli_output_console/test.py +++ b/tests/system/suite_debugger/tst_cli_output_console/test.py @@ -58,7 +58,12 @@ def main(): appOutput = str(waitForObject(":Qt Creator_Core::OutputWindow").plainText) verifyOutput(appOutput, outputStdOut, "std::cout", "Application Output") verifyOutput(appOutput, outputStdErr, "std::cerr", "Application Output") - verifyOutput(appOutput, outputQDebug, "qDebug()", "Application Output") + if (os.getenv('SYSTEST_NEW_SETTINGS') != '1' and kit == Targets.DESKTOP_5_4_1_GCC + and platform.system() in ('Windows', 'Microsoft')): + test.log("Skipping qDebug() from %s (unstable, QTCREATORBUG-15067)" + % Targets.getStringForTarget(Targets.DESKTOP_5_4_1_GCC)) + else: + verifyOutput(appOutput, outputQDebug, "qDebug()", "Application Output") clickButton(waitForObject(":Qt Creator_CloseButton")) except: test.fatal("Could not find Application Output Window", From da09b3b02c2fa46352eabe40c80a5ff59e1a0729 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 19 Feb 2025 07:53:45 +0100 Subject: [PATCH 048/117] Docker: Fix circular shared_ptr Any docker process did keep a reference to the device. Since the file access is a process, it would keep the device alive. Since the file access was kept alive as long as the device, the cycle was only broken on "shutdownExistingDevices", which only happens on exit. Change-Id: I3f1bb95d86594af234e81b27791c5876d3e8ce24 Reviewed-by: hjk --- src/plugins/docker/dockerdevice.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 361c09639dc..fb43b7587a0 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -299,9 +299,7 @@ private: private: DockerDevicePrivate *m_devicePrivate = nullptr; - // Store the IDevice::ConstPtr in order to extend the lifetime of device for as long - // as this object is alive. - IDevice::ConstPtr m_device; + std::weak_ptr m_device; Process m_process; qint64 m_remotePID = 0; @@ -312,7 +310,7 @@ private: DockerProcessImpl::DockerProcessImpl(IDevice::ConstPtr device, DockerDevicePrivate *devicePrivate) : m_devicePrivate(devicePrivate) - , m_device(std::move(device)) + , m_device(device) , m_process(this) { connect(&m_process, &Process::started, this, [this] { @@ -412,6 +410,15 @@ DockerProcessImpl::DockerProcessImpl(IDevice::ConstPtr device, DockerDevicePriva emit done(resultData); }); + + connect(device.get(), &QObject::destroyed, this, [this] { + emit done(ProcessResultData{ + -1, + QProcess::ExitStatus::CrashExit, + QProcess::ProcessError::UnknownError, + Tr::tr("Device is shut down"), + }); + }); } DockerProcessImpl::~DockerProcessImpl() @@ -482,15 +489,19 @@ void DockerProcessImpl::sendControlSignal(ControlSignal controlSignal) m_process.closeWriteChannel(); return; } - auto dfa = dynamic_cast(m_device->fileAccess()); + auto device = m_device.lock(); + if (!device) + return; + + auto dfa = dynamic_cast(device->fileAccess()); if (dfa) { - static_cast(m_device->fileAccess()) + static_cast(device->fileAccess()) ->signalProcess(m_remotePID, controlSignal); } else { const int signal = controlSignalToInt(controlSignal); Process p; p.setCommand( - {m_device->rootPath().withNewPath("kill"), + {device->rootPath().withNewPath("kill"), {QString("-%1").arg(signal), QString("%2").arg(m_remotePID)}}); p.runBlocking(); } From ca2690d392dad2915c8d760809f81bc0577dcfea Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 18 Feb 2025 13:38:40 +0100 Subject: [PATCH 049/117] Docker: Move Container setup into its own thread Since starting the container may happen from any thread, we need to ensure that the container setup and teardown is done in the same thread. This change moves the container setup into its own thread. Without this, many asserts trigger as timers and other QObjects are started and stopped from arbitrary threads. Change-Id: I8db6f04358ee704ad4cd3e70dcc5bcfa7e237d27 Reviewed-by: hjk --- src/plugins/docker/CMakeLists.txt | 2 + src/plugins/docker/dockercontainerthread.cpp | 147 +++++++++++++++ src/plugins/docker/dockercontainerthread.h | 40 ++++ src/plugins/docker/dockerdevice.cpp | 189 +++++-------------- src/plugins/docker/dockerdevice.h | 2 +- src/plugins/docker/dockerdevicewidget.cpp | 2 +- 6 files changed, 239 insertions(+), 143 deletions(-) create mode 100644 src/plugins/docker/dockercontainerthread.cpp create mode 100644 src/plugins/docker/dockercontainerthread.h diff --git a/src/plugins/docker/CMakeLists.txt b/src/plugins/docker/CMakeLists.txt index f8978774ac5..2a9c77218ff 100644 --- a/src/plugins/docker/CMakeLists.txt +++ b/src/plugins/docker/CMakeLists.txt @@ -6,6 +6,8 @@ add_qtc_plugin(Docker dockertr.h dockerapi.cpp dockerapi.h dockerconstants.h + dockercontainerthread.cpp + dockercontainerthread.h dockerdevice.cpp dockerdevice.h dockerdevicewidget.cpp dockerdevicewidget.h dockerplugin.cpp diff --git a/src/plugins/docker/dockercontainerthread.cpp b/src/plugins/docker/dockercontainerthread.cpp new file mode 100644 index 00000000000..298d700b019 --- /dev/null +++ b/src/plugins/docker/dockercontainerthread.cpp @@ -0,0 +1,147 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "dockercontainerthread.h" + +#include "dockertr.h" + +#include + +#include + +using namespace Utils; + +Q_LOGGING_CATEGORY(dockerThreadLog, "qtc.docker.device.thread", QtWarningMsg); + +namespace Docker::Internal { + +// THIS OBJECT MAY NEVER KNOW OR CALL ANY OTHER OBJECTS, EXCEPT ITS OWN !!! +class Internal : public QObject +{ +public: + Internal(const DockerContainerThread::Init &init) + : m_init(init) + {} + + ~Internal() + { + if (m_startProcess && m_startProcess->isRunning()) { + // Kill instead of stop so we don't wait for the process to finish. + m_startProcess->kill(); + m_startProcess->waitForFinished(); + } + } + + expected_str start() + { + QString containerId; + + if (expected_str create = createContainer(); !create) + return make_unexpected(create.error()); + else + containerId = *create; + + if (Result start = startContainer(); !start) + return make_unexpected(start.error()); + + return containerId; + } + +private: + expected_str createContainer() + { + Process createProcess; + createProcess.setCommand(m_init.createContainerCmd); + createProcess.runBlocking(); + + if (createProcess.result() != ProcessResult::FinishedWithSuccess) { + return make_unexpected( + Tr::tr("Failed creating Docker container. Exit code: %1, output: %2") + .arg(createProcess.exitCode()) + .arg(createProcess.allOutput())); + } + + m_containerId = createProcess.cleanedStdOut().trimmed(); + if (m_containerId.isEmpty()) + return make_unexpected( + Tr::tr("Failed creating Docker container. No container ID received.")); + + qCDebug(dockerThreadLog) << "ContainerId:" << m_containerId; + return m_containerId; + } + + Result startContainer() + { + using namespace std::chrono_literals; + + m_startProcess = new Process(this); + + m_startProcess->setCommand( + {m_init.dockerBinaryPath, {"container", "start", "-a", "-i", m_containerId}}); + m_startProcess->setProcessMode(ProcessMode::Writer); + m_startProcess->start(); + if (!m_startProcess->waitForStarted(5s)) { + if (m_startProcess->state() == QProcess::NotRunning) { + return Result::Error( + Tr::tr("Failed starting Docker container. Exit code: %1, output: %2") + .arg(m_startProcess->exitCode()) + .arg(m_startProcess->allOutput())); + } + // Lets assume it will start soon + qCWarning(dockerThreadLog) + << "Docker container start process took more than 5 seconds to start."; + } + + qCDebug(dockerThreadLog) << "Started container: " << m_startProcess->commandLine(); + + return Result::Ok; + } + +private: + DockerContainerThread::Init m_init; + QString m_containerId; + Process *m_startProcess = nullptr; +}; + +DockerContainerThread::DockerContainerThread(Init init) + : m_internal(new Internal(init)) +{ + m_thread.setObjectName("Docker Container Thread"); + m_internal->moveToThread(&m_thread); + QObject::connect(&m_thread, &QThread::finished, m_internal, &QObject::deleteLater); + m_thread.start(); +} + +Result DockerContainerThread::start() +{ + expected_str result; + QMetaObject::invokeMethod(m_internal, &Internal::start, Qt::BlockingQueuedConnection, &result); + if (result) { + m_containerId = *result; + return Result::Ok; + } + return Result::Error(result.error()); +} + +DockerContainerThread::~DockerContainerThread() +{ + m_thread.quit(); + m_thread.wait(); +} + +QString DockerContainerThread::containerId() const +{ + return m_containerId; +} + +expected_str> DockerContainerThread::create(const Init &init) +{ + std::unique_ptr thread(new DockerContainerThread(init)); + + if (Result result = thread->start(); !result) + return make_unexpected(result.error()); + + return thread; +} + +} // namespace Docker::Internal diff --git a/src/plugins/docker/dockercontainerthread.h b/src/plugins/docker/dockercontainerthread.h new file mode 100644 index 00000000000..215dd58c790 --- /dev/null +++ b/src/plugins/docker/dockercontainerthread.h @@ -0,0 +1,40 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#pragma once + +#include + +#include + +namespace Docker::Internal { + +class Internal; + +class DockerContainerThread +{ +public: + struct Init + { + Utils::CommandLine createContainerCmd; + Utils::FilePath dockerBinaryPath; + }; + +public: + ~DockerContainerThread(); + + QString containerId() const; + + static Utils::expected_str> create(const Init &init); + +private: + DockerContainerThread(Init init); + Utils::Result start(); + +private: + QThread m_thread; + Internal *m_internal; + QString m_containerId; +}; + +} // namespace Docker::Internal diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index fb43b7587a0..29f6a90e990 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -5,6 +5,7 @@ #include "dockerapi.h" #include "dockerconstants.h" +#include "dockercontainerthread.h" #include "dockerdevicewidget.h" #include "dockersettings.h" #include "dockertr.h" @@ -170,25 +171,19 @@ public: DockerDevicePrivate(DockerDevice *parent) : q(parent) { - QObject::connect(q, &DockerDevice::applied, this, [this] { - if (!m_container.isEmpty()) { - stopCurrentContainer(); - } - }); + QObject::connect(q, &DockerDevice::applied, this, [this] { stopCurrentContainer(); }); } ~DockerDevicePrivate() { stopCurrentContainer(); } CommandLine createCommandLine(); - expected_str updateContainerAccess(); + expected_str updateContainerAccess(); void changeMounts(QStringList newMounts); bool ensureReachable(const FilePath &other); void shutdown(); expected_str localSource(const FilePath &other) const; - QString containerId() { return m_container; } - expected_str> osTypeAndArch() const; expected_str environment(); @@ -204,10 +199,8 @@ public: bool prepareForBuild(const Target *target); Tasks validateMounts() const; - expected_str createContainer(); - expected_str startContainer(); void stopCurrentContainer(); - expected_str fetchSystemEnviroment(); + Result fetchSystemEnviroment(); expected_str getCmdBridgePath() const; @@ -277,13 +270,10 @@ public: FilePath containerPath; }; - QString m_container; - - std::unique_ptr m_startProcess; - std::optional m_cachedEnviroment; bool m_isShutdown = false; SynchronizedValue> m_fileAccess; + SynchronizedValue> m_deviceThread; }; class DockerProcessImpl : public ProcessInterface @@ -376,7 +366,6 @@ DockerProcessImpl::DockerProcessImpl(IDevice::ConstPtr device, DockerDevicePriva if (rest.size() > 0 || stdErr.size() > 0) emit readyRead(rest, stdErr); - }); connect(&m_process, &Process::readyReadStandardError, this, [this] { @@ -682,13 +671,10 @@ DockerDevice::DockerDevice() const FilePath &workingDir) -> expected_str { Q_UNUSED(env); // TODO: That's the runnable's environment in general. Use it via -e below. - expected_str result = d->updateContainerAccess(); + expected_str result = d->updateContainerAccess(); if (!result) - return result; - - if (d->containerId().isEmpty()) - return make_unexpected(Tr::tr("Error starting remote shell. No container.")); + return make_unexpected(result.error()); expected_str shell = Terminal::defaultShellForDevice(rootPath()); if (!shell) @@ -727,9 +713,10 @@ void DockerDevice::shutdown() d->shutdown(); } -expected_str DockerDevice::updateContainerAccess() const +Result DockerDevice::updateContainerAccess() const { - return d->updateContainerAccess(); + expected_str result = d->updateContainerAccess(); + return result ? Result::Ok : Result::Error(result.error()); } expected_str DockerDevicePrivate::withDockerExecCmd( @@ -740,8 +727,12 @@ expected_str DockerDevicePrivate::withDockerExecCmd( bool withPty, bool withMarker) { - if (const auto result = updateContainerAccess(); !result) + QString containerId; + + if (const expected_str result = updateContainerAccess(); !result) return make_unexpected(result.error()); + else + containerId = *result; auto osAndArch = osTypeAndArch(); if (!osAndArch) @@ -767,7 +758,7 @@ expected_str DockerDevicePrivate::withDockerExecCmd( if (workDir && !workDir->isEmpty()) dockerCmd.addArgs({"-w", q->rootPath().withNewMappedPath(*workDir).nativePath()}); - dockerCmd.addArg(m_container); + dockerCmd.addArg(containerId); dockerCmd.addArgs({"/bin/sh", "-c"}, osAndArch->first); @@ -798,28 +789,12 @@ expected_str DockerDevicePrivate::withDockerExecCmd( void DockerDevicePrivate::stopCurrentContainer() { - if (m_container.isEmpty()) - return; - - if (!DockerApi::isDockerDaemonAvailable(false).value_or(false)) - return; - - auto fileAccess = m_fileAccess.writeLocked(); - if (*fileAccess) { - if (QThread::currentThread() == thread()) { - fileAccess->reset(); - } else { - QMetaObject::invokeMethod( - this, [ptr = fileAccess->release()]() { delete ptr; }, Qt::QueuedConnection); - } - } - - if (m_startProcess && m_startProcess->isRunning()) - m_startProcess->kill(); // Kill instead of stop so we don't wait for the process to finish. - - m_container.clear(); - m_cachedEnviroment.reset(); + auto fileAccess = m_fileAccess.writeLocked(); + fileAccess->reset(); + + auto locked = m_deviceThread.writeLocked(); + locked->reset(); } bool DockerDevicePrivate::prepareForBuild(const Target *target) @@ -984,99 +959,36 @@ CommandLine DockerDevicePrivate::createCommandLine() return dockerCreate; } -expected_str DockerDevicePrivate::createContainer() +expected_str DockerDevicePrivate::updateContainerAccess() { - if (!isImageAvailable()) - return make_unexpected(Tr::tr("Image \"%1\" is not available.").arg(q->repoAndTag())); - - const CommandLine cmdLine = createCommandLine(); - - qCDebug(dockerDeviceLog).noquote() << "RUNNING: " << cmdLine.toUserOutput(); - Process createProcess; - createProcess.setCommand(cmdLine); - createProcess.runBlocking(); - - if (createProcess.result() != ProcessResult::FinishedWithSuccess) { - return make_unexpected(Tr::tr("Failed creating Docker container. Exit code: %1, output: %2") - .arg(createProcess.exitCode()) - .arg(createProcess.allOutput())); - } - - m_container = createProcess.cleanedStdOut().trimmed(); - if (m_container.isEmpty()) - return make_unexpected( - Tr::tr("Failed creating Docker container. No container ID received.")); - - qCDebug(dockerDeviceLog) << "ContainerId:" << m_container; - return m_container; -} - -expected_str DockerDevicePrivate::startContainer() -{ - using namespace std::chrono_literals; - - auto createResult = createContainer(); - if (!createResult) - return make_unexpected(createResult.error()); - - if (m_startProcess) - m_startProcess->stop(); - - m_startProcess = std::make_unique(); - - m_startProcess->setCommand( - {settings().dockerBinaryPath(), {"container", "start", "-a", "-i", m_container}}); - m_startProcess->setProcessMode(ProcessMode::Writer); - m_startProcess->start(); - if (!m_startProcess->waitForStarted(5s)) { - if (m_startProcess->state() == QProcess::NotRunning) { - return make_unexpected( - Tr::tr("Failed starting Docker container. Exit code: %1, output: %2") - .arg(m_startProcess->exitCode()) - .arg(m_startProcess->allOutput())); - } - // Lets assume it will start soon - qCWarning(dockerDeviceLog) - << "Docker container start process took more than 5 seconds to start."; - } - - QDeadlineTimer deadline(5s); - while (!DockerApi::instance()->isContainerRunning(m_container) && !deadline.hasExpired()) { - QThread::msleep(100); - } - - if (deadline.hasExpired() && !DockerApi::instance()->isContainerRunning(m_container)) { - m_startProcess->stop(); - return make_unexpected(Tr::tr("Failed to start container \"%1\".").arg(m_container)); - } - - qCDebug(dockerDeviceLog) << "Started container: " << m_startProcess->commandLine(); - - return {}; -} - -expected_str DockerDevicePrivate::updateContainerAccess() -{ - if (!m_container.isEmpty() && DockerApi::instance()->isContainerRunning(m_container)) - return {}; - if (m_isShutdown) return make_unexpected(Tr::tr("Device is shut down")); - if (DockerApi::isDockerDaemonAvailable(false).value_or(false) == false) return make_unexpected(Tr::tr("Docker system is not reachable")); - expected_str result = startContainer(); - QString containerStatus = result ? Tr::tr("Running") : result.error().trimmed(); + auto lockedThread = m_deviceThread.writeLocked(); + if (*lockedThread) + return (*lockedThread)->containerId(); - if (!result) - result = make_unexpected(QString("Failed to start container: %1").arg(result.error())); + DockerContainerThread::Init init; + init.dockerBinaryPath = settings().dockerBinaryPath(); + init.createContainerCmd = createCommandLine(); + + auto result = DockerContainerThread::create(init); + + if (result) + lockedThread->reset(result->release()); + + QString containerStatus = result ? Tr::tr("Running") : result.error().trimmed(); QTimer::singleShot(0, this, [this, containerStatus] { q->containerStatus.setText(containerStatus); }); - return result; + if (!result) + return make_unexpected(result.error()); + + return (*lockedThread)->containerId(); } void DockerDevice::setMounts(const QStringList &mounts) const @@ -1163,24 +1075,19 @@ void DockerDevice::aboutToBeRemoved() const detector.undoAutoDetect(id().toString()); } -expected_str DockerDevicePrivate::fetchSystemEnviroment() +Result DockerDevicePrivate::fetchSystemEnviroment() { if (m_cachedEnviroment) - return {}; + return Result::Ok; if (auto fileAccess = m_fileAccess.readLocked()->get()) { m_cachedEnviroment = fileAccess->deviceEnvironment(); - return {}; + return Result::Ok; } - expected_str result = updateContainerAccess(); - - if (!result) - return result; - const expected_str fullCommandLine = withDockerExecCmd(CommandLine{"env"}); if (!fullCommandLine) - return make_unexpected(fullCommandLine.error()); + return Result::Error(fullCommandLine.error()); Process proc; proc.setCommand(*fullCommandLine); @@ -1191,9 +1098,9 @@ expected_str DockerDevicePrivate::fetchSystemEnviroment() QString stdErr = proc.cleanedStdErr(); if (stdErr.isEmpty()) - return {}; + return Result::Ok; - return make_unexpected("Could not read container environment: " + stdErr); + return Result::Error("Could not read container environment: " + stdErr); } // Factory @@ -1439,8 +1346,7 @@ expected_str> DockerDevicePrivate::osTypeAnd expected_str DockerDevicePrivate::environment() { if (!m_cachedEnviroment) { - expected_str result = fetchSystemEnviroment(); - if (!result) + if (Result result = fetchSystemEnviroment(); !result) return make_unexpected(result.error()); } @@ -1474,7 +1380,8 @@ expected_str DockerDevicePrivate::localSource(const FilePath &other) c } } - return make_unexpected(Tr::tr("localSource: No mount point found for %1").arg(other.toUrlishString())); + return make_unexpected( + Tr::tr("localSource: No mount point found for %1").arg(other.toUserOutput())); } bool DockerDevicePrivate::ensureReachable(const FilePath &other) diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h index 8c575b08ad6..22f07d530d3 100644 --- a/src/plugins/docker/dockerdevice.h +++ b/src/plugins/docker/dockerdevice.h @@ -49,7 +49,7 @@ public: Utils::expected_str systemEnvironmentWithError() const override; - Utils::expected_str updateContainerAccess() const; + Utils::Result updateContainerAccess() const; void setMounts(const QStringList &mounts) const; bool prepareForBuild(const ProjectExplorer::Target *target) override; diff --git a/src/plugins/docker/dockerdevicewidget.cpp b/src/plugins/docker/dockerdevicewidget.cpp index 3ab529d243c..52a8f1fb402 100644 --- a/src/plugins/docker/dockerdevicewidget.cpp +++ b/src/plugins/docker/dockerdevicewidget.cpp @@ -104,7 +104,7 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device) this, [this, logView, dockerDevice, searchPaths] { logView->clear(); - expected_str startResult = dockerDevice->updateContainerAccess(); + Result startResult = dockerDevice->updateContainerAccess(); if (!startResult) { logView->append(Tr::tr("Failed to start container.")); From 56b35023f03608cb4de231c3c4a62911d01c1ba6 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 25 Feb 2025 09:47:44 +0100 Subject: [PATCH 050/117] CmdBridge: Fix Panic when watchAdd fails The CmdBridge would crash on hjks linux when a path was added to the watcher that does not exist: panic: reflect: Elem of invalid type syscall.Errno goroutine 306 [running]: reflect.elem(0x0?) /usr/lib/go-1.22/src/reflect/type.go:712 +0xa5 reflect.(*rtype).Elem(0x40e625?) /usr/lib/go-1.22/src/reflect/type.go:716 +0x15 main.sendError(_, {{0xc0000127b5, 0x5}, 0x111, {{0x0, 0x0}}, {{0x0, 0x0, 0x0}, {0x0, ...}, ...}, ...}, ...) /data/dev/creator-out/src/libs/gocmdbridge/server/cmdbridge.go:127 +0x8f main.(*WatcherHandler).processAdd(_, {{0xc0000127b5, 0x5}, 0x111, {{0x0, 0x0}}, {{0x0, 0x0, This patch removes the unnecessary "Elem()" call. We also add the content of the broken buffer to our debug output to make debugging this type of issue easier. Change-Id: I4c54077f4f143be3deb53c799363190e34ea6423 Reviewed-by: hjk --- src/libs/gocmdbridge/client/cmdbridgeclient.cpp | 3 ++- src/libs/gocmdbridge/server/cmdbridge.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libs/gocmdbridge/client/cmdbridgeclient.cpp b/src/libs/gocmdbridge/client/cmdbridgeclient.cpp index a2928768e84..d35256fe356 100644 --- a/src/libs/gocmdbridge/client/cmdbridgeclient.cpp +++ b/src/libs/gocmdbridge/client/cmdbridgeclient.cpp @@ -338,7 +338,8 @@ expected_str> Client::start() return; } // Broken package, search for next magic marker - qCWarning(clientLog) << "Magic marker was not found"; + qCWarning(clientLog) + << "Magic marker was not found, buffer content:" << buffer; // If we don't find a magic marker, the rest of the buffer is trash. buffer.clear(); } else { diff --git a/src/libs/gocmdbridge/server/cmdbridge.go b/src/libs/gocmdbridge/server/cmdbridge.go index ee60f425e90..9cce3359648 100644 --- a/src/libs/gocmdbridge/server/cmdbridge.go +++ b/src/libs/gocmdbridge/server/cmdbridge.go @@ -124,7 +124,7 @@ func readPacket(decoder *cbor.Decoder) (*command, error) { func sendError(out chan<- []byte, cmd command, err error) { errMsg := err.Error() - errType := reflect.TypeOf(err).Elem().Name() + errType := reflect.TypeOf(err).Name() if e, ok := err.(*os.PathError); ok { errMsg = e.Err.Error() errType = reflect.TypeOf(e.Err).Name() From 81f42ce85fbcdb2a30e2c57f7401f9842a772b38 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 25 Feb 2025 11:10:06 +0100 Subject: [PATCH 051/117] CppEditor: disable TabSettings auto detection for tests The test data contains unusual indentation pattern that results in unexpected output for the generate getter and setter auto tests. Change-Id: I66f58f27d99f9f3a2d531421256c02643a243d2f Reviewed-by: Christian Kandeler --- src/plugins/cppeditor/cpptoolstestcase.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/cppeditor/cpptoolstestcase.cpp b/src/plugins/cppeditor/cpptoolstestcase.cpp index d224e38fe38..0c986588c54 100644 --- a/src/plugins/cppeditor/cpptoolstestcase.cpp +++ b/src/plugins/cppeditor/cpptoolstestcase.cpp @@ -25,9 +25,12 @@ #include #include +#include #include #include +#include #include +#include #include #include @@ -232,6 +235,9 @@ bool TestCase::openCppEditor(const FilePath &filePath, TextEditor::BaseTextEdito TextEditor::StorageSettings s = e->textDocument()->storageSettings(); s.m_addFinalNewLine = false; e->textDocument()->setStorageSettings(s); + TextEditor::TabSettings ts = TextEditor::TextEditorSettings::codeStyle()->tabSettings(); + ts.m_autoDetect = false; + e->textDocument()->setTabSettings(ts); } if (!QTest::qWaitFor( From 8f2387a09f0b72e8642d7386f94c47d9451502a4 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 26 Feb 2025 06:16:30 +0100 Subject: [PATCH 052/117] Docker: Fix qbs build Amends ca2690d392dad2915c8d760809f81bc0577dcfea. Change-Id: I7c3372ccb049fb15c74553ce333b6937e2709fd6 Reviewed-by: Marcus Tillmanns --- src/plugins/docker/docker.qbs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/docker/docker.qbs b/src/plugins/docker/docker.qbs index a891d86bbb5..9921cd8b811 100644 --- a/src/plugins/docker/docker.qbs +++ b/src/plugins/docker/docker.qbs @@ -16,6 +16,8 @@ QtcPlugin { "dockerapi.cpp", "dockerapi.h", "dockerconstants.h", + "dockercontainerthread.cpp", + "dockercontainerthread.h", "dockerdevice.cpp", "dockerdevice.h", "dockerdevicewidget.cpp", From d53eb401e6236fb73a053dcb229237332cdbb491 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 25 Feb 2025 10:35:29 +0100 Subject: [PATCH 053/117] CppEditor: Fix header guard template Amends f477ede697c67c0716232963298a6e9d218ed8d6. Fixes: QTCREATORBUG-32539 Change-Id: I068293abb71a90d8931f0fd581530c4d09d8f283 Reviewed-by: David Schulz --- src/plugins/cppeditor/cppfilesettingspage.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/cppeditor/cppfilesettingspage.h b/src/plugins/cppeditor/cppfilesettingspage.h index 044ac6fb450..b77341c43ac 100644 --- a/src/plugins/cppeditor/cppfilesettingspage.h +++ b/src/plugins/cppeditor/cppfilesettingspage.h @@ -29,7 +29,8 @@ public: QDir::toNativeSeparators("../Src"), ".."}; Utils::FilePath licenseTemplatePath; - QString headerGuardTemplate = "%{JS: '%{Header:FileName}'.toUpperCase().replace(/[.]/g, '_')}"; + QString headerGuardTemplate + = "%{JS: '%{Header:FileName}'.toUpperCase().replace(/^[1-9]/, '_').replace(/[^_a-zA-Z1-9]/g, '_')}"; bool headerPragmaOnce = false; bool lowerCaseFiles = Constants::LOWERCASE_CPPFILES_DEFAULT; From 6a1e8749aaef50a8d6a4a27fe5fa927e476074b6 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 25 Feb 2025 19:01:56 +0100 Subject: [PATCH 054/117] Core: Fix off-by-one error ... when linking tasks in the issues pane to the corresponding content in an output window. Amends 4b9e2d3d8853c02d94854359d2c34063544b55fd. Change-Id: Iebbebccf4a02376d0ded9a340cdbfddee098d570 Reviewed-by: Christian Stenger --- src/plugins/coreplugin/outputwindow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index c421154c1d3..85d0e751548 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -681,7 +681,10 @@ void OutputWindow::registerPositionOf(unsigned taskId, int linkedOutputLines, in return; const int blocknumber = document()->blockCount() - offset; - const int firstLine = blocknumber - linkedOutputLines - skipLines; + + // -1 because OutputFormatter has already added the newline. + const int firstLine = blocknumber - linkedOutputLines - skipLines - 1; + const int lastLine = firstLine + linkedOutputLines - 1; d->taskPositions.insert(taskId, {firstLine, lastLine}); From 9fe3fecf7b5ffbaed0cfbc4204f3b535c03e11c0 Mon Sep 17 00:00:00 2001 From: Nicholas Bennett Date: Tue, 25 Feb 2025 15:09:03 +0200 Subject: [PATCH 055/117] Docs: Add building AAR feature to deploying to Android page Fixes: QTBUG-125346 Change-Id: Ibe415dcff5e617c02dadca3e6c29bba6ef1e879b Reviewed-by: Leena Miettinen --- .../images/qt-creator-android-build-aar.webp | Bin 0 -> 7866 bytes .../src/android/deploying-android.qdoc | 23 +++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 doc/qtcreator/images/qt-creator-android-build-aar.webp diff --git a/doc/qtcreator/images/qt-creator-android-build-aar.webp b/doc/qtcreator/images/qt-creator-android-build-aar.webp new file mode 100644 index 0000000000000000000000000000000000000000..4b8890c8ee0c671dfe0c7e76a1465b2fd8382248 GIT binary patch literal 7866 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 VVg9D&CmndF{kiqC>vwXA5CEdZA}s&_ literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/android/deploying-android.qdoc b/doc/qtcreator/src/android/deploying-android.qdoc index 84107b00ef4..e5056eb19ce 100644 --- a/doc/qtcreator/src/android/deploying-android.qdoc +++ b/doc/qtcreator/src/android/deploying-android.qdoc @@ -9,12 +9,13 @@ \title Android Deploy Configuration - \brief Create Application Packages (APK) or Android App Bundles (AAB) to - install and run on devices or to upload to the Google Play store. + \brief Create packages to deploy to devices or to submit to the Google Play + store, or create libraries for Android app modules. Android applications are packaged as ZIP files called Application Packages - (APK) or Android App Bundles (AAB). You can install and run APK files on a - device. You can upload AAB files to the Google Play store. + (APK), Android App Bundles (AAB), or Android Archives (AAR). You can + install and run APK files on a device. You can upload AAB files to the + Google Play store. \l{Qt for Android} has binaries for armv7a, arm64-v8a, x86, and x86-64. To support several different ABIs in your application, build an AAB that @@ -27,10 +28,14 @@ \list \li As a stand-alone, distributable application package (APK). \li As an app bundle (AAB) for distribution in the Google Play store. + \li As an AAR, which fundamentally differs from the APK and AAB formats + in that it is an Android library. You can use it as a dependency for + an Android app module, but you cannot run it alone. All Qt versions do not support AABs. Qt 6.3.0 and later support - multi-abi builds for applications that you build with CMake. For - more information, see \l{Deploying an Application on Android}. + multi-abi builds for applications when you build with CMake. AARs + are supported from Qt 6.8.0 onwards. For more information, see + \l{Deploying an Application on Android}. \endlist \note Since \QC 4.12, Ministro is not supported. @@ -123,6 +128,12 @@ \image qtcreator-android-build-steps.png {qmake settings for building AABs} + \section3 Building AARs + + Select the AAR target in the \uicontrol {Build Steps} section. + + \image qt-creator-android-build-aar.webp {Selecting the AAR target} + \section3 Signing Android Packages To publish your application, you must sign it by using a \e {public-private From 7c38724a9b0f1af8d3458681720be4ae669f95a1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 25 Feb 2025 14:20:53 +0100 Subject: [PATCH 056/117] Update change log for 16.0.0-rc1 Change-Id: I5b695d0c8ca63c6b8c827d980a7f17c4507b6316 Reviewed-by: Leena Miettinen --- dist/changelog/changes-16.0.0.md | 58 +++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/dist/changelog/changes-16.0.0.md b/dist/changelog/changes-16.0.0.md index 339a34dade8..7f1a99537e8 100644 --- a/dist/changelog/changes-16.0.0.md +++ b/dist/changelog/changes-16.0.0.md @@ -36,6 +36,8 @@ Editing ([QTCREATORBUG-32193](https://bugreports.qt.io/browse/QTCREATORBUG-32193)) * Fixed a formatting issue when applying method signature changes ([QTCREATORBUG-31931](https://bugreports.qt.io/browse/QTCREATORBUG-31931)) +* Fixed the generation of getters for local enum types + ([QTCREATORBUG-32473](https://bugreports.qt.io/browse/QTCREATORBUG-32473)) * Built-in * Added support for init-statements in range-based `for` loops ([QTCREATORBUG-31961](https://bugreports.qt.io/browse/QTCREATORBUG-31961)) @@ -68,6 +70,16 @@ Editing ([QTCREATORBUG-31878](https://bugreports.qt.io/browse/QTCREATORBUG-31878), [QTCREATORBUG-32163](https://bugreports.qt.io/browse/QTCREATORBUG-32163)) +### Copilot + +* Fixed issues with newer versions of the language server + ([QTCREATORBUG-32536](https://bugreports.qt.io/browse/QTCREATORBUG-32536)) + +### SCXML + +* Fixed the colors of items + ([QTCREATORBUG-32477](https://bugreports.qt.io/browse/QTCREATORBUG-32477)) + Projects -------- @@ -101,6 +113,11 @@ Projects ([QTCREATORBUG-32350](https://bugreports.qt.io/browse/QTCREATORBUG-32350)) * Fixed a crash when an application outputs lots of lines ([QTCREATORBUG-32371](https://bugreports.qt.io/browse/QTCREATORBUG-32371)) +* Environment Editor + * Fixed the `Disable` button for the first item + ([QTCREATORBUG-32495](https://bugreports.qt.io/browse/QTCREATORBUG-32495)) + * Fixed the `Edit` button for disabled items + ([QTCREATORBUG-32495](https://bugreports.qt.io/browse/QTCREATORBUG-32495)) * Qt * Improved performance of Qt ABI detection when module `.json` files are available @@ -121,6 +138,7 @@ Projects * Added support for creating run configurations for custom CMake targets with the `qtc_runnable` `FOLDER` property ([QTCREATORBUG-32324](https://bugreports.qt.io/browse/QTCREATORBUG-32324)) +* Improved the performance when CMake reply files change on disk * Fixed that manually created run configurations could be removed if `Create suitable run configurations automatically` was turned off ([QTCREATORBUG-32289](https://bugreports.qt.io/browse/QTCREATORBUG-32289)) @@ -130,6 +148,8 @@ Projects * Fixed that Ninja was not detected even when `CMAKE_MAKE_PROGRAM` was set to the `ninja` executable ([QTCREATORBUG-32436](https://bugreports.qt.io/browse/QTCREATORBUG-32436)) +* Fixed the import of multi-config CMake presets + ([QTCREATORBUG-31554](https://bugreports.qt.io/browse/QTCREATORBUG-31554)) * Package Manager Auto Setup * Changed the default installation directory to `/tmp` to ensure that the directory is writable @@ -160,7 +180,9 @@ Debugging * Pretty printers * Added `QMultiHash` - ([QTCREATORBUG-32313](https://bugreports.qt.io/browse/QTCREATORBUG-32313)) + ([QTCREATORBUG-32313](https://bugreports.qt.io/browse/QTCREATORBUG-32313)) + * Fixed issues with debuggers that use an older Python version + ([QTCREATORBUG-32475](https://bugreports.qt.io/browse/QTCREATORBUG-32475)) * CDB * Disabled heap debugging by default and added the option `Enable heap debugging` @@ -180,11 +202,19 @@ Analyzer ([QTCREATORBUG-31372](https://bugreports.qt.io/browse/QTCREATORBUG-31372)) * Fixed that profiling could fail to start ([QTCREATORBUG-32062](https://bugreports.qt.io/browse/QTCREATORBUG-32062)) +* Fixed the sorting of statistics + ([QTCREATORBUG-32398](https://bugreports.qt.io/browse/QTCREATORBUG-32398)) ### Axivion * Added support for images in the issue details * Moved Axivion preferences to `Preferences > Analyzer > Axivion` +* Fixed that the display of data in the issues table did not adapt to the + column's data type + ([QTCREATORBUG-32023](https://bugreports.qt.io/browse/QTCREATORBUG-32023)) +* Fixed that filters were shown even for issue types that do not suppor them +* Fixed that the Filter menus opened at the wrong position + ([QTCREATORBUG-32506](https://bugreports.qt.io/browse/QTCREATORBUG-32506)) ### Coco @@ -192,6 +222,18 @@ Analyzer in `Projects > Project Settings > Coco Code Coverage` ([Documentation]https://doc-snapshots.qt.io/qtcreator-16.0/creator-coco.html) +Terminal +-------- + +* Fixed that the view didn't jump to the end on input + ([QTCREATORBUG-32407](https://bugreports.qt.io/browse/QTCREATORBUG-32407)) +* Fixed the title of tabs + ([QTCREATORBUG-32197](https://bugreports.qt.io/browse/QTCREATORBUG-32197)) +* Fixed killing the shell process + ([QTCREATORBUG-32509](https://bugreports.qt.io/browse/QTCREATORBUG-32509)) +* Fixed auto-scrolling + ([QTCREATORBUG-32167](https://bugreports.qt.io/browse/QTCREATORBUG-32167)) + Version Control Systems ----------------------- @@ -227,10 +269,17 @@ Platforms * Added support for the `terminator` terminal emulator ([QTCREATORBUG-32111](https://bugreports.qt.io/browse/QTCREATORBUG-32111)) +### macOS + +* Fixed a crash when MinGW toolchains are detected on macOS hosts + ([QTCREATORBUG-32127](https://bugreports.qt.io/browse/QTCREATORBUG-32127)) + ### Android * Fixed a performance problem when detecting the Android ABI ([QTCREATORBUG-31068](https://bugreports.qt.io/browse/QTCREATORBUG-31068)) +* Fixed that the wrong `lldb-server` could be used + ([QTCREATORBUG-32494](https://bugreports.qt.io/browse/QTCREATORBUG-32494)) ### iOS @@ -251,6 +300,13 @@ Platforms * Fixed an issue with running `pkg-config` in the container ([QTCREATORBUG-32325](https://bugreports.qt.io/browse/QTCREATORBUG-32325)) +* Fixed an issue with shutting down the device access +* Fixed soft asserts during container setup + +### QNX + +* Fixed issues with Clangd 19 + ([QTCREATORBUG-32529](https://bugreports.qt.io/browse/QTCREATORBUG-32529)) Credits for these changes go to: -------------------------------- From 23618142a86edb71f76fc9a2f3bd00a58ae5afd6 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 26 Feb 2025 13:52:36 +0100 Subject: [PATCH 057/117] Doc: Move a Qt Creator -specific file to a creator-only directory ...to fix a QDoc warning when building the QDS docs. Change-Id: I3dac1fe9011f82196ddc6ccd8b9d8562b71ced3e Reviewed-by: Leena Miettinen Reviewed-by: Pranta Ghosh Dastider Reviewed-by: Morteza Jamshidi --- .../{ => howto/creator-only}/creator-how-to-set-up-winappsdk.qdoc | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/qtcreator/src/{ => howto/creator-only}/creator-how-to-set-up-winappsdk.qdoc (100%) diff --git a/doc/qtcreator/src/creator-how-to-set-up-winappsdk.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-set-up-winappsdk.qdoc similarity index 100% rename from doc/qtcreator/src/creator-how-to-set-up-winappsdk.qdoc rename to doc/qtcreator/src/howto/creator-only/creator-how-to-set-up-winappsdk.qdoc From 5fa207ea13de0a36c5f9e37739965e6210d1649f Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 27 Feb 2025 07:25:28 +0100 Subject: [PATCH 058/117] Terminal: Use displayName from runConfig for shell title Fixes: QTCREATORBUG-32197 Change-Id: I4709b2ce749909f7eb0a50306a751568d6a9faad Reviewed-by: Cristian Adam --- src/plugins/projectexplorer/runcontrol.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index 117483f0ce3..f9ef09b6680 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -1534,11 +1534,13 @@ void ProcessRunnerPrivate::start() m_stopRequested = false; QVariantHash extraData = q->runControl()->extraData(); - if (q->runControl() && q->runControl()->target() - && q->runControl()->target()->activeRunConfiguration()) { - QString shellName = q->runControl()->target()->activeRunConfiguration()->displayName(); - if (BuildConfiguration *buildConfig = q->runControl()->target()->activeBuildConfiguration()) - shellName += " - " + buildConfig->displayName(); + if (const auto rc = q->runControl()) { + QString shellName = rc->displayName(); + + if (rc->target()) { + if (BuildConfiguration *buildConfig = rc->target()->activeBuildConfiguration()) + shellName += " - " + buildConfig->displayName(); + } extraData[TERMINAL_SHELL_NAME] = shellName; } else { From 2bc6d84b688c96a06d16c0f0187460c738492991 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 27 Feb 2025 07:31:48 +0100 Subject: [PATCH 059/117] Terminal: Remove Home/End handling It seems that people expect Home/End to jump to start/end of line. This change removes the handling of the keys so the underlying shell can handle them themselves. Fixes: QTCREATORBUG-32545 Change-Id: I7503e85a57b15b231260759eb62cc8e71d4b6150 Reviewed-by: Cristian Adam --- src/libs/solutions/terminal/terminalview.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index 5223962e2ef..fc8c2644a1c 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -966,12 +966,6 @@ void TerminalView::keyPressEvent(QKeyEvent *event) verticalScrollBar()->value() - d->m_surface->liveSize().height(), verticalScrollBar()->maximum())); break; - case Qt::Key_End: - verticalScrollBar()->setValue(verticalScrollBar()->maximum()); - break; - case Qt::Key_Home: - verticalScrollBar()->setValue(0); - break; default: if (event->key() < Qt::Key_Shift || event->key() > Qt::Key_ScrollLock) verticalScrollBar()->setValue(verticalScrollBar()->maximum()); From 61c3b67c72a0b4c1db081a3eb5affda9c4286aa9 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 27 Feb 2025 12:46:27 +0100 Subject: [PATCH 060/117] Tests: Add missing using namespace Change-Id: Ibcf0047b51c8bde715d21390e02654df733b7cb5 Reviewed-by: Jarek Kobus --- tests/auto/solutions/qprocesstask/testsleep/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/solutions/qprocesstask/testsleep/main.cpp b/tests/auto/solutions/qprocesstask/testsleep/main.cpp index cfe8752e02a..4bd1f5be474 100644 --- a/tests/auto/solutions/qprocesstask/testsleep/main.cpp +++ b/tests/auto/solutions/qprocesstask/testsleep/main.cpp @@ -4,6 +4,7 @@ #include using namespace std; +using namespace std::chrono_literals; int main() { From 9dc7d5e4ccea82d350013972eee12cd6cc7d3953 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 27 Feb 2025 15:15:00 +0100 Subject: [PATCH 061/117] PE: Remove unused member Change-Id: I6fbeeec6f3558a75304fbb0ba5ad8b7b4d9901c9 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/buildsettingspropertiespage.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index 7451ed43363..5869e4eb06a 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -51,7 +51,6 @@ private: QPushButton *m_removeButton = nullptr; QPushButton *m_renameButton = nullptr; QPushButton *m_cloneButton = nullptr; - QPushButton *m_makeActiveButton = nullptr; QComboBox *m_buildConfigurationComboBox = nullptr; QMenu *m_addButtonMenu = nullptr; From 5b70711fdbf50b30a773cc0267a930c78acdfefc Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 27 Feb 2025 09:19:08 +0100 Subject: [PATCH 062/117] Terminal: Ignore empty InputMethodEvents Fixes: QTCREATORBUG-32546 Change-Id: I943f5ac1b3703e18bc3cd4ad89d64a4d99e25698 Reviewed-by: Cristian Adam --- src/libs/solutions/terminal/terminalview.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index fc8c2644a1c..9faf721d594 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -1106,6 +1106,11 @@ void TerminalView::focusOutEvent(QFocusEvent *) void TerminalView::inputMethodEvent(QInputMethodEvent *event) { + // Gnome sends empty events when switching virtual desktops, so ignore those. + if (event->commitString().isEmpty() && event->preeditString().isEmpty() + && event->attributes().empty() && d->m_preEditString.isEmpty()) + return; + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); d->m_preEditString = event->preeditString(); From 80162edf1d09a0b8d1c677b772fcb93d5cf7a414 Mon Sep 17 00:00:00 2001 From: Lukasz Papierkowski Date: Tue, 25 Feb 2025 12:17:33 +0100 Subject: [PATCH 063/117] Lua: Add source code copy link and icon for MarkdownBrowser Change-Id: I3100c149b47dc503eae191a8a9f2f71b9c2b1b18 Reviewed-by: Marcus Tillmanns --- src/libs/utils/images/code_copy_square.png | Bin 0 -> 353 bytes src/libs/utils/images/code_copy_square@2x.png | Bin 0 -> 556 bytes src/libs/utils/layoutbuilder.cpp | 20 +- src/libs/utils/layoutbuilder.h | 4 +- src/libs/utils/markdownbrowser.cpp | 224 ++++++++++++++---- src/libs/utils/markdownbrowser.h | 6 + src/libs/utils/utils.qrc | 4 + src/plugins/lua/bindings/gui.cpp | 10 + src/plugins/lua/meta/gui.lua | 14 +- 9 files changed, 227 insertions(+), 55 deletions(-) create mode 100644 src/libs/utils/images/code_copy_square.png create mode 100644 src/libs/utils/images/code_copy_square@2x.png diff --git a/src/libs/utils/images/code_copy_square.png b/src/libs/utils/images/code_copy_square.png new file mode 100644 index 0000000000000000000000000000000000000000..73583ff1752f551de7486d79017ddb21ff8b4067 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_lPk;vjb?hIQv;UNSH+u%tWsIx;Y9?C1WI$jZRL@Xgc3F{FZVZP01nCI^Ak>AnwE zhed}${dvA~l?`J-Cqf&yc?S@#T zYG~hMnT>PaoD?a}Rdr)kSjkx4RG7DGUH5c>9l(XU!{w|r88P=%edBAhBsa##n z|K)NC6Bak^yx(z0F2+@>AUryj=&pix&>)Kd@mTvK4U|?YIboFyt=akR{ E0MdSm4gdfE literal 0 HcmV?d00001 diff --git a/src/libs/utils/images/code_copy_square@2x.png b/src/libs/utils/images/code_copy_square@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9602b330508a4c338da93624c5c0e55efbcbf6 GIT binary patch literal 556 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}oCO|{#S9E$svykh8Km-o zfq{XsILO_JVcj{ImkbOHEa{HEjtmSN`?>!lvNA9*9`tl^45?szJMCibAqSqexdKOo zn*Eam!V-_4ue@3y$9Wsb!J70>OLU#18+Z(`_Ma{KK! z-M+`YEBm5rGq>MQrvqnJhocBFCA8q<4m$tE7H$P*+Zt*F* zXS%}8bPkvI3qJCNY?qbyEWEnUlcB^(Cwbb!)Avug@`WTmo>rPv^RGJh`h{uBnXT9Z zPF_3l$$q9Z_xzitwf98!GT+&oP_Z_yHczKO%eno}BI%+!7QuP^yOh=W3T)qh|1JFP zd4-aUW6#&tyc0*Q7PNIXy*uz(>fd}Tg(p*Ax3H*`bhM~tvscV`PsetMinimumWidth(minw); } +void Widget::setMinimumHeight(int height) +{ + access(this)->setMinimumHeight(height); +} + void Widget::setSizePolicy(const QSizePolicy &policy) { access(this)->setSizePolicy(policy); @@ -1109,6 +1114,11 @@ MarkdownBrowser::MarkdownBrowser(std::initializer_list ps) apply(this, ps); } +QString MarkdownBrowser::toMarkdown() const +{ + return access(this)->toMarkdown(); +} + void MarkdownBrowser::setMarkdown(const QString &markdown) { access(this)->setMarkdown(markdown); @@ -1119,6 +1129,11 @@ void MarkdownBrowser::setBasePath(const Utils::FilePath &path) access(this)->setBasePath(path); } +void MarkdownBrowser::setEnableCodeCopyButton(bool enable) +{ + access(this)->setEnableCodeCopyButton(enable); +} + // Special If If::If( @@ -1245,11 +1260,6 @@ void LineEdit::setCompleter(QCompleter *completer) access(this)->setSpecialCompleter(completer); } -void LineEdit::setMinimumHeight(int height) -{ - access(this)->setMinimumHeight(height); -} - void LineEdit::onReturnPressed(QObject *guard, const std::function &func) { static_cast(access(this))->acceptReturnKeys = true; diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index 313771b1417..651166a4f0d 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -266,6 +266,7 @@ public: void setContentsMargins(int left, int top, int right, int bottom); void setCursor(Qt::CursorShape shape); void setMinimumWidth(int); + void setMinimumHeight(int height); void activateWindow(); void close(); @@ -357,7 +358,6 @@ public: void setRightSideIconPath(const Utils::FilePath &path); void setPlaceHolderText(const QString &text); void setCompleter(QCompleter *completer); - void setMinimumHeight(int height); void onReturnPressed(QObject *guard, const std::function &); void onRightSideIconClicked(QObject *guard, const std::function &); }; @@ -456,8 +456,10 @@ public: MarkdownBrowser(std::initializer_list items); + QString toMarkdown() const; void setMarkdown(const QString &); void setBasePath(const Utils::FilePath &); + void setEnableCodeCopyButton(bool enable); }; // Special diff --git a/src/libs/utils/markdownbrowser.cpp b/src/libs/utils/markdownbrowser.cpp index f56612e5b82..d1e0b80aee4 100644 --- a/src/libs/utils/markdownbrowser.cpp +++ b/src/libs/utils/markdownbrowser.cpp @@ -8,6 +8,7 @@ #include "mimeutils.h" #include "movie.h" #include "networkaccessmanager.h" +#include "stringutils.h" #include "stylehelper.h" #include "textutils.h" #include "theme/theme.h" @@ -19,8 +20,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -81,9 +84,12 @@ static QStringList defaultCodeFontFamilies() return {"Menlo", "Source Code Pro", "Monospace", "Courier"}; } -static void highlightCodeBlock(QTextDocument *document, QTextBlock &block, const QString &language) +static int registerSnippet(QTextDocument *document, const QString &code); + +static void highlightCodeBlock( + QTextDocument *document, QTextBlock &block, const QString &language, bool enableCopy) { - const int position = block.position(); + const int startPos = block.position(); // Find the end of the code block ... for (block = block.next(); block.isValid(); block = block.next()) { if (!block.blockFormat().hasProperty(QTextFormat::BlockCodeLanguage)) @@ -91,43 +97,81 @@ static void highlightCodeBlock(QTextDocument *document, QTextBlock &block, const if (language != block.blockFormat().stringProperty(QTextFormat::BlockCodeLanguage)) break; } - const int end = (block.isValid() ? block.position() : document->characterCount()) - 1; + const int endPos = (block.isValid() ? block.position() : document->characterCount()) - 1; + // Get the text of the code block and erase it QTextCursor eraseCursor(document); - eraseCursor.setPosition(position); - eraseCursor.setPosition(end, QTextCursor::KeepAnchor); - + eraseCursor.setPosition(startPos); + eraseCursor.setPosition(endPos, QTextCursor::KeepAnchor); const QString code = eraseCursor.selectedText(); eraseCursor.removeSelectedText(); - // Create a new Frame and insert the highlighted code ... - block = document->findBlock(position); - + // Reposition the main cursor to startPos, to insert new content + block = document->findBlock(startPos); QTextCursor cursor(block); - QTextFrameFormat format; - format.setBorderStyle(QTextFrameFormat::BorderStyle_Solid); - format.setBackground(creatorColor(Theme::Token_Background_Muted)); - format.setPadding(SpacingTokens::ExPaddingGapM); - format.setLeftMargin(SpacingTokens::VGapM); - format.setRightMargin(SpacingTokens::VGapM); - QTextFrame *frame = cursor.insertFrame(format); + QTextFrameFormat frameFormat; + frameFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Solid); + frameFormat.setBackground(creatorColor(Theme::Token_Background_Muted)); + frameFormat.setPadding(SpacingTokens::ExPaddingGapM); + frameFormat.setLeftMargin(SpacingTokens::VGapM); + frameFormat.setRightMargin(SpacingTokens::VGapM); + + QTextFrame *frame = cursor.insertFrame(frameFormat); QTextCursor frameCursor(frame); - std::unique_ptr codeDocument(highlightText(code, language)); - bool first = true; + if (enableCopy) { + QTextBlockFormat linkBlockFmt; + linkBlockFmt.setAlignment(Qt::AlignRight); + frameCursor.insertBlock(linkBlockFmt); - for (auto block = codeDocument->begin(); block != codeDocument->end(); block = block.next()) { - if (!first) - frameCursor.insertBlock(); + const int snippetId = registerSnippet(document, code); + const QString copy_id = QString("copy:%1").arg(snippetId); - QTextCharFormat charFormat = block.charFormat(); - charFormat.setFontFamilies(defaultCodeFontFamilies()); - frameCursor.setCharFormat(charFormat); + // Insert copy icon + QTextImageFormat imageFormat; + imageFormat.setName("qrc:/markdownbrowser/images/code_copy_square.png"); + imageFormat.setAnchor(true); + imageFormat.setAnchorHref(copy_id); + imageFormat.setWidth(16); + imageFormat.setHeight(16); + frameCursor.insertImage(imageFormat); - first = false; - auto formats = block.layout()->formats(); - frameCursor.insertText(block.text()); + // Create a clickable anchor for the "Copy" text + QTextCharFormat anchorFormat; + anchorFormat.setAnchor(true); + anchorFormat.setAnchorHref(copy_id); + anchorFormat.setForeground(QColor("#888")); + anchorFormat.setFontPointSize(10); + frameCursor.setCharFormat(anchorFormat); + frameCursor.insertText(" Copy"); + + // Insert a new left-aligned block to start the first line of code + QTextBlockFormat codeBlockFmt; + codeBlockFmt.setAlignment(Qt::AlignLeft); + frameCursor.insertBlock(codeBlockFmt); + } + + std::unique_ptr codeDoc(highlightText(code, language)); + + // Iterate each line in codeDoc and copy it out + bool firstLine = true; + for (auto tempBlock = codeDoc->begin(); tempBlock != codeDoc->end(); + tempBlock = tempBlock.next()) { + // For each subsequent line, insert another block + if (!firstLine) { + QTextBlockFormat codeBlockFmt; + codeBlockFmt.setAlignment(Qt::AlignLeft); + frameCursor.insertBlock(codeBlockFmt); + } + firstLine = false; + + QTextCharFormat lineFormat = tempBlock.charFormat(); + lineFormat.setFontFamilies(defaultCodeFontFamilies()); + frameCursor.setCharFormat(lineFormat); + + auto formats = tempBlock.layout()->formats(); + frameCursor.insertText(tempBlock.text()); frameCursor.block().layout()->setFormats(formats); } @@ -138,7 +182,6 @@ static void highlightCodeBlock(QTextDocument *document, QTextBlock &block, const class AnimatedImageHandler : public QObject, public QTextObjectInterface { - Q_OBJECT Q_INTERFACES(QTextObjectInterface) public: @@ -315,11 +358,18 @@ public: || (url.isRelative() && isBaseHttp); }; - QSet remoteUrls = Utils::filtered(m_urlsToLoad, isRemoteUrl); - QSet localUrls = Utils::filtered(m_urlsToLoad, std::not_fn(isRemoteUrl)); + const auto isLocalUrl = [this, isRemoteUrl](const QUrl &url) { + if (url.scheme() == "qrc") + return true; - if (m_basePath.isEmpty()) - localUrls.clear(); + if (!m_basePath.isEmpty() && !isRemoteUrl(url)) + return true; + + return false; + }; + + QSet remoteUrls = Utils::filtered(m_urlsToLoad, isRemoteUrl); + QSet localUrls = Utils::filtered(m_urlsToLoad, isLocalUrl); if (!m_loadRemoteImages) remoteUrls.clear(); @@ -384,22 +434,36 @@ public: } }; - auto onLocalSetup = [localIterator, - basePath = m_basePath, - maxSize = m_imageHandler.maximumCacheSize()]( - Async &async) { - const FilePath path = basePath.resolvePath(localIterator->path()); - async.setConcurrentCallData( - [](QPromise &promise, const FilePath &path, qsizetype maxSize) { - auto data = path.fileContents(); - if (!data || promise.isCanceled()) - return; + auto onLocalSetup = + [localIterator, basePath = m_basePath, maxSize = m_imageHandler.maximumCacheSize()]( + Async &async) { + const QUrl url = *localIterator; + async.setConcurrentCallData( + [](QPromise &promise, + const FilePath &basePath, + const QUrl &url, + qsizetype maxSize) { + if (url.scheme() == "qrc") { + QFile f(":" + url.path()); + if (!f.open(QIODevice::ReadOnly)) + return; - promise.addResult(AnimatedImageHandler::makeEntry(*data, maxSize)); - }, - path, - maxSize); - }; + promise.addResult( + AnimatedImageHandler::makeEntry(f.readAll(), maxSize)); + return; + } + + const FilePath path = basePath.resolvePath(url.path()); + auto data = path.fileContents(); + if (!data || promise.isCanceled()) + return; + + promise.addResult(AnimatedImageHandler::makeEntry(*data, maxSize)); + }, + basePath, + url, + maxSize); + }; auto onLocalDone = [localIterator, this](const Async &async) { EntryPointer result = async.result(); @@ -427,6 +491,21 @@ public: }); } + int registerSnippet(const QString &code) + { + const int id = m_nextSnippetId++; + m_snippetMap.insert(id, code); + return id; + } + + QString snippetById(int id) const { return m_snippetMap.value(id); } + + void clearSnippets() + { + m_snippetMap.clear(); + m_nextSnippetId = 0; + } + void scheduleLoad(const QUrl &url) { m_urlsToLoad.insert(url); @@ -449,11 +528,24 @@ private: FilePath m_basePath; std::function m_requestHook; QNetworkAccessManager *m_networkAccessManager = NetworkAccessManager::instance(); + QMap m_snippetMap; + int m_nextSnippetId = 0; }; +static int registerSnippet(QTextDocument *document, const QString &code) +{ + auto *animDoc = static_cast(document); + return animDoc->registerSnippet(code); +} + MarkdownBrowser::MarkdownBrowser(QWidget *parent) : QTextBrowser(parent) + , m_enableCodeCopyButton(false) { + setOpenLinks(false); + + connect(this, &QTextBrowser::anchorClicked, this, &MarkdownBrowser::handleAnchorClicked); + setDocument(new AnimatedDocument(this)); } @@ -480,6 +572,11 @@ void MarkdownBrowser::setMargins(const QMargins &margins) setViewportMargins(margins); } +void MarkdownBrowser::setEnableCodeCopyButton(bool enable) +{ + m_enableCodeCopyButton = enable; +} + void MarkdownBrowser::setAllowRemoteImages(bool allow) { static_cast(document())->setAllowRemoteImages(allow); @@ -500,6 +597,24 @@ void MarkdownBrowser::setMaximumCacheSize(qsizetype maxSize) static_cast(document())->setMaximumCacheSize(maxSize); } +void MarkdownBrowser::handleAnchorClicked(const QUrl &link) +{ + if (link.scheme() != QLatin1String("copy")) + return; + + bool ok = false; + const int snippetId = link.path().toInt(&ok); + if (!ok) + return; + + auto *animDoc = static_cast(document()); + const QString snippet = animDoc->snippetById(snippetId); + if (snippet.isEmpty()) + return; + + Utils::setClipboardAndSelection(snippet); +} + void MarkdownBrowser::setBasePath(const FilePath &filePath) { static_cast(document())->setBasePath(filePath); @@ -507,13 +622,26 @@ void MarkdownBrowser::setBasePath(const FilePath &filePath) void MarkdownBrowser::setMarkdown(const QString &markdown) { + QScrollBar *sb = verticalScrollBar(); + int oldValue = sb->value(); + + auto *animDoc = static_cast(document()); + animDoc->clearSnippets(); document()->setMarkdown(markdown); postProcessDocument(true); + + QTimer::singleShot(0, this, [sb, oldValue] { sb->setValue(oldValue); }); + // Reset cursor to start of the document, so that "show" does not // scroll to the end of the document. setTextCursor(QTextCursor(document())); } +QString MarkdownBrowser::toMarkdown() const +{ + return document()->toMarkdown(); +} + void MarkdownBrowser::postProcessDocument(bool firstTime) const { const QFont contentFont = Utils::font(contentTF); @@ -534,7 +662,7 @@ void MarkdownBrowser::postProcessDocument(bool firstTime) const // Convert code blocks to highlighted frames if (blockFormat.hasProperty(QTextFormat::BlockCodeLanguage)) { const QString language = blockFormat.stringProperty(QTextFormat::BlockCodeLanguage); - highlightCodeBlock(document(), block, language); + highlightCodeBlock(document(), block, language, m_enableCodeCopyButton); continue; } diff --git a/src/libs/utils/markdownbrowser.h b/src/libs/utils/markdownbrowser.h index a8fe2662f9f..4250ceaaba4 100644 --- a/src/libs/utils/markdownbrowser.h +++ b/src/libs/utils/markdownbrowser.h @@ -25,6 +25,7 @@ public: MarkdownBrowser(QWidget *parent = nullptr); void setMarkdown(const QString &markdown); + QString toMarkdown() const; void setBasePath(const FilePath &filePath); void setAllowRemoteImages(bool allow); void setNetworkAccessManager(QNetworkAccessManager *nam); @@ -35,12 +36,17 @@ public: QSize minimumSizeHint() const override; void setMargins(const QMargins &margins); + void setEnableCodeCopyButton(bool enable); protected: void changeEvent(QEvent *event) override; private: + void handleAnchorClicked(const QUrl &link); void postProcessDocument(bool firstTime) const; + +private: + bool m_enableCodeCopyButton; }; } // namespace Utils diff --git a/src/libs/utils/utils.qrc b/src/libs/utils/utils.qrc index 4a98273073c..785a307bef2 100644 --- a/src/libs/utils/utils.qrc +++ b/src/libs/utils/utils.qrc @@ -295,4 +295,8 @@ images/classrelationbackground.png images/classrelationbackground@2x.png + + images/code_copy_square.png + images/code_copy_square@2x.png + diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index e2d51b58a4d..a69c5a36ab6 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -116,6 +116,7 @@ CREATE_HAS_FUNC(setIcon, Utils::Icon()); CREATE_HAS_FUNC(setContentsMargins, int(), int(), int(), int()); CREATE_HAS_FUNC(setCursor, Qt::CursorShape()) CREATE_HAS_FUNC(setMinimumWidth, int()); +CREATE_HAS_FUNC(setEnableCodeCopyButton, bool()); template void setProperties(std::unique_ptr &item, const sol::table &children, QObject *guard) @@ -138,6 +139,12 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject item->setMinimumWidth(*minw); } + if constexpr (has_setEnableCodeCopyButton) { + const auto enableCodeCopyButton = children.get>("enableCodeCopyButton"); + if (enableCodeCopyButton) + item->setEnableCodeCopyButton(*enableCodeCopyButton); + } + if constexpr (has_setVisible) { const auto visible = children.get>("visible"sv); if (visible) @@ -546,6 +553,9 @@ void setupGuiModule() sol::factories([guard](const sol::table &children) { return constructWidgetType(children, guard); }), + "markdown", + sol::property( + &Layouting::MarkdownBrowser::toMarkdown, &Layouting::MarkdownBrowser::setMarkdown), sol::base_classes, sol::bases()); diff --git a/src/plugins/lua/meta/gui.lua b/src/plugins/lua/meta/gui.lua index 9d9412d2cc5..adfd7676df1 100644 --- a/src/plugins/lua/meta/gui.lua +++ b/src/plugins/lua/meta/gui.lua @@ -42,6 +42,7 @@ gui.baseWidgetOptions = {} ---@field contentMargins? integer[] Four integers represending left, top, right and bottom margins. ---@field cursor? CursorShape The cursor shape for the widget. ---@field minimumWidth? integer The minimum width in pixels. +---@field minimumHeight? integer Minimum height of input gui.widgetOptions = {} ---@param options WidgetOptions @@ -154,7 +155,6 @@ function gui.TextEdit(options) end ---@field rightSideIconPath? FilePath A path to icon ---@field placeHolderText? string A placeholder text for intput ---@field completer? QCompleter A QCompleter object. ----@field minimumHeight? int Minimum height of input ---@field onReturnPressed? function The function to be called when Enter is pressed ---@field onRightSideIconClicked? function The function to be called when right side icon is clicked ---@field text string Current text @@ -226,6 +226,18 @@ function gui.TabWidget(options) end ---@return TabWidget function gui.TabWidget(name, child) end +---@class MarkdownBrowser : Widget +---@field markdown string The markdown content of the MarkdownBrowser. Can be set or retrieved. +local markdownBrowser = {} + +---@class (exact) MarkdownBrowserOptions : WidgetOptions +---@field enableCodeCopyButton? boolean Enable or disable the code copy button +local markdownBrowserOptions = {} + +---@param options MarkdownBrowserOptions +---@return MarkdownBrowser +function gui.MarkdownBrowser(options) end + ---@class Spinner : Widget ---@field running boolean Set spinner visible and display spinning animation ---@field decorated boolean Display spinner with custom styleSheet defined inside control (default true) From d43fa76c9a56f1fc389638114811dd7718e96aee Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Fri, 28 Feb 2025 10:28:06 +0100 Subject: [PATCH 064/117] Tests: Add missing include Amends: 61c3b67c72a0b4c1db081a3eb5affda9c4286aa9 Change-Id: I7203b106e0683ea3261b83b7e2b4d54f62b35f54 Reviewed-by: Jarek Kobus --- tests/auto/solutions/qprocesstask/testsleep/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/solutions/qprocesstask/testsleep/main.cpp b/tests/auto/solutions/qprocesstask/testsleep/main.cpp index 4bd1f5be474..fb5e524097d 100644 --- a/tests/auto/solutions/qprocesstask/testsleep/main.cpp +++ b/tests/auto/solutions/qprocesstask/testsleep/main.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +#include #include using namespace std; From 24e9c1ec91b06fd017db09cffd0b1ab816208645 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 28 Feb 2025 14:31:22 +0100 Subject: [PATCH 065/117] Utils: Fix build Amends 80162edf1d09a0b8d1c677b772fcb93d5cf7a414. Change-Id: I119c8b5625e445e982d0b81dceb92ede350815ab Reviewed-by: Christian Stenger --- src/libs/utils/markdownbrowser.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libs/utils/markdownbrowser.cpp b/src/libs/utils/markdownbrowser.cpp index d1e0b80aee4..4a6a12c2f1d 100644 --- a/src/libs/utils/markdownbrowser.cpp +++ b/src/libs/utils/markdownbrowser.cpp @@ -740,5 +740,3 @@ void MarkdownBrowser::changeEvent(QEvent *event) } } // namespace Utils - -#include "markdownbrowser.moc" From 4876f30240a699d7318bb2eac5678cf333f740e2 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sat, 1 Mar 2025 21:58:50 +0200 Subject: [PATCH 066/117] Tests: Fix MSVC compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Icb9bd058cb26b9cd5f04bfad0213e65d9b04a8f4 Reviewed-by: André Hartmann --- tests/auto/solutions/qprocesstask/testsleep/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/solutions/qprocesstask/testsleep/main.cpp b/tests/auto/solutions/qprocesstask/testsleep/main.cpp index fb5e524097d..dde7d3b5137 100644 --- a/tests/auto/solutions/qprocesstask/testsleep/main.cpp +++ b/tests/auto/solutions/qprocesstask/testsleep/main.cpp @@ -5,7 +5,7 @@ #include using namespace std; -using namespace std::chrono_literals; +using namespace std::literals::chrono_literals; int main() { From d99dd50d609bc0903e1fc879a8950cec415ad54b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 28 Feb 2025 14:30:17 +0100 Subject: [PATCH 067/117] ProjectExplorer: Fix crash in target settings page Deleting widgets in a TargetGroupItem's destructor can trigger signals connected to the item, so disconnect these first. Fixes: QTCREATORBUG-32493 Change-Id: Ib52d7dc7f0aeb723cb6976060555d81322115c14 Reviewed-by: Christian Stenger --- .../projectexplorer/targetsettingspanel.cpp | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp index 517126c99d8..93859bc7ecf 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.cpp +++ b/src/plugins/projectexplorer/targetsettingspanel.cpp @@ -26,7 +26,6 @@ #include #include -#include #include #include #include @@ -38,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -180,15 +180,16 @@ public: return projectExplorerSettings().showAllKits; } - TargetGroupItem *q; + TargetGroupItem * const q; + Project * const m_project; QString m_displayName; - Project *m_project; bool m_rebuildScheduled = false; QPointer m_noKitLabel; QPointer m_configurePage; QPointer m_configuredPage; TargetSetupPageWrapper *m_targetSetupPageWrapper = nullptr; + QList m_connections; }; class ITargetItem : public TypedTreeItem @@ -672,12 +673,6 @@ TargetGroupItem::TargetGroupItem(const QString &displayName, Project *project) : d(std::make_unique(this, project)) { d->m_displayName = displayName; - QObject::connect(project, &Project::addedTarget, - d.get(), &TargetGroupItemPrivate::handleTargetAdded); - QObject::connect(project, &Project::removedTarget, - d.get(), &TargetGroupItemPrivate::handleTargetRemoved); - QObject::connect(project, &Project::activeTargetChanged, - d.get(), &TargetGroupItemPrivate::handleTargetChanged); } TargetGroupItem::~TargetGroupItem() = default; @@ -685,17 +680,27 @@ TargetGroupItem::~TargetGroupItem() = default; TargetGroupItemPrivate::TargetGroupItemPrivate(TargetGroupItem *q, Project *project) : q(q), m_project(project) { + m_connections << QObject::connect(project, &Project::addedTarget, + this, &TargetGroupItemPrivate::handleTargetAdded); + m_connections << QObject::connect(project, &Project::removedTarget, + this, &TargetGroupItemPrivate::handleTargetRemoved); + m_connections << QObject::connect(project, &Project::activeTargetChanged, + this, &TargetGroupItemPrivate::handleTargetChanged); + // force a signal since the index has changed - connect(KitManager::instance(), &KitManager::kitAdded, - this, &TargetGroupItemPrivate::handleAddedKit); - connect(KitManager::instance(), &KitManager::kitRemoved, - this, &TargetGroupItemPrivate::scheduleRebuildContents); - connect(KitManager::instance(), &KitManager::kitUpdated, - this, &TargetGroupItemPrivate::scheduleRebuildContents); - connect(KitManager::instance(), &KitManager::kitsLoaded, - this, &TargetGroupItemPrivate::scheduleRebuildContents); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, - this, &TargetGroupItemPrivate::scheduleRebuildContents); + m_connections << connect(KitManager::instance(), &KitManager::kitAdded, + this, &TargetGroupItemPrivate::handleAddedKit); + m_connections << connect(KitManager::instance(), &KitManager::kitRemoved, + this, &TargetGroupItemPrivate::scheduleRebuildContents); + m_connections << connect(KitManager::instance(), &KitManager::kitUpdated, + this, &TargetGroupItemPrivate::scheduleRebuildContents); + m_connections << connect(KitManager::instance(), &KitManager::kitsLoaded, + this, &TargetGroupItemPrivate::scheduleRebuildContents); + m_connections << connect( + ProjectExplorerPlugin::instance(), + &ProjectExplorerPlugin::settingsChanged, + this, + &TargetGroupItemPrivate::scheduleRebuildContents); rebuildContents(); } @@ -703,6 +708,8 @@ TargetGroupItemPrivate::TargetGroupItemPrivate(TargetGroupItem *q, Project *proj TargetGroupItemPrivate::~TargetGroupItemPrivate() { disconnect(); + for (const QMetaObject::Connection & c : std::as_const(m_connections)) + disconnect(c); delete m_noKitLabel; delete m_configurePage; @@ -834,6 +841,7 @@ void TargetGroupItemPrivate::handleTargetRemoved(Target *target) if (ITargetItem *item = q->targetItem(target)) item->updateSubItems(); ensureShowMoreItem(); + QTC_ASSERT(q->parent(), qDebug() << m_displayName; return); q->parent()->setData(0, QVariant::fromValue(static_cast(q)), ItemDeactivatedFromBelowRole); } From 6f3e867201e1b924b8b1d07b95f8a896d18366d8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 17 Feb 2025 15:40:34 +0100 Subject: [PATCH 068/117] German translation: Chunk 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Android, AppManager, AutoTest, Axivion, BareMetal, CMake, Core Change-Id: I1abd2ce65337b66c1567879d23d0219d11d096df Reviewed-by: Christian Stenger Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 62 ++++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 4f4a7d1532b..5f425db76cc 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -12151,7 +12151,7 @@ Dies kann nicht rückgängig gemacht werden. None No skin - + Kein An error occurred while removing the Android AVD "%1" using avdmanager tool. @@ -12694,19 +12694,19 @@ Der vom Kit mindestens benötigte API-Level ist %1. Art: Cleared App Profiles. - + Art: App Profiles gelöscht. Art: Clearing App Profiles failed. - + Art: Löschen der App Profiles fehlgeschlagen. Art: Compiled App Profiles. - + Art: App Profiles kompiliert. Art: Compiling App Profiles failed. - + Art: Kompilierung der App Profiles fehlgeschlagen. Android SDK Manager @@ -12723,7 +12723,7 @@ Der vom Kit mindestens benötigte API-Level ist %1. All Show all packages - Alle + Alle Show Packages @@ -13386,7 +13386,7 @@ und das Überschreiben Ihrer Einstellungen erfordert. Das Überschreiben erlaube Cannot debug: Invalid target information. - + Kann nicht debuggen: Ungültige Zielinformation. Cannot debug: Only QML and native applications are supported. @@ -13599,12 +13599,12 @@ Warnung: Dies ist eine experimentelle Funktion und könnte dazu führen, dass di No Tests - + Keine Tests All Run tests after build - Alle + Alle Selected @@ -14818,7 +14818,7 @@ Siehe auch die Einstellungen für Google Test. Named filters - + Benannte Filter Total rows: @@ -14858,19 +14858,19 @@ Siehe auch die Einstellungen für Google Test. Show All - Alle anzeigen + Alle anzeigen Configure dashboards in Preferences > Analyzer > Axivion. - + Konfigurieren Sie Dashboards in Einstellungen > Analyzer > Axivion. No Dashboard - + Kein Dashboard Show Issues in Editor - + Probleme im Editor anzeigen Open Issue in Dashboard @@ -14984,7 +14984,7 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Project name must be non-empty. - + Projektname darf nicht leer sein. Add... @@ -15000,7 +15000,7 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Dashboard Servers - + Dashboard-Server Default dashboard server: @@ -15008,7 +15008,7 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Misc Options - + Weitere Einstellungen unset @@ -15036,11 +15036,11 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Path must be relative. - + Der Pfad muss relativ sein. Invalid path elements (. or ..). - + Ungültige Pfadelemente (. oder ..). Analysis path: @@ -15321,7 +15321,7 @@ a entspricht Problemen, deren Wert den Buchstaben 'a' enthält None No debug server provider - + Keiner Not recognized @@ -16946,7 +16946,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev None No CMake tool - + Keins (Default) @@ -17663,7 +17663,7 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der Failed to copy "%1" to "%2": %3 - + Kopieren von "%1" nach "%2" ist fehlgeschlagen: %3 Failed to read file "%1". @@ -21361,15 +21361,15 @@ Wenn die Systemzeiger für das Verändern der Größe von Ansichten nicht korrek A directory under version control was detected that is supported by the %1 plugin. - + Es wurde ein Verzeichnis unter Versionskontrolle erkannt, das vom Plugin "%1" unterstützt wird. Enable %1 - + %1 aktivieren The directory "%1" seems to be under version control that can be handled by the disabled %2 plugin. - + Das Verzeichnis "%1" scheint unter einer Versionskontrolle zu stehen, die vom deaktivierten Plugin "%2" unterstützt wird. %1 repository was detected but %1 is not configured. @@ -22215,7 +22215,7 @@ Um es abzurufen, tippen Sie das Kürzel im Locator, gefolgt von einem Leerzeiche None No find flags - + Keine , @@ -22509,7 +22509,7 @@ Möchten Sie es beenden? Help - Hilfe + Hilfe The current date (ISO). @@ -23483,15 +23483,15 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Plugin is already installed. - + Das Plugin ist bereits installiert. A plugin with ID "%1" is already installed. - + Ein Plugin mit der ID "%1" ist bereits installiert. No plugin with ID "%1" is installed. - + Kein Plugin mit der ID "%1" ist installiert. Check Archive @@ -23547,7 +23547,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. Failed to create directory "%1". - Das Verzeichnis "%1" konnte nicht erstellt werden. + Das Verzeichnis "%1" konnte nicht erstellt werden. Failed to write file "%1". From 423b9f7a4e25f2ea4e052f89ebc11949a198404e Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 17 Feb 2025 17:10:00 +0100 Subject: [PATCH 069/117] German translation: Coco MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I43c7f6e01a7acabbf54479e6bc7ced3a28fc0dda Reviewed-by: Christian Stenger Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 106 +++++++++---------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 5f425db76cc..0017bd5ac45 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -19509,215 +19509,215 @@ Setzen Sie erst eine gültige ausführbare Datei. CSMes file: - + CSMes-Datei: No valid CoverageScanner found. - + Kein gültiger CoverageScanner gefunden. Configure - + Konfigurieren Coco Code Coverage: Reconfiguring... - + Coco Code Coverage: Konfiguriere neu... Coco Code Coverage: No working Coco installation. - + Coco Code Coverage: Keine funktionierende Coco-Installation. Coco Code Coverage: Enabled. - + Coco Code Coverage: Aktiviert. Disable Coverage - + Coverage deaktivieren Coco Code Coverage: Disabled. - + Coco Code Coverage: Deaktiviert. Enable Coverage - + Coverage aktivieren Save && Re-configure - + Speichern && neu konfigurieren Additional CMake options: - + Zusätzliche CMake-Optionen: Initial cache script: - + Skript für initialen Cache: Overwrite file "%1". - + Datei "%1" überschreiben. Write file "%1". - + Datei "%1" schreiben. Coco Code Coverage - + Coco Code Coverage Documentation - Dokumentation + Dokumentation Revert - Rückgängig machen + Rückgängig machen CoverageScanner options: - + CoverageScanner-Optionen: Exclude File... - + Datei ausschließen... Exclude Directory... - + Verzeichnis ausschließen... These settings are stored in - + Diese Einstellungen werden gespeichert in Changed Build Settings - + Geänderte Build-Einstellungen Code for the end of the file "%1" to override the built-in declarations. Only needed in special cases. - + Code für das Ende der Datei "%1", um die integrierten Deklarationen zu überschreiben. Wird nur in Ausnahmefällen benötigt. Enable code coverage for build configuration "%1" - + Code Coverage für Build-Konfiguration "%1" aktivieren Coco is not installed correctly: %1 - + Coco ist nicht korrekt installiert: %1 Build Configuration changed to "%1". - + Build-Konfiguration wurde zu "%1" geändert. Re-configuring stopped by user. - + Neukonfiguration wurde durch den Benutzer gestoppt. Error when configuring with "%1". Check General Messages for more information. - + Fehler beim Konfigurieren mit "%1". Prüfen Sie die Allgemeinen Ausgaben für weitere Informationen. Stop Re-configuring - + Neukonfiguration stoppen Re-configure - + Neu konfigurieren Override << - + << Überschreiben Override >> - + >> Überschreiben The Coco installation path is not set correctly. - + Der Installationspfad von Coco ist nicht korrekt gesetzt. Edit - + Bearbeiten Stop re-configuring. - + Neukonfiguration stoppen. Re-configure. - + Neu konfigurieren. Reload file "%1". - + Datei "%1" neu laden. File to Exclude from Instrumentation - + Datei, die von der Instrumentierung ausgeschlossen werden soll Directory to Exclude from Instrumentation - + Verzeichnis, das von der Instrumentierung ausgeschlossen werden soll Save - Speichern + Speichern Additional qmake arguments: - + Zusätzliche qmake-Argumente: Build environment: - + Build-Umgebung: Feature file: - + Feature-Datei: Error: Coco installation directory not set. (This can't happen.) - + Fehler: Das Installationsverzeichnis von Coco ist nicht gesetzt. (Dies kann nicht passieren.) Coco Installation Directory - + Installationsverzeichnis von Coco Error: Coco installation directory not found at "%1". - + Fehler: Installationsverzeichnis von Coco wurde nicht in "%1" gefunden. Error: CoverageScanner at "%1" did not start. - + Fehler: Der CoverageScanner in "%1" ist nicht gestartet. Error: CoverageScanner at "%1" did not finish. - + Fehler: Der CoverageScanner in "%1" wurde nicht beendet. Valid CoverageScanner found at "%1": - + Ein gültiger CoverageScanner wurde in "%1" gefunden: Error: CoverageScanner at "%1" did not run correctly. - + Fehler: Der CoverageScanner in "%1" wurde nicht korrekt ausgeführt. Found Coco directory "%1". - + Coco-Verzeichnis "%1" gefunden. Checked Coco directory "%1". - + Coco-Verzeichnis "%1" wurde überprüft. Coco Directory - + Coco-Verzeichnis From 683f99b389a156dadcccc308cf499daf63410b39 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 3 Mar 2025 11:14:31 +0100 Subject: [PATCH 070/117] Bump version to 16.0.0 Change-Id: I0738deebb80e06ec3e6a68dc892cf8bccf4c4a4c Reviewed-by: Eike Ziller --- cmake/QtCreatorIDEBranding.cmake | 6 +++--- qbs/modules/qtc/qtc.qbs | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index 1b83be85555..c0b47d60cca 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,6 +1,6 @@ -set(IDE_VERSION "15.0.84") # The IDE version. -set(IDE_VERSION_COMPAT "15.0.84") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "16.0.0-rc1") # The IDE display version. +set(IDE_VERSION "16.0.0") # The IDE version. +set(IDE_VERSION_COMPAT "16.0.0") # The IDE Compatibility version. +set(IDE_VERSION_DISPLAY "16.0.0") # The IDE display version. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. set(IDE_DISPLAY_NAME "Qt Creator") # The IDE display name. diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index d6a8ab58cf4..a619b8f7892 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: '16.0.0-rc1' - property string ide_version_major: '15' + property string qtcreator_display_version: '16.0.0' + property string ide_version_major: '16' property string ide_version_minor: '0' - property string ide_version_release: '84' + property string ide_version_release: '0' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release - property string ide_compat_version_major: '15' + property string ide_compat_version_major: '16' property string ide_compat_version_minor: '0' - property string ide_compat_version_release: '84' + property string ide_compat_version_release: '0' property string qtcreator_compat_version: ide_compat_version_major + '.' + ide_compat_version_minor + '.' + ide_compat_version_release From 6df1ce1c05bfc0d135c32dea404812cf14652923 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 25 Feb 2025 14:58:12 +0100 Subject: [PATCH 071/117] SquishTests: Fix clean whitespace test on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depending on the config we may have Windows or UNIX line endings. Change-Id: Ieab281bf067f6f29314744dddf37eaa3134339dc Reviewed-by: Robert Löhning --- tests/system/suite_editors/tst_clean_whitespaces/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/suite_editors/tst_clean_whitespaces/test.py b/tests/system/suite_editors/tst_clean_whitespaces/test.py index 1f5eb7a255e..a45c8eefa6f 100644 --- a/tests/system/suite_editors/tst_clean_whitespaces/test.py +++ b/tests/system/suite_editors/tst_clean_whitespaces/test.py @@ -78,7 +78,7 @@ def prepareFileExternal(fileName, content): for currentLine in lines: if not emptyLine: - if len(currentLine) == 1: # just the line break + if currentLine in ('\n', '\r\n'): # just the line break currentLine = TripleTab + '\n' emptyLine = True test.log("Replaced empty line by 3 tabs.") From a2a373a3c65b86aa59378e1289fdb808fdd6f3d9 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 18 Feb 2025 09:45:23 +0100 Subject: [PATCH 072/117] German translation: Chunk 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CppEditor, Debugger, Docker, Extension*, iOS Change-Id: Icb6046fb9636a1313c118aafa9058edce4bd0c43 Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 85 ++++++++++---------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 0017bd5ac45..84eed155541 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -23982,7 +23982,8 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern. None No default implementation location - + (kein Ort) + Keiner Add %1 Declaration @@ -24939,11 +24940,11 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- A JavaScript expression acting as the return value of a function with two parameters <b>name</b> and <b>memberName</b>, where<ul><li><b>name</b> is the "semantic name" as it would be used for a Qt property</li><li><b>memberName</b> is the name of the member variable.</li></ul> - + Ein JavaScript-Ausdruck, der als Rückgabewert einer Funktion mit zwei Parametern <b>name</b> und <b>memberName</b> benutzt wird. Dabei ist <ul><li><b>name</b> der "semantische Name", wie er für eine Qt-Property benutzt würde</li><li><b>memberName</b> der Name der Membervariable.</li></ul> A JavaScript expression acting as the return value of a function with a parameter <b>name</b>, which is the "semantic name" as it would be used for a Qt property. - + Ein JavaScript-Ausdruck, der als Rückgabewert einer Funktion mit einem Parameter <b>name</b> benutzt wird. Dabei ist <b>name</b> der "semantische Name", wie er für eine Qt-Property benutzt würde. Generate signals with the new value as parameter @@ -24953,19 +24954,21 @@ Diese Präfixe werden zusätzlich zum Dateinamen beim Wechseln zwischen Header- How to get from the member variable to the semantic name. This is the reverse of the operation above. Leave empty to apply heuristics. - + Wie der semantische Name aus der Membervariable konstruiert wird. +Dies ist die Umkehrung der vorhergehenden Operation. +Lassen Sie dies leer, um Heuristiken anwenden zu lassen. Test - Test + Test Hide Test Results - + Testergebnisse verbergen The content of the "name" variable. - + Der Inhalt der Variable "name". Getter attributes: @@ -25017,11 +25020,11 @@ Leave empty to apply heuristics. Name from member variable: - + Name aus der Membervariable: Test input: - + Testeingabe: Custom Getter Setter Templates @@ -25785,7 +25788,7 @@ Flags: %3 All Symbol search scope - Alle + Alle Projects @@ -26741,11 +26744,11 @@ Möchten Sie die Daten trotzdem anzeigen? Enable heap debugging - + Heap-Debugging aktivieren Allocate memory using the debug heap rather than the normal heap. The debug heap enables additional checks to help diagnose heap related bugs. However it comes at a performance cost when allocating memory in the debugged process. - + Allokiert Speicher auf dem Debug-Heap statt auf dem normalen Heap. Der Debug-Heap aktiviert zusätzliche Überprüfungen, die dabei helfen sollen, mit dem Heap zusammenhängende Fehler festzustellen. Das wirkt sich allerdings nachteilig auf die Geschwindigkeit aus, wenn Speicher im zu debuggenden Prozess allokiert wird. Show "std::" Namespace in Types @@ -26995,7 +26998,7 @@ Sie haben die Wahl zu warten oder das Debuggen abzubrechen. The selected build of GDB supports Python scripting, but the used version %1.%2 is not sufficient for %3. Python %4 or later is required. - + Dieser GDB versteht zwar Python-Skripte, aber die genutzte Version %1.%2 ist für %3 ungeeignet. Python %4 oder neuer ist erforderlich. Retrieving data for stack view thread %1... @@ -28281,7 +28284,7 @@ markers in the source code editor. Attaching to %1... - + Anhängen an %1... Internal error: The extension %1 cannot be found. @@ -28978,7 +28981,7 @@ Soll es erneut versucht werden? None Symbols Type (No debug information found) - + Keine Plain @@ -29219,11 +29222,11 @@ Einzelschritte in das Modul und das Setzen von Haltepunkten nach Datei und Zeile Cannot Debug - + Kann nicht debuggen Cannot debug application: Kit has no device. - + Kann die Anwendung nicht debuggen: Das Kit hat kein Gerät. Attach to %1 @@ -29231,7 +29234,7 @@ Einzelschritte in das Modul und das Setzen von Haltepunkten nach Datei und Zeile Attach to QML Port - + Zu QML-Port verbinden Normally, the running server is identified by the IP of the device in the kit and the server port selected above. @@ -30052,11 +30055,11 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Added a surrogate GDB DAP item for existing entry "%1". - + Ein GDB DAP-Eintrag wurde für den existierenden Eintrag "%1" hinzugefügt. Added a surrogate GDB DAP item for "%1". - + Ein GDB DAP-Eintrag wurde für "%1" hinzugefügt. Add @@ -30474,7 +30477,7 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl None No debugger - + Keiner Debugger "%1" not found. @@ -31436,7 +31439,7 @@ IDs müssen außerdem mit einem Kleinbuchstaben beginnen. Failed to start container "%1". - + Container "%1" konnte nicht gestartet werden. Device is shut down @@ -31886,11 +31889,11 @@ IDs müssen außerdem mit einem Kleinbuchstaben beginnen. Remove... - Entfernen... + Entfernen... Update... - Aktualisieren... + Aktualisieren... Error @@ -31971,7 +31974,7 @@ IDs müssen außerdem mit einem Kleinbuchstaben beginnen. All Extensions filter - Alle + Alle Extension packs @@ -32051,7 +32054,7 @@ IDs müssen außerdem mit einem Kleinbuchstaben beginnen. Updated - Aktualisiert + Aktualisiert @@ -32103,12 +32106,12 @@ IDs müssen außerdem mit einem Kleinbuchstaben beginnen. None No category - + Keine All Platforms: All - Alle + Alle Plugin Details of %1 @@ -32264,11 +32267,11 @@ Grund: %3 Plugin not found. - + Plugin wurde nicht gefunden. It does not exist. - + Es existiert nicht. The plugin "%1" is specified twice for testing. @@ -32380,11 +32383,11 @@ Grund: %3 Cannot remove system plugins. - + System-Plugins können nicht entfernt werden. Could not determine root folder. - + Wurzelverzeichnis konnte nicht bestimmt werden. %1 (current: "%2") @@ -37064,11 +37067,11 @@ Möchten Sie sie überschreiben? Internal error. - + Interner Fehler. Only C++ debugging is supported for devices with iOS 17 and later. - + Für Geräte mit iOS 17 und neuer wird nur C++-Debugging unterstützt. The dSYM %1 seems to be outdated, it might confuse the debugger. @@ -37234,7 +37237,7 @@ Möchten Sie sie überschreiben? Debugging on devices with iOS 17 and later requires Xcode 16 or later. - + Debuggen auf Geräten mit iOS 17 und neuer erfordert Xcode 16 oder neuer. Device type: @@ -37306,11 +37309,11 @@ Möchten Sie sie überschreiben? Running failed. Failed to create the temporary output file. - + Das Ausführen ist fehlgeschlagen. Das Erstellen der temporären Ausgabedatei ist fehlgeschlagen. Failed to retrieve process ID. - + Die Prozess-ID konnte nicht ermittelt werden. Could not find %1. @@ -37318,15 +37321,15 @@ Möchten Sie sie überschreiben? Failed to get a local debugger port. - + Es konnte kein lokaler Debugger-Port erhalten werden. Listening for debugger on local port %1. - + Warte auf dem lokalen Port %1 auf den Debugger. Listening for QML debugger on local port %1 (port %2 on the device). - + Warte auf dem lokalen Port %1 (Port %2 auf dem Gerät) auf den QML-Debugger. Could not get necessary ports for the debugger connection. @@ -37431,7 +37434,7 @@ Ablaufdatum: %3 None No signing identity - + Keine Development team is not selected. From eea2ba93ae89d0f44ad934c5ea13824a4b95f14c Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 3 Mar 2025 18:51:00 +0100 Subject: [PATCH 073/117] Build: Adapt to changed requirement for private target Qt 6.9 moved FooPrivate targets to their own CMake packages and makes it mandatory to find_package them separately. Fixes: QTCREATORBUG-32564 Task-number: QTBUG-87776 Change-Id: Iff828182a7e220868b962e8521c985f4b0be405a Reviewed-by: Alexandru Croitor --- CMakeLists.txt | 11 +++++++++++ .../qmldesigner/libs/designercore/CMakeLists.txt | 2 +- src/tools/qmlpuppet/CMakeLists.txt | 12 ++++++------ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 224ff3b6de3..2fa007e5574 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,17 @@ find_package(Qt6 find_package(Qt6 OPTIONAL_COMPONENTS Quick QuickWidgets Designer DesignerComponentsPrivate Help SerialPort Svg Tools LinguistTools QUIET) +if (QT_VERSION VERSION_GREATER_EQUAL 6.9.0) + find_package(Qt6 OPTIONAL_COMPONENTS + CorePrivate + Core5CompatPrivate + GuiPrivate + DesignerComponentsPrivate + QmlPrivate + QuickPrivate + ) +endif() + # depending on Qt version and compiler version enable or disable Qml Designer # can be overwritten by variable WITH_QMLDESIGNER / QTC_WITH_QMLDESIGNER (env) configure_qml_designer(${Qt6_VERSION}) diff --git a/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt b/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt index 5d5e5d7a4b5..3f5f4040e4f 100644 --- a/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt +++ b/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt @@ -1,5 +1,5 @@ if (IS_SUPPORTED_PROJECTSTORAGE_QT) - find_package(Qt6 COMPONENTS QmlDomPrivate QmlCompiler REQUIRED) + find_package(Qt6 COMPONENTS QmlDomPrivate QmlCompiler QmlCompilerPrivate REQUIRED) endif() add_qtc_library(QmlDesignerCore diff --git a/src/tools/qmlpuppet/CMakeLists.txt b/src/tools/qmlpuppet/CMakeLists.txt index ffad8a01fae..2a823798283 100644 --- a/src/tools/qmlpuppet/CMakeLists.txt +++ b/src/tools/qmlpuppet/CMakeLists.txt @@ -96,26 +96,26 @@ extend_qtc_executable(qmlpuppet lookatgeometry.cpp lookatgeometry.h ) -find_package(Qt6 COMPONENTS Quick3DAssetImport QUIET) +find_package(Qt6 COMPONENTS Quick3DAssetImport Quick3DAssetImportPrivate QUIET) extend_qtc_executable(qmlpuppet - CONDITION TARGET Qt::Quick3DAssetImport + CONDITION TARGET Qt::Quick3DAssetImportPrivate FEATURE_INFO "Qt Quick 3D asset import" DEPENDS Qt::Quick3DAssetImportPrivate DEFINES IMPORT_QUICK3D_ASSETS ) -find_package(Qt6 COMPONENTS Quick3DParticles QUIET) +find_package(Qt6 COMPONENTS Quick3DParticles Quick3DParticlesPrivate QUIET) extend_qtc_executable(qmlpuppet - CONDITION TARGET Qt::Quick3DParticles + CONDITION TARGET Qt::Quick3DParticles AND TARGET Qt::Quick3DParticlesPrivate FEATURE_INFO "Qt Quick 3D particles" DEPENDS Qt::Quick3DParticles Qt::Quick3DParticlesPrivate DEFINES QUICK3D_PARTICLES_MODULE ) # Quick3DAssetUtils optionally depends on QuickTimeline, so find also it to make the CI build work -find_package(Qt6 COMPONENTS Quick3DAssetUtils QuickTimeline QUIET) +find_package(Qt6 COMPONENTS Quick3DAssetUtils QuickTimeline Quick3DAssetUtilsPrivate QUIET) extend_qtc_executable(qmlpuppet - CONDITION TARGET Qt::Quick3DAssetUtils + CONDITION TARGET Qt::Quick3DAssetUtilsPrivate FEATURE_INFO "Qt Quick 3D asset utils" DEPENDS Qt::Quick3DAssetUtilsPrivate DEFINES QUICK3D_ASSET_UTILS_MODULE From 41f9184417a39056453ab1b9b9ee7ec389ae9896 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 27 Feb 2025 10:09:36 +0100 Subject: [PATCH 074/117] SquishTests: Explicitly type to line edit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoids using native typing which has focus issues. Change-Id: I6a3c868274a79e76308914d1a31d37d3d466e152 Reviewed-by: Robert Löhning --- tests/system/suite_HELP/tst_HELP02/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/suite_HELP/tst_HELP02/test.py b/tests/system/suite_HELP/tst_HELP02/test.py index 66ac3c0ea7b..0d55ed20eae 100644 --- a/tests/system/suite_HELP/tst_HELP02/test.py +++ b/tests/system/suite_HELP/tst_HELP02/test.py @@ -73,7 +73,7 @@ def setKeyboardShortcutForAboutQtC(): shortcut = ("{container=%s type='Utils::FancyLineEdit' unnamed='1' visible='1' " "placeholderText='Enter key sequence as text'}" % shortcutGB) clickButton(record) - nativeType(keysToType) + type(waitForObject(shortcut, 1000), keysToType) waitFor(lambda: str(findObject(shortcut).text) == expectedKeys, 5000) clickButton(record) From 790e1744d8f22b8e87c86823849b7cd8088d20f4 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 24 Feb 2025 09:47:23 +0100 Subject: [PATCH 075/117] SquishTests: Fix select all test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correctly handle difference between displayed and "real" content. Tweak triggering "Select All" slightly as invoking the global menu seems to fail for secondary calls. Change-Id: I8e71693a9cc100b5f55c0381ae2535f09ec0ab6f Reviewed-by: Robert Löhning --- tests/system/suite_editors/tst_select_all/test.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/system/suite_editors/tst_select_all/test.py b/tests/system/suite_editors/tst_select_all/test.py index 5a3814aae9d..cd83ebb3f3b 100644 --- a/tests/system/suite_editors/tst_select_all/test.py +++ b/tests/system/suite_editors/tst_select_all/test.py @@ -18,7 +18,9 @@ def main(): return for currentFile in files: test.log("Opening file %s" % currentFile) - size = len(stringify(readFile(currentFile))) + fileContent = stringify(readFile(currentFile)) + fileContent = fileContent.replace('\r\n', '\n') + size = len(fileContent) invokeMenuItem("File", "Open File or Project...") selectFromFileDialog(currentFile, True) editor = getEditorForFileSuffix(currentFile) @@ -29,6 +31,7 @@ def main(): for key in ["", "", "", ""]: test.log("Selecting everything") type(editor, "") + mouseClick(editor) invokeMenuItem("Edit", "Select All") test.verify(waitFor("editor.textCursor().hasSelection()", 500), "verify selecting") From 84803bbab83df6cf6c613b6ab17cc0bb186e798e Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 4 Mar 2025 11:37:13 +0100 Subject: [PATCH 076/117] Android: Don't mention android.permission.WRITE_EXTERNAL_STORAGE It's reported to be not needed anymore. Fixes: QTCREATORBUG-32573 Change-Id: I750a89fc59988db668c814bc3738e47a47770968 Reviewed-by: Leena Miettinen --- doc/qtcreator/src/android/deploying-android.qdoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/qtcreator/src/android/deploying-android.qdoc b/doc/qtcreator/src/android/deploying-android.qdoc index e5056eb19ce..451a8fe1c7b 100644 --- a/doc/qtcreator/src/android/deploying-android.qdoc +++ b/doc/qtcreator/src/android/deploying-android.qdoc @@ -503,8 +503,7 @@ Select the \uicontrol {Include default permissions for Qt modules} and \uicontrol {Include default features for Qt modules} check boxes to add the - permissions needed by Qt libraries. This can be - \c {android.permission.WRITE_EXTERNAL_STORAGE} for \l{Qt Core} or + permissions needed by Qt libraries, such as \c {android.permission.ACCESS_BACKGROUND_LOCATION} for \l{Qt Positioning}. To add a permission, select it from the list, and then click \uicontrol Add. From f3089abd5c519092724dc70378f66139d2626d44 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 3 Mar 2025 13:59:24 +0100 Subject: [PATCH 077/117] ExtensionManager: Disable external repo if SSL is not supported Change-Id: Ic6a74357c527b4c20dae0fcd2eb9ef1b413c06f1 Reviewed-by: Eike Ziller --- src/plugins/extensionmanager/extensionmanagersettings.cpp | 8 ++++++++ src/plugins/extensionmanager/extensionsbrowser.cpp | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/plugins/extensionmanager/extensionmanagersettings.cpp b/src/plugins/extensionmanager/extensionmanagersettings.cpp index 556459c6f5f..e6db9e31338 100644 --- a/src/plugins/extensionmanager/extensionmanagersettings.cpp +++ b/src/plugins/extensionmanager/extensionmanagersettings.cpp @@ -15,6 +15,7 @@ #include #include +#include namespace ExtensionManager::Internal { @@ -33,6 +34,13 @@ ExtensionManagerSettings::ExtensionManagerSettings() useExternalRepo.setDefaultValue(false); useExternalRepo.setLabelText(Tr::tr("Use external repository")); + const bool sslSupported = QSslSocket::supportsSsl(); + + useExternalRepo.setEnabled(sslSupported); + if (!sslSupported) { + useExternalRepo.setToolTip(Tr::tr("SSL support is not available.")); + } + externalRepoUrl.setSettingsKey("ExternalRepoUrl"); externalRepoUrl.setDefaultValue("https://qc-extensions.qt.io"); externalRepoUrl.setDisplayStyle(Utils::StringAspect::LineEditDisplay); diff --git a/src/plugins/extensionmanager/extensionsbrowser.cpp b/src/plugins/extensionmanager/extensionsbrowser.cpp index 933e234618f..7ac58889422 100644 --- a/src/plugins/extensionmanager/extensionsbrowser.cpp +++ b/src/plugins/extensionmanager/extensionsbrowser.cpp @@ -549,7 +549,11 @@ ExtensionsBrowser::ExtensionsBrowser(ExtensionsModel *model, QWidget *parent) applyTf(titleLabel, titleTF); auto externalRepoSwitch = new Switch("Use external repository"); - externalRepoSwitch->setToolTip("" + externalRepoWarningNote()); + externalRepoSwitch->setEnabled(settings().useExternalRepo.isEnabled()); + if (settings().useExternalRepo.isEnabled()) + externalRepoSwitch->setToolTip("" + externalRepoWarningNote()); + else + externalRepoSwitch->setToolTip(settings().useExternalRepo.toolTip()); d->searchBox = new SearchBox; d->searchBox->setPlaceholderText(Tr::tr("Search")); From 427ff86994ceb3f5e77c7291d5324ffc48126875 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 4 Mar 2025 12:49:12 +0100 Subject: [PATCH 078/117] Utils: Fix image loading in Markdown Browser Change-Id: I0701d3f4d2fb20da2e09997217ae1b0689627336 Reviewed-by: Alessandro Portale --- src/libs/utils/markdownbrowser.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libs/utils/markdownbrowser.cpp b/src/libs/utils/markdownbrowser.cpp index 4a6a12c2f1d..dbd36fad4a4 100644 --- a/src/libs/utils/markdownbrowser.cpp +++ b/src/libs/utils/markdownbrowser.cpp @@ -182,6 +182,7 @@ static void highlightCodeBlock( class AnimatedImageHandler : public QObject, public QTextObjectInterface { + Q_OBJECT Q_INTERFACES(QTextObjectInterface) public: @@ -740,3 +741,5 @@ void MarkdownBrowser::changeEvent(QEvent *event) } } // namespace Utils + +#include "markdownbrowser.moc" From 92ac61061d2ea4f44a537b61785edb4ece3b749d Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 3 Mar 2025 11:03:13 +0100 Subject: [PATCH 079/117] Editor: Fix assert in syntax highlighter This avoids calling reformatBlocks when there is a call to continueRehighlight scheduled since this already calls reformatBlocks. Additionally calling reformatBlocks while a call to continueRehighlight is pending might result in two panding calls to continueRehighlight which can cause an assert. Change-Id: Ib665385bdc7160076833d8c36b257f28652bc45a Reviewed-by: Christian Stenger Reviewed-by: Eike Ziller --- src/plugins/texteditor/syntaxhighlighter.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/syntaxhighlighter.cpp b/src/plugins/texteditor/syntaxhighlighter.cpp index 05126a67591..5e1d8c6705b 100644 --- a/src/plugins/texteditor/syntaxhighlighter.cpp +++ b/src/plugins/texteditor/syntaxhighlighter.cpp @@ -64,6 +64,7 @@ public: QTextCharFormat whitespaceFormat; QString mimeType; bool syntaxInfoUpToDate = false; + bool continueRehighlightScheduled = false; int highlightStartBlock = 0; int highlightEndBlock = 0; QSet forceRehighlightBlocks; @@ -211,7 +212,9 @@ void SyntaxHighlighterPrivate::reformatBlocks(int from, int charsRemoved, int ch highlightEndBlock = block.blockNumber(); qCDebug(Log) << "reformat blocks from:" << from << "to:" << from + charsAdded - charsRemoved; - reformatBlocks(); + + if (!continueRehighlightScheduled) + reformatBlocks(); } void SyntaxHighlighterPrivate::reformatBlocks() @@ -219,6 +222,7 @@ void SyntaxHighlighterPrivate::reformatBlocks() QElapsedTimer et; et.start(); + continueRehighlightScheduled = false; syntaxInfoUpToDate = false; rehighlightPending = false; @@ -258,6 +262,7 @@ void SyntaxHighlighterPrivate::reformatBlocks() foldValidator.finalize(); if (endBlock.isValid() && block.isValid() && block.blockNumber() < endBlock.blockNumber()) { + continueRehighlightScheduled = true; QMetaObject::invokeMethod(q, &SyntaxHighlighter::continueRehighlight, Qt::QueuedConnection); if (forceHighlightOfNextBlock) forceRehighlightBlocks << block.blockNumber(); From 937d1d0951b10b429da0f3455123ddf9977ebdfb Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 3 Mar 2025 14:54:02 +0100 Subject: [PATCH 080/117] LanguageClient: fix assert when closing a shadow document Avoid closing a document twice. The client already closes the document in ClientPrivate::documentClosed so there is no need to do it from the LanguageClientManager. Fixes: QTCREATORBUG-32427 Change-Id: I93a194d5c78007f0d325ca398975035698524ab0 Reviewed-by: Christian Stenger Reviewed-by: Eike Ziller --- src/plugins/languageclient/languageclientmanager.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 41af302f2fb..16f76160cbd 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -674,13 +674,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document) void LanguageClientManager::documentClosed(Core::IDocument *document) { - if (auto textDocument = qobject_cast(document)) { - openDocumentWithClient(textDocument, nullptr); - for (auto client : std::as_const(managerInstance->m_clients)) { - if (client->documentOpen(textDocument)) - client->closeDocument(textDocument); - } - } + openDocumentWithClient(qobject_cast(document), nullptr); } void LanguageClientManager::updateProject(ProjectExplorer::Project *project) From 43e79ca26ec4855e1943e9899e7358db6cb95a53 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 18 Feb 2025 10:45:25 +0100 Subject: [PATCH 081/117] German translation: Chunk 3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Git, VcsBase, LanguageClient, Lua, Meson, Nim, PerfProfiler Change-Id: Iedc94de1791f611e060841de0d8c7486a751fca0 Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 102 +++++++++---------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 84eed155541..73ff1bcd6a2 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -33834,7 +33834,7 @@ Möchten Sie den Branch "%1" im entfernten Repository erzeugen und ihn Create &Branch from %1... - + &Branch von %1 erstellen... &Reset to Change %1 @@ -33995,7 +33995,7 @@ Jetzt Commit ausführen? All All branches - Alle + Alle Show Date @@ -35248,12 +35248,12 @@ Leer lassen, um das Dateisystem zu durchsuchen. Diff Current File Avoid translating "Diff" - + Diff für aktuelle Datei Diff of "%1" Avoid translating "Diff" - Diff für "%1" + Diff für "%1" Meta+G,Meta+D @@ -35266,12 +35266,12 @@ Leer lassen, um das Dateisystem zu durchsuchen. Log Current File Avoid translating "Log" - + Log für aktuelle Datei Log of "%1" Avoid translating "Log" - Log für "%1" + Log für "%1" Meta+G,Meta+L @@ -35292,12 +35292,12 @@ Leer lassen, um das Dateisystem zu durchsuchen. Blame Current File Avoid translating "Blame" - Blame für aktuelle Datei + Blame für aktuelle Datei Blame for "%1" Avoid translating "Blame" - Blame für "%1" + Blame für "%1" Meta+G,Meta+B @@ -35310,12 +35310,12 @@ Leer lassen, um das Dateisystem zu durchsuchen. Instant Blame Current Line Avoid translating "Blame" - Instant Blame für aktuelle Zeile + Instant Blame für aktuelle Zeile Instant Blame for "%1" Avoid translating "Blame" - Instant Blame für "%1" + Instant Blame für "%1" Stage File for Commit @@ -35368,32 +35368,32 @@ Leer lassen, um das Dateisystem zu durchsuchen. Diff Project Directory Avoid translating "Diff" - Diff des Projektverzeichnisses + Diff des Projektverzeichnisses Diff Directory of Project "%1" Avoid translating "Diff" - + Diff des Projektverzeichnisses von "%1" Log Project Directory Avoid translating "Log" - Log des Projektverzeichnisses + Log des Projektverzeichnisses Log Directory of Project "%1" Avoid translating "Log" - Log des Projektverzeichnisses von "%1" + Log des Projektverzeichnisses von "%1" Clean Project Directory... Avoid translating "Clean" - Clean des Projektverzeichnisses... + Clean des Projektverzeichnisses... Clean Directory of Project "%1"... Avoid translating "Clean" - Clean des Projektverzeichnisses von "%1"... + Clean des Projektverzeichnisses von "%1"... Meta+G,Meta+Shift+D @@ -35414,7 +35414,7 @@ Leer lassen, um das Dateisystem zu durchsuchen. Status (Include All Untracked) Avoid translating "Status" - + Status (unversionierte Dateien anzeigen) &Local Repository @@ -35423,12 +35423,12 @@ Leer lassen, um das Dateisystem zu durchsuchen. Log Current Selection Avoid translating "Log" - Log der aktuellen Auswahl + Log der aktuellen Auswahl Log of "%1" Selection Avoid translating "Log" - Log der Auswahl in "%1 + Log der Auswahl in "%1" Current &Project Directory @@ -35445,12 +35445,12 @@ Leer lassen, um das Dateisystem zu durchsuchen. Amend Last Commit... Avoid translating "Commit" - Letzten Commit ändern (Amend)... + Letzten Commit ändern (Amend)... Fixup Previous Commit... Avoid translating "Commit" - Vorangehenden Commit verbessern (Fixup)... + Vorangehenden Commit verbessern (Fixup)... Recover Deleted Files @@ -35459,7 +35459,7 @@ Leer lassen, um das Dateisystem zu durchsuchen. Interactive Rebase... Avoid translating "Rebase" - Interaktives Rebase... + Interaktives Rebase... Update Submodules @@ -35468,12 +35468,12 @@ Leer lassen, um das Dateisystem zu durchsuchen. Abort Merge Avoid translating "Merge" - Merge abbrechen + Merge abbrechen Abort Rebase Avoid translating "Rebase" - Rebase abbrechen + Rebase abbrechen Skip Rebase @@ -35483,7 +35483,7 @@ Leer lassen, um das Dateisystem zu durchsuchen. Abort Cherry Pick Avoid translating "Cherry Pick" - Cherry-Pick abbrechen + Cherry-Pick abbrechen Continue Cherry Pick @@ -35493,7 +35493,7 @@ Leer lassen, um das Dateisystem zu durchsuchen. Abort Revert Avoid translating "Revert" - Revert abbrechen + Revert abbrechen Branches... @@ -35526,7 +35526,7 @@ Leer lassen, um das Dateisystem zu durchsuchen. Stash Unstaged Files Avoid translating "Stash" - Stash nicht bereitgestellter Dateien (unstaged) + Stash nicht vorgemerkter Dateien (unstaged) Saves the current state of your unstaged files and resets the repository to its staged state. @@ -35543,7 +35543,7 @@ Leer lassen, um das Dateisystem zu durchsuchen. Stash Pop Avoid translating "Stash" - Stash Pop + Stash Pop Restores changes saved to the stash list using "Stash". @@ -37723,19 +37723,19 @@ Beispiel: *.cpp%1*.h Project Specific Language Servers - + Projektabhängige Language Server Use Global Settings - Globale Einstellungen verwenden + Globale Einstellungen verwenden Enabled - Aktiviert + Aktiviert Disabled - Deaktiviert + Deaktiviert Workspace Configuration @@ -37805,7 +37805,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan failed to shutdown language client state - + Beenden fehlgeschlagen Language Server "%1" Initialization Error @@ -37925,7 +37925,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan <Select Symbol> - <Symbol auswählen> + <Symbol auswählen> Client Message @@ -38170,7 +38170,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Non-string key encountered in Lua table at path "%1". - + In der Lua-Tabelle im Pfad "%1" wurde ein Key gefunden, der keine Zeichenkette ist. No hook with the name "%1" found. @@ -38178,7 +38178,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Unsupported value type "%1" at path "%2". - + Nicht unterstützter Wertetyp "%1" im Pfad "%2". Script did not return a table. @@ -39226,31 +39226,31 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Source Files - Quelldateien + Quelldateien Header Files - + Header-Dateien Python Files - + Python-Dateien Qt Designer Files - + Qt Designer-Dateien Qt Resource Files - + Qt Ressourcen-Dateien QML Files - + QML-Dateien Other Files - + Andere Dateien Executable does not exist: %1 @@ -39278,11 +39278,11 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Meson verbose mode - + Ausführlicher Meson-Modus Enables verbose mode by default when invoking Meson. - + Aktiviert standardmäßig den ausführlichen Modus beim Ausführen von Meson. General @@ -39342,7 +39342,7 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt New Meson - + Neues Meson-Werkzeug Meson build: Parsing failed @@ -39658,7 +39658,7 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt None No default arguments - + Keine Target: @@ -39947,7 +39947,7 @@ Dies ist hilfreich, wenn das Build-Verzeichnis beschädigt ist oder das Projekt Error: No device available for active kit. - + Fehler: Für das aktive Kit ist kein Gerät verfügbar. Error: Failed to load trace point script %1: %2. @@ -62220,7 +62220,7 @@ Check settings or ensure Valgrind is installed and available in PATH. File Error - Dateifehler + Dateifehler &Close @@ -62767,11 +62767,11 @@ should a repository require SSH-authentication (see documentation on SSH and the Show VCS file status - + VCS-Status der Dateien anzeigen Request file status updates from files and reflect them on the project tree. - + Fragt den Status von Dateien ab und zeigt diesen im Projektbaum. Reset VCS Cache From dba685c7b49621f61f1951787fcecff942dd7724 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 4 Mar 2025 17:54:41 +0100 Subject: [PATCH 082/117] AppStatisticsMonitor: Fix qbs build Amends e9fd7e5c2c4056b8cbf5e0ad65ded3cf1834088c. Change-Id: I9acc15350d866641fb0a74ab82a18b1824571dd5 Reviewed-by: Christian Stenger --- src/plugins/appstatisticsmonitor/appstatisticsmonitor.qbs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/appstatisticsmonitor/appstatisticsmonitor.qbs b/src/plugins/appstatisticsmonitor/appstatisticsmonitor.qbs index 177dd9d0a28..302a07f6f87 100644 --- a/src/plugins/appstatisticsmonitor/appstatisticsmonitor.qbs +++ b/src/plugins/appstatisticsmonitor/appstatisticsmonitor.qbs @@ -7,6 +7,8 @@ QtcPlugin { condition: Qt.charts.present + pluginjson.replacements: ({APPSTATISTICSMONITOR_DISABLEDBYDEFAULT: "true"}) + files: [ "appstatisticsmonitorplugin.cpp", "appstatisticsmonitortr.h", From 070d6a0ac673334c0bb731f8c89f855ccc99e6f0 Mon Sep 17 00:00:00 2001 From: Qt Berlin Date: Tue, 25 Feb 2025 16:24:34 +0200 Subject: [PATCH 083/117] SquishTests: Fix default settings test on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I01116e5a917c5565b9d0cc0eaa223548bc3087ba Reviewed-by: Robert Löhning --- .../system/suite_general/tst_default_settings/test.py | 10 ++++++++-- .../testdata/win_compiler_paths.tsv | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py index c9aaf2edb84..a636c8347d4 100644 --- a/tests/system/suite_general/tst_default_settings/test.py +++ b/tests/system/suite_general/tst_default_settings/test.py @@ -39,7 +39,8 @@ def __checkKits__(): expectedCompilers = __getExpectedCompilers__() llvmForBuild = os.getenv("SYSTEST_LLVM_FROM_BUILD", None) if llvmForBuild is not None: - internalClangExe = os.path.join(llvmForBuild, "bin", "clang") + llvmBuildBinFolder = os.path.join(llvmForBuild, "bin") + internalClangExe = os.path.join(llvmBuildBinFolder, "clang") if platform.system() in ("Microsoft", "Windows"): internalClangExe += ".exe" internalClangExe = os.path.realpath(internalClangExe) # clean symlinks @@ -47,6 +48,11 @@ def __checkKits__(): if platform.system() in ("Microsoft", "Windows"): expectedCompilers.append({'^Default LLVM \d{2} bit based on MSVC\d{4}$' : ''}) expectedCompilers.append(internalClangExe) + if platform.system() in ("Microsoft", "Windows"): + clangClExe = os.path.realpath(os.path.join(llvmBuildBinFolder, "clang-cl.exe")) + if os.path.exists(clangClExe): + expectedCompilers.append(clangClExe) + foundCompilers = [] foundCompilerNames = [] clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Compilers") @@ -412,7 +418,7 @@ def __checkCreatedSettings__(settingsFolder, qmakeFound): if qmakeFound: files[os.path.join(creatorFolder, "qtversion.xml")] = 0 for f in folders: - test.verify(os.path.isdir(f), + test.verify(waitFor(lambda : os.path.isdir(f), 2500), "Verifying whether folder '%s' has been created." % os.path.basename(f)) for fName, fMinSize in files.items(): text = "created non-empty" diff --git a/tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv b/tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv index 553510abe43..2b6d1288ec3 100644 --- a/tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv +++ b/tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv @@ -29,3 +29,6 @@ "ProgramFiles(x86)" "Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build" "vcvarsall.bat" "Microsoft Visual C\+\+ Compiler 15[.0-9]+" "x86,amd64_x86,amd64,x86_amd64" "x86,amd64_x86,amd64,x86_amd64" "false" "" "ProgramFiles(x86)" "Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build" "vcvarsall.bat" "Microsoft Visual C\+\+ Compiler 16[.0-9]+" "x86,amd64_x86,amd64,x86_amd64" "x86,amd64_x86,amd64,x86_amd64" "false" "" "ProgramFiles" "Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build" "vcvarsall.bat" "Microsoft Visual C\+\+ Compiler 17[.0-9]+" "x86,amd64_x86,amd64,x86_amd64" "x86,amd64_x86,amd64,x86_amd64" "false" "" +"ProgramFiles(x86)" "Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build" "vcvarsall.bat" "Visual Studio Community 2017 15[.0-9]+" "x86,amd64_x86,amd64,x86_amd64" "x86,amd64_x86,amd64,x86_amd64" "false" "" +"ProgramFiles(x86)" "Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build" "vcvarsall.bat" "Visual Studio Community 2019 16[.0-9]+" "x86,amd64_x86,amd64,x86_amd64" "x86,amd64_x86,amd64,x86_amd64" "false" "" +"ProgramFiles" "Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build" "vcvarsall.bat" "Visual Studio Community 2022 17[.0-9]+" "x86,amd64_x86,amd64,x86_amd64" "x86,amd64_x86,amd64,x86_amd64" "false" "" From b9d952acba7c3a3564c845af8394f3a01c2ce4bd Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 4 Mar 2025 19:52:30 +0100 Subject: [PATCH 084/117] 2024 themes: Make TextEditor_SearchResult_ScrollBarColor green again It was "yellow" by mistake. Fixes: QTCREATORBUG-32571 Change-Id: I663f659662a896839f7284accad1b145b3f275df Reviewed-by: hjk --- share/qtcreator/themes/2024.tokenmapping | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/themes/2024.tokenmapping b/share/qtcreator/themes/2024.tokenmapping index b1a3e047d8b..6e450e49e69 100644 --- a/share/qtcreator/themes/2024.tokenmapping +++ b/share/qtcreator/themes/2024.tokenmapping @@ -117,7 +117,7 @@ TextColorError=Token_Notification_Danger_Default TextColorLink=Token_Text_Accent TextColorNormal=Token_Text_Default TextEditor_CurrentLine_ScrollBarColor=Token_Foreground_Muted -TextEditor_SearchResult_ScrollBarColor=Token_Notification_Alert_Default +TextEditor_SearchResult_ScrollBarColor=Token_Notification_Success_Default TextEditor_Selection_ScrollBarColor=Token_Foreground_Subtle Timeline_BackgroundColor1=Token_Background_Default Timeline_BackgroundColor2=Token_Background_Muted From 1b8603a077109e2f4d55b83e467394685fb0b10f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 5 Mar 2025 12:39:00 +0100 Subject: [PATCH 085/117] Build: Avoid looking for *Private for Qt < 6.9.0 Amends eea2ba93ae89d0f44ad934c5ea13824a4b95f14c Change-Id: I551e88fc843b2b33248dfdaf636491e324f77a57 Reviewed-by: Alexandru Croitor --- CMakeLists.txt | 1 + .../qmldesigner/libs/designercore/CMakeLists.txt | 5 ++++- src/tools/qmlpuppet/CMakeLists.txt | 15 ++++++++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fa007e5574..c9fc6b5e458 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,6 +88,7 @@ if (QT_VERSION VERSION_GREATER_EQUAL 6.9.0) DesignerComponentsPrivate QmlPrivate QuickPrivate + QUIET ) endif() diff --git a/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt b/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt index 3f5f4040e4f..fbbcd219c5b 100644 --- a/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt +++ b/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt @@ -1,5 +1,8 @@ if (IS_SUPPORTED_PROJECTSTORAGE_QT) - find_package(Qt6 COMPONENTS QmlDomPrivate QmlCompiler QmlCompilerPrivate REQUIRED) + find_package(Qt6 COMPONENTS QmlDomPrivate QmlCompiler REQUIRED) + if (QT_VERSION VERSION_GREATER_EQUAL 6.9.0) + find_package(Qt6 COMPONENTS QmlCompilerPrivate REQUIRED) + endif() endif() add_qtc_library(QmlDesignerCore diff --git a/src/tools/qmlpuppet/CMakeLists.txt b/src/tools/qmlpuppet/CMakeLists.txt index 2a823798283..0d3f4bb7efc 100644 --- a/src/tools/qmlpuppet/CMakeLists.txt +++ b/src/tools/qmlpuppet/CMakeLists.txt @@ -96,7 +96,10 @@ extend_qtc_executable(qmlpuppet lookatgeometry.cpp lookatgeometry.h ) -find_package(Qt6 COMPONENTS Quick3DAssetImport Quick3DAssetImportPrivate QUIET) +find_package(Qt6 COMPONENTS Quick3DAssetImport QUIET) +if (QT_VERSION VERSION_GREATER_EQUAL 6.9.0) + find_package(Qt6 COMPONENTS Quick3DAssetImportPrivate QUIET) +endif() extend_qtc_executable(qmlpuppet CONDITION TARGET Qt::Quick3DAssetImportPrivate FEATURE_INFO "Qt Quick 3D asset import" @@ -104,7 +107,10 @@ extend_qtc_executable(qmlpuppet DEFINES IMPORT_QUICK3D_ASSETS ) -find_package(Qt6 COMPONENTS Quick3DParticles Quick3DParticlesPrivate QUIET) +find_package(Qt6 COMPONENTS Quick3DParticles QUIET) +if (QT_VERSION VERSION_GREATER_EQUAL 6.9.0) + find_package(Qt6 COMPONENTS Quick3DParticlesPrivate QUIET) +endif() extend_qtc_executable(qmlpuppet CONDITION TARGET Qt::Quick3DParticles AND TARGET Qt::Quick3DParticlesPrivate FEATURE_INFO "Qt Quick 3D particles" @@ -113,7 +119,10 @@ extend_qtc_executable(qmlpuppet ) # Quick3DAssetUtils optionally depends on QuickTimeline, so find also it to make the CI build work -find_package(Qt6 COMPONENTS Quick3DAssetUtils QuickTimeline Quick3DAssetUtilsPrivate QUIET) +find_package(Qt6 COMPONENTS Quick3DAssetUtils QuickTimeline QUIET) +if (QT_VERSION VERSION_GREATER_EQUAL 6.9.0) + find_package(Qt6 COMPONENTS Quick3DAssetUtilsPrivate QUIET) +endif() extend_qtc_executable(qmlpuppet CONDITION TARGET Qt::Quick3DAssetUtilsPrivate FEATURE_INFO "Qt Quick 3D asset utils" From 38b7aa0d8aa3e3cdc4ad3443b1d7f2382bc408eb Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 5 Mar 2025 11:33:50 +0100 Subject: [PATCH 086/117] Utils: Fix MarkdownBrowser Links * Fixes opening external links * Fixes Paragraph separator when copying code * Adds a Lua test ("Lua Markdown Browser Test") Amends 80162edf1d09a0b8d1c677b772fcb93d5cf7a414 Change-Id: Ibab11eea1eb20ec485fc361e1f83114a03c58d35 Reviewed-by: Eike Ziller --- .../qtcreator/lua-plugins/luatests/tests.lua | 1 + .../luatests/tst_markdownbrowser.lua | 44 +++++++++++++++++++ src/libs/utils/markdownbrowser.cpp | 14 +++++- 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 share/qtcreator/lua-plugins/luatests/tst_markdownbrowser.lua diff --git a/share/qtcreator/lua-plugins/luatests/tests.lua b/share/qtcreator/lua-plugins/luatests/tests.lua index 5ab9f8ccca0..a155cf25a85 100644 --- a/share/qtcreator/lua-plugins/luatests/tests.lua +++ b/share/qtcreator/lua-plugins/luatests/tests.lua @@ -78,6 +78,7 @@ local function setup() end, }) require 'tst_texteditor'.setup() + require 'tst_markdownbrowser'.setup() end return { setup = setup } diff --git a/share/qtcreator/lua-plugins/luatests/tst_markdownbrowser.lua b/share/qtcreator/lua-plugins/luatests/tst_markdownbrowser.lua new file mode 100644 index 00000000000..617cf7f6945 --- /dev/null +++ b/share/qtcreator/lua-plugins/luatests/tst_markdownbrowser.lua @@ -0,0 +1,44 @@ +local function tst_markdownBrowser() + G = require 'Gui' + + G.Column { + G.MarkdownBrowser { + enableCodeCopyButton = true, + markdown = [[# Markdown Browser Test + +## Code Snippets + +* Is the following code formatted correctly, and is the syntax highlighting working? +* Can you press the copy button and paste the code into a text editor? +* Is there a copy icon visible for the code snippet? + +```c++ +#include + +int main() { + std::print("Hello World!"); +} +``` + +## Links + +* [Is this a link to the Qt website?](https://www.qt.io) +* [Is this an anchor link that scrolls up to the top?](#markdown-browser-test) + +]] + } + }:show() +end + + +local function setup() + Action = require 'Action' + Action.create("LuaTests.markdownBrowserDemo", { + text = "Lua Markdown Browser Test", + onTrigger = tst_markdownBrowser, + }) +end + +return { + setup = setup, +} diff --git a/src/libs/utils/markdownbrowser.cpp b/src/libs/utils/markdownbrowser.cpp index dbd36fad4a4..58b15db0c31 100644 --- a/src/libs/utils/markdownbrowser.cpp +++ b/src/libs/utils/markdownbrowser.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -600,8 +601,17 @@ void MarkdownBrowser::setMaximumCacheSize(qsizetype maxSize) void MarkdownBrowser::handleAnchorClicked(const QUrl &link) { - if (link.scheme() != QLatin1String("copy")) + if (link.scheme() != QLatin1String("copy")) { + if (link.scheme() == "http" || link.scheme() == "https") + QDesktopServices::openUrl(link); + + if (link.hasFragment() && link.path().isEmpty() && link.scheme().isEmpty()) { + // local anchor + scrollToAnchor(link.fragment(QUrl::FullyEncoded)); + } + return; + } bool ok = false; const int snippetId = link.path().toInt(&ok); @@ -609,7 +619,7 @@ void MarkdownBrowser::handleAnchorClicked(const QUrl &link) return; auto *animDoc = static_cast(document()); - const QString snippet = animDoc->snippetById(snippetId); + const QString snippet = animDoc->snippetById(snippetId).replace(QChar::ParagraphSeparator, '\n'); if (snippet.isEmpty()) return; From 7b05cb879cf37f4bf22c4398bf71935328d22b5a Mon Sep 17 00:00:00 2001 From: Alexandre Laurent Date: Sun, 23 Feb 2025 22:17:47 +0100 Subject: [PATCH 087/117] French translations for 16.0 Change-Id: Icc629328a5dae6576e27f656a085c6642ef73bb0 Reviewed-by: Olivier Delaune Reviewed-by: Eike Ziller --- share/qtcreator/translations/qtcreator_fr.ts | 7947 +++++++++++++----- 1 file changed, 6013 insertions(+), 1934 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_fr.ts b/share/qtcreator/translations/qtcreator_fr.ts index 2892664098f..e065e54b672 100644 --- a/share/qtcreator/translations/qtcreator_fr.ts +++ b/share/qtcreator/translations/qtcreator_fr.ts @@ -1,6 +1,6 @@ - + AbstractButtonSection @@ -73,26 +73,51 @@ - AddImageToResources + AbstractLightSection - File Name - Nom du fichier + Light + J'hésite entre éclairage et lumière. Il me semble ici que cela correspond à la configuration d'une lumière particulière + Lumière - Size - Taille + Color + Couleur - Add Resources - Ajouter des ressources + Sets the color applied to models illuminated by this light. + Définit la couleur appliquée sur les modèles éclairés par cette lumière. - &Browse... - &Parcourir… + Ambient Color + Couleur ambiante - Target Directory - Répertoire cible + Sets the ambient color applied to materials before being lit by this light. + Définit la couleur ambiante appliquée sur les modèles avant qu'ils ne soient éclairés par la lumière. + + + Brightness + Luminosité + + + Sets an overall multiplier for this light’s effects. + Définit un multiplicateur global aux effets de cette lumière. + + + Scope + Contexte + + + Sets a Node in the scene to be the scope of this light. Only that node and it's children are affected by this light. + Définit un nÅ“ud de la scène comme contexte pour cette lumière. Seuls ce nÅ“ud et ses enfants sont affectés par cette lumière. + + + Bake Mode + Mode de pré-calcul + + + Controls if the light is active in baked lighting, such as when generating lightmaps. + Contrôle si la lumière est active dans le pré-calcul de l'éclairage, notamment lors de la génération de la texture des lumières. @@ -102,6 +127,134 @@ Sélectionner un module à ajouter + + AddPropertyForm + + Integer + Entier + + + Float + Flottant + + + Boolean + Booléen + + + Vector 2D + Vecteur 2D + + + Vector 3D + Vecteur 3D + + + Vector 4D + Vecteur 4D + + + Color + Couleur + + + Color channel + Canal de couleur + + + Texture sampler + Échantillonneur de texture + + + Define (integer) + Je doute, mais je ne trouve pas mieux + Définition (entier) + + + Define (boolean) + Définition (booléen) + + + Add property + Ajouter une propriété + + + Edit property + Modifier une propriété + + + Display Name + Nom d'affichage + + + Sets the display name of the property. + Définit le nom à afficher pour cette propriété. + + + Display name of the property has to be unique. + Le nom à afficher de la propriété doit être unique. + + + Uniform Name + Nom de variable uniforme + + + Sets the uniform name of the property. + Définit le nom de la variable uniforme pour cette propriété. + + + Uniform name has to be unique. + Le nom de la variable uniforme doit être unique. + + + Description + Description + + + Sets the property description. + Définit la description de la propriété. + + + Type + Type + + + Sets the property type. + Définit le type de la propriété. + + + Default Value + Valeur par défaut + + + Sets the default value of the property. + Définit la valeur par défaut de la propriété. + + + Min Value + Valeur minimale + + + Sets the minimum value of the property. + Définit la valeur minimale de la propriété. + + + Max Value + Valeur maximale + + + Sets the maximum value of the property. + Définit la valeur maximale de la propriété. + + + Cancel + Annuler + + + Apply + Appliquer + + AddSignalHandlerDialog @@ -188,13 +341,6 @@ Définit la position de la ligne de base du composant en coordonnées locales. - - AlignCamerasToViewAction - - Align Cameras to View - Aligner les caméras à la vue - - AlignDistributeSection @@ -310,13 +456,6 @@ - Un composant de la sélection utilise des ancres. - - AlignViewToCameraAction - - Align View to Camera - Aligner la vue à la caméra - - AmbientSoundSection @@ -958,25 +1097,6 @@ Une valeur positive augmente la réverbération pour les hautes fréquences et En sourdine - - BackgroundColorMenuActions - - Background Color Actions - Actions sur la couleur d’arrière-plan - - - - BakeLights - - Bake Lights - Bake -> inspiré de https://docs.blender.org/manual/fr/3.6/render/cycles/baking.html - Pré-calculer les lumières - - - Bake lights for the current 3D scene. - Pré-calculer les lumières pour la scène 3D actuelle. - - BakeLightsProgressDialog @@ -1270,6 +1390,10 @@ Le chemin doit être relatif. Qt Design Studio Qt Design Studio + + Lite QML Designer + Lite QML Designer + Community Edition Édition communautaire @@ -1283,6 +1407,85 @@ Le chemin doit être relatif. Édition professionnelle + + BufferInputSection + + Buffer Input + Tampon d'entrée + + + Buffer + Tampon + + + Sets input buffer for a pass. + Définit un tampon d'entrée pour une passe. + + + Parameter + Paramètre + + + Sets buffer input buffer name in the shader. + Définit le nom du tampon d'entrée dans le shader. + + + + BufferSection + + Buffer + Tampon + + + Name + Nom + + + Sets the buffer name. + Définit le nom du tampon. + + + Format + Format + + + Sets the format of the buffer. + Définit le format du tampon. + + + Filter + Filtre + + + Sets the texture filter for the buffer. + Définit le filtre de texture pour le tampon. + + + Coordinate Operation + Opération sur les coordonnées + + + Sets the texture coordinate operation for the buffer. + Définit l'opération sur les coordonnées de texture du tampon. + + + Allocation Flags + Options? + Flags d'allocation + + + Sets the allocation flags for the buffer. + Définit les options d'allocation pour ce tampon. + + + Size Multiplier + Multiplicateur de taille + + + Sets the size multiplier for the buffer. + Définit le multiplicateur de taille pour ce tampon. + + BusyIndicatorSpecifics @@ -1397,41 +1600,34 @@ Le chemin doit être relatif. - CameraActionsModel + CameraSection - Hide Camera View - Cacher la vue de la caméra + Camera + Caméra - Never show the camera view. - Ne jamais montrer la vue de la caméra. + Frustum Culling + Élimination hors champ - Show Selected Camera View - Afficher la vue de la caméra sélectionnée + When this property is true, objects outside the camera frustum will be culled, meaning they will not be passed to the renderer. + Lorsque cette propriété est à vrai, les objets hors du champ de la caméra seront éliminés : ils ne seront pas pris en compte lors du rendu. - Show the selected camera in the camera view. - Affiche la caméra sélectionnée dans la vue. + LOD Bias + Biais de LOD - Always Show Camera View - Toujours montrer la vue de la caméra + This property changes the threshold for when the automatic level of detail meshes get used. + Cette propriété change le seuil à partir duquel le niveau de détail automatique des modèles est utilisé. - Show the last selected camera in the camera view. - Affiche la dernière caméra sélectionnée dans la vue de la caméra. + Look-at Node + NÅ“ud pointé - Camera view settings - Paramètres de la vue de la caméra - - - - CameraSpeedConfigAction - - Open camera speed configuration dialog - Ouvrir la fenêtre de configuration de la vitesse de la caméra + Sets the look-at node for the camera. + Définit le nÅ“ud pointé par la caméra. @@ -1463,13 +1659,6 @@ Le chemin doit être relatif. <p>Vous n'avez qu'un contrôle partiel en mode survol. Pour un contrôle complet, veuillez activer les <span style="text-decoration: underline">paramètres d'accessibilité</span></p> - - CameraToggleAction - - Toggle Perspective/Orthographic Camera Mode - Activer/désactiver le mode perspective/orthographique de la caméra - - ChangeStyleWidgetAction @@ -1657,6 +1846,62 @@ Le chemin doit être relatif. Appliquer + + Coco + + Coco + Coco + + + + CodeEditorFooter + + Live Update + Mise à jour instantanée + + + Close + Fermer + + + Apply + Appliquer + + + + CodeEditorHeader + + Columns + Colonnes + + + Open Effect Composer Help. + Ouvrir l'aide du compositeur d'effet. + + + + CodeEditorTabs + + Fragment Shader + Certains utilisent le terme de nuanceur (pour shader). Personnellement, je ne l'ai jamais adopté. (https://fr.wikipedia.org/wiki/Shader#Fragment_shaders_ou_Pixel_shaders) + Fragment shader + + + Vertex Shader + Vertex shader + + + + CodeEditorUniformsView + + Insert into the editor cursor position. + Insérer dans l'éditeur à la position du curseur. + + + Copy uniform name to clipboard. + Copier le nom de la variable uniforme dans le presse-papier. + + ColorAnimationSpecifics @@ -1802,7 +2047,7 @@ Le chemin doit être relatif. Layout direction - Direction du layout + Direction de l'agencement Sets the direction of the item flow in the <b>Column Layout</b>. @@ -2037,6 +2282,23 @@ Cela ne peut être annulé. Annuler + + ConfirmPropertyRemoveForm + + The property is in use in the shader code. +Are you sure you want to remove it? + La propriété est utilisée dans le code du shader. +Voulez-vous vraiment supprimer cette propriété ? + + + Cancel + Annuler + + + Remove + Supprimer + + ConnectionsDialog @@ -2424,18 +2686,10 @@ Cela ne peut être annulé. <b>Content Library</b> is not supported in Qt5 projects. La <b>bibliothèque de contenus</b> n'est pas prise en charge dans les projets Qt5. - - To use <b>Content Library</b>, first add the QtQuick3D module in the <b>Components</b> view. - Pour utiliser la <b>bibliothèque de contenus</b>, ajoutez d'abord le module QtQuick3D dans la vue <b>Composants</b>. - <b>Content Library</b> is disabled inside a non-visual component. La <b>bibliothèque de contenus</b> est désactivée pour un composant non visible. - - There are no user assets in the <b>Content Library</b>. - Il n'y a pas de ressources de l'utilisateur dans la <b>bibliothèque de contenus</b>. - ContextMenu @@ -2515,6 +2769,413 @@ Cela ne peut être annulé. Molette + + CustomMaterialSection + + Custom Material + Matériau personnalisé + + + Shading Mode + Option pouvant être unshaded (c-à-d: sans les effets de lumières) et shaded (avec les lumières) + Mode de rendu + + + Sets the material type. +Unshaded materials are not affected by the environment (for example, lights). + Les différents mode des options ne semblent pas être traduits + Définit le type de matériau. +Les matériaux « unshaded Â» ne sont pas affectés par l'environnement (par exemple, les lumières). + + + Vertex Shader + Vertex shader + + + Sets the path to the vertex shader source file. + Définit le chemin menant au fichier source du vertex shader. + + + Fragment Shader + Fragment shader + + + Sets the path to the fragment shader source file. + Définit le chemin menant au fichier source du fragment shader. + + + Source Blend + On parle de blend, le mélange entre source et destination (autrement dit, cela permet de faire de la transparence). + Fondu de la source + + + Sets the source blend factor. + Définit le mode de fondu de la source. + + + Destination Blend + Fondu de la destination + + + Sets the destination blend factor. + Définit le mode de fondu de destination. + + + Always Dirty + sale ? taché ? + Toujours impropre + + + Sets the material to refresh every time it is used by QtQuick3D. + Détermine si le matériau doit être rafraîchit à chaque fois qu'il est utilisé par QtQuick3D. + + + Line Width + Largeur de ligne + + + Sets the width of the lines when the geometry is using a primitive type of lines or line strips. + Définit la largeur des lignes lorsque la géométrie utilise un type de primitive ligne ou ensemble de lignes. + + + + DSStore + + Can not locate design system module + Design system ? + Impossible de trouver le module de l'apparence système + + + Can not read Design System qmldir + Impossible de lire le fichier qmldir pour l'apparence système + + + Can not find component file. + Impossible de trouve le fichier du composant. + + + Can not create design system module directory %1. + Impossible de créer le répertoire du module de l'apparance système %1. + + + Can not write design system qmldir. %1 + Impossible d'écrire le fichier qmldir de l'apparance système. %1 + + + Can not write theme interface %1. +%2 + Impossible d'écrire le thème de l'interface %1. +%2 + + + Can not write collection %1. +%2 + Impossible d'écrire la collection %1. +%2 + + + + DSThemeManager + + No themes objects in the collection. + Aucun élément de thème dans la collection. + + + + DebugSettingsSection + + Debug Settings + Paramètres de débogage + + + Enable Wireframe + Activer le rendu en fil de fer + + + Meshes will be rendered as wireframes. + Les modèles seront affichés en fil de fer. + + + Override Mode + Surcharge ? Mode de rendu ? + Écrasement du mode + + + Changes how all materials are rendered to only reflect a particular aspect of the overall rendering process + Modifie le rendu des matériaux afin d'afficher un aspect particulier du processus de rendu + + + + DefaultMaterialSection + + Default Material + Matériau par défaut + + + Lighting + Ici, je pense que c'est lié au calcul d'une ou plusieurs lumière pour ce matériau. Donc éclairage. + Éclairage + + + Sets the lighting method. NoLighting is faster while FragmentLighting +calculates diffuse and specular lighting for each rendered pixel. + Définit la méthode de rendu des lumières. « NoLighting Â» est plus rapide alors que « FragmentLighting Â» +calcule la lumière diffuse et spéculaire pour chaque pixel dessiné. + + + Blend Mode + Mode de fondu + + + Sets how the colors of the model blend with colors behind it. + Définit comment les couleurs du modèle se mélangent avec les couleurs derrière. + + + Enable Vertex Colors + Activer les couleurs des sommets + + + Sets the material to use vertex colors from the mesh. +Vertex colors are multiplied with any other color for the material. + Définit si le matériau utilise les couleurs de sommet du modèle. +Les couleurs de sommet sont multipliées avec les autres couleurs du matériau. + + + Point Size + Taille de point + + + Sets the size of the points rendered when the geometry is using a primitive type of points. + A revoir + Définit la taille des points dessinés lorsque la géométrie utiliser le type de primitive points. + + + Line Width + Largeur de ligne + + + Sets the width of the lines rendered when the geometry is using a primitive type of lines or line strips. + Définir la largeur des lignes dessinées lorsque la géométrie utilise un type de primitive lignes ou ensemble de lignes. + + + Diffuse + Diffuse + + + Color + Couleur + + + Sets the base color. + Définit la couleur de base. + + + Map + Texture + + + Sets a texture to apply to the material. + Définit la texture à appliquer au matériau. + + + Emissive + Émissive + + + Factor + Coefficient + + + Sets the color of self-illumination. +The default value (0, 0, 0) means no self-illumination. + Définit la couleur de la lumière émie par le matériau lui-même. +La valeur par défaut (0, 0, 0) correspond à aucune émission. + + + R + R + + + G + V + + + B + B + + + Sets a texture to define the intensity of the emissive color. + Définit une texture déterminant l'intensité de la couleur émise. + + + Specular + Spéculaire + + + Tint + Teinte + + + Sets the color tint for the specular reflections. +Use white for no color effect. + Définit la couleur de teinte pour les réflexions spéculaires. +Utiliser le blanc pour un résultat neutre. + + + Amount + Quantité + + + Sets the strength of specularity (highlights and reflections). +The default value (0) disables specularity. + Définit la force de l'effet spéculaire (surbrillance et reflets). +La valeur par défaut (0) désactive l'effet. + + + Sets a texture to define the amount and the color of specularity. + spécularity + Définit une texture déterminant l'intensité et la couleur de l'effet spéculaire. + + + Model + Modèle + + + Sets the functions to calculate specular highlights for lights in the scene. +Default is faster while KGGX is more physically accurate. + Définit les fonctions pour calculer les effets spéculaires pour les lumières dans la scène. +La valeur par défaut est plus rapide alors que KGGX est plus exacte sur le plan physique. + + + Reflection Map + Texture de réflexion + + + Sets a texture to define specular highlights. + Définit la texture déterminant les reflets de l'effet spéculaire. + + + Index of Refraction + Indice de réfraction + + + Sets the angles of reflections affected by the fresnel power. + Définit les angles de réflexion impactés par l'effet Fresnel. + + + Fresnel Power + Effet Fresnel + + + Sets the strength of the fresnel power. The default value (0) means no fresnel power while a higher value +decreases head-on reflections (looking directly at the surface) while maintaining reflections seen at grazing angles. + Définit la force de l'effet Fresnel. La valeur par défaut (0) signifie l'absence d'effet Fresnel alors qu'une plus grande valeur +diminue les réflexions directes (lorsque l'on regarde directement la surface) tout en gardant des réflexions sur le côté. + + + Specular Roughness + Rugosité spéculaire + + + Sets the size of the specular highlight generated from lights and the clarity of reflections in general. + Définit la taille de l'effet spéculaire généré par les lumières et, de manière générale, la clarté de la réflexion. + + + Roughness Map + Texture de rugosité + + + Sets a texture to define the specular roughness. + Définit une texture pour déterminer la rugosité de l'effet spéculaire. + + + Roughness Channel + Canal de rugosité + + + Sets the texture channel to read the roughness value from roughnessMap. + enlever "de roughnessMap" ? + Définit le canal de la texture à partir duquel lire la valeur de rugosité de roughnessMap. + + + Opacity + Opacité + + + Sets the opacity of just this material, separate from the model. + Définit l'opacité propre à ce matériau, indépendamment du modèle. + + + Sets a texture to control the opacity differently for different parts. + Définit une texture déterminant une opacité pouvant varier suivant les régions. + + + Channel + Canal + + + Sets the texture channel to read the opacity value from the opacity map. + Définit le canal de la texture à partir duquel lire la valeur d'opacité. + + + Bump/Normal + Relief/Normales + + + Bump Amount + Quantité de relief + + + Sets the amount of simulated displacement for the bump map or normal map. + Définit la quantité de relief simulé pour la texture de relief ou la texture des normales. + + + Bump Map + Texture de relief + + + Sets a grayscale texture to simulate fine geometry displacement across the surface. + Définit une texture en nuance de gris pour simuler un relief fin sur la surface de la géométrie. + + + Normal Map + Texture de normales + + + Sets a image to simulate fine geometry displacement across the surface. + Définit une texture pour simuler une géométrie fine sur la surface. + + + Translucency + Translucidité + + + Falloff + Diminution + + + Sets the amount of falloff for the translucency based on the angle of the normals of the object to the light source. + Définit la diminution de la translucidité suivant l'angle entre la normale de l'objet et la source de lumière. + + + Diffuse Light Wrap + Enveloppe de lumière diffuse + + + Sets the amount of light wrap for the translucency map. +A value of 0 will not wrap the light at all, while a value of 1 will wrap the light all around the object. + Définit la quantité d'enveloppe pour la texture de translucidité. +Une valeur de 0 n'enveloppe pas la lumière, tandis qu'une valeur de 1 va envelopper toutes les lumières autour de l'objet. + + + Sets a grayscale texture to control how much light can pass through the material from behind. + Définit une texture en nuance de gris contrôlant la quantité de lumière traversant l'objet depuis l'arrière. + + + Sets the texture channel to read the translucency value from translucencyMap. + Définit le canal de texture à partir duquel lire la valeur de translucidité. + + DelayButtonSpecifics @@ -2553,25 +3214,6 @@ Cela ne peut être annulé. Annuler - - DesignerActionManager - - Document Has Errors - Le document contient des erreurs - - - The document which contains the list model contains errors. So we cannot edit it. - Le document qui contient le modèle de liste contient des erreurs. Nous ne pouvons donc pas le modifier. - - - Document Cannot Be Written - Le document ne peut être écrit - - - An error occurred during a write attemp. - Une erreur s’est produite lors d’une tentative d’écriture. - - Details @@ -2598,6 +3240,10 @@ Cela ne peut être annulé. Use Qt Virtual Keyboard Utiliser le clavier virtuel Qt + + Enable Cmake Generation + Activer la génération CMake + Target Qt Version: Version de Qt cible : @@ -2815,10 +3461,34 @@ définit par la<b>taille du pas</b>. - EditLightToggleAction + Edit3DCameraViewAction - Toggle Edit Light On/Off - Activer/désactiver l'édition de la lumière + Camera view mode + Mode de vue de la caméra + + + Hide Camera View + Cacher la vue de la caméra + + + Never show the camera view. + Ne jamais montrer la vue de la caméra. + + + Show Selected Camera View + Afficher la vue de la caméra sélectionnée + + + Show the selected camera in the camera view. + Affiche la caméra sélectionnée dans la vue. + + + Always Show Camera View + Toujours montrer la vue de la caméra + + + Show the last selected camera in the camera view. + Affiche la dernière caméra sélectionnée dans la vue de la caméra. @@ -2841,85 +3511,6 @@ définit par la<b>taille du pas</b>. Le compositeur d'effet est désactivé dans les projets MCU - - EffectComposer::EffectComposerModel - - Animation - Animation - - - Running - En cours d'exécution - - - Set this property to animate the effect. - Définir cette propriété permet d'animer l'effet. - - - Time - Temps - - - This property allows explicit control of current animation time. - À relire - Cette propriété permet le contrôle explicite du temps de l'animation. - - - Frame - Trame - - - This property allows explicit control of current animation frame. - À relire - Cette propriété permet le contrôle explicite de la trame de l'animation. - - - General - Général - - - Extra Margin - Marge supplémentaire - - - This property specifies how much of extra space is reserved for the effect outside the parent geometry. - Cette propriété détermine l'espace supplémentaire réservé hors de la géométrie du parent à l'effet. - - - - EffectComposer::EffectComposerView - - Effect Composer [beta] - Compositeur d'effet [bêta] - - - - EffectComposer::EffectComposerWidget - - Effect Composer - Title of effect composer widget - Compositeur d'effet - - - - EffectComposer::Uniform - - X - X - - - Y - Y - - - Z - Z - - - W - W - - EffectComposerPreview @@ -2965,6 +3556,10 @@ définit par la<b>taille du pas</b>. Untitled Sans titre + + In advanced mode, you can manage effect properties and edit shader code for all effects. + Dans le mode avancé, vous pouvez gérer les propriétés des effets et modifier le code de shader pour tous les effets. + How to use Effect Composer: 1. Click "+ Add Effect" to add effect node @@ -2990,19 +3585,61 @@ définit par la<b>taille du pas</b>. Enable/Disable Node Activer/désactiver le nÅ“ud + + A node with this name already exists. +Suffix was added to make the name unique. + Il existe déjà un nÅ“ud avec ce nom. +Un suffixe a été ajouté pour produire un nom unique. + + + Edit effect node name + Modifier le nom du nÅ“ud d'effet + + + Add Property + Ajouter une propriété + + + Show Code + Afficher le code + EffectCompositionNodeUniform + + [Editing] + [En cours de modification] + Reset value Réinitialiser la valeur + + This property is not used in the shader code of the effect. + Cette propriété n'est pas utilisée dans le code du shader de cet effet. + + + Additional actions disabled while editing existing property. + Les actions supplémentaires sont désactivées tant que la propriété est en cours de modification. + + + Access additional property actions. + Accès aux actions aditionnelles de la propriété. + + + Edit + Modifier + + + Remove + Supprimer + EffectNode - Existing effect has conflicting properties, this effect cannot be added. - Un effet existant contient des conflits de propriétés, cet effet ne peut être ajouté. + An effect with same properties already exists, this effect cannot be added. + Un effet avec les même propriétés existe déjà, cet effet ne peut être ajouté. @@ -3012,6 +3649,21 @@ définit par la<b>taille du pas</b>. + Ajouter un effet + + EffectSection + + Effect + Effet + + + Passes + Passes + + + Sets the render passes of the effect. + Définit les passes de rendu de l'effet. + + EffectsSection @@ -3027,8 +3679,12 @@ définit par la<b>taille du pas</b>. Ajouter des effets - Adds visual effects on the component. - Ajoute des effets visuels au composant. + Removes all the visual effects from the component. + Supprime tous les effets visuels de ce composant. + + + Adds visual effects to the component. + Ajoute des effets visuels à ce composant. Visible @@ -3252,6 +3908,21 @@ Les composants au premier plan doivent être transparents et le composant en arr Insérer la clé d'animation + + FileInstancingSection + + File Instancing + Instanciation de fichier + + + Source + Source + + + Sets the location of an XML or binary file containing the instance data. + Définit l'emplacement d'un fichier XML ou d'un fichier binaire contenant les données de l'instance. + + FileResourcesModel @@ -3259,13 +3930,6 @@ Les composants au premier plan doivent être transparents et le composant en arr Ouvrir le fichier - - FitToViewAction - - Fit Selected Object to View - Ajuster l’objet sélectionné à la vue - - FlagsComboBox @@ -3478,7 +4142,7 @@ Les composants au premier plan doivent être transparents et le composant en arr Layout direction - Direction du layout + Direction de l'agencement Sets in which direction items in the flow are placed. @@ -3489,6 +4153,110 @@ Les composants au premier plan doivent être transparents et le composant en arr Espacement + + FogSection + + Fog + Brouillard + + + Enabled + Activé + + + Controls whether fog is applied to the scene + Détermine si un effet de brouillard est appliqué à la scène + + + Color + Couleur + + + The color of the fog + La couleur du brouillard + + + Density + Densité + + + Controls the density of the fog + Détermine la densité du brouillard + + + Depth + Profondeur + + + Controls if the fog appears in the distance + Détermine si le brouillard apparaît à partir d'une certaine distance + + + Start Distance + Distance de début + + + Starting distance from the camera + Distance, à partir de la caméra, de début du brouillard + + + End Distance + Distance de fin + + + Ending distance from the camera + Distance, à partir de la caméra, de fin du brouillard + + + Intensity Curve + Courbe d'intensité + + + Controls the intensity curve of depth fog + Détermine la courbe d'intensité de la profondeur du brouillard + + + Height + Hauteur + + + Controls if height fog is enabled + height ? + Détermine si différentes hauteurs de brouillard sont prises en compte + + + Least Intense Height + Hauteur de brouillard léger + + + Specifies the height where the fog is the least intense. + Détermine la hauteur à partir de laquelle le brouillard est le moins intense. + + + Most Intense Height + Hauteur de brouillard intense + + + Specifies the height where the fog is the most intense. + Détermine la hauteur où le brouillard est le plus intense. + + + Controls the intensity curve of height fog + Détermine la coube d'intensité de la hauteur du brouillard + + + Transmission + Transmission + + + Controls if the fog has a light transmission effect enabled + Détermine si l'effet de transmission de la lumière dans le brouillard est activé + + + Controls the intensity curve of the light transmission effect + Détermine la courbe d'intensité de l'effet de transmission de lumière + + FontExtrasSection @@ -3664,6 +4432,45 @@ Les composants au premier plan doivent être transparents et le composant en arr Police + + FrustumCameraSection + + Frustum Camera + Champ de la caméra + + + Top + Haut + + + Sets the top plane of the camera view frustum. + Définit le plan haut du champ de la caméra. + + + Bottom + Bas + + + Sets the bottom plane of the camera view frustum. + Définit le plan bas du champ de la caméra. + + + Right + Droit + + + Sets the right plane of the camera view frustum. + Définit le plan droit du champ de la caméra. + + + Left + Gauche + + + Sets the left plane of the camera view frustum. + Définit le plan gauche du champ de la caméra. + + GeometrySection @@ -3674,6 +4481,10 @@ Les composants au premier plan doivent être transparents et le composant en arr This property is defined by an anchor or a layout. Cette propriété est définie par une ancre ou un agencement. + + Adjust this property manually from the 2D view or by changing margins from Layout. + Ajuster cette propriété manuellement depuis la vue 2D ou en changeant les marges depuis Agencement. + Position Position @@ -3826,7 +4637,7 @@ Les composants au premier plan doivent être transparents et le composant en arr Layout direction - Direction du layout + Direction de l'agencement Sets the direction of the dynamic items left to right or right to left in the <b>Grid Layout</b>. @@ -3885,7 +4696,7 @@ Les composants au premier plan doivent être transparents et le composant en arr Layout direction - Direction du layout + Direction de l'agencement Alignment H @@ -3949,7 +4760,7 @@ Les composants au premier plan doivent être transparents et le composant en arr Layout direction - Direction du layout + Direction de l'agencement Sets in which direction items in the grid view are placed. @@ -4278,22 +5089,88 @@ ajouter un composant en surbrillance. - InvalidIdException + InstanceListEntrySection - Only alphanumeric characters and underscore allowed. -Ids must begin with a lowercase letter. - Seuls les caractères alphanumériques et les tirets du bas sont acceptés. -Les identifiants doivent commencer avec une lettre minuscule. + Instance List Entry + Élément de la liste d'instances - Ids have to be unique. - Les identifiants doivent être uniques. + Color + Couleur - Invalid Id: %1 -%2 - Identifiant invalide : %1 -%2 + Sets the color for the instance. + Définit la couleur de l'instance. + + + Position + Position + + + Sets the position for the instance. + Définit la position de l'instance. + + + Scale + Échelle + + + Sets the scale for the instance. + Définit l'échelle de l'instance. + + + Rotation + Rotation + + + Sets the rotation for the instance. + Définit la rotation de l'instance. + + + + InstanceListSection + + Instance List + Liste d'instances + + + Instances + Instances + + + Sets the list of instance definitions. Modifying this list, or any of its elements, will cause the instance table to be updated. + Définit la liste de définitions des instances. La modification de cette liste ou de n'importe lequel de ses éléments provoquera la mise à jour de la table d'instances. + + + + InstancingSection + + Instancing + Instanciation + + + Depth Sorting + Tri par la profondeur + + + Enable depth sorting for instanced objects. + Active le tri par la profondeur pour les objets instanciés. + + + Has Transparency + Transparent + + + Set this to true if the instancing table contains alpha values that should be used when rendering the model. + À définir à vrai lorsque la table d'instanciation contient des valeurs alpha devant être utilisées lors du rendu du modèle. + + + Instance Count + Nombre d'instances + + + Sets a limit on the number of instances that can be rendered regardless of the number of instances in the instancing table. + Définit le nombre limite d'instances pouvant être dessinées sans tenir compte du nombre d'instance dans la table d'instanciation. @@ -4357,7 +5234,7 @@ Les identifiants doivent commencer avec une lettre minuscule. Layout - Layout + Agencement @@ -4399,6 +5276,29 @@ Les identifiants doivent commencer avec une lettre minuscule. Ajouter un module. + + JointSection + + Joint + Articulation + + + Index + Index + + + Sets the index of this joint. + Définit l'index de l'articulation. + + + Skeleton Root + Squelette racine + + + Sets the skeleton that contains this joint. + Définit le squelette contenant cette articulation. + + Label @@ -4613,13 +5513,84 @@ dessinée dans la texture. LayoutSection Layout - Layout + Agencement Anchors Ancres + + LightmapperSection + + Lightmapper + Pré-calcul de la lumière + + + Adaptive Bias + Biais adaptif + + + Enables additional dynamic biasing based on the surface normal. + Active un biais supplémentaire, dynamique, reposant sur la normale de la surface. + + + Bias + Biais + + + Raycasting bias to avoid self-intersection artifacts. + Biais de lancer de rayon permettant d'éviter les artefacts liés aux intersections avec soi-même. + + + Opacity Threshold + Seuil d'opacité + + + Bounces against materials with opacity values below this threshold are ignored when calculating lighting via raytracing. + Les rebonds contre les matériaux ayant une valeur d'opacité en deça de ce seuil sont ignorés lors du calcul de l'éclairage par lancer de rayon. + + + Samples + Échantillons + + + The number of samples per lightmap texel. + Le nombre d'échantillons par texel de la texture de lumière. + + + Indirect Lighting + Éclairage indirect + + + Enables the baking of indirect lighting. + Active le pré-calcul de l'éclairage indirect. + + + Bounces + Rebonds + + + The maximum number of indirect light bounces per sample. + Le nombre maximum de rebonds par échantillon pour la lumière indirecte. + + + Indirect Light Factor + Coefficient de lumière indirecte + + + Multiplier for the indirect light amount. + Nombre multiplicateur de la quantité de lumière indirecte. + + + Indirect Workgroup Size + Taille du groupe de travail + + + The size of the workgroup used for indirect light computation. + La taille du groupe de travail utilisée pour le calcul de la lumière indirecte. + + ListViewSpecifics @@ -4759,6 +5730,45 @@ ajouter un composant en surbrillance. Suit l’actuel + + Loader3DSection + + Loader3D + Chargeur 3D + + + Active + Actif + + + Sets if the Loader3D is currently active. + Définit si le chargeur 3D est actuellement actif. + + + Source + Source + + + Sets the URL of the QML component to instantiate. + Définit l'URL du composant QML à instancier. + + + Source Component + Composant source + + + Sets the component to instantiate. + Définit le composant à instancier. + + + Asynchronous + Asynchrone + + + Sets whether the component will be instantiated asynchronously. + Définit si le composant doit être instancié de manière asynchrone. + + LoaderSpecifics @@ -4916,14 +5926,6 @@ ajouter un composant en surbrillance. Return to Design Retourner au Design - - Run Project - Exécuter le projet - - - Live Preview - Prévisualisation instantanée - Go Back Précédent @@ -4945,6 +5947,44 @@ ajouter un composant en surbrillance. Workspace Espace de travail + + You can share your project to Qt Design Viewer web service.<br><br>To be able to use the sharing service, you need to sign in with your Qt Account details. + Vous pouvez partager votre projet sur le service Internet Qt Design Viewer. <br><br>Afin de pouvoir utiliser ce service de partage, vous devez vous identifier avec votre compte Qt. + + + Sign in + S'identifier + + + Upload succeeded. + Téléversement ? + Mise en ligne réussie. + + + Upload failed. Please check your internet connection. + Échec de la mise en ligne. Vérifiez votre connexion Internet. + + + Packing + Empaquetage ? Mise en paquet ? + Archivage + + + Packing failed. + Archivage échoué. + + + Uploading + Mise en ligne en cours + + + Manage shared projects + Gérer les projets partagés + + + Sign out + Déconnexion + Edit Annotations Éditer les annotations @@ -4953,14 +5993,6 @@ ajouter un composant en surbrillance. Share Partager - - Share your project online. - Partager votre projet en ligne. - - - Sharing your project online is disabled in the Community Version. - Le partage du projet en ligne est désactivé dans la version communautaire. - More Items Plus d'éléments @@ -4993,6 +6025,91 @@ ajouter un composant en surbrillance. Adds a Connection, Binding, or Custom Property to the components. Ajoute une connexion, liaison ou une propriété personnalisée aux composants. + + Rename + Renommer + + + Delete + Supprimer + + + Create collection + Créer une collection + + + load + (Y a un commentaire indiquant que c'est pour du débogage) + chargement + + + Create mode + Créer un mode + + + Create variable + Créer une variable + + + Color + Couleur + + + Number + Nombre + + + String + Chaîne de caractères + + + Boolean + Booléen + + + Online + En ligne + + + Offline + Hors ligne + + + How to see a preview on Android device + Comment obtenir une prévisualisation sur un périphérique Android + + + Scan the QR code below or click on the link to go to the Google Play store with your device and seek for Qt Viewer application. + Scannez le QR-code ci-dessous ou cliquez sur le lien pour naviguer sur le magasin Google Play avec votre périphérique et chercher l'application Qt Viewer. + + + Install the Qt Viewer application on your phone. + Installez l'application Qt Viewer sur votre téléphone. + + + Open up this window again, if you already closed it, and click on "Add Run Target" button in this window. + Si vous l'avez déjà fermée, ré-ouvrez cette fenêtre et cliquez sur le bouton « Ajouter une cible d'exécution Â». + + + Run target IP + Addresse IP de la cible + + + Add Run Target + Ajouter une cible d'exécution + + + Remove Run Target + Supprimer une cible d'exécution + + + Columns + Colonnes + + + Manage target devices to be used to display the project + Gérer les périphériques cibles à utiliser pour afficher ce projet + MainGridStack @@ -5271,6 +6388,39 @@ ajouter un composant en surbrillance. Type + + MaterialSection + + Material + Matériau + + + Light Probe + Sonde de lumière + + + Sets a texture to use as image based lighting. +This overrides the scene's light probe. + Définit une texture à utiliser comme source pour l'éclairage. +Celle-ci remplacera la sonde de lumière de la scène. + + + Culling Mode + Mode de découpage + + + Sets which primitives to discard, if any. + Définit quel type de primitives à rejeter, s'il y en a. + + + Depth Draw Mode + Mode de rendu de la profondeur + + + Sets if and when depth rendering takes place. + Définit si et quand le rendu de la profondeur aura lieu. + + MediaPlayerSection @@ -5307,64 +6457,189 @@ ajouter un composant en surbrillance. - ModelNodeOperations + ModelSection - Go to Implementation - Aller à l’implémentation + Model + Modèle - Invalid component. - Composant invalide. + Source + Source - Cannot find an implementation. - Impossible de trouver une implémentation. + Sets the location of the mesh file containing the geometry of this model. + Définit l'emplacement du fichier de modèle contenant la géométrie pour ce modèle. - Cannot Set Property %1 - Impossible de définir la propriété %1 + Geometry + Géométrie - The property %1 is bound to an expression. - La propriété %1 est liée à une expression. + Sets a custom geometry for the model + Définit une géométrie personnalisée pour ce modèle - Overwrite Existing File? - Écraser le fichier existant ? + Materials + Matériaux - File already exists. Overwrite? -"%1" - Le fichier existe déjà. L’écraser ? -« %1 Â» + Edit material + Modifier le matériau - Asset import data file "%1" is invalid. - Le fichier des données de la ressource importée « %1 Â» n'est pas valide. + Casts Shadows + Génère des ombres - Unable to locate source scene "%1". - Impossible de localiser la scène source « %1 Â». + Enables the geometry of this model to be rendered to the shadow maps. + Active le rendu de la géométrie de ce modèle dans la texture des ombres. - Opening asset import data file "%1" failed. - Échec d'ouverture du fichier des données de la ressource importée « %1 Â». + Receives Shadows + Reçoit des ombres - Unable to resolve asset import path. - Impossible de résoudre le chemin d'import des ressources. + Enables the geometry of this model to receive shadows. + Active si la géométrie de ce modèle reçoit des ombres. - Import Update Failed - Échec de la mise à jour de l’importation + Casts Reflections + Génère des réflexions - Failed to update import. -Error: -%1 - Échec de la mise à jour de l’importation. -Erreur : -%1 + Enables reflection probes to reflect this model. + Active les sondes de reflexions pour réfléchir ce modèle. + + + Receives Reflections + Reçoit des réflexions + + + Enables the geometry of this model to receive reflections from the nearest reflection probe. The model must be inside at least one reflection probe to start receiving reflections. + Active la réception de réflexions provenant de source de réflexions proches pour la géométrie de ce modèle. Ce modèle doit être à l'intérieur d'au moins une source de réflexions pour recevoir des réflexions. + + + Is Pickable + Peut être choisi + + + Enables ray cast based picking for this model. + Active la détection par lancer de rayon de ce modèle. + + + Used in Baked Lighting + Utlisé dans le pré-calcul des lumières + + + This model is static and suitable to contribute to baked lighting. + Ce modèle est statique et convient pour contribuer au pré-calcul des lumières. + + + Depth Bias + Biais de profondeur + + + Sets the depth bias of the model. + Définit un biais de profondeur pour ce modèle. + + + LOD Bias + Biais de LOD + + + Sets the size a model needs to be when rendered before the automatic level of detail meshes are used + Définit la taille que le modèle doit avoir pour être dessiné avant que les modèles de niveau de détail (LOD) automatiques soient utilisés + + + Instancing + Instanciation + + + Data Source + Source de données + + + If this property is set, the model will not be rendered normally. Instead, a number of instances of the model will be rendered, as defined by the instance table. + Si cette propriété est définie, le modèle ne sera pas dessiné normalement. À la place, un nombre d'instances du modèle seront dessinés, comme déterminé par la table d'instances. + + + Origin Node + NÅ“ud d'origine + + + Sets the origin of the instance’s coordinate system. + Définit l'origine du système de coordonées de l'instance. + + + Animation + Animation + + + Skeleton + Squelette + + + Sets the skeleton for the model. + Définit le squelette de ce modèle. + + + Morph Targets + Cible de transformation + + + Sets a list of MorphTargets used to render the provided geometry. + Définit une liste de cibles de transformation à utiliser pour dessiner la géométrie fournie. + + + Skin + Peau + + + Sets the skin for the model. + Définit la peau du modèle. + + + Lightmapping + Pré-calcul de la lumière + + + Resolution + Résolution + + + Sets the target resolution of the baked lightmap texture for the model. + Définit la résolution cible pour la texture de lumières pré-calculée pour ce modèle. + + + Lightmap + Texture de lumières + + + Sets the baked lightmap data for the model. + Définit les données de lumières pré-calculées pour ce modèle. + + + + MorphTargetSection + + Morph Target + Cible de transformation + + + Weight + Poids + + + Sets the weight of the current morph target. + Définit le poids de la cible de transformation actuelle. + + + Attributes + Attributs + + + Sets the set of attributes of the current morph target. + Définit l'ensemble des attributs pour la cible de transformation actuelle. @@ -5487,24 +6762,6 @@ Erreur : MouseArea - - MoveToolAction - - Activate Move Tool - Activer l'outil de déplacement - - - - NavigatorTreeModel - - Warning - Avertissement - - - Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? - Redéfinir ici le parent du composant %1 entraînera la suppression du composant %2. Voulez-vous continuer ? - - NewEffectDialog @@ -5693,10 +6950,49 @@ Erreur : - OrientationToggleAction + Object3DSection - Toggle Global/Local Orientation - Activer/désactiver l’orientation globale/locale + Object + Objet + + + + OrthographicCameraSection + + Orthographic Camera + Caméra orthographique + + + Clip Near + Plan proche + + + Sets the near value of the camera view frustum. + Définit la valeur du plan proche pour le champ de la caméra. + + + Clip Far + Plan lointain + + + Sets the far value of the camera view frustum. + Définit la valeur du plan lointain du champ de la caméra. + + + Horizontal Magnification + Agrandissement horizontal + + + Sets the horizontal magnification of the OrthographicCamera's frustum. + Définit l'agrandissement horizontal du champ de la caméra orthographique. + + + Vertical Magnification + Agrandissement vertical + + + Sets the vertical magnification of the OrthographicCamera's frustum. + Définit l'agrandissement vertical du champ de la caméra orthographique. @@ -5867,38 +7163,34 @@ la taille totale implicite. - ParticleViewModeAction + PassSection - Toggle particle animation On/Off - Activer/Désactiver l’animation des particules + Pass + Passe - - - ParticlesPlayAction - Play Particles - Lancer les particules + Commands + Commandes - - - ParticlesRestartAction - Restart Particles - Relancer les particules + Sets the render commands of the pass. + Définit les commandes de rendu de la passe. - - - PathTool - Path Tool - Outil de chemin + Buffer + Tampon - - - PathToolAction - Edit Path - Éditer le chemin + Sets the output buffer for the pass. + Définit le tampon de sortie de la passe. + + + Shaders + Shaders + + + Sets the shaders for the pass. + Définit les shaders de la passe. @@ -6020,6 +7312,45 @@ ajouter un composant en surbrillance. Violation d'ordre des événements MMAP entre les vidages de tampons détectée. Le moment de l'événement est: %1, temps maximum depuis le dernier vidage: %2. Cela peut interrompre l'analyse des données. + + PerspectiveCameraSection + + Perspective Camera + Caméra perspective + + + Clip Near + Plan proche + + + Sets the near value of the view frustum of the camera. + Définit la valeur du plan proche pour le champ de la caméra. + + + Clip Far + Plan lointain + + + Sets the far value of the view frustum of the camera. + Définit la valeur du plan lointain pour le champ de la caméra. + + + Field of View + Champ de vision + + + Sets the field of view of the camera in degrees. + Définit le champ de vision de la caméra en degrées. + + + FOV Orientation + Orientation du champ de vision + + + Sets if the field of view property reflects the vertical or the horizontal field of view. + Détermine si la propriété du champ de vision spécifie un champ de vision vertical ou horizontal. + + PluginManager @@ -6027,6 +7358,37 @@ ajouter un composant en surbrillance. Greffons en échec + + PointLightSection + + Point Light + Lumière ponctuelle + + + Constant Fade + Atténuation constante + + + Sets the constant attenuation of the light. + Définit l'atténuation constante de la lumière. + + + Linear Fade + Atténuation linéaire + + + Sets the linear attenuation of the light. + Définit l'atténuation linéaire de la lumière. + + + Quadratic Fade + Atténuation quadratique + + + Sets the quadratic attenuation of the light. + Définit l'atténuation quadratique de la lumière. + + PopupLabel @@ -6112,6 +7474,421 @@ ajouter un composant en surbrillance. Supprimer le préréglage personnalisé + + PreviewError + + Show Less + Montrer moins + + + We are not able to create a preview of this effect. + Pas fan du "nous" + Impossible de créer une prévisualisation de cet effet. + + + <html><a href="#showmore">Show More</a></html> + <html><a href="#showmore">Montrer plus</a></html> + + + + PreviewImagesComboBox + + Add Custom Image + Ajouter une image personnalisée + + + Remove custom image. + Supprimer l'image personnalisée. + + + + PrincipledMaterialSection + + Principled Material + Matériau de base + + + Alpha Mode + Mode alpha + + + Sets the mode for how the alpha channel of base color is used. + Définit l'utilisation faite du canal alpha de la couleur de base. + + + Alpha Cutoff + Valeur alpha de butée + + + Sets the cutoff value when using the Mask alphaMode. + Définit la valeur de butée lors de l'utilisation du mode « Mask Â». + + + Blend Mode + Mode de mélange + + + Sets how the colors of the model rendered blend with those behind it. + Définit comment les couleurs du modèle sont mélangées avec celles derrière celui-ci. + + + Lighting + Éclairage + + + Sets which lighting method is used when generating this material. + Définit la méthode de calcul de l'éclairage à utiliser lors de la génération de ce matériau. + + + Base Color + Couleur de base + + + Color + Couleur + + + Map + Texture + + + Sets a texture used to set the base color of the material. + Définit une texture déterminant la couleur de base du matériau. + + + Metalness + Aspect métallique + + + Amount + Quantité + + + Sets the metalness of the the material. + Définit l'importance de l'aspect métallique du matériau. + + + Sets a texture to be used to set the metalness amount for the different parts of the material. + Définit une texture déterminant l'importance de l'aspect métallique sur les différentes parties du matériau. + + + Channel + Canal + + + Sets the texture channel used to read the metalness value from metalnessMap. + Définit le canal de texture lu pour déterminer l'importance de l'aspect métallique. + + + Roughness + Rugosité + + + Sets the size of the specular highlight generated from lights, and the clarity of reflections in general. + Définit la taille de l'effet spéculaire généré par les lumières et, de manière générale, la netteté des réflexions. + + + Sets a texture to control the specular roughness of the material. + Définit une texture pour contrôler la rugosité de l'effet spéculaire du matériau. + + + Sets the texture channel used to read the roughness value from roughnessMap. + Définit le canal de texture à partir duquel lire la valeur de rugosité. + + + Normal + Normales + + + Sets an RGB image used to simulate fine geometry displacement across the surface of the material. + Définit une image RVB utilisée pour simuler une géométrie fine sur la surface du matériau. + + + Strength + Force + + + Sets the amount of simulated displacement for the normalMap. + Définit la quantité de relief simulé. + + + Occlusion + Occlusion + + + Sets the factor used to modify the values from the occlusionMap texture. + Définit le coefficient modifiant les valeurs de la texture d'occlusion. + + + Sets a texture used to determine how much indirect light the different areas of the material should receive. + Définit une texture déterminant la quantité de lumière indirecte reçue par les différentes parties du matériau. + + + Sets the texture channel used to read the occlusion value from occlusionMap. + Définit la canal de la texture à partir duquel lire les valeurs d'occlusion. + + + Opacity + Opacité + + + Sets the opacity of just this material, separate from the model. + Définit l'opacité de ce matériau, indépendamment du modèle. + + + Sets a texture used to control the opacity differently for different parts of the material. + Définit une texture déterminant l'opacité des différentes parties du matériau. + + + Sets the texture channel used to read the opacity value from opacityMap. + Définit le canal de texture à partir duquel lire la valeur d'opacité. + + + Emissive Color + Couleur émissive + + + Sets a texture to be used to set the emissive factor for different parts of the material. + Définit une texture déterminant le coefficient de lumière émissive pour les différentes parties du matériau. + + + Factor + Coefficient + + + Sets the color of self-illumination for this material. + Définit la couleur d'illumination propre de ce matériau. + + + Height + Relief + + + Sets the factor used to modify the values from the heightMap texture. + Définit le coefficient à utiliser pour modifier les valeurs de la texture des hauteurs. + + + Sets a texture used to determine the height the texture will be displaced when rendered through the use of Parallax Mapping. + Définit une texture déterminant le décalage appliqué lors du rendu provenant du « Parallax Mapping Â». + + + Sets the texture channel used to read the height value from heightMap. + Définit le canal à partir duquel lire la hauteur. + + + Min Map Samples + Échantillons minimum de texture + + + Sets the minimum number of samples used for performing Parallex Occlusion Mapping using the heightMap. + Définit le nombre minimum d'échantillons de la texture des hauteurs à utiliser lors de l'application du « Parallax Occlusion Mapping Â». + + + Max Map Samples + Échantillons maximum de texture + + + Sets the maximum number of samples used for performing Parallex Occlusion Mapping using the heightMap. + Définit le nombre maximum d'échantillons de la texture des hauteurs à utiliser lors de l'application du « Parallax Occlusion Mapping Â». + + + Clearcoat + clearcoat ? Il semble que cela vienne du monde automobile et que ce soit proche d'un vernis + Vernis + + + Sets the intensity of the clearcoat layer. + Définit l'intensité de la couche de vernis. + + + Sets a texture used to determine the intensity of the clearcoat layer. + Définit la texture déterminant l'instensité de la couche de vernis. + + + Sets the texture channel used to read the intensity from clearcoatMap. + Définit le canal de la texture de vernis à partir duquel lire l'intensité. + + + Roughness Amount + Quantité de rugosité + + + Sets the roughness of the clearcoat layer. + Définit la rugosité de la couche de vernis. + + + Roughness Map + Texture de rugosité + + + Sets a texture used to determine the roughness of the clearcoat layer. + Définit une texture déterminant la quantité de rugosité de la couche de vernis. + + + Roughness Channel + Canal de rugosité + + + Sets the texture channel used to read the roughness from clearcoatRoughnessMap. + Définit le canal de la texture à partir duquel lire la rugosité. + + + Normal Map + Texture de normales + + + Sets a texture used as a normalMap for the clearcoat layer. + Définit une texture déterminant les normales de la couche de vernis. + + + Refraction + Réfraction + + + Transmission Factor + Coefficient de transmission + + + Sets the base percentage of light that is transmitted through the surface. + Définit le pourcentage de lumière transmis à travers la surface. + + + Transmission Map + Texture de transmission + + + Sets a texture that contains the transmission percentage of a the surface. + Définit une texture déterminant le pourcentage de transmission de la surface. + + + Transmission Channel + Canal de transmission + + + Sets the texture channel used to read the transmission percentage from transmissionMap. + Définit le canal de la texture à partir duquel lire le pourcentage de transmission. + + + Index of Refraction + Indice de réfraction + + + Sets the index of refraction of the material. + Définit l'indice de réfraction du matériau. + + + Thickness Factor + Coefficient d'épaisseur + + + Sets the thickness of the volume beneath the surface in model coordinate space. + Définit l'épaisseur du volume en dessous de la surface dans le système de coordonnées du modèle. + + + Thickness Map + Texture d'épaisseur + + + Sets a texture that contains the thickness of a the material volume. + Définit une texture déterminant l'épaisseur du volume du matériau. + + + Thickness Channel + Canal d'épaisseur + + + Sets the texture channel used to read the thickness amount from thicknessMap. + Définit le canal de la texture à partir duquel lire l'épaisseur. + + + Attenuation Color + Couleur d'atténuation + + + Sets the color that white lights turn into due to absorption when reaching the attenuation distance. + Définit la couleur prise par la lumière blanche lorsque celle-ci est absorbée après avoir atteint la distance d'atténuation. + + + Attenuation Distance + Distance d'atténuation + + + Sets the average distance in world space that light travels in the medium before interacting with a particle. + Définit la distance moyenne, dans le système de coordonnées du monde, parcourue par la lumière avant d'interagir avec une particule. + + + Advanced + Avancé + + + Vertex Colors + Couleur de sommets + + + Sets whether vertex colors are used to modulate the base color. + Définit si les couleurs de sommets sont utilisées pour moduler la couleur de base. + + + Enabled + Activé + + + Disabled + Désactivé + + + Point Size + Taille de point + + + Sets the size of the points rendered, when the geometry is using a primitive type of points. + Définit la taille des points dessinés lorsque la géométrie utilise le type de primitive points. + + + Line Width + Largeur de ligne + + + Sets the width of the lines rendered, when the geometry is using a primitive type of lines or line strips. + Définit la largeur des lignes dessinées lorsque la géométrie utilise un type de primitif ligne ou ensemble de lignes. + + + Overrides + Surcharge + + + Specular Amount + Quantité de spéculaire + + + Override the strength of specularity (highlights and reflections). + Surcharge la force de l'effet spéculaire (surbrillance et reflets). + + + Specular Map + Texture spéculaire + + + An RGB Texture to override the amount and the color of specularity across the surface of the material. + Une texture RVB pour remplacer la quantité et la couleur de l'effet spéculaire sur la surface du matériau. + + + Reflection Map + Texture de réflexions + + + Sets a texture used for specular highlights on the material. + Définit une texture déterminant les reflets spéculaires du matériau. + + + Specular Tint + Teinte spéculaire + + + Override how much of the base color contributes to the specular reflections. + Surcharge la quantité de contribution de la couleur de base dans les réflexions spéculaires. + + ProgressBarSpecifics @@ -6216,6 +7993,17 @@ est en cours. Valeur de la propriété. + + PropertyEditorPane + + Current State + État actuel + + + The current state of the States View. + L'état actuel de la vue des états. + + PropertyLabel @@ -6223,17 +8011,6 @@ est en cours. Cette propriété n’est pas disponible dans cette configuration. - - PuppetStarter - - Puppet is starting... - Démarrage de Puppet… - - - You can now attach your debugger to the %1 puppet with process id: %2. - Vous pouvez maintenant attacher votre débogueur au mode puppet %1 avec l'identifiant de processus : %2. - - QAbstractFileIconProvider @@ -6378,70 +8155,15 @@ est en cours. @info Mise à jour de la définition syntaxique pour « %1 Â» vers la version %2… - - <Filter> - Library search input hint text - <Filtre> - - - Start Nanotrace - Démarrer Nanotrace - - - Shut Down Nanotrace - Arrêter Nanotrace - - - Failed to Add Texture - Échec de l’ajout de la texture - - - Could not add %1 to project. - Impossible d’ajouter %1 au projet. - - - Show Event List - Afficher la liste des évènements - - - Assign Events to Actions - Assigner des évènements aux actions - Connect Signal to Event Connecter un signal à un évènement - - Connected Events - Évènements connectés - - - Connected Signals - Signaux connectés - - - Exposed Custom Properties - Propriétés personnalisées exposées - UntitledProject File path suggestion for a new project. If you choose to translate it, make sure it is a valid path name without blanks and using only ascii chars. ProjetSansNom - - Effect file %1 not found in the project. - Fichier d'effet %1 introuvable dans le projet. - - - Effect %1 is not complete. - L'effet %1 n'est pas complet. - - - Ensure that you have saved it in the Effect Composer. -Do you want to edit this effect? - Assurez-vous de l'avoir sauvegardé dans le compositeur d'effet. -Souhaitez-vous éditer cet effet ? - Entry not found Entrée introuvable @@ -6450,70 +8172,6 @@ Souhaitez-vous éditer cet effet ? Minimize Minimiser - - ID cannot start with an uppercase character (%1). - L'identifiant ne peut pas commencer avec un caractère majuscule (%1). - - - ID cannot start with a number (%1). - L'identifiant ne peut pas commencer avec un chiffre (%1). - - - ID cannot include whitespace (%1). - L'identifiant ne peut pas contenir d'espace (%1). - - - %1 is a reserved QML keyword. - %1 est un mot clé QML réservé. - - - %1 is a reserved Qml type. - %1 est un type Qml réservé. - - - %1 is a reserved property keyword. - %1 est un mot clé de propriété réservé. - - - ID includes invalid characters (%1). - L'identifiant contient des caractères invalides (%1). - - - Empty document - Document vide - - - Unsupported bundle file - Fichier de bundle non pris en charge - - - The chosen bundle was created with an incompatible version of Qt Design Studio - Le bundle sélectionné a été créé avec une version de Qt Design Studio non prise en charge - - - Component Exists - Le composant existe déjà - - - A component with the same name '%1' already exists in the project, are you sure you want to overwrite it? - Un composant avec le nom « %1 Â» existe déjà dans le projet. Souhaitez-vous l'écraser ? - - - Import Component - Importation d'un composant - - - Qt Design Studio Bundle Files (*.%1) - Fichiers de bundle de Qt Design Studio (*.%1) - - - Export Material - Exportation d'un matériau - - - Export Component - Exportation d'un composant - QmlDesigner::AbstractEditorDialog @@ -6798,14 +8456,6 @@ Export des ressources : %2 Export finished. Exportation terminée. - - Error creating asset directory. %1 - Erreur lors de la création du dossier de ressources. %1 - - - Error saving asset. %1 - Erreur lors de l'enregistrement de la ressource. %1 - QmlDesigner::AssetExporterPlugin @@ -6826,17 +8476,6 @@ Export des ressources : %2 Exporter les composants du projet en cours. - - QmlDesigner::AssetsLibraryModel - - Failed to Delete File - Échec de la suppression du fichier - - - Could not delete "%1". - Impossible de supprimer « %1 Â». - - QmlDesigner::AssetsLibraryView @@ -6844,42 +8483,6 @@ Export des ressources : %2 Ressources - - QmlDesigner::AssetsLibraryWidget - - Assets Library - Title of assets library widget - Bibliothèque de ressources - - - Failed to Delete Effect Resources - Échec de suppression des ressources d'effet - - - Could not delete "%1". - Impossible de supprimer « %1 Â». - - - Failed to Add Files - Échec lors de l'ajout de fichiers - - - Could not add %1 to project. - Impossible d'ajouter %1 au projet. - - - All Files (%1) - Tous les fichiers (%1) - - - Add Assets - Ajouter des ressources - - - Could not add %1 to project. Unsupported file format. - Impossible d'ajouter %1 au projet. Format de fichier non supporté. - - QmlDesigner::AssignEventDialog @@ -6893,13 +8496,6 @@ Export des ressources : %2 - - QmlDesigner::BackgroundAction - - Set the color of the canvas. - Définit la couleur du canevas. - - QmlDesigner::BakeLights @@ -6967,12 +8563,12 @@ Export des ressources : %2 QmlDesigner::CapturingConnectionManager - QML Emulation Layer (QML Puppet - %1) Crashed - La couche d’émulation de QML (QML Puppet - %1) a planté + QML Puppet (%1) Crashed + QML Puppet (%1) a planté - You are recording a puppet stream and the emulations layer crashed. It is recommended to reopen the Qt Quick Designer and start again. - Vous êtes en train d'enregistrer un flux puppet et la couche d'émulation a planté. Il est recommandé de réouvrir Qt Quick Designer et de recommancer. + The QML Puppet crashed while recording a stream. Please reopen %1 and try it again. + Le processus QML Puppet a planté lors de l'enregistrement du flux. Ré-ouvrez %1 et réessayez. @@ -7267,26 +8863,90 @@ Export des ressources : %2 - QmlDesigner::DocumentMessage + QmlDesigner::DesignSystemView - Error parsing - Erreur d'analyse + Design System + Apparence système + + + + QmlDesigner::DesignSystemWidget + + Design System + Title of Editor widget + Apparence système - Internal error - Erreur interne + Cannot Create QtQuick View + Impossible de créer une vue QtQuick - line %1 - - ligne %1 - + StatesEditorWidget: %1 cannot be created.%2 + StatesEditorWidget : %1 ne peut être créé. %2 + + + + QmlDesigner::DeviceShare::DeviceManagerModel + + Active + Actif - column %1 - - colonne %1 - + Status + État + + + Alias + Alias + + + IPv4 Address + Adresse IPv4 + + + OS + ou SE? (sachant que c'est probablement une entête de colonne d'un tableau) + Système d'exploitation + + + OS Version + Version du système d'exploitation + + + Architecture + Architecture + + + Screen Size + Taille d'écran + + + App Version + Version de l'application + + + Self ID + Identifiant + + + Device ID + Identifiant du périphérique + + + + QmlDesigner::DeviceShare::DeviceManagerWidget + + Device Manager + Title of device manager widget + Gestionnaire de périphériques + + + Cannot Create QtQuick View + Impossible de créer une vue QtQuick + + + StatesEditorWidget: %1 cannot be created.%2 + StatesEditorWidget : %1 ne peut être créé. %2 @@ -7624,193 +9284,6 @@ Export des ressources : %2 Annulation de la préparation du fichier. - - QmlDesigner::FormEditorAnnotationIcon - - Annotation - Annotation - - - Edit Annotation - Modifier l'annotation - - - Remove Annotation - Supprimer l'annotation - - - By: - Par : - - - Edited: - Édité : - - - Delete this annotation? - Supprimer cette annotation ? - - - - QmlDesigner::FormEditorView - - 2D - 2D - - - 2D view - Vue 2D - - - %1 is not supported as the root element by the 2D view. - %1 n'est pas supporté comme élément racine par la vue 2D. - - - - QmlDesigner::FormEditorWidget - - No Snapping - Aucune aimantation - - - Snap with Anchors - Aimantation avec les ancres - - - Snap without Anchors - Aimantation sans ancres - - - Show Bounds - Afficher les bordures - - - Override Width - Écraser la largeur - - - Override width of root component. - Écraser la largeur du composant racine. - - - Override Height - Écraser la hauteur - - - Override height of root component. - Écraser la hauteur du composant racine. - - - Zoom In - Zoom avant - - - Zoom Out - Zoom arrière - - - Zoom screen to fit all content. - Zoom pour afficher tout le contenu. - - - Ctrl+Alt+0 - Ctrl+Alt+O - - - Zoom screen to fit current selection. - Zoom pour contenir la sélection en cours. - - - Ctrl+Alt+i - Ctrl+Alt+i - - - Reload View - Recharger la vue - - - Export Current QML File as Image - Exporter le fichier QML en cours en tant qu'image - - - PNG (*.png);;JPG (*.jpg) - PNG (*.png);;JPG (*.jpg) - - - - QmlDesigner::GenerateResource - - Unable to generate resource file: %1 - Impossible de générer le fichier de ressource : %1 - - - A timeout occurred running "%1". - Un dépassement de délai s’est produit lors de l’exécution de « %1 Â». - - - "%1" crashed. - « %1 Â» a planté. - - - "%1" failed (exit code %2). - « %1 Â» a échoué (code de sortie %2). - - - Generate QRC Resource File... - Générer le fichier de ressource QRC… - - - Save Project as QRC File - Enregistrer le projet en tant que fichier QRC - - - QML Resource File (*.qrc) - Fichier de ressource QML (*.qrc) - - - Successfully generated QRC resource file - %1 - ressoures ? - Fichier de ressource QRC généré avec succès - %1 - - - Generate Deployable Package... - Générer un paquet déployable… - - - Save Project as Resource - Enregistrer le projet en tant que ressource - - - Generating deployable package. Please wait... - Génération du paquet déployable. Veuillez patienter… - - - Failed to generate deployable package! - Échec de génération du paquet déployable ! - - - Error - Erreur - - - Failed to generate deployable package! - -Please check the output pane for more information. - Échec de génération du paquet déployable ! - -Veuillez vérifier le panneau de sortie pour plus d'informations. - - - Successfully generated deployable package - Génération du paquet déployable réussie - - - Success - Réussite - - QmlDesigner::GlobalAnnotationDialog @@ -8091,12 +9564,12 @@ Veuillez vérifier le panneau de sortie pour plus d'informations. QmlDesigner::InteractiveConnectionManager - Cannot Connect to QML Emulation Layer (QML Puppet) - Impossible de se connecter à la couche d'émulation QML (QML Puppet) + Cannot Connect to QML Puppet + Impossible de se connecter à QML Puppet - The executable of the QML emulation layer (QML Puppet) may not be responding. Switching to another kit might help. - L'exécutable de la couche d'émulation QML (QML Puppet) ne semble pas répondre. L'utilisation d'un autre kit peut résoudre le problème. + The executable of the QML Puppet may not be responding. Switching to another kit might help. + L'exécutable de QML Puppet ne répond pas. Changer de kit peut aider. @@ -8162,52 +9635,6 @@ Veuillez vérifier le panneau de sortie pour plus d'informations.Réinitialiser l'espace de travail actif - - QmlDesigner::Internal::MetaInfoPrivate - - Invalid meta info - Métadonnées invalides - - - - QmlDesigner::Internal::MetaInfoReader - - Illegal state while parsing. - État illégal lors de l'analyse. - - - No property definition allowed. - Aucune définition de propriété permise. - - - Invalid type %1 - Type %1 invalide - - - Unknown property for Type %1 - Propriété inconnue pour le type %1 - - - Unknown property for ItemLibraryEntry %1 - Propriété inconnue pour ItemLibraryEntry %1 - - - Unknown property for Property %1 - Propriété inconnue pour Property %1 - - - Unknown property for QmlSource %1 - Propriété inconnue pour QmlSource %1 - - - Unknown property for ExtraFile %1 - Propriété inconnue pour ExtraFile %1 - - - Invalid or duplicate library entry %1 - Entrée de bibliothèque %1 invalide ou dupliquée - - QmlDesigner::Internal::ModelPrivate @@ -8217,259 +9644,10 @@ Veuillez vérifier le panneau de sortie pour plus d'informations. QmlDesigner::Internal::SettingsPage - - Snapping - pour être cohérents avec designer - Aimantation - - - Qt Quick Designer - Designer Qt Quick - - - Canvas - Canevas - - - If you select this radio button, Qt Design Studio always uses the QML emulation layer (QML Puppet) located at the following path. - Si vous sélectionnez ce bouton radio, Qt Design Studio utilisera toujours la couche d'émulation QML (QML Puppet) située au chemin suivant. - - - Warns about QML features that are not properly supported by the Qt Design Studio. - Avertit à propos des fonctionnalités QML qui ne sont pas prises en charge par Qt Design Studio. - - - Debugging - Débogage - - - Show the debugging view - Afficher la vue de débogage - - - Enable smooth rendering in the 2D view. - Activer le rendu lisse dans la vue 2D. - - - Default style - Style par défaut - - - Reset Style - Réinitialiser le style - - - QML Emulation Layer - Couche d'émulation QML - - - Use fallback QML emulation layer - Utiliser la couche d'émulation QML de secours - - - Path to the QML emulation layer executable (qmlpuppet). - Chemin de l'exécutable de la couche d'émulation QML (qmlpuppet). - Reset Path Réinitialiser le chemin - - Resets the path to the built-in QML emulation layer. - Réinitialiser le chemin à la couche d'émulation QML intégrée. - - - Use QML emulation layer that is built with the selected Qt - Utiliser la couche d'émulation QML intégrée avec la version de Qt sélectionnée - - - Always save when leaving subcomponent in bread crumb - https://fr.wikipedia.org/wiki/Fil_d%27Ariane_(ergonomie) - Toujours enregistrer lorsque l'on quitte un sous-composant du fil d'Ariane - - - Warn about unsupported features of .ui.qml files in code editor - Avertir à propos des fonctionnalités non supportées par l'éditeur de code des fichiers .ui.qml - - - Also warns in the code editor about QML features that are not properly supported by the Qt Quick Designer. - Avertir aussi dans l'éditeur de code à propos des fonctionnalités QML qui ne sont pas gérées correctement par Qt Quick Designer. - - - Warn about unsupported features in .ui.qml files - Avertir à propos des fonctionnalités non supportées dans les fichiers .ui.qml - - - Warn about using .qml files instead of .ui.qml files - Avertir à propos de l'utilisation des fichiers .qml à la place des fichiers .ui.qml - - - Qt Quick Designer will propose to open .ui.qml files instead of opening a .qml file. - Qt Quick Designer proposera d'ouvrir le fichier .ui.qml à la place du fichier .qml. - - - qsTr() - Option name referring to function in Qt. Should not be translatable? - qsTr() - - - qsTrId() - qsTrId() - - - qsTranslate() - qsTranslate() - - - Always open ui.qml files in Design mode - Toujours ouvrir les fichiers .ui.qml dans le mode Design - - - Ask for confirmation before deleting asset - Demander confirmation avant la suppression d'une ressource - - - Always auto-format ui.qml files in Design mode - Toujours formatter automatiquement les fichiers .ui.qml dans le mode Design - - - Enable Timeline editor - Activer l'éditeur de ligne temporelle - - - Enable DockWidget content minimum size - Activer la taille minimale de contenu du DockWidget - - - Show property editor warnings - Afficher les avertissements de l'éditeur de propriétés - - - Enable the debugging view - Activer la vue de débogage - - - Show warn exceptions - Afficher les exceptions - - - Path: - Chemin : - - - Top level build path: - Chemin de construction de haut niveau : - - - Forward QML emulation layer output: - Faire suivre la sortie de la couche d'émulation QML : - - - Debug QML emulation layer: - Débogage de la couche d'émulation QML : - - - Parent component padding: - Remplissage du composant parent : - - - Sibling component spacing: - Espacement des composants voisins : - - - Width: - Largeur : - - - Height: - Hauteur : - - - Smooth rendering: - Rendu lisse : - - - Root Component Init Size - Taille initiale du composant racine - - - Styling - Style - - - Controls style: - Style des Controls : - - - Controls 2 style: - Style des Controls 2 : - - - Subcomponents - Sous-composants - - - Warnings - Avertissements - - - Internationalization - Internationalisation - - - Features - Fonctionnalités - - - Restart Required - Redémarrage nécessaire - - - The made changes will take effect after a restart of the QML Emulation layer or %1. - Les changements effectués prendront effet au prochain démarrage de la couche d’émulation QML ou %1. - - - - QmlDesigner::Internal::TypeAnnotationReader - - Illegal state while parsing. - État illégal lors de l'analyse. - - - No property definition allowed. - Aucune définition de propriété permise. - - - Invalid type %1 - Type %1 invalide - - - Unknown property for Type %1 - Propriété inconnue pour le type %1 - - - Unknown property for ItemLibraryEntry %1 - Propriété inconnue pour ItemLibraryEntry %1 - - - Unknown property for Property %1 - Propriété inconnue pour Property %1 - - - Unknown property for QmlSource %1 - Propriété inconnue pour QmlSource %1 - - - Unknown property for ExtraFile %1 - Propriété inconnue pour ExtraFile %1 - - - - QmlDesigner::InvalidArgumentException - - Failed to create item of type %1 - Échec lors de la création de l'élément de type %1 - QmlDesigner::ItemLibraryImport @@ -8620,13 +9798,6 @@ Veuillez vérifier le panneau de sortie pour plus d'informations.Vue de l'éditeur de matériau - - QmlDesigner::Model - - Invalid Id - Identifiant invalide - - QmlDesigner::NavigatorSearchWidget @@ -8636,10 +9807,6 @@ Veuillez vérifier le panneau de sortie pour plus d'informations. QmlDesigner::NavigatorTreeModel - - Unknown component: %1 - Composant inconnu : %1 - Toggles whether this component is exported as an alias property of the root component. Indique si ce composant est exporté en tant que propriété alias du composant racine. @@ -8657,17 +9824,6 @@ Locked components cannot be modified or selected. Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés. - - QmlDesigner::NavigatorTreeView - - Invalid Id - Identifiant invalide - - - %1 already exists. - %1 existe déjà. - - QmlDesigner::NavigatorView @@ -8711,21 +9867,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Inverser l'ordre des composants - - QmlDesigner::NodeInstanceView - - Qt Quick emulation layer crashed. - La couche d'émulation Qt Quick a planté. - - - Source item: %1 - Élément source : %1 - - - Failed to generate QSB file for: %1 - Échec de génération du fichier QSB pour : %1 - - QmlDesigner::NodeListModel @@ -8846,21 +9987,9 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.%1 already exists. %1 existe déjà. - - Invalid QML source - Source QML invalide - QmlDesigner::QmlDesignerPlugin - - Cannot Open Design Mode - Impossible d'ouvrir le mode Design - - - The QML file is not currently opened in a QML Editor. - Le fichier QML n'est actuellement pas ouvert dans un éditeur QML. - Qml Designer Lite Qml Designer Lite @@ -8873,10 +10002,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Give Feedback... Faire un retour… - - Enjoying the %1? - Vous appréciez %1 ? - QmlDesigner::QmlModelNodeProxy @@ -9082,13 +10207,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Fermer les autres éditeurs - - QmlDesigner::SignalList - - Signal List for %1 - Liste des signaux pour %1 - - QmlDesigner::SignalListDelegate @@ -9299,13 +10417,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Le changement du chemin des bundles prendra effet après le redémarrage. - - QmlDesigner::SubComponentManager - - My 3D Components - Mes composants 3D - - QmlDesigner::SwitchLanguageComboboxAction @@ -9328,26 +10439,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Vue du code - - QmlDesigner::TextToModelMerger - - No import statements found. - instruction? - Aucune mention d'importation n'a été trouvée. - - - Qt Quick 6 is not supported with a Qt 5 kit. - Qt Quick 6 n'est pas pris en charge avec un kit Qt 5. - - - The Design Mode requires a valid Qt kit. - Le mode Design nécessite un kit Qt valide. - - - No import for Qt Quick found. - Aucune importation de Qt Quick n'a été trouvée. - - QmlDesigner::TextureEditorView @@ -9589,10 +10680,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés. QmlDesigner::TimelineSettingsModel - - None - Aucune - State État @@ -9609,10 +10696,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Fixed Frame Étape fixe - - Base State - État de base - Error Erreur @@ -9807,6 +10890,10 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.%1 already exists. %1 existe déjà. + + Default + Défaut + QmlDesigner::TransitionTool @@ -9893,7 +10980,7 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés. Layout - Organisation + Agencement Parent @@ -10756,7 +11843,8 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés. All - Tout + Show all packages + Tous Advanced Options... @@ -11341,10 +12429,6 @@ dans le navigateur système pour un téléchargement manuel. The Qt version for kit %1 is invalid. La version Qt du kit %1 est invalide. - - The minimum Qt version required for Gradle build to work is %1. It is recommended to install the latest Qt version. - La version minimale requise pour une compilation avec Gradle est %1. Il est recommandé d'installer la dernière version de Qt. - The API level set for the APK is less than the minimum required by the kit. The minimum API level required by the kit is %1. @@ -11423,14 +12507,6 @@ Le niveau minimum d'API nécessaire par le kit est %1. The kit's build configuration is invalid. La configuration de compilation du kit est invalide. - - The kit's build steps list is invalid. - Les étapes de compilation du kit sont invalides. - - - The kit's deploy configuration is invalid. - La configuration de déploiement du kit est invalide. - No valid deployment device is set. Aucun périphérique pour le déploiement n'est défini. @@ -11629,10 +12705,6 @@ Le kit supporte « %2 Â», mais le périphérique utilise « %3&#x Physical device Périphérique physique - - None - Aucune - Erase the Android AVD "%1"? This cannot be undone. @@ -11659,6 +12731,11 @@ Cela ne peut être annulé. Connecting to the device IP "%1" failed. Échec lors de la connexion au périphérique avec l'adresse IP « %1 Â». + + None + No skin + Aucun + An error occurred while removing the Android AVD "%1" using avdmanager tool. Une erreur est apparue lors de la suppression du périphérique AVD « %1 Â» au travers de l'outil avdmanager. @@ -11779,6 +12856,23 @@ Cela ne peut être annulé. Cannot copy C++ debug server. Impossible de copier le serveur de débogage C++. + + Art: Cleared App Profiles. + Art -> Android Runtime + Art : profils d'application nettoyés. + + + Art: Clearing App Profiles failed. + Art : nettoyage des profils d'application échoué. + + + Art: Compiled App Profiles. + Art : profils d'application compilés. + + + Art: Compiling App Profiles failed. + Art : compilation des profils d'application échoué. + General Général @@ -12486,6 +13580,10 @@ le fichier manifeste et d'écraser vos paramètres. Accepter l'écrase Using: %1. En utilisant : %1. + + Cannot debug: Invalid target information. + Impossible de déboguer : information de la cible invalide. + Cannot debug: Only QML and native applications are supported. Impossible de déboguer : seules les applications QML ou natives sont prises en charge. @@ -13137,11 +14235,12 @@ Voir la documentation de Google Test pour plus d'informations sur les filtr Exécuter automatiquement les tests après la compilation - None - Aucun + No Tests + Aucun test All + Run tests after build Tous @@ -13920,6 +15019,10 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec globbing? Motif de chemin + + Named filters + Filtres nommés + Total rows: Nombre de lignes totales : @@ -13928,14 +15031,6 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec Open Preferences... Ouvrir les préférences… - - Configure dashboards in Preferences > Axivion > General. - Configurer les tableaux de bord dans Préférences > Axivion > Général. - - - None - Aucun - No Data Aucune donnée @@ -13952,10 +15047,6 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec Reload Recharger - - Show Inline Issues - Afficher les problèmes en ligne - Show Issue Annotations Inline Afficher les problèmes avec des annotations en ligne @@ -13964,6 +15055,22 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec Show Online Filter Help Afficher l'aide en ligne des filtres + + Show All + Tout afficher + + + Configure dashboards in Preferences > Analyzer > Axivion. + Configurez des tableaux de bord dans Préférences > Analyseur > Axivion. + + + No Dashboard + Aucun tableau de bord + + + Show Issues in Editor + Afficher les problèmes dans l'éditeur + Open Issue in Dashboard Ouvrir le problème dans le tableau de bord @@ -14063,6 +15170,14 @@ Souhaitez-vous ouvrir « %1 Â» avec l'application par défaut Highlight marks Mise en avant des problèmes + + Path must be relative. + Le chemin doit être relatif. + + + Invalid path elements (. or ..). + Éléments de chemin invalides (. ou ..). + Marks issues on the scroll bar. Affiche les problèmes dans la barre de défilement. @@ -14079,6 +15194,10 @@ Souhaitez-vous ouvrir « %1 Â» avec l'application par défaut User name Nom d'utilisateur + + Project name must be non-empty. + Le nom du projet ne peut pas être vide. + Add... Ajouter… @@ -14091,10 +15210,18 @@ Souhaitez-vous ouvrir « %1 Â» avec l'application par défaut Remove Supprimer + + Dashboard Servers + Serveurs de tableaux de bord + Default dashboard server: Serveur de tableau de bord par défaut : + + Misc Options + Options diverses + unset non défini @@ -14155,10 +15282,6 @@ Souhaitez-vous ouvrir « %1 Â» avec l'application par défaut Move Down Déplacer vers le bas - - General - Général - Path Mapping Correspondance des emplacements @@ -14248,7 +15371,8 @@ a permet de trouver les problèmes contenant la lettre 'a' None - Aucune + No debug server provider + Aucun Not recognized @@ -14746,10 +15870,6 @@ a permet de trouver les problèmes contenant la lettre 'a' Target driver: Pilote cible : - - Starting %1... - Démarrage de %1… - Version Version @@ -16480,6 +17600,7 @@ Par exemple, « Revision : 15 Â» laissera la branche à la révis None + No CMake tool Aucun @@ -16788,8 +17909,8 @@ Assurez-vous que la variable CMAKE_BUILD_TYPE contient le champ « Build ty Impossible de renommer « %1 Â» en « %2 Â». - Failed to copy "%1" to "%2". - Échec de la copie de « %1 Â» vers « %2 Â». + Failed to copy "%1" to "%2": %3 + Échec lors de la copie de « %1 Â» vers « %2 Â» : %3 <File System> @@ -18419,11 +19540,11 @@ Oui :) Remote root path is empty - L'emplacement de la racine distante est vide + L'emplacement de la racine distante est vide Remote root path is not absolute - L'emplacement de la racine distante n'est pas absolu + L'emplacement de la racine distante n'est pas absolu Could not find dd on remote host: %1 @@ -18492,14 +19613,6 @@ Oui :) QtC::Coco - - Select a Squish Coco CoverageBrowser Executable - Sélectionner un exécutable Squish Coco CoverageBrowser - - - CoverageBrowser: - CoverageBrowser : - Coco instrumentation files (*.csmes) Fichiers d'instrumentation Coco (*.csmes) @@ -18509,8 +19622,218 @@ Oui :) Sélectionner un fichier d'instrumentation Squish Coco - CSMes: - CSMes : + CSMes file: + Fichier CSMes : + + + No valid CoverageScanner found. + Aucun scanneur de couverture valide n'a été trouvé. + + + Configure + Configurer + + + Coco Code Coverage: Reconfiguring... + Couverture de code Coco : reconfiguration… + + + Coco Code Coverage: No working Coco installation. + Couverture de code Coco : aucune installation Coco fonctionelle. + + + Coco Code Coverage: Enabled. + Couverture de code Coco : activée. + + + Disable Coverage + Désactiver la couverture + + + Coco Code Coverage: Disabled. + Couverture de code Coco : désactivée. + + + Enable Coverage + Activer la couverture + + + Save && Re-configure + Sauvegarder && Reconfigurer + + + Additional CMake options: + Options CMake supplémentaires : + + + Initial cache script: + Cache de script initial : + + + Overwrite file "%1". + Écrasement du fichier « %1 Â». + + + Write file "%1". + Écriture du fichier « %1 Â». + + + Coco Code Coverage + Couverture de code Coco + + + Documentation + Documentation + + + Revert + Rétablir + + + CoverageScanner options: + Options du scanneur de couverture : + + + Exclude File... + pour un bouton + Exclure le fichier… + + + Exclude Directory... + Exclure le dossier… + + + These settings are stored in + Ces paramètres sont stockés dans + + + Changed Build Settings + Paramètres de compilation modifiés + + + Code for the end of the file "%1" to override the built-in declarations. Only needed in special cases. + Code pour la fin du fichier « %1 Â» afin de remplacer les déclarations intégrées. Utile uniquement dans des cas spécifiques. + + + Enable code coverage for build configuration "%1" + Activation de la couverture de code pour la configuration de compilation « %1 Â» + + + Coco is not installed correctly: %1 + Coco n'est pas installé correctement : %1 + + + Build Configuration changed to "%1". + Configuration de compilation modifiée en « %1 Â». + + + Re-configuring stopped by user. + Reconfiguration stoppée par l'utilisateur. + + + Error when configuring with "%1". Check General Messages for more information. + Une erreur s'est produite lors de la configuration avec « %1 Â». Obtenez plus d'informations dans les messages généraux. + + + Stop Re-configuring + Stopper la reconfiguration + + + Re-configure + Reconfigurer + + + Override << + Écraser << + + + Override >> + Écraser >> + + + The Coco installation path is not set correctly. + Le chemin de l'installation de Coco n'est pas défini correctement. + + + Edit + Modifier + + + Stop re-configuring. + Reconfiguration arrêtée. + + + Re-configure. + Reconfiguration. + + + Reload file "%1". + Rechargement du fichier « %1 Â». + + + File to Exclude from Instrumentation + Fichier à exclure de l'instrumentalisation + + + Directory to Exclude from Instrumentation + Répertoire à exclure de l'instrumentalisation + + + Save + Enregistrer + + + Additional qmake arguments: + Arguments qmake supplémentaires : + + + Build environment: + Environnement de compilation : + + + Feature file: + D'après les sources, c'est le fichier cocoplugin.prf, mais je n'ai pas trouvé d'info dans la doc. + Fichier de fonctionnalité : + + + Error: Coco installation directory not set. (This can't happen.) + Erreur : le répertoire d'installation de Coco n'est pas défini. (Cela ne peut pas arriver.) + + + Coco Installation Directory + Répertoire d'installation de Coco + + + Error: Coco installation directory not found at "%1". + Erreur : le répertoire d'installation de Coco n'a pas été trouvé à l'emplacement « %1 Â». + + + Error: CoverageScanner at "%1" did not start. + Erreur : le scanneur de couverture à l'emplacement « %1 Â» n'a pas démarré. + + + Error: CoverageScanner at "%1" did not finish. + Erreur : le scanneur de couverture « %1 Â» n'a pas terminé. + + + Valid CoverageScanner found at "%1": + Scanneur de couverture valide trouvé à l'emplacement « %1 Â» : + + + Error: CoverageScanner at "%1" did not run correctly. + Erreur : le scanneur de couverture « %1 Â» ne s'est pas exécuté correctement. + + + Found Coco directory "%1". + Répertoire de Coco trouvé « %1 Â». + + + Checked Coco directory "%1". + Répertoire de Coco vérifié « %1 Â». + + + Coco Directory + Répertoire de Coco @@ -21346,26 +22669,6 @@ To do this, you type this shortcut and a space in the Locator entry field, and t Sample external tool text Texte utile - - Creates qm translation files that can be used by an application from the translator's ts files - Crée un fichier de traduction qm utilisable par l’application à partir des fichiers ts du traducteur - - - Release Translations (lrelease) - Publier les traductions (lrelease) - - - Linguist - Linguist - - - Synchronizes translator's ts files with the program code - Synchronise les fichiers ts de traduction avec le code source - - - Update Translations (lupdate) - Mettre à jour les traductions (lupdate) - Opens the current file in Notepad Notepad, c'est pas très cross-platform @@ -21528,6 +22831,18 @@ To do this, you type this shortcut and a space in the Locator entry field, and t External Tools Outils externes + + A directory under version control was detected that is supported by the %1 plugin. + Un répertoire sous contrôle de version géré par le greffon %1 a été détecté. + + + Enable %1 + Activer %1 + + + The directory "%1" seems to be under version control that can be handled by the disabled %2 plugin. + Le répertoire « %1 Â» semble être sous contrôle de version et peut être géré par le greffon désactivé %2. + %1 repository was detected but %1 is not configured. Le dépôt %1 a été détecté mais %1 n’est pas configuré. @@ -21722,6 +23037,7 @@ Voulez-vous les écraser ? None + No find flags Aucune @@ -22158,14 +23474,14 @@ Souhaitez-vous les importer maintenant ? The plugin %1 requires you to accept the following terms and conditions: Le greffon %1 nécessite que vous acceptiez les termes et conditions : - - Do you wish to accept? - Souhaitez-vous accepter ? - No themes found in installation. Aucun thème n’a été trouvé dans l’installation. + + Help + Aide + The current date (ISO). La date actuelle (ISO). @@ -22605,6 +23921,18 @@ Double-cliquez pour modifier l’élément. Plugin failed to resolve dependencies: La résolution des dépendances pour le greffon a échoué : + + Plugin is already installed. + Le greffon est déjà installé. + + + A plugin with ID "%1" is already installed. + Un greffon ayant l'identifiant « %1 Â» est déjà installé. + + + No plugin with ID "%1" is installed. + Aucun greffon ayant l'identifiant « %1 Â» n'est installé. + Check Archive Vérifier l’archive @@ -22625,10 +23953,6 @@ Double-cliquez pour modifier l’élément. Accept Terms and Conditions Accepter les termes et conditions - - I accept the terms and conditions. - J'accepte les termes et conditions. - Canceled. Annulé. @@ -22641,30 +23965,6 @@ Double-cliquez pour modifier l’élément. Archive is OK. L’archive est OK. - - Install Location - Emplacement de l’installation - - - Choose install location. - Sélectionner l’emplacement de l’installation. - - - User plugins - Greffons utilisateur - - - The plugin will be available to all compatible %1 installations, but only for the current user. - Le greffon sera disponible pour toutes les installations compatibles %1, mais seulement pour l’utilisateur actuel. - - - %1 installation - Installation %1 - - - The plugin will be available only to this %1 installation, but for all users that can access it. - Le greffon ne sera disponible que pour cette installation %1, mais pour tous les utilisateurs qui peuvent y accéder. - Summary Résumé @@ -22685,6 +23985,10 @@ Double-cliquez pour modifier l’élément. Failed to Write File Échec de l’écriture du fichier + + Failed to create directory "%1". + Échec de la création du répertoire « %1 Â». + Failed to write file "%1". Échec de l’écriture du fichier « %1 Â». @@ -22723,7 +24027,7 @@ Double-cliquez pour modifier l’élément. <br/>Built on %1 %2<br/> - <br/>Construit sur %1 %2<br/> + <br/>Compilé le %1 %2<br/> Haskell Editor @@ -22737,14 +24041,6 @@ Double-cliquez pour modifier l’élément. Nim Editor Éditeur Nim - - Binding Editor - Éditeur de binding - - - Qt Quick Designer - Qt Quick Designer - SCXML Editor Éditeur SCXML @@ -22980,10 +24276,6 @@ devraient être gérés par le même processus clangd, ajoutez-les ici.Clangd Clangd - - None - Aucune - Quick Fixes Corrections rapides @@ -23210,6 +24502,11 @@ devraient être gérés par le même processus clangd, ajoutez-les ici.Member Function Implementations Implémentation des fonctions membres + + None + No default implementation location + Aucun + Inline Inline @@ -23488,6 +24785,11 @@ Utilisez le glisser-déposer pour modifier l’ordre des paramètres.Enums Énumérations + + All + Symbol search scope + Tous + Declarations Déclarations @@ -23504,10 +24806,6 @@ Flags: %3 Types : %2 Indicateurs : %3 - - All - Tout - Projects Projets @@ -23520,56 +24818,18 @@ Indicateurs : %3 lines lignes - - See tool tip for more information - Voir l’info-bulle pour plus d’informations - - - Use <name> for the variable -Use <camel> for camel case -Use <snake> for snake case -Use <Name>, <Camel> and <Snake> for upper case -e.g. name = "m_test_foo_": -"set_<name> => "set_test_foo" -"set<Name> => "setTest_foo" -"set<Camel> => "setTestFoo" - Utiliser <nom> pour la variable -Utiliser <camel> pour le camel case -Utiliser <snake> for snake case -Utiliser <Nom>, <Camel> et <Snake> pour les majuscules -p.ex. nom = « m_test_toto_ Â» : -"set_<nom> => « set_test_toto Â» -"set<Nom> => « setTest_toto Â» -"set<Camel> => « setTestToto Â» - For example, [[nodiscard]] Par exemple, [[nodiscard]] - - For example, new<Name> - Par exemple, new<Nom> - Setters should be slots Les setters doivent être des slots - - Normally reset<Name> - Normalement reset<Nom> - - - Normally <name>Changed - Normalement <Nom>Changed - Generate signals with the new value as parameter Générer des signaux avec la nouvelle valeur comme paramètre - - For example, m_<name> - Par exemple, m_<nom> - Generate missing namespaces Générer les espaces de noms manquants @@ -23630,6 +24890,34 @@ p.ex. nom = « m_test_toto_ Â» : Default Défaut + + A JavaScript expression acting as the return value of a function with two parameters <b>name</b> and <b>memberName</b>, where<ul><li><b>name</b> is the "semantic name" as it would be used for a Qt property</li><li><b>memberName</b> is the name of the member variable.</li></ul> + Une expression JavaScript agissant comme valeur de retour d'une fonction avec deux paramètres <b>nom</b> et <b>nomMembre</b>, où <ul><li><b>nom</b> est le « nom sémantique Â» comme il le serait pour une propriété Qt</li><li><b>nomMembre</;> est le nom de la variable membre.</li></ul> + + + A JavaScript expression acting as the return value of a function with a parameter <b>name</b>, which is the "semantic name" as it would be used for a Qt property. + Une expression JavaScript agissant comme valeur de retour d'une fonction avec un paramètre <b>nom</b>, le « nom sémantique Â» comme il le serait pour une propriété Qt. + + + How to get from the member variable to the semantic name. +This is the reverse of the operation above. +Leave empty to apply heuristics. + Comment obtenir le nom sémantique à partir de la variable membre. +C'est l'opération inverse de celle ci-dessus. +Laissez vide pour utiliser les heuristiques. + + + Test + Test + + + Hide Test Results + Cacher les résultats des tests + + + The content of the "name" variable. + Le contenu de la variable « name Â». + Outside class: En dehors de la classe : @@ -23694,6 +24982,14 @@ p.ex. nom = « m_test_toto_ Â» : Member variable name: Nom de la variable membre : + + Name from member variable: + Nom pour la variable membre : + + + Test input: + Entrée de test : + Missing Namespace Handling Traitement des espaces de noms manquants @@ -25765,10 +27061,6 @@ Vous pouvez décider entre attendre plus longtemps ou mettre fin au débogage.Application exited normally. L’application s’est terminée normalement. - - The selected build of GDB supports Python scripting, but the used version %1.%2 is not sufficient for %3. Supported versions are Python 2.7 and 3.x. - La version sélectionnée de GDB prend en charge les scripts Python, mais la version utilisée %1.%2 n’est pas suffisante pour %3. Les versions prises en charge sont Python 2.7 et 3.x. - Failed to Shut Down Application Échec de la terminaison du programme @@ -25817,6 +27109,10 @@ Vous pouvez décider entre attendre plus longtemps ou mettre fin au débogage.Executable failed: %1 Échec de l’exécutable : %1 + + The selected build of GDB supports Python scripting, but the used version %1.%2 is not sufficient for %3. Python %4 or later is required. + Le binaire GDB sélectionné prend en charge les scripts Python, mais la version utilisée %1.%2 n'est pas suffisante pour %3. Python %4 ou supérieur est requis. + Step requested... Pas à pas demandé… @@ -26212,6 +27508,14 @@ reçoit un signal comme SIGSEGV pendant le débogage. Second chance exceptions Exceptions de deuxième chance + + Enable heap debugging + Active le débogage du tas + + + Allocate memory using the debug heap rather than the normal heap. The debug heap enables additional checks to help diagnose heap related bugs. However it comes at a performance cost when allocating memory in the debugged process. + Alloue de la mémoire en utilisant le tas de débogage à la place du tas classique. Le tas de débogage permet des vérifications supplémentaires pour trouver les bogues liés au tas. Toutefois, les performances d'allocation de mémoire dans le processus débogué seront impactées. + Show "std::" namespace in types Afficher l’espace de noms « std:: Â» dans les types @@ -26619,10 +27923,6 @@ par défaut de l’utilisateur au démarrage du débogueur. No valid expression Aucune expression valide - - %1 (Previous) - %1 (précédente) - Expression too complex Expression trop complexe @@ -26839,6 +28139,10 @@ par défaut de l’utilisateur au démarrage du débogueur. Separate Window Fenêtre séparée + + Attaching to %1... + Attachement à %1… + There is no CDB executable specified. Il n’y a pas d’exécutable CDB spécifié. @@ -27046,10 +28350,6 @@ Sélectionner GDB ou LLDB comme débogueur améliorerait l’expérience de déb Unpacking core file to %1 Dépaquetage du fichier core vers %1 - - Cannot debug: Local executable is not set. - Débogage impossible : l’exécutable local n’est pas défini. - No executable specified. Aucun exécutable n’est spécifié. @@ -27627,14 +28927,6 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si CMake Preset Préréglage CMake - - GDB Preset - Préréglage GDB - - - LLDB Preset - Préréglage LLDB - Python Preset Préréglage Python @@ -28019,50 +29311,10 @@ Voulez-vous réessayer ? Stop when %1() is called Arrêter lorsque %1() est appelé - - Start Remote Engine - Démarrer le moteur distant - - - &Host: - &Hôte : - - - &Username: - &Utilisateur : - - - &Password: - Mot de &passe : - - - &Engine path: - Chemin du mot&eur : - - - &Inferior path: - Chemin &inférieur : - Reset Réinitialiser - - Type Formats - Formats des types - - - Qt Types - Types Qt - - - Standard Types - Types standards - - - Misc Types - Types divers - Additional startup commands: Commandes supplémentaires de démarrage : @@ -28306,17 +29558,21 @@ Vous pouvez choisir un autre canal de communication ici, comme une ligne série &Récent : - Cannot debug + Cannot Debug Impossible de déboguer - Cannot debug application: Kit has no device - Impossible de déboguer l'application : le kit n'a pas de périphérique + Cannot debug application: Kit has no device. + Impossible de déboguer l'application : le kit n'a pas de périphérique. Attach to %1 Attacher à %1 + + Attach to QML Port + Attacher au port QML + <html><body><p>The remote CDB needs to load the matching %1 CDB extension (<code>%2</code> or <code>%3</code>, respectively).</p><p>Copy it onto the remote machine and set the environment variable <code>%4</code> to point to its folder.</p><p>Launch the remote CDB as <code>%5 &lt;executable&gt;</code> to use TCP/IP as communication protocol.</p><p>Enter the connection parameters as:</p><pre>%6</pre></body></html> <html><body><p>Le CDB distant doit charger l'extension CDB correspondante %1 (<code>%2</code> ou <code>%3</code>, respectivement).</p><p>Copiez les sur la machine distanteet définissez la variable d'environnement <code>%4</code> pour diriger vers son dossier.</p><p>Lancez le CDB distant comme <code>%5 &lt;exécutable&gt;</code> pour utiliser le protocole de communication TCP/IP.</p><p>Entrez les paramètres de connexions tels quel&nbsp;:</p><pre>%6</pre></body></html> @@ -28329,6 +29585,11 @@ Vous pouvez choisir un autre canal de communication ici, comme une ligne série No debugger set up. Aucun débogueur n’a été configuré. + + None + No debugger + Aucun + Debugger "%1" not found. Le débogueur « %1 Â» est introuvable. @@ -28471,10 +29732,6 @@ Vous pouvez choisir un autre canal de communication ici, comme une ligne série Yes Oui - - None - Aucune - Plain Simple @@ -28553,6 +29810,11 @@ Le pas à pas dans le module ou la définition de points d’arrêt par fichier Show Dependencies Montrer les dépendances + + None + Symbols Type (No debug information found) + Aucun + This module contains debug information. Stepping into the module or setting breakpoints by file and line is expected to work. @@ -29342,6 +30604,14 @@ L’accès au module ou la mise en place de points d’arrêt par fichier et par Label text for path configuration. %2 is "x-bit version". <html><body><p>Spécifier le chemin à <a href="%1">l’exécutable du débogueur en console de Windows</a> (%2) ici. + + Added a surrogate GDB DAP item for existing entry "%1". + Un élément de substitution GDB DAP a été ajouté à l'entrée existante « %1 Â». + + + Added a surrogate GDB DAP item for "%1". + Un élément de substitution GDB DAP a été ajouté à « %1 Â». + Clone Cloner @@ -29380,7 +30650,6 @@ L’accès au module ou la mise en place de points d’arrêt par fichier et par System %1 at %2 - %1: Debugger engine type (GDB, LLDB, CDB...), %2: Path %1 du système à %2 @@ -29477,26 +30746,6 @@ L’accès au module ou la mise en place de points d’arrêt par fichier et par Run %1 in %2 Mode? Lancer %1 en mode %2 ? - - Global - Général - - - Custom - Personnalisé - - - Restore Global - Restaurer les valeurs générales - - - Use Customized Settings - Utiliser des réglages personnalisés - - - Use Global Settings - Utiliser les paramètres généraux - Copy Copier @@ -29848,10 +31097,6 @@ Recompiler le projet pourrait aider. File "%1" not found in project. Fichier « %1 Â» introuvable dans le projet. - - No active target. - Aucune cible active. - No active build system. Aucun système de compilation. @@ -29925,6 +31170,145 @@ La recompilation du projet peut aider. Nom de fichier d’interface invalide : « %1 Â» + + QtC::DesignerCore + + Failed to create item of type %1. + Échec de création d'un élément de type %1. + + + Only alphanumeric characters and underscore allowed. +Ids must begin with a lowercase letter. + Seuls les caractères alphanumériques et les tirets du bas sont acceptés. +Les identifiants doivent commencer avec une lettre minuscule. + + + Ids have to be unique. + Les identifiants doivent être uniques. + + + Invalid Id: %1 +%2 + Identifiant invalide : %1 +%2 + + + Invalid meta info. + Métadonnées invalides. + + + Illegal state while parsing. + État illégal lors de l'analyse. + + + No property definition allowed. + Aucune définition de propriété permise. + + + Invalid type %1. + Type %1 invalide. + + + Unknown property for Type %1. + Propriété inconnue pour le type %1. + + + Unknown property for ItemLibraryEntry %1. + Propriété inconnue pour ItemLibraryEntry %1. + + + Unknown property for Property %1. + Propriété inconnue pour Property %1. + + + Unknown property for QmlSource %1. + Propriété inconnue pour QmlSource %1. + + + Unknown property for ExtraFile %1. + Propriété inconnue pour ExtraFile %1. + + + Invalid or duplicate library entry %1. + Entrée de bibliothèque %1 invalide ou dupliquée. + + + My 3D Components + Mes composants 3D + + + Error parsing + Erreur d'analyse + + + Internal error + Erreur interne + + + line %1 + ligne %1 + + + column %1 + colonne %1 + + + ID cannot start with an uppercase character (%1). + L'identifiant ne peut pas commencer avec un caractère majuscule (%1). + + + ID cannot start with a number (%1). + L'identifiant ne peut pas commencer avec un chiffre (%1). + + + ID cannot include whitespace (%1). + L'identifiant ne peut pas contenir d'espace (%1). + + + %1 is a reserved QML keyword. + %1 est un mot clé QML réservé. + + + %1 is a reserved Qml type. + %1 est un type Qml réservé. + + + %1 is a reserved property keyword. + %1 est un mot clé de propriété réservé. + + + ID includes invalid characters (%1). + L'identifiant contient des caractères invalides (%1). + + + Failed to create instance of file "%1": %2 + Impossible de créer une instance à partir du fichier « %1 Â» : %2 + + + Failed to create instance of file "%1". + Impossible de créer une instance à partir du fichier « %1 Â». + + + Empty document. + Document vide. + + + No import statements found. + Aucune mention d'importation n'a été trouvée. + + + Qt Quick 6 is not supported with a Qt 5 kit. + Qt Quick 6 n'est pas pris en charge avec un kit Qt 5. + + + The Design Mode requires a valid Qt kit. + Le mode Design nécessite un kit Qt valide. + + + No import for Qt Quick found. + Aucune importation de Qt Quick n'a été trouvée. + + QtC::DiffEditor @@ -30133,10 +31517,6 @@ La recompilation du projet peut aider. Failed starting Docker container. Exit code: %1, output: %2 Échec lors du démarrage du container Docker. Code de sortie : %1, sortie : %2 - - Failed to start container: %1 - Échec du démarrage du container : %1 - Docker Image "%1" (%2) Image Docker « %1 Â» (%2) @@ -30197,6 +31577,10 @@ La recompilation du projet peut aider. Failed creating Docker container. No container ID received. Échec lors de la création du container Docker. Aucun identifiant de container reçu. + + Failed to start container "%1". + Échec de démarrage du container « %1 Â». + Device is shut down Le périphérique a été fermé @@ -30382,6 +31766,162 @@ La recompilation du projet peut aider. Configuration + + QtC::EffectComposer + + Trigger Completion + Déclencher la complétion + + + Meta+Space + Meta+Espace + + + Ctrl+Space + Ctrl+Espace + + + Effect Code Editor + Éditeur de code d'effet + + + Main + Principal + + + New Property + Nouvelle propriété + + + Select Custom Effect Background Image + Sélectionner une image personnalisée d'effet d'arrière-plan + + + Image Files (%1) + Fichiers image (%1) + + + Common error: %1 + Erreur commune : %1 + + + QML parsing error: %1 + Erreur d'analyse QML : %1 + + + Shader error: %1 + Erreur de shader : %1 + + + Preprocessor error: %1 + Erreur du préprocesseur : %1 + + + Animation + Animation + + + Running + En cours d'exécution + + + Set this property to animate the effect. + Définir cette propriété pour un effet animé. + + + Time + Temps + + + This property allows explicit control of current animation time when Running property is false. + Cette propriété permet un contrôle explicite du temps de l'animation lorsque la propriété « En cours d'exécution Â» est à faux. + + + Frame + Trame + + + This property allows explicit control of current animation frame when Running property is false. + Cette propriété permet un contrôle explicite de la trame d'animation lorsque la propriété « En cours d'exécution Â» est à faux. + + + General + Général + + + Extra Margin + Marge supplémentaire + + + This property specifies how much of extra space is reserved for the effect outside the parent geometry. + Cette propriété détermine l'espace supplémentaire réservé hors de la géométrie du parent à l'effet. + + + Uniform Name + Nom de variable uniforme + + + Property Name + Nom de propriété + + + Type + Type + + + Min + Min + + + Max + Max + + + Description + Description + + + Unsupported type + Type non pris en charge + + + Effect Composer [beta] + Compositeur d'effet [bêta] + + + Effect Composer + Title of effect composer widget + Compositeur d'effets + + + Shaders Code Editor + Éditeur de code de shaders + + + X + X + + + Y + Y + + + Z + Z + + + W + W + + + %1 Item + élément %1 + + + Set this to use an item in the scene as %1 instead of the above image. + Définir cette propriété pour utiliser un élément de la scène comme %1 au lieu de l'image ci-dessus. + + QtC::EmacsKeys @@ -30487,6 +32027,14 @@ La recompilation du projet peut aider. Restart Now Redémarrer maintenant + + Remove... + Supprimer… + + + Update... + Mise à jour… + Error Erreur @@ -30565,7 +32113,8 @@ La recompilation du projet peut aider. All - Toutes + Extensions filter + Tous Extension packs @@ -30643,6 +32192,10 @@ La recompilation du projet peut aider. New Nouveau + + Updated + Mis à jour + QtC::ExtensionSystem @@ -30691,6 +32244,16 @@ La recompilation du projet peut aider. Loadable without restart: Pouvant être chargé sans redémarrage + + None + No category + Aucune + + + All + Platforms: All + Toutes + %1 (current: "%2") %1 (actuel : « %2 Â») @@ -30948,6 +32511,14 @@ Reason: %3 Impossible de charger le greffon car une des dépendances n’a pas pu être chargé : %1(%2) Raison : %3 + + Plugin not found. + Greffon non trouvé. + + + It does not exist. + Il n'existe pas. + The plugin "%1" is specified twice for testing. Le greffon « %1 Â» est spécifié deux fois pour les tests. @@ -31081,12 +32652,12 @@ Raison : %3 Erreur interne : aucune instance de l’extension sur laquelle exécuter delayedInitialized - None - Aucune + Cannot remove system plugins. + Impossible de supprimer les greffons système. - All - Tout + Could not determine root folder. + Impossible de déterminer le répertoire racine. Load on Startup @@ -32364,6 +33935,11 @@ Raison : %3 Cannot describe revision "%1" in "%2": %3 Impossible de décrire la révision « %1 Â» dans « %2 Â» : %3 + + All + All branches + Toutes + Cannot resolve stash message "%1" in "%2". Look-up of a stash via its descriptive message failed. @@ -32383,6 +33959,7 @@ Raison : %3 Continue Rebase + Avoid translating "Rebase" Continuer le rebasage @@ -32405,6 +33982,7 @@ Soumettre maintenant ? Continue Revert + Avoid translating "Revert" Continuer le rétablissement @@ -32576,11 +34154,6 @@ Souhaitez-vous créer la branche « %1 Â» sur le serveur distant et la Chunk successfully unstaged Le chunk a été retiré avec succès - - All - Semble être pour les branches - Toutes - Show log for all local branches. Afficher le journal de toutes les branches locales. @@ -32676,6 +34249,10 @@ Valider maintenant ? C&heckout %1 C&heckout %1 + + Create &Branch from %1... + Créer une &branche depuis %1… + &Interactive Rebase from %1... Rebasage &interactif à partir de %1… @@ -32850,6 +34427,56 @@ Valider maintenant ? Current &File &Fichier actuel + + Diff Current File + Avoid translating "Diff" + Réaliser un diff du fichier actuel + + + Diff of "%1" + Avoid translating "Diff" + Réaliser un diff de « %1 Â» + + + Log Current File + Avoid translating "Log" + Afficher le log du fichier actuel + + + Log of "%1" + Avoid translating "Log" + Afficher le log de « %1 Â» + + + Log Current Selection + Avoid translating "Log" + Log de la sélection actuelle + + + Log of "%1" Selection + Avoid translating "Log" + Log de la sélection « %1 Â» + + + Blame Current File + Avoid translating "Blame" + Blamer le fichier actuel + + + Blame for "%1" + Avoid translating "Blame" + Blamer « %1 Â» + + + Instant Blame Current Line + Avoid translating "Blame" + Blamer instantanément la ligne actuelle + + + Instant Blame for "%1" + Avoid translating "Blame" + Blamer instantanément « %1 Â» + Stage "%1" for Commit Ajouter « %1 Â» au staging pour commit @@ -32884,6 +34511,36 @@ Valider maintenant ? Undo Uncommitted Changes for "%1" Annuler les changements non committés pour « %1 Â» + + Diff Project Directory + Avoid translating "Diff" + Réaliser un diff du répertoire du projet + + + Diff Directory of Project "%1" + Avoid translating "Diff" + Réaliser un diff du répertoire du projet « %1 Â» + + + Log Project Directory + Avoid translating "Log" + Log du répertoire du projet + + + Log Directory of Project "%1" + Avoid translating "Log" + Log du répertoire du projet « %1 Â» + + + Clean Project Directory... + Avoid translating "Clean" + Clean du répertoire de projet… + + + Clean Directory of Project "%1"... + Avoid translating "Clean" + Clean du répertoire de projet « %1 Â»â€¦ + Alt+G,Alt+K Alt+G,Alt+K @@ -32926,13 +34583,9 @@ Valider maintenant ? Continue Cherry Pick + Avoid translating "Cherry Pick" Continuer l’importation sélective (« cherry pick Â») - - Abort Revert - Avoid translating "Revert" - Annuler le rétablissement - &Patch &Patch @@ -32949,6 +34602,56 @@ Valider maintenant ? Branches... Branches… + + Status (Include All Untracked) + Avoid translating "Status" + Status (inclure les fichiers non suivis) + + + Amend Last Commit... + Avoid translating "Commit" + Amender le dernier commit… + + + Fixup Previous Commit... + Avoid translating "Commit" + Correction du commit précédent… + + + Interactive Rebase... + Avoid translating "Rebase" + Rebase interactif… + + + Abort Merge + Avoid translating "Merge" + Annuler le merge + + + Abort Rebase + Avoid translating "Rebase" + Annuler le rebase + + + Abort Cherry Pick + Avoid translating "Cherry Pick" + Annuler le Cherry Pick + + + Abort Revert + Avoid translating "Revert" + Annuler le revert + + + Stash Unstaged Files + Avoid translating "Stash" + Stash les fichiers non mis en cache + + + Stash Pop + Avoid translating "Stash" + Dépiler le stash + The repository is clean. Le dépôt est propre. @@ -32981,50 +34684,10 @@ Valider maintenant ? Triggers a Git version control operation. Déclenche une opération du gestionnaire de versions Git. - - Diff Current File - Avoid translating "Diff" - Réaliser un diff du fichier actuel - - - Diff of "%1" - Avoid translating "Diff" - Réaliser un diff de « %1 Â» - - - Log Current File - Avoid translating "Log" - Réaliser un log du fichier actuel - - - Log of "%1" - Avoid translating "Log" - Réaliser un log de « %1 Â» - Meta+G,Meta+L Meta+G, Meta+L - - Blame Current File - Avoid translating "Blame" - Blamer le fichier actuel - - - Blame for "%1" - Avoid translating "Blame" - Blamer « %1 Â» - - - Instant Blame Current Line - Avoid translating "Blame" - Blamer instantanément la ligne actuelle - - - Instant Blame for "%1" - Avoid translating "Blame" - Blamer instantanément « %1 Â» - Meta+G,Meta+I Meta+G,Meta+I @@ -33053,49 +34716,15 @@ Valider maintenant ? &Local Repository Dépôt &local - - Amend Last Commit... - Avoid translating "Commit" - Amender le dernier commit… - - - Fixup Previous Commit... - Avoid translating "Commit" - Correction du commit précédent… - Recover Deleted Files Accéder aux fichiers supprimés - - Interactive Rebase... - Avoid translating "Rebase" - Rebasage interactif… - - - Abort Merge - Avoid translating "Merge" - Annuler la fusion - - - Abort Rebase - Avoid translating "Rebase" - Annuler le rebasage - Skip Rebase + Avoid translating "Rebase" Sauter le rebasage - - Abort Cherry Pick - Avoid translating "Cherry Pick" - Annuler l’importation sélective (« cherry pick Â») - - - Stash Pop - Avoid translating "Stash" - Accéder à la remise (« stash pop Â») - Archive... Archiver… @@ -33120,11 +34749,6 @@ Valider maintenant ? Apply from File... Appliquer depuis le fichier… - - Stash Unstaged Files - Avoid translating "Stash" - Mettre dans la remise (« stash Â») les fichiers non mis en cache - Saves the current state of your unstaged files and resets the repository to its staged state. Enregistre l’état actuel de vos fichiers non mis en cache et réinitialise le dépôt à son état mis en cache. @@ -33137,17 +34761,6 @@ Valider maintenant ? Meta+G,Meta+C Meta+G, Meta+C - - Log Current Selection - Avoid translating "Log" - Doit t-on suivre le conseil du développeur ? :D - Log de la sélection actuelle - - - Log of "%1" Selection - Avoid translating "Log" - Log de la sélection « %1 Â» - Meta+G,Meta+S Meta+G, Meta+S @@ -33160,36 +34773,6 @@ Valider maintenant ? Current &Project Directory Répertoire du &projet actuel - - Diff Project Directory - Avoid translating "Diff" - Diff du répertoire du projet - - - Diff Directory of Project "%1" - Avoid translating "Diff" - Diff du répertoire du projet « %1 Â» - - - Log Project Directory - Avoid translating "Log" - Log du répertoire du projet - - - Log Directory of Project "%1" - Avoid translating "Log" - Log du répertoire du projet « %1 Â» - - - Clean Project Directory... - Avoid translating "Clean" - Clean du répertoire de projet… - - - Clean Directory of Project "%1"... - Avoid translating "Clean" - Clean du répertoire de projet « %1 Â»â€¦ - &Subversion &Subversion @@ -33250,10 +34833,6 @@ Valider maintenant ? Interactive Rebase Rebasage interactif - - Unsupported version of Git found. Git %1 or later required. - Une version non prise en charge de Git a été trouvée. Git %1 ou plus récent est requis. - Amend %1 Amender %1 @@ -35820,8 +37399,8 @@ Souhaitez-vous les écraser ? %1 n'est pas connecté. - Debugging and profiling is currently not supported for devices with iOS 17 and later. - Le débogage et le profilage n'est actuellement pas pris en charge avec les périphériques iOS 17 et supérieur. + Debugging on devices with iOS 17 and later requires Xcode 16 or later. + Le débogage sur les périphériques iOS 17 et supérieur nécessite Xcode 16 ou supérieur. Update @@ -35855,6 +37434,26 @@ Souhaitez-vous les écraser ? Running "%1" on %2... Exécution de « %1 Â» sur %2… + + Running failed. Failed to create the temporary output file. + Échec de l'exécution. Impossible de créer le fichier de sortie temporaire. + + + Failed to retrieve process ID. + Échec de la récupération de l'identifiant du processus. + + + Failed to get a local debugger port. + Échec lors de l'obtention d'un port local de débogage. + + + Listening for debugger on local port %1. + Attente d'un débogueur sur le port local %1. + + + Listening for QML debugger on local port %1 (port %2 on the device). + Attente d'un débogueur QML sur le port local %1 (port %2 sur le périphérique). + Could not get necessary ports for the debugger connection. Impossible de récupérer les ports nécessaires à la connexion de débogage. @@ -35884,6 +37483,14 @@ Souhaitez-vous les écraser ? Could not get necessary ports for the profiler connection. Impossible de récupérer les ports nécessaires à la connexion du profileur. + + Internal error. + Erreur interne. + + + Only C++ debugging is supported for devices with iOS 17 and later. + Seul le débogage C++ est pris en charge sur les périphériques avec iOS 17 ou supérieur. + Application not running. L'application ne s'exécute pas. @@ -35904,10 +37511,6 @@ Souhaitez-vous les écraser ? Device type: Type de périphérique : - - None - Aucun - iOS Settings Paramètres iOS @@ -35932,6 +37535,11 @@ Souhaitez-vous les écraser ? Default Défaut + + None + No signing identity + Aucune + Development team is not selected. L'équipe de développement n'est pas sélectionnée. @@ -36174,6 +37782,11 @@ Date d'expiration : %3 language client state arrêt + + failed to shutdown + language client state + échec de l'arrêt + Language Server "%1" Initialization Error Erreur d'initialisation du serveur de langage « %1 Â» @@ -36367,6 +37980,22 @@ Exemple : *.cpp%1*.h JSON Error Erreur JSON + + Project Specific Language Servers + Serveurs de langage spécifique au projet + + + Use Global Settings + Utiliser les paramètres généraux + + + Enabled + Activé + + + Disabled + Désactivé + Workspace Configuration Configuration de l'espace de travail @@ -36474,6 +38103,10 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Collapse All Tout réduire + + <Select Symbol> + <Sélectionner un symbole> + Capabilities: Capacités : @@ -36689,10 +38322,18 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Failed to run script %1: %2 Impossible d'exécuter le script %1 : %2 + + Non-string key encountered in Lua table at path "%1". + Une clé qui n'est pas une chaîne de caractères a été trouvée dans le tableau Lua au chemin « %1 Â». + No hook with the name "%1" found. Aucun crochet avec le nom « %1 Â» n'a été trouvé. + + Unsupported value type "%1" at path "%2". + Type de valeur « %1 » non pris en charge au chemin « %2 Â». + Script did not return a table. Le script n'a pas retourné de tableau. @@ -36866,21 +38507,6 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Exécute une macro d’édition de texte qui a été enregistrée avec Outils > Macros d’édition de texte > Enregistrer une macro. - - QtC::Marketplace - - Marketplace - Marketplace - - - Search in Marketplace... - Rechercher dans le Marketplace… - - - <p>Could not fetch data from Qt Marketplace.</p><p>Try with your browser instead: <a href='https://marketplace.qt.io'>https://marketplace.qt.io</a></p><br/><p><small><i>Error: %1</i></small></p> - <p>Impossible d’accéder aux données depuis Qt Marketplace.</p><p>Essayer plutôt avec votre navigateur : <a href='https://marketplace.qt.io'>https://marketplace.qt.io</a></p><br/><p><small><i>Erreur : %1</i></small></p> - - QtC::McuSupport @@ -36928,12 +38554,12 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Le chemin %1 existe, mais ne contient pas %2. - Path %1 does not exist. Add the path in Edit > Preferences > Devices > MCU. - Le chemin %1 n'existe pas. Ajoutez le chemin dans Éditer > Préférences > Périphériques > MCU. + Path %1 does not exist. Add the path in Edit > Preferences > SDKs > MCU. + Le chemin %1 n'existe pas. Ajoutez le chemin dans Éditer > Préférences > SDKs > MCU. - Missing %1. Add the path in Edit > Preferences > Devices > MCU. - %1 manquant. Ajoutez le chemin dans Edit > Préférences > Périphériques > MCI. + Missing %1. Add the path in Edit > Preferences > SDKs > MCU. + %1 manquant. Ajoutez le chemin dans Edit > Préférences > SDKs > MCI. No CMake tool was detected. Add a CMake tool in Edit > Preferences > Kits > CMake. @@ -36984,8 +38610,8 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Le chemin %1 existe, mais la version %2 n'a pas pu être détectée. - Download from "%1" - Télécharger depuis « %1 Â» + Download from "%1". + Téléchargement depuis « %1 Â». Board SDK for MIMXRT1050-EVK @@ -37197,8 +38823,8 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Aucun outil CMake détecté. Ajoutez un outil CMake dans les <a href="cmake">options CMake</a> et cliquez sur Appliquer. - Cannot apply changes in Devices > MCU. - Impossible d'appliquer les changements dans Périphériques > MCU. + Cannot apply changes in SDKs > MCU. + Impossible d'appliquer les changements dans SDKs > MCU. Qt for MCUs Kit Creation @@ -37255,8 +38881,8 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Qt pour MCUs : %1 - Create Kits for Qt for MCUs? To do it later, select Edit > Preferences > Devices > MCU. - Créer des kits Qt pour MCUs ? Pour faire cela plus tard, sélectionnez Éditer > Préférences > Périphériques > MCU. + Create Kits for Qt for MCUs? To do it later, select Edit > Preferences > SDKs > MCU. + Créer les kits Qt pour les MCUs ? Vous pouvez le faire plus tard dans Édition > Préférences > SDKs > MCU. Create Kits for Qt for MCUs @@ -37733,6 +39359,34 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Meson build: Parsing failed Compilation Meson : échec de l’analyse + + Source Files + Fichiers source + + + Header Files + Fichiers d'en-tête + + + Python Files + Fichiers Python + + + Qt Designer Files + Fichiers Qt Designer + + + Qt Resource Files + Fichiers de ressource Qt + + + QML Files + Fichiers QML + + + Other Files + Autres fichiers + Running %1 in %2. Exécute %1 dans %2. @@ -37753,10 +39407,6 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio No Meson tool set. Aucun outil Meson n’est défini. - - No Ninja tool set. - Aucun outil Ninja n’est défini. - No compilers set in kit. Pas d’ensemble de compilation dans le kit. @@ -37794,22 +39444,6 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Meson Build Compilation Meson - - Ninja Tool - Outils Ninja - - - The Ninja tool to use when building a project with Meson.<br>This setting is ignored when using other build systems. - Les outils Ninja à utiliser lors de la compilation d’un projet avec Meson.<br>Ce paramètre est ignoré lors de l’utilisation d’autres systèmes de compilation. - - - Cannot validate this Ninja executable. - Impossible de valider l’exécutable Ninja. - - - Ninja - Ninja - Autorun Meson Exécution automatique de Meson @@ -37819,12 +39453,12 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Exécuter automatiquement Meson lorsque c’est nécessaire. - Ninja verbose mode - Mode verbeux de Ninja + Meson verbose mode + Mode verbeux de Meson - Enables verbose mode by default when invoking Ninja. - Active le mode verbeux par défaut lors de l’invocation de Ninja. + Enables verbose mode by default when invoking Meson. + Active le mode verbeux par défaut lors de l'invocation de Meson. General @@ -37846,10 +39480,6 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Location Emplacement - - New Meson or Ninja tool - Nouveaux outils Meson ou Ninja - Tools Outils @@ -37898,6 +39528,10 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Cannot get tool version. Impossible d’obtenir la version de l’outil. + + New Meson + Nouveau Meson + QtC::ModelEditor @@ -38228,7 +39862,8 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio None - Aucune + No default arguments + Aucun Target: @@ -38490,14 +40125,6 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio [unknown] [inconnu] - - Perf Process Failed to Start - Le processus perf n’a pas pu démarrer - - - Make sure that you are running a recent Linux kernel and that the "perf" utility is available. - Assurez-vous que vous utilisez un noyau Linux récent et que l’utilitaire « perf Â» est disponible. - Failed to transfer Perf data to perfparser. Échec du transfert des données Perf à perfparser. @@ -38865,8 +40492,8 @@ Vous pouvez trouver des explications supplémentaires dans la vue « Sortie Élever les privilèges en utilisant : - Error: No device available for active target. - Erreur : aucun périphérique n’est disponible pour la cible active. + Error: No device available for active kit. + Erreur : aucun périphérique n'est disponible pour le kit actif. Error: Failed to load trace point script %1: %2. @@ -39951,6 +41578,18 @@ Title of a the cloned RunConfiguration window, text of the window Run Settings Paramètres d’exécution + + Global + Global + + + Use Customized Settings + Utiliser des paramètres personnalisés + + + Use Global Settings + Utiliser les paramètres généraux + Variables in the run environment. Variables de l’environnement d’exécution. @@ -40197,6 +41836,10 @@ Title of a the cloned RunConfiguration window, text of the window Cancel Build Annuler la compilation + + SDKs + SDKs + Open Workspace... Ouvrir l'espace de travail… @@ -40870,6 +42513,16 @@ Veuillez réessayer. Use jom instead of nmake Utiliser jom à la place de nmake + + None + Stop applications before building: None + Aucune + + + All + Stop all projects + Tous + Projects Directory Répertoire du projet @@ -40940,10 +42593,6 @@ Veuillez réessayer. Build Only the Application to Be Run Compiler uniquement l’application à exécuter - - All - Toutes - Same Project Le même projet @@ -41237,10 +42886,6 @@ Display name of the clean build step list. Used as part of the labels in the pro Non-Qt Project Projet non Qt - - Qt Creator Plugin - Greffon Qt Creator - Code Snippet Extrait de code @@ -41493,6 +43138,10 @@ Display name of the clean build step list. Used as part of the labels in the pro Creates a CMake-based test project where you can enter a code snippet to compile and check it. Créer un projet de test basé sur CMake dans lequel vous pouvez insérer un extrait de code à compiler et le vérifier. + + Qt Creator C++ Plugin + Greffon Qt Creator C++ + You must tell Qt Creator which test framework is used inside the project. @@ -41521,6 +43170,10 @@ Vous ne devez pas mélanger plusieurs cadriciels de tests dans un même projet.< Markdown File Fichier Markdown + + CMake for Qt 6.5 and Later + CMake pour Qt 6.5 et supérieur + Creates a project containing a single main.cpp file with a stub implementation and no graphical UI. @@ -41541,6 +43194,14 @@ Présélectionne un Qt optimisé pour le bureau pour compiler l'application Creates a Qt for Python application that includes a Qt Widgets Designer-based widget (ui file). Requires .ui to Python conversion. Génère une application Qt pour Python qui inclût un widget basé sur Qt Widgets Designer (fichier ui). Nécessite une conversion de .ui vers Python. + + Create a project that you can open in Qt Design Studio + Crée un projet que vous pouvez ouvrir dans Qt Design Studio + + + Creates a project with a structure that is compatible both with Qt Design Studio and with Qt Creator. It contains a .ui.qml form that you can visually edit in Qt Design Studio. + Crée un projet avec une structure qui est compatible avec Qt Design Studio et Qt Creator. Celui-ci contient un formulaire avec l'extension .ui.qml que vous pouvez modifier visuellement avec Qt Design Studio. + Creates a Qt Quick UI project for previewing and prototyping designs. @@ -42017,34 +43678,10 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio Generate initialization and cleanup code Génère le code d’initialisation et de nettoyage - - Creates a project that you can open in Qt Design Studio - Crée un projet que vous pouvez ouvrir dans Qt Design Studio - - - Creates a project with a structure that is compatible both with Qt Design Studio (via .qmlproject) and with Qt Creator (via CMakeLists.txt). It contains a .ui.qml form that you can visually edit in Qt Design Studio. - Génère un projet avec une structure compatible avec Qt Design Studio (via .qmlproject) et avec Qt Creator (via CMakeLists.txt). Le projet contient un formulaire .ui.qml qui peut être éditer visuellement dans Qt Design Studio. - - - Qt 6.4 - Qt 6.4 - Qt 6.5 Qt 6.5 - - The minimum version of Qt you want to build the application for - La version minimale de Qt avec laquelle vous pouvez compiler l'application - - - Creates a Qt Quick application that can have both QML and C++ code. You can build the application and deploy it to desktop, embedded, and mobile target platforms. - -You can select an option to create a project that you can open in Qt Design Studio, which has a visual editor for Qt Quick UIs. - Génère une application Qt Quick qui peut contenir du code QML et C++. Vous pouvez construire l'application et la déployer sur PC, machines embarqués et plateformes mobiles. - -Vous pouvez sélectionner une option pour créer un projet que vous pouvez ouvrir dans Qt Design Studio, outil possédant un éditeur visuel pour les interfaces Qt Quick. - Creates a Qt Quick application that contains an empty window. @@ -42181,6 +43818,14 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Python Python + + Qt 6.8 + Qt 6.8 + + + Creates a Qt Quick application that can have both QML and C++ code. You can build the application and deploy it to desktop, embedded, and mobile target platforms. + Crée une application Qt Quick qui peut contenir du code QML et du code C++. Vous pouvez compiler l'application et la déployer sur PC, les plateformes embarquées et les plateformes mobiles. + Creates a new unit test project using Boost. Unit tests allow you to verify that the code is fit for use and that there are no regressions. Crée un nouveau projet de tests unitaires utilisant Boost. Les tests unitaires vous permettent de vérifier si le code est prêt à être utilisé et s'il n'y a pas de régression. @@ -43103,6 +44748,11 @@ fails because Clang does not understand the target architecture. Manual Manuel + + None + Toolchain bundle display name + Aucun + <nobr><b>ABI:</b> %1 <nobr><b>ABI :</b> %1 @@ -43582,6 +45232,11 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Compilers produce code for different ABIs: %1 Les compilateurs produisent du code pour différentes ABI : %1 + + None + No compiler + Aucun + Path to the compiler executable Chemin d’accès à l’exécutable du compilateur @@ -43594,6 +45249,46 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Compiler executable for different languages Exécutable de compilateur pour différents langages + + Device: + Périphérique : + + + No run device set. + Aucun périphérique d'exécution n'est défini. + + + Build device is incompatible with this kit. + Le périphérique de compilation est incompatible avec ce kit. + + + Run device is incompatible with this kit. + Le périphérique d'exécution est incompatible avec ce kit. + + + Host address (%1) + Adresse de l'hôte (%1) + + + SSH port (%1) + Port SSH (%1) + + + User name (%1) + Nom d'utilisateur (%1) + + + Private key file (%1) + Fichier de clé privée (%1) + + + Device name (%1) + Nom du périphérique (%1) + + + Device root directory (%1) + Répertoire racine du périphérique (%1) + Run device type Type de périphérique sur lequel exécuter @@ -43603,32 +45298,12 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Périphérique sur lequel exécuter - Device is incompatible with this kit. - Le périphérique est incompatible avec ce kit. + Build device type + Type du périphérique de compilation - Host address - Adresse de l’hôte - - - SSH port - Port SSH - - - User name - Nom d’utilisateur - - - Private key file - Fichier de clé privée - - - Device name - Nom du périphérique - - - Device root directory - Répertoire racine du périphérique + The type of device to build on. + Le type du périphérique sur lequel compiler. Build device @@ -43642,30 +45317,6 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u No build device set. Aucun périphérique de compilation n’est défini. - - Build host address - Adresse de l’hôte de compilation - - - Build SSH port - Port SSH de compilation - - - Build user name - Nom d’utilisateur de compilation - - - Build private key file - Fichier de clé privée de compilation - - - Build device name - Nom du périphérique de compilation - - - Build device root directory - Répertoire de construction racine du périphérique - Change... Modifier… @@ -43675,8 +45326,24 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Aucune modification à appliquer. - Force UTF-8 MSVC compiler output - Forcer la sortie UTF-8 du compilateur MSVC + Edit Build Environment... + Modifier l'environnement de compilation… + + + Edit Run Environment... + Modifier l'environnement d'exécution… + + + Edit Build Environment + Modifier l'environnement de compilation + + + Edit Run Environment + Modifier l'environnement d'exécution + + + Force UTF-8 MSVC output + Forcer la sortie MSVC en UTF-8 Either switches MSVC to English or keeps the language and just forces UTF-8 output (may vary depending on the used MSVC compiler). @@ -43706,10 +45373,6 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Device type Type de périphérique - - No device set. - Pas de périphérique défini. - The root directory of the system image to use.<br>Leave empty when building for the desktop. Le répertoire racine du système image à utiliser.<br>Laisser vide lors d’une compilation sur le bureau. @@ -44164,6 +45827,10 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Import Build Importer une compilation + + %1 (imported) + %1 (importé) + %1 - temporary %1 – temporaire @@ -44188,6 +45855,10 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Type to filter kits by name... Taper pour filtrer les kits par nom… + + Hide unsuitable kits + Cacher les kits inappropriés + Select Kits for Your Project Sélectionner un kit pour votre projet @@ -44424,10 +46095,6 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u No file access for device "%1" Aucun accès aux fichiers pour le périphérique « %1 Â» - - Remote error output was: %1 - La sortie d’erreur distante était : %1 - Found %n free ports. @@ -45305,10 +46972,6 @@ Ces fichiers sont préservés. The name of the profile build configuration created by default for a qmake project. Profiler - - Profiling - Profilage - "data" must be a JSON object for "VcsConfiguration" pages. Do not translate "VcsConfiguration", because it is the id of a page. @@ -45399,6 +47062,194 @@ Ces fichiers sont préservés. Provide manually Fournir manuellement + + None + Add to project: None + Aucun + + + None + No compiler language + Aucun + + + None + No compiler category + Aucune + + + Could not open "%1" for writing: %2. + Impossible d'ouvrir « %1 Â» en écriture : %2. + + + Windows Configuration + Configuration Windows + + + Select the download path of NuGet and Windows App SDK. + Windows App SDK? + Sélectionnez le chemin de téléchargement de NuGet et du SDK d'application Windows. + + + Select Download Path + Sélection du chemin de téléchargement + + + Select the path of NuGet. + Sélectionnez le chemin menant à NuGet. + + + Select nuget.exe File + Sélection du fichier nuget.exe + + + Download NuGet + Télécharger NuGet + + + Automatically download NuGet. + +NuGet is needed for downloading Windows App SDK. + Téléchargement automatique de NuGet. + +NuGet est nécessaire pour télécharger le SDK d'application Windows. + + + Select the path of the Windows App SDK. + Sélectionnez le chemin du SDK d'application Windows. + + + Download Windows App SDK + Télécharger le SDK d'application Windows + + + Automatically download Windows App SDK with NuGet. + +If the automatic download fails, Qt Creator proposes to open the download URL +in the system browser for manual download. + Téléchargement automatique du SDK d'application Windows avec NuGet. + +Si le téléchargement automatique échoue, Qt Creator propose d'ouvrir l'URL de téléchargement +dans le navigateur Internet du système pour un téléchargement manuel. + + + Download path exists. + Le chemin de téléchargement existe. + + + NuGet path exists. + Le chemin de NuGet existe. + + + Windows App SDK path exists. + Le chemin du SDK d'application Windows existe. + + + Windows App SDK settings are OK. + Les paramètres du SDK d'application Windows sont corrects. + + + Windows App SDK settings have errors. + Les paramètres du SDK d'application Windows contiennent des erreurs. + + + Select Windows App SDK Path + Sélectionnez le chemin du SDK d'application Windows + + + Download Path + Chemin de téléchargement + + + Download location: + Chemin de téléchargement : + + + NuGet + NuGet + + + NuGet location: + Emplacement de NuGet : + + + Windows App SDK Settings + Paramètres du SDK d'application Windows + + + Windows App SDK location: + Emplacement du SDK d'application Windows : + + + NuGet download failed. + Téléchargement de NuGet échoué. + + + Open NuGet URL for manual download? + Ouvrir l'URL de NuGet pour un téléchargement manuel ? + + + Open Download URL + Ouvrir l'URL de téléchargement + + + Downloading NuGet... + Téléchargement de NuGet… + + + Downloading + Téléchargement + + + The SDK Tools download URL is empty. + L'URL de téléchargement des outils SDK est vide. + + + Encountered SSL errors, download is aborted. + Erreurs SSL rencontrées. Le téléchargement a été annulé. + + + Downloading NuGet from URL %1 has failed: %2. + Le téléchargement de NuGet depuis l'URL %1 a échoué %2. + + + Download from %1 was redirected. + Le téléchargement à partir de %1 a été redirigé. + + + The selected download path (%1) for NuGet already exists. +Select a different path. + Le chemin de téléchargement sélectionné (%1) pour NuGet existe déjà. +Choisissez un chemin différent. + + + Download path is not configured. + Le chemin de téléchargement n'est pas configuré. + + + Downloading Windows App SDK + Téléchargement du SDK d'application Windows + + + Windows App SDK is already configured. + Le SDK d'application Windows est déjà configuré. + + + Downloading Windows App SDK... + Téléchargement du SDK d'application Windows… + + + Windows App SDK download failed. + Échec lors du téléchargement du SDK d'application Windows. + + + Open Windows App SDK URL for manual download? + Ouverture de l'URL du SDK d'application Windows pour un téléchargement manuel ? + + + Windows App SDK + SDK d'application Windows + QtC::Python @@ -45611,6 +47462,11 @@ Ces fichiers sont préservés. Executable Exécutable + + None + No Python interpreter + Aucun + Executable is empty. L’exécutable est vide. @@ -45727,10 +47583,6 @@ Ces fichiers sont préservés. Issues parsed from Python runtime output. Problèmes provenant de la sortie de l'exécution de Python. - - None - Aucun - The interpreter used for Python based projects. L'interpréteur utilisé pour les projets reposant sur Python. @@ -45971,22 +47823,8 @@ Ces fichiers sont préservés. La racine de compilation du projet qbs - Debug - Shadow build directory suffix - Non-ASCII characters in directory suffix may cause build issues. - Debug - - - Release - Shadow build directory suffix - Non-ASCII characters in directory suffix may cause build issues. - Release - - - Profile - Shadow build directory suffix - Non-ASCII characters in directory suffix may cause build issues. - Profile + <No build device> + <Aucun périphérique de compilation> Change... @@ -46071,8 +47909,8 @@ Vous avez rarement besoin de ceci. Aucun exécutable qbs n’a été trouvé, veuillez définir le chemin d’accès dans les paramètres. - The qbs executable was not found at the specified path, or it is not executable ("%1"). - L’exécutable qbs n’a pas été trouvé au chemin spécifié, ou bien ce n’est pas exécutable (« %1 Â»). + The qbs executable was not found at the specified path, or it is not executable. + L'exécutable qbs n'a pas été trouvé au répertoire indiqué ou ce n'est pas un exécutable. The qbs process quit unexpectedly. @@ -47206,10 +49044,91 @@ Ajoute la bibliothèque et les chemins d’inclusion dans le fichier .pro. QtC::QmlDesigner + + "%1" failed (exit code %2). + « %1 Â» a échoué (code de sortie %2). + + + Failed to generate deployable package! + Échec de génération du paquet déployable ! + + + "%1" crashed. + « %1 Â» a planté. + + + Generate QRC Resource File... + Générer le fichier de ressources QRC… + + + Save Project as QRC File + Enregistrer le projet en tant que fichier QRC + + + QML Resource File (*.qrc) + Fichier de ressources QML (*.qrc) + + + QmlDesigner::GenerateResource + Success + C'est étrange, ici, le texte source est non traduisible, alors que le commentaire développeur semble plus à même d'être traduit. + Réussite + + + QmlDesigner::GenerateResource + Successfully generated QRC resource file + %1 + Génération du fichier de ressources QRC %1 réussie + + + Generate Deployable Package... + Générer un paquet déployable… + + + Save Project as Resource + Enregistrer le projet en tant que ressource + + + Generating deployable package. Please wait... + Génération du paquet déployable. Veuillez patienter… + Error Erreur + + Failed to generate deployable package! + +Please check the output pane for more information. + Échec de génération du paquet déployable ! + +Veuillez vérifier le panneau de sortie pour plus d'informations. + + + Success + Réussite + + + Successfully generated deployable package + Génération du paquet déployable réussie + + + Failed to open file to write QRC XML: %1 + Échec de l'ouverture du fichier QRC XML « %1 Â» pour l’écriture + + + Resource generator is already running. + Le générateur de ressources est déjà en cours d'exécution. + + + QmlDesigner::GenerateResource + Unable to generate resource file: %1 + Impossible de générer le fichier de ressources : %1 + + + A timeout occurred running "%1". + Un dépassement de délai s'est produit lors de l'exécution de « %1 Â». + Export Components Exporter les composants @@ -47258,6 +49177,824 @@ Ajoute la bibliothèque et les chemins d’inclusion dans le fichier .pro.Property Value Valeur de la propriété + + Error creating asset directory. %1 + Erreur lors de la création du dossier de ressources. %1 + + + Error saving asset. %1 + Erreur lors de l'enregistrement de la ressource. %1 + + + Failed to Delete File + Échec lors de la suppression du fichier + + + Could not delete "%1". + Impossible de supprimer « %1 Â». + + + Assets Library + Title of assets library widget + Bibliothèque de ressources + + + Failed to Delete Effect Resources + Échec de suppression des ressources d'effet + + + Folder move failure + Échec de déplacement du répertoire + + + Failed to move folder "%1". The folder might contain subfolders or one of its files is in use. + Échec lors du déplacement du répertoire « %1 Â». Le répertoire contient peut être des sous-dossiers ou un de ces fichiers est en cours d'utilisation. + + + Failed to Add Files + Échec lors de l'ajout de fichiers + + + Could not add %1 to project. + Impossible d'ajouter %1 au projet. + + + All Files (%1) + Tous les fichiers (%1) + + + Add Assets + Ajouter des ressources + + + Could not add %1 to project. Unsupported file format. + Impossible d'ajouter %1 au projet. Format de fichier non pris en charge. + + + Binding Editor + Éditeur de liaison + + + Signal List for %1 + Liste des signaux pour %1 + + + <Filter> + Library search input hint text + <Filtre> + + + File Name + Nom du fichier + + + Size + Taille + + + Add Resources + Ajouter des ressources + + + &Browse... + &Parcourir… + + + Target Directory + Répertoire cible + + + Unsupported bundle file + Fichier de bundle non pris en charge + + + The chosen bundle was created with an incompatible version of Qt Design Studio + Le bundle sélectionné a été créé avec une version de Qt Design Studio non prise en charge + + + Component Exists + Le composant existe déjà + + + A component with the same name '%1' already exists in the project, are you sure you want to overwrite it? + Un composant avec le nom « %1 Â» existe déjà dans le projet. Souhaitez-vous l'écraser ? + + + Import Component + Importation d'un composant + + + Qt Design Studio Bundle Files (*.%1) + Fichiers de bundle de Qt Design Studio (*.%1) + + + Export Material + Exportation d'un matériau + + + Export Component + Exportation d'un composant + + + Failed to Add Texture + Échec de l'ajout de la texture + + + Document Has Errors + Le document contient des erreurs + + + The document which contains the list model contains errors. So we cannot edit it. + Le document qui contient le modèle de liste contient des erreurs. Nous ne pouvons donc pas le modifier. + + + Document Cannot Be Written + Le document ne peut être écrit + + + An error occurred during a write attemp. + Une erreur s'est produite lors d’une tentative d'écriture. + + + Invalid Id + Identifiant invalide + + + Go to Implementation + Aller à l'implémentation + + + Invalid component. + Composant invalide. + + + Cannot find an implementation. + Impossible de trouver une implémentation. + + + Cannot Set Property %1 + Impossible de définir la propriété %1 + + + The property %1 is bound to an expression. + La propriété %1 est liée à une expression. + + + Overwrite Existing File? + Écraser le fichier existant ? + + + File already exists. Overwrite? +"%1" + Le fichier existe déjà. L'écraser ? +« %1 Â» + + + TemplateMerge + Merge With Template + Fusion avec le modèle + + + TemplateMerge + &Browse... + &Parcourir + + + TemplateMerge + Template: + Modèle : + + + TemplateMerge + Browse Template + Parcourir le modèle + + + Effect file %1 not found in the project. + Fichier d'effet %1 introuvable dans le projet. + + + Effect %1 is not complete. + L'effet %1 n'est pas complet. + + + Ensure that you have saved it in the Effect Composer. +Do you want to edit this effect? + Assurez-vous de l'avoir sauvegardé dans le compositeur d'effets. +Souhaitez-vous éditer cet effet ? + + + Exposed Custom Properties + Propriétés personnalisées exposées + + + Start Nanotrace + Démarrer Nanotrace + + + Shut Down Nanotrace + Arrêter Nanotrace + + + Bake Lights + Pré-calculer les lumières + + + Bake lights for the current 3D scene. + Pré-calculer les lumières pour la scène 3D actuelle. + + + Select Background Color + Sélectionner la couleur d'arrière-plan + + + Select a color for the background of the 3D view. + Sélectionner la couleur d'arrière-plan de la vue 3D. + + + Select Grid Color + Sélectionner la couleur de la grille + + + Select a color for the grid lines of the 3D view. + Sélectionner une couleur pour les lignes de la grille de la vue 3D. + + + Reset Colors + Réinitialiser les couleurs + + + Reset the background color and the color of the grid lines of the 3D view to the default values. + Réinitialise la couleur d'arrière-plan et la couleur des lignes de la grille de la vue 3D. + + + Use Scene Environment + Utiliser l'environnement de la scène + + + Sets the 3D view to use the Scene Environment color or skybox as background color. + Détermine si la vue 3D utilise la couleur de l'environnement de scène ou celle de la skybox comme couleur de fond. + + + Toggle Group/Single Selection Mode + Activer/désactiver le mode de sélection par groupe/seul + + + Activate Move Tool + Activer l'outil de déplacement + + + Activate Rotate Tool + Activer l'outil de rotation + + + Activate Scale Tool + Activer l'outil de redimensionnement + + + Fit Selected Object to View + Ajuster l'objet sélectionné à la vue + + + Align Cameras to View + Aligner les caméras à la vue + + + Align View to Camera + Aligner la vue à la caméra + + + Toggle Perspective/Orthographic Camera Mode + Activer/désactiver le mode perspective/orthographique de la caméra + + + Toggle Global/Local Orientation + Activer/désactiver l’orientation globale/locale + + + Toggle Edit Light On/Off + Activer/désactiver l'édition de la lumière + + + Show Grid + Afficher la grille + + + Toggle the visibility of the helper grid. + Activer/désactiver la visibilité de la grille d'aide. + + + Show Look-at + Afficher la direction du regard + + + Toggle the visibility of the edit camera look-at indicator. + Active/désactive l'indicateur pour modifier la direction de la caméra. + + + Show Selection Boxes + Afficher les boites de sélection + + + Toggle the visibility of selection boxes. + Activer/désactiver la visibilité des boites de sélection. + + + Show Icon Gizmos + Affiche les icônes + + + Toggle the visibility of icon gizmos, such as light and camera icons. + Active/désactive la visibilité des icônes, telle que l'icône de caméra ou l'icône des lumières. + + + Always Show Camera Frustums + Toujours afficher le champ de la caméra + + + Toggle between always showing the camera frustum visualization and only showing it when the camera is selected. + Active/désactive si la visualisation du champ de la caméra est toujours visible ou seulement lorsque la caméra est sélectionnée. + + + Always Show Particle Emitters And Attractors + Affiche toujours les émetteurs de particules et les attracteurs + + + Toggle between always showing the particle emitter and attractor visualizations and only showing them when the emitter or attractor is selected. + Active/désactive si les émetteurs et attracteurs de particules sont toujours visibles ou seulement lorsque sélectionné. + + + Toggle particle animation On/Off + Activer/désactiver l'animation des particules + + + Play Particles + Lancer les particules + + + Restart Particles + Relancer les particules + + + Reset View + Réinitialiser la vue + + + Visibility Toggles + Alterne la visibilité + + + Background Color Actions + Actions sur la couleur d'arrière-plan + + + Toggle snapping during node drag + Active/désactive l'aimantation lors du glissement du nÅ“ud + + + Open snap configuration dialog + Ouvrir la fenêtre de configuration de l'aimantation + + + Toggle Split View On/Off + Activer/désactiver la vue scindée + + + Open camera speed configuration dialog + Ouvrir la fenêtre de configuration de la vitesse de la caméra + + + Show Event List + Afficher la liste des évènements + + + Assign Events to Actions + Assigner des évènements aux actions + + + Set the color of the canvas. + Définit la couleur du canevas. + + + Annotation + Annotation + + + Edit Annotation + Modifier l'annotation + + + Remove Annotation + Supprimer l'annotation + + + By: + Par : + + + Edited: + Modifié : + + + Delete this annotation? + Supprimer cette annotation ? + + + Connected Events + Évènements connectés + + + Connected Signals + Signaux connectés + + + 2D + 2D + + + 2D view + Vue 2D + + + %1 is not supported as the root element by the 2D view. + %1 n'est pas pris en charge comme élément racine par la vue 2D. + + + No Snapping + Aucune aimantation + + + Snap with Anchors + Aimantation avec les ancres + + + Snap without Anchors + Aimantation sans ancres + + + Show Bounds + Afficher les bordures + + + Override Width + Écraser la largeur + + + Override width of root component. + Écraser la largeur du composant racine. + + + Override Height + Écraser la hauteur + + + Override height of root component. + Écraser la hauteur du composant racine. + + + Zoom In + Zoom avant + + + Zoom Out + Zoom arrière + + + Zoom screen to fit all content. + Zoom pour afficher tout le contenu. + + + Ctrl+Alt+0 + Ctrl+Alt+0 + + + Zoom screen to fit current selection. + Zoom pour contenir la sélection en cours. + + + Ctrl+Alt+i + Ctrl+Alt+i + + + Reload View + Recharger la vue + + + Export Current QML File as Image + Exporter le fichier QML en cours en tant qu'image + + + PNG (*.png);;JPG (*.jpg) + PNG (*.png);;JPG (*.jpg) + + + Asset import data file "%1" is invalid. + Le fichier des données de la ressource importée « %1 Â» n'est pas valide. + + + Unable to locate source scene "%1". + Impossible de localiser la scène source « %1 Â». + + + Opening asset import data file "%1" failed. + Échec d'ouverture du fichier des données de la ressource importée « %1 Â». + + + Unable to resolve asset import path. + Impossible de résoudre le chemin d'import des ressources. + + + Import Update Failed + Échec de la mise à jour de l'importation + + + Failed to update import. +Error: +%1 + Échec de la mise à jour de l'importation. +Erreur : +%1 + + + %1 already exists. + %1 existe déjà. + + + Unknown component: %1 + Composant inconnu : %1 + + + Warning + Avertissement + + + Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? + Redéfinir ici le parent du composant %1 entraînera la suppression du composant %2. Voulez-vous continuer ? + + + Edit Path + Modifier le chemin + + + Path Tool + Outil de chemin + + + Invalid QML source + Source QML invalide + + + Text Tool + Outil de texte + + + None + Aucun + + + Base State + État de base + + + Internal process (QML Puppet) crashed. + Le processus interne (QML Puppet) a planté. + + + Source item: %1 + Élément source : %1 + + + Failed to generate QSB file for: %1 + Échec de génération du fichier QSB pour : %1 + + + Puppet is starting... + Démarrage de Puppet… + + + You can now attach your debugger to the %1 QML Puppet with process id: %2. + Vous pouvez maintenant attacher votre débogueur à QML Puppet %1 avec le processus ayant pour identifiant : %2. + + + Qt Quick Designer + Qt Quick Designer + + + Cannot Open Design Mode + Impossible d'ouvrir le mode Design + + + The QML file is not currently opened in a QML Editor. + Le fichier QML n'est actuellement pas ouvert dans un éditeur QML. + + + Enjoying the %1? + Appréciez-vous %1 ? + + + Enable smooth rendering in the 2D view. + Activer le rendu lisse dans la vue 2D. + + + Default style + Style par défaut + + + Reset Style + Réinitialiser le style + + + QML Puppet + QML Puppet + + + Use fallback QML Puppet + Utiliser la solution QML Puppet de secours + + + If you select this radio button, Qt Design Studio always uses the QML Puppet located at the following path. + Si vous sélectionnez ce bouton radio, Qt Design Studio utilisera toujours QML Puppet se trouvant au chemin suivant. + + + Path to the QML Puppet executable. + Chemin de l'exécutable QML Puppet. + + + Resets the path to the built-in QML Puppet. + Réinitialiser le chemin à QML Puppet intégré. + + + Use QML Puppet that is built with the selected Qt + Utiliser QML Puppet intégré avec la version de Qt sélectionnée + + + Reset Path + Réinitialiser le chemin + + + Always save when leaving subcomponent in bread crumb + Toujours enregistrer lorsque l'on quitte un sous-composant du fil d'Ariane + + + Warn about unsupported features of .ui.qml files in code editor + Avertir à propos des fonctionnalités non prises en charge par l'éditeur de code des fichiers .ui.qml + + + Also warns in the code editor about QML features that are not properly supported by the Qt Quick Designer. + Avertir aussi dans l'éditeur de code à propos des fonctionnalités QML qui ne sont pas gérées correctement par Qt Quick Designer. + + + Warn about unsupported features in .ui.qml files + Avertir à propos des fonctionnalités non prises en charge dans les fichiers .ui.qml + + + Warns about QML features that are not properly supported by the Qt Design Studio. + Avertit à propos des fonctionnalités QML qui ne sont pas prises en charge par Qt Design Studio. + + + Warn about using .qml files instead of .ui.qml files + Avertir à propos de l'utilisation des fichiers .qml à la place des fichiers .ui.qml + + + Qt Quick Designer will propose to open .ui.qml files instead of opening a .qml file. + Qt Quick Designer proposera d'ouvrir le fichier .ui.qml à la place du fichier .qml. + + + qsTr() + qsTr() + + + qsTrId() + qsTrId() + + + qsTranslate() + qsTranslate() + + + Always open ui.qml files in Design mode + Toujours ouvrir les fichiers .ui.qml dans le mode Design + + + Ask for confirmation before deleting asset + Demander confirmation avant la suppression d'une ressource + + + Always auto-format ui.qml files in Design mode + Toujours formatter automatiquement les fichiers .ui.qml dans le mode Design + + + Enable Timeline editor + Activer l'éditeur de ligne temporelle + + + Enable DockWidget content minimum size + Activer la taille minimale de contenu du DockWidget + + + Debugging + Débogage + + + Show the debugging view + Afficher la vue de débogage + + + Show property editor warnings + Afficher les avertissements de l'éditeur de propriétés + + + Enable the debugging view + Activer la vue de débogage + + + Show warn exceptions + Afficher les exceptions + + + Path: + Chemin : + + + Top level build path: + Chemin de compilation de haut niveau : + + + Forward QML Puppet output: + Transfert de la sortie de QML Puppet : + + + Debug QML Puppet: + Débogage QML Puppet : + + + Snapping + Aimantation + + + Parent component padding: + Remplissage du composant parent : + + + Sibling component spacing: + Espacement des composants voisins : + + + Canvas + Canevas + + + Width: + Largeur : + + + Height: + Hauteur : + + + Smooth rendering: + Rendu lisse : + + + Root Component Init Size + Taille initiale du composant racine + + + Styling + Style + + + Controls style: + Style des Controls : + + + Controls 2 style: + Style des Controls 2 : + + + Subcomponents + Sous-composants + + + Warnings + Avertissements + + + Internationalization + Internationalisation + + + Features + Fonctionnalités + + + Restart Required + Redémarrage nécessaire + + + The made changes will take effect after a restart of the QML Puppet or %1. + Les changements effectués prendront effet après redémarrage de QML Puppet ou de %1. + QtC::QmlEditorWidgets @@ -48184,10 +50921,6 @@ Veuillez compiler l’application qmldump à partir de la page d’options à pr Use customized static analyzer Utiliser l'analyseur statique personnalisé - - Turn on - Activer - Allow versions below Qt %1 Permettre les versions Qt inférieures à %1 @@ -48196,6 +50929,10 @@ Veuillez compiler l’application qmldump à partir de la page d’options à pr Use advanced features (renaming, find usages, and so on) (experimental) Utiliser les fonctionnalités avancées (renommage, trouver les utilisations, etc.) (expérimental) + + Current kit does not have a valid Qt version, disabling QML Language Server. + Désactivation du serveur de langage QML : la version actuelle du kit ne contient pas une version valide de Qt. + Use from latest Qt version Utiliser la dernière version de Qt @@ -48236,10 +50973,6 @@ Veuillez compiler l’application qmldump à partir de la page d’options à pr Features Fonctionnalités - - Enable QML Language Server on this project. - Activer le serveur de langage QML pour ce projet. - Qt Quick Qt Quick @@ -48248,6 +50981,10 @@ Veuillez compiler l’application qmldump à partir de la page d’options à pr Open .ui.qml files with: Ouvrir les fichiers .ui.qml avec : + + Open Language Server preferences... + Ouvrir les préférences du serveur de langage… + Static Analyzer Analyseur statique @@ -48391,10 +51128,6 @@ Veuillez compiler l’application qmldump à partir de la page d’options à pr Code Model Error Erreur du modèle de code - - Qmlls (%1) - Qmlls (%1) - QtC::QmlJSTools @@ -49151,12 +51884,19 @@ notamment lorsque plusieurs moteurs QML démarrent et s'arrêtent au cours All - Tout + All frames + Toutes None + Compare Frame: None Aucune + + All + All View3D frames + Toutes + Quick3D Frame Trame Quick3D @@ -49169,6 +51909,11 @@ notamment lorsque plusieurs moteurs QML démarrent et s'arrêtent au cours Compare Frame Comparaison de trame + + All + Compare Frame: All + Toutes + Render Frame Trame de rendu @@ -49607,6 +52352,10 @@ Qt Design Studio nécessite un projet fondé sur .qmlproject pour ouvrir le fich Enable CMake Generator Activer le générateur CMake + + The project was created with a Qt Design Studio version earlier than Qt Design Studio 4.5. Due to limitations of the project structure in earlier Qt Design Studio versions, the resulting application might not display all the assets. Referring to assets between different QML modules does not work in the compiled application.<br><a href="https://doc.qt.io/qtdesignstudio/studio-designer-developer-workflow.html">See the documentation for details.</a> + Le projet a été créé avec une version de Qt Design Studio antérieure à Qt Design Studio 4.5. En raison d'une limitation dans la structure du projet dans les anciennes version de Qt Design Studio, l'application obtenue pourrait ne pas afficher toutes les ressources. Le référencement de ressources entre différents modules QML ne fonctionne pas dans l'application compilée.<br><a href="https://doc.qt.io/qtdesignstudio/studio-designer-developer-workflow.html">Consultez la documentation pour plus de détails.</a> + QtC::Qnx @@ -49917,10 +52666,6 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj System Système - - Qt version is not properly installed, please run make install - La version de Qt n’est pas correctement installée, veuillez exécuter make install - Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong? Impossible de déterminer le chemin vers les programmes de Qt, peut-être que le chemin vers qmake est faux ? @@ -49938,10 +52683,6 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj ? Version de Qt compilée avec -prefix non installée – pour le développement interne uniquement. - - No QML utility installed. - Aucun utilitaire QML installé. - Desktop Qt Version is meant for the desktop @@ -49996,6 +52737,10 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj The kit has a Qt version, but no C++ compiler. Le kit comporte une version de Qt, mais pas de compilateur C++. + + Qt version is not properly installed + La version de Qt n'est pas installée correctement + Name: Nom : @@ -50028,6 +52773,10 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj Version: Version : + + Cannot update Qt version information from %1: %2. + Impossible de mettre à jour les informations de version de Qt depuis %1 : %2. + The version string of the current Qt version. La chaîne de caractères de la version actuelle de Qt. @@ -50200,10 +52949,6 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj Highest Version Only Version la plus élevée uniquement - - All - Toutes - Display Name is not unique. Le nom affiché n’est pas unique. @@ -50224,6 +52969,16 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj Warning Avertissement + + All + All documentation + Toute + + + None + No documentation + Aucune + Select a qmake Executable Sélectionner un exécutable qmake @@ -50360,10 +53115,19 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj Cannot Copy Project Impossible de copier le projet + + Mkspec: + Mkspec : + The Qt library to use for all projects using this kit.<br>A Qt version is required for qmake-based projects and optional when using other build systems. La bibliothèque Qt à utiliser pour tous les projets utilisant ce kit.<br>Une version de Qt est nécessaire pour les projets basés sur qmake et est optionnelle pour les autres systèmes de compilation. + + None + No Qt version + Aucune + Name of Qt Version Nom de la version de Qt @@ -50380,10 +53144,6 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj Qt version Version de Qt - - None - Aucune - Qt Versions Versions de Qt @@ -50508,6 +53268,26 @@ Le déploiement vers ce répertoire entrainera la suppression des fichiers déj Translation file: Fichier de traduction : + + Could not determine target OS + Impossible de déterminer le système d'exploitation cible + + + Could not determine target architecture + Impossible de déterminer l'architecture cible + + + Could not determine OS sub-type + Impossible de déterminer la variante du système d'exploitation + + + Error reading "%1": %2 + Erreur lors de la lecture de « %1 Â» : %2 + + + Core.json not found for Qt at "%1" + Le fichier Core.json pour Qt n'a pas été trouvé à l'emplacement « %1 Â» + QtC::RemoteLinux @@ -51281,10 +54061,6 @@ Les ports local et distant sont déterminés automatiquement. Use rsync or sftp if available, but prefer rsync. Otherwise use default transfer. Utiliser rsync ou sftp si possible, mais préférer rsync. Sinon, utiliser le transfert par défaut. - - rsync is only supported for transfers between different devices. - rsync n'est supporté que pour le transfert de fichiers entre les périphériques. - SSH Key Configuration Configuration de la clé SSH @@ -51325,6 +54101,10 @@ Les ports local et distant sont déterminés automatiquement. Refusing to overwrite existing private key file "%1". L'écrasement du fichier de clé privée existant « %1 Â» a été refusé. + + Unknown error + Erreur inconnue + The ssh-keygen tool at "%1" failed: %2 L'outil ssh-keygen dans « %1 Â» a échoué : %2 @@ -53798,6 +56578,15 @@ Impossible d'ouvrir le fichier « %1 Â». Clear Selection Effacer la sélection + + Delete Word Left + Supprimer le mot à gauche + + + Delete Line Left + Ou: supprimer la gauche de la ligne + Supprimer la ligne à gauche + Clear Terminal Nettoyer le terminal @@ -53961,6 +56750,11 @@ Impossible d'ouvrir le fichier « %1 Â». Full Totale + + None + Case-sensitivity: None + Aucune + First Letter Première lettre @@ -55345,6 +58139,22 @@ Ne s’applique pas aux espaces blancs dans les commentaires et dans les chaîne Underline color of the contexts of warning diagnostics. Couleur de soulignement des contextes de diagnostic d’avertissement. + + Info + Info + + + Underline color of info diagnostics. + Couleur de soulignement des diagnostics d'information. + + + Info Context + Information contextuelle + + + Underline color of the contexts of info diagnostics. + Couleur de soulignement des diagnostics d'information contextuelle. + Output Argument Argument de sortie @@ -55815,6 +58625,34 @@ Ne s’applique pas aux espaces blancs dans les commentaires et dans les chaîne Anchor: Ancre : + + Spaces + Espaces + + + Tabs + Tabulations + + + Document Settings + Paramètres du document + + + Tab Settings + Paramètres des tabulations + + + Indent Size + Taille de l'indentation + + + Tab Size + Taille de tabulation + + + Global Settings... + Paramètres généraux… + Unix Line Endings (LF) Fin de ligne Unix (LF) @@ -56072,10 +58910,6 @@ Spécifie comment retour arrière se comporte avec l’indentation. </ul></body></html> - - None - Aucune - Follows Previous Indents Suit l’indentation qui précède @@ -56256,6 +59090,11 @@ Notez que les BOM UTF-8 sont peu courants et traités de manière incorrecte par Mouse and Keyboard Souris et clavier + + None + Backspace indentation: None + Aucune + Enable &mouse navigation Activer la navigation à la &souris @@ -56362,6 +59201,10 @@ francis : en effet, une erreur de ma part --> validé. Center &cursor on scroll Centrer le &curseur sur la barre de défilement + + Display tab settings + Paramètres d'affichage des tabulations + Shows tabs and spaces. Affiche les tabulations et les espaces. @@ -56463,10 +59306,6 @@ francis : en effet, une erreur de ma part --> validé. Tabs And Indentation Tabulation et indentation - - Tab policy: - Politique de tabulation : - Spaces Only Espaces seulement @@ -56475,18 +59314,10 @@ francis : en effet, une erreur de ma part --> validé. Tabs Only Tabulation seulement - - Mixed - Mixte - Ta&b size: Taille de &tabulation : - - &Indent size: - Taille de l’&indentation : - Align continuation lines: Aligner les lignes de continuation : @@ -56540,6 +59371,14 @@ Influence l’indentation des lignes de continuation. </li> </ul></body></html> + + Auto detect + Autodétection + + + %1 tries to detect the indentation settings based on the file contents. It will fallback to the settings below if the detection fails. + %1 essaie de détecter la configuration de l'indentation selon le contenu du fichier. Si ce n'est pas possible, les paramètres ci-dessous seront pris en compte. + Not At All Pas du tout @@ -56552,6 +59391,14 @@ Influence l’indentation des lignes de continuation. With Regular Indent Avec l’indentation régulière + + Default tab policy: + Politique de tabulation par défaut : + + + Default &indent size: + Taille de l'&indentation par défaut : + The text editor indentation setting is used for non-code files only. See the C++ and Qt Quick coding style settings to configure indentation for code files. Le paramètre d’indentation de l’éditeur de texte n’est utilisé que pour les fichiers autre que de code. Voir les paramètres du style de codage C++ et Qt Quick pour configurer l’indentation pour les fichiers de code. @@ -56711,11 +59558,35 @@ Influence l’indentation des lignes de continuation. J'ai vu hashage? Copier le hachage dans le presse-papiers + + Blame %1 + Blamer %1 + + + Blame Parent + Blamer le parent + + + File at %1 + Fichier dans %1 + + + Log for line %1 + Log de la ligne %1 + <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>Remarque :</b> les options « %1 Â» ou « %2 Â» sont actives dans les paramètres de blame instantané. + + Not Committed Yet + Changement non enregistré + + + Modified line in %1 + Ligne modifiée dans %1 + You Vous @@ -57701,13 +60572,17 @@ Les données de la trace sont perdues. watch is not implemented. L'observation n'est pas implémentée. + + Device is unavailable. + Le périphérique n'est pas disponible. + Failed to watch "%1". Impossible de surveiller « %1 Â». Failed to watch "%1", it does not exist. - Impossible de surveiller « %1 Â», l'emplacement n'existe pas. + Impossible de surveiller « %1 Â», l'emplacement n'existe pas. Refusing to remove the standard directory "%1". @@ -57740,10 +60615,6 @@ Les données de la trace sont perdues. Impossible d'écrire dans le fichier « %1 Â» (seuls %2 sur %n octets ont été écrits). - - Device is not connected - Le périphérique n'est pas connecté - Failed creating temporary file "%1" (too many tries). Échec lors de la création du fichier temporaire « %1 Â» (trop d'essais). @@ -57828,6 +60699,10 @@ Les données de la trace sont perdues. Could not copy file "%1" to "%2". Impossible de copier le fichier « %1 Â» vers « %2 Â». + + File %1 does not exist. + Le fichier %1 n'existe pas. + Failed to set up scratch buffer in "%1". Impossible d'initialiser un brouillon dans « %1 Â». @@ -58097,38 +60972,6 @@ dans « %2 Â». %n éléments - - Failed to start process launcher at "%1": %2 - Échec du démarrage du lanceur de processus à « %1 Â» : %2 - - - Process launcher closed unexpectedly: %1 - Le lanceur de processus s’est fermé de manière inattendue : %1 - - - Process launcher socket error. - Erreur de socket du lanceur de processus. - - - Internal socket error: %1 - Erreur de socket interne : %1 - - - Socket error: %1 - Erreur de socket : %1 - - - Internal protocol error: invalid packet size %1. - Erreur de protocole interne : taille de paquet invalide %1. - - - Internal protocol error: invalid packet type %1. - Erreur de protocole interne : type de paquet invalide %1. - - - Launcher socket closed unexpectedly. - La socket du lanceur s’est fermé de manière inattendue. - Infinite recursion error Erreur de récursivité infinie @@ -58383,6 +61226,10 @@ Les lignes débutant avec « ### Â» seront traitées comme commentaire No Lua interface set Aucune interface Lua n'est définie + + Remote error output was: %1 + La sortie d'erreur distante était : %1 + QtC::Valgrind @@ -58760,6 +61607,14 @@ Avec la simulation du cache, d’autres compteurs d’évènements sont activés Show costs relative to parent function's inclusive cost. Montrer les coûts relativement aux coût inclusif des fonctions parentes. + + Starting Function Profiler... + Démarrage du profileur de fonction… + + + Function Profiler running... + Profileur de fonction en cours d'exécution… + Select This Function in the Analyzer Output Sélectionner cette fonction dans la sortie de l’analyseur @@ -58970,6 +61825,14 @@ Lorsqu’un problème est détecté, l’application s’interrompt et peut êtr Start a Valgrind Memcheck with GDB analysis. Lancer une analyse Valgrind Memcheck avec GDB. + + Starting Memory Analyzer... + Démarrage de l'analyseur mémoire… + + + Memory Analyzer running... + Analyseur mémoire en cours d'exécution… + Open Memcheck XML Log File Ouvrir un fichier de log XML de Memcheck @@ -59054,7 +61917,7 @@ Lorsqu’un problème est détecté, l’application s’interrompt et peut êtr None - concerne les détails de fuite mémoire + Leak details: None Aucun @@ -59561,6 +62424,10 @@ Vérifiez les paramètres pour vous assurer que Valgrind est installé et dispon Insert Name... Insérez le nom… + + File Error + Erreur de fichier + &Close &Fermer @@ -59971,6 +62838,14 @@ Vérifiez les paramètres pour vous assurer que Valgrind est installé et dispon Submit message &check script: Script de vérifi&cation du message : + + Show VCS file status + Afficher le statut du logiciel de contrôle de version du fichier + + + Request file status updates from files and reflect them on the project tree. + Effectue une mise à jour du statut des fichiers et répercute ce changement dans la hiérarchie du projet. + Reset VCS Cache Réinitialiser le cache VCS @@ -61178,6 +64053,87 @@ définit dans la taille de pas. Définit le rayon utilisé pour arrondir les coins. + + ReflectionProbeSection + + Reflection Probe + Sonde de réflexions + + + Box Size + Taille de la boîte + + + Sets the reflection probe box size. + Définit la taille de la boîte pour la sonde de réflexions. + + + Box Offset + Décalage de la boîte + + + Sets the reflection probe box position relative to the probe position. + Définit la position de la boîte de la sonde de réflexions relatif à la sonde. + + + Parallax Correction + Correction de parralaxe + + + Reflection maps are considered to be at infinite distance by default. This is unsuitable for indoor area as it produces parallax issues. +Setting this property to true corrects the cubemap by taking the camera position and the box's dimension into account. + Les textures de réflexions indiquent une distance infinie par défaut. Ce n'est pas adéquat pour un espace intérieur car cela produit des problèmes de parallaxe. +En définissant cette propriété à vrai, la texture cubique sera corrigée en prenant en compte la position de la caméra et les dimensions de la boîte. + + + Debug View + Vue de débogage + + + Enables rendering a wireframe to visualize the reflection probe box. + Active le rendu en fil de fer pour visualiser la boîte de la sonde de réflexions. + + + Clear Color + Couleur de réinitialisation + + + Sets the color that will be used to clear the reflection map. + Définit la couleur utilisée pour réinitialiser la texture de réflexions. + + + Reflection Map Quality + Qualité de la texture de réflexions + + + Sets the quality of the reflection map. + Définit la qualité de la texture de réflexion. + + + Refresh Mode + Mode de rafraîchissement + + + Sets how often the reflection map will be updated. + Définit la fréquence à laquelle la texture de réflexions est mise à jour. + + + Time Slicing + Découpage du temps + + + Sets how often the faces of the reflection cube map are updated. + Définit la fréquence de mise à jour des faces de la texture cubique de réflexions. + + + Override Texture + Surcharge de la texture + + + Sets an override texture to use for the reflection map instead of rendering the scene. + Définit une texture à utiliser en remplacement de la texture de réflexions générée depuis la scène. + + RenameFolderDialog @@ -61205,6 +64161,29 @@ définit dans la taille de pas. Annuler + + Repeater3DSection + + Repeater + Répéteur + + + Model + Modèle + + + The model providing data for the repeater. This can simply specify the number of delegate instances to create or it can be bound to an actual model. + Le modèle fournissant les données au répéteur. Cela peut être juste le nombre d'instances déléguées à créer ou la propriété peut être liée à un modèle. + + + Delegate + Délégué + + + The delegate provides a template defining each object instantiated by the repeater. + Le délégué fournit un patron définissant chaque objet instancié par le répéteur. + + RepeaterSpecifics @@ -61229,28 +64208,38 @@ définit dans la taille de pas. - ResetEdit3DColorsAction + ResourceLoaderSection - Reset Colors - Réinitialiser les couleurs + Resource Loader + Chargeur de ressource - Reset the background color and the color of the grid lines of the 3D view to the default values. - Réinitialiser la couleur d’arrière-plan et la couleur des lignes de la grille de la vue 3D. + Geometries + Géométries - - - ResetView - Reset View - Réinitialiser la vue + A list of custom geometries to be loaded and cached. + Une liste de géométries personnalisées à charger et à mettre en cache. - - - RotateToolAction - Activate Rotate Tool - Activer l'outil de rotation + Mesh Sources + Modèle sources + + + A list of mesh assets to be loaded and cached. + Une liste de modèle à charger et à mettre en cache. + + + Currently only editable in QML. + Actuellement uniquement modifiable dans le QML. + + + Textures + Textures + + + A list of textures to be loaded and cached. + Une liste de textures à charger et à mettre en cache. @@ -61300,7 +64289,7 @@ définit dans la taille de pas. Layout direction - Direction du layout + Direction de l'agencement Sets the direction of the item flow in the <b>Row Layout</b>. @@ -61327,7 +64316,7 @@ définit dans la taille de pas. Layout direction - Direction du layout + Direction de l'agencement Sets in which direction items in the row are placed. @@ -61401,10 +64390,244 @@ définit dans la taille de pas. - ScaleToolAction + SceneEnvironmentSection - Activate Scale Tool - Activer l'outil de redimensionnement + Scene Environment + Environnement de la scène + + + Background Mode + Mode d'arrière-plan + + + Sets if and how the background of the scene should be cleared. + Définit si et comment l'arrière-plan de la scène doit être réinitialisé. + + + Clear Color + Couleur de réinitialisation + + + Sets which color will be used to clear the viewport when using SceneEnvironment.Color for the backgroundMode property. + Définit la couleur utilisée pour réinitialiser la vue lors de l'utilisation de SceneEnvironment.Color comme mode d'arrière-plan. + + + Skybox Cube Map + Boîte englobante du ciel ? + Texture cubique pour la skybox + + + Sets a cubemap to be used as a skybox when the background mode is SkyBoxCubeMap. + Définit une texture cubique à utiliser comme boîte englobante du ciel lors le mode d'arrière-plan est SkyBoxCubeMap. + + + Skybox Blur + Flou du ciel + + + Sets how much to blur the skybox when using SceneEnvironment.SkyBox for the backgroundMode property. + Définit la quantité de flou à appliquer au ciel lors de l'utilisation du mode d'arrière plan SceneEnvironment.SkyBox. + + + Effects + Effets + + + Post Processing effects applied to this scene. + Effet de post-traitement à appliquer à la scène. + + + Tonemap Mode + Je me suis inspiré de la traduction Blender (https://translate.blender.org/browse/blender-manual/blender-4-4/manual-4-4/fr/?q=tone&sort_by=source&checksum=) + Correspondance des tons + + + Sets how colors are tonemapped before rendering. + Définit comment les couleurs sont altérées avant le rendu. + + + Fog + Brouillard + + + Settings for Fog applied to the scene. + Paramètre du brouillard appliqué à la scène. + + + Antialiasing + Anticrénelage + + + Antialiasing Mode + Type d'anticrénelage + + + Sets the antialiasing mode applied to the scene. + Définit le type d'anticrénelage à appliquer à la scène. + + + Antialiasing Quality + Qualité de l'anticrénelage + + + Sets the level of antialiasing applied to the scene. + Définit le niveau d'anticrénelage appliqué à la scène. + + + Specular AA + Anticrénelage spéculaire + + + Enables specular antialiasing. + Active l'anticrénelage spéculaire. + + + Temporal AA + Anticrénelage temporel + + + Enables temporal antialiasing using camera jittering and frame blending. + Active l'anticrénelage temporel reposant sur les mouvements de la caméra et la fusion d'images. + + + Temporal AA Strength + Force de l'anticrénalage temporel + + + Sets the amount of temporal antialiasing applied. + Définit la quantité appliquée d'anticrénelage temporel. + + + Ambient Occlusion + Occlusion ambiante + + + Enabled + Activée + + + Enables ambient occlusion. + Active l'occlusion ambiante. + + + Strength + Force + + + Sets the amount of ambient occulusion applied. + Définit la quantité appliquée d'occlusion ambiante. + + + Distance + Distance + + + Sets roughly how far ambient occlusion shadows spread away from objects. + Définit approximativement la distance sur laquelle les ombres d'occlusion ambiante s'étale au loin des objets. + + + Softness + Douceur + + + Sets how smooth the edges of the ambient occlusion shading are. + Définit la douceur des bords des ombres de l'occlusion ambiante. + + + Sample Rate + Taux d'échantillonage + + + Sets ambient occlusion quality (more shades of gray) at the expense of performance. + Définit la qualité de l'occlusion ambiante (le nombre de teintes de gris) au dépend des performances. + + + Bias + Biais + + + Sets a cutoff distance preventing objects from exhibiting ambient occlusion at close distances. + Définit une distance limite empêchant les objets de former des ombres d'occluion ambiante à faible distance. + + + Dither + Éparpillement + + + Enables scattering the edges of the ambient occlusion shadow bands to improve smoothness. + Active la dispersion des bordures des bandes d'ombres d'occlusion ambiante afin d'améliorer la douceur. + + + Image Based Lighting + Éclairage basé sur une image + + + HDR Image + Image HDR + + + Sets an image to use to light the scene, either instead of, or in addition to standard lights. + Définit une image à utiliser pour éclairer la scène, à la place ou en plus des lumières standards. + + + Exposure + Exposition + + + Sets the amount of light emitted by the light probe. + Définit la quantité de lumière émise par la sonde de lumière. + + + Horizon + Horizon + + + Sets the light probe horizon. When set, adds darkness (black) to the bottom of the environment, forcing the lighting to come predominantly from the top of the image. + Définit l'horizon de la sonde de lumière. Lorsque défini, le bas de l'environnement est plus sombre (noir), forçant la lumière à venir majoritairement du haut de l'image. + + + Orientation + Orientation + + + Sets the orientation of the light probe. + Définit l'orientation de la sonde de lumière. + + + Advanced + Avancé + + + Enable Depth Test + Activer le test de profondeur + + + Enables depth testing. Disable to optimize render speed for layers with mostly transparent objects. + Active le test de profondeur. Sa désactivation améliore les temps de rendu pour les couches contenant majoritairement des objets transparents. + + + Enable Depth Prepass + Activer la pré-passe de profondeur + + + Enables draw depth buffer as a separate pass. Disable to optimize render speed for layers with low depth complexity. + Active le rendu du tampon de profondeur dans une passe dédiée. Désactivez cette passe pour optimiser le temps de rendu pour les couches ayant une faible complexité au niveau de la profondeur. + + + Debug Settings + Paramètres de débogage + + + Additional render settings for debugging scenes. + Paramètres de rendu supplémentaires pour le débogage de scène. + + + Light Mapper + Pré-calcul de l'éclairage + + + Sets the light mapper object for the scene. + Définit un objet de pré-calcul de l'éclairage pour la scène. @@ -61467,99 +64690,111 @@ Elle est utilisée pour calculer la taille totale implicite. - SelectBackgroundColorAction + SetUniformValueSection - Select Background Color - Sélectionner la couleur d’arrière-plan + Set Uniform Value + Définir la valeur uniforme - Select a color for the background of the 3D view. - Sélectionner la couleur d’arrière-plan de la vue 3D. + Target + Cible + + + Sets the name of the uniform to change value for a pass. + Définit le nom de la variable uniforme pour changer sa valeur dans une passe. + + + Value + Valeur + + + Sets the value of the uniform. + Définit la valeur de la variable uniforme. - SelectGridColorAction + ShaderSection - Select Grid Color - Sélectionner la couleur de la grille + Shader + Shader - Select a color for the grid lines of the 3D view. - Sélectionner une couleur pour les lignes de la grille de la vue 3D. + Source + Source + + + Sets the shader source code. + Définit le code source du shader. + + + Stage + Étape + + + Sets the shader stage. + Définit l'étape du shader. - SelectionModeToggleAction + ShadowSection - Toggle Group/Single Selection Mode - Activer/désactiver le mode de sélection par groupe/seul + Shadows + Ombres + + + Casts Shadow + Génère une ombre + + + Enables shadow casting for this light. + Active la génération d'une ombre pour cette lumière. + + + Amount + Quantité + + + Sets how dark the cast shadows should be. + Définit la profondeur de l'obscurité produite par les ombres. + + + Filter + Filtre + + + Sets how much blur is applied to the shadows. + Définit la quantité de flou appliquée aux ombres. + + + Quality + Qualité + + + Sets the quality of the shadow map created for shadow rendering. + Définit la qualité de la texture d'ombrage créée par le rendu des ombres. + + + Bias + Biais + + + Sets a slight offset to avoid self-shadowing artifacts. + Définit un léger décalage pour éviter les artefacts liés à sa propre ombre. + + + Far Distance + Distance de fin + + + Sets the maximum distance for the shadow map. + Définit la distance maximale pour la texture des ombres. - ShowCameraFrustumAction + SkinSection - Always Show Camera Frustums - Toujours afficher le frustrum de la caméra - - - Toggle between always showing the camera frustum visualization and only showing it when the camera is selected. - Active/désactive si la visualisation du frustrum de la caméra est toujours visible ou seulement lorsque la caméra est sélectionnée. - - - - ShowGridAction - - Show Grid - Afficher la grille - - - Toggle the visibility of the helper grid. - Activer/désactiver la visibilité de la grille d’aide. - - - - ShowIconGizmoAction - - Show Icon Gizmos - Affiche les icônes - - - Toggle the visibility of icon gizmos, such as light and camera icons. - Active/désactive la visibilité des icônes, telle que l'icône de caméra ou l'icône des lumières. - - - - ShowLookAtAction - - Show Look-at - où la caméra pointe/direction - Afficher la direction du regard - - - Toggle the visibility of the edit camera look-at indicator. - Active/désactive l'indicateur pour modifier la direction de la caméra. - - - - ShowParticleEmitterAction - - Always Show Particle Emitters And Attractors - Affiche toujours les émetteurs de particules et les attracteurs - - - Toggle between always showing the particle emitter and attractor visualizations and only showing them when the emitter or attractor is selected. - Active/désactive si les émetteurs et attracteurs de particules sont toujours visibles ou seulement lorsque sélectionné. - - - - ShowSelectionBoxAction - - Show Selection Boxes - Afficher les boites de sélection - - - Toggle the visibility of selection boxes. - Activer/désactiver la visibilité des boites de sélection. + Skin + Peau @@ -61685,13 +64920,6 @@ Elle est utilisée pour calculer la taille totale implicite. Détermine si la valeur actuelle doit être mise à jour lorsque l'utilisateur déplace la poignée du slider, ou si la mise à jour s'effectue uniquement au relachement. - - SnapConfigAction - - Open snap configuration dialog - Ouvrir la fenêtre de configuration de l'aimantation - - SnapConfigurationDialog @@ -61759,13 +64987,6 @@ Elle est utilisée pour calculer la taille totale implicite. Tout réinitialiser - - SnapToggleAction - - Toggle snapping during node drag - Active/désactive l'aimantation lors du glissement du nÅ“ud - - SocialButton @@ -61891,6 +65112,349 @@ A near field gain of 1 will raise the volume of the sound signal by approx 20 dB Un gain de 1 augmentera le volume du signal sonore d'environ 20 dB lorsque l'auditeur est très proche. + + SpecularGlossyMaterialSection + + Specular Glossy Material + Matériau spéculaire brillant + + + Alpha Mode + Mode alpha + + + Sets the mode for how the alpha channel of material color is used. + Définit le mode déterminant comment le canal alpha de la couleur du matériau doit être utilisé. + + + Alpha Cutoff + Valeur alpha de butée + + + Sets the cutoff value when using the Mask alphaMode. + Définit la valeur de butée lors de l'utilisation du mode « Mask Â». + + + Blend Mode + Mode de fondu + + + Sets how the colors of the model rendered blend with those behind it. + Définit comment les couleurs du modèle sont fondues avec celles derrière lui. + + + Lighting + Éclairage + + + Sets which lighting method is used when generating this material. + Définit la méthode de calcul des lumières lors de la génération de ce matériau. + + + Albedo + Albédo + + + Color + Couleur + + + Sets the albedo color of the material. + Définit la couleur albédo de ce matériau. + + + Map + Texture + + + Sets a texture used to set the albedo color of the material. + Définit une texture déterminant la couleur albédo de ce matériau. + + + Specular + Spéculaire + + + Sets the specular color of the material. + Définit la couleur spéculaire du matériau. + + + Sets a texture used to set the specular color of the material. + Définit la texture utilisée pour définir la couleur spéculaire du matériau. + + + Glossiness + Brillance + + + Amount + Quantité + + + Sets the size of the specular highlight generated from lights, and the clarity of reflections in general. + Définit la taille de l'effet spéculaire généré par les lumières et, de manière générale, la clarté des reflets. + + + Sets a texture to control the glossiness of the material. + Définit une texture pour contrôler la brillance du matériau. + + + Channel + Canal + + + Sets the texture channel used to read the glossiness value from glossinessMap. + Définit le canal de la texture de brillance à partir duquel lire la valeur. + + + Normal + Normales + + + Sets an RGB image used to simulate fine geometry displacement across the surface of the material. + Définit une image RVB utilisée pour simuler un fin relief à la surface de la géométrie du matériau. + + + Strength + Force + + + Sets the amount of simulated displacement for the normalMap. + Définit la quantité de déplacement pour la texture de normales. + + + Occlusion + Occlusion + + + Sets the factor used to modify the values from the occlusionMap texture. + Définit le coefficient utilisé pour modifier les valeurs de la texture d'occlusion. + + + Sets a texture used to determine how much indirect light the different areas of the material should receive. + Définit une texture déterminant la quantité de lumière indirecte reçue par les différentes parties du matériau. + + + Sets the texture channel used to read the occlusion value from occlusionMap. + Définit le canal de la texture d'occlusion à utiliser pour lire les valeurs. + + + Opacity + Opacité + + + Sets the opacity of just this material, separate from the model. + Définit l'opacité propre à ce matériau, indépendamment du modèle. + + + Sets a texture used to control the opacity differently for different parts of the material. + Définit une texture déterminant l'opacité des différentes parties du matériau. + + + Sets the texture channel used to read the opacity value from opacityMap. + Définit le canal de la texture d'opacité à partir duquel lire les valeurs. + + + Emissive Color + Couleur émissive + + + Sets a texture to be used to set the emissive factor for different parts of the material. + Définit une texture déterminant le coefficient d'émission des différentes parties du matériau. + + + Factor + Coefficient + + + Sets the color of self-illumination for this material. + Définit la couleur émise par ce matériau. + + + Height + Relief + + + Sets the factor used to modify the values from the heightMap texture. + Définit le coefficient utilisé pour modifier les valeurs de la texture de relief. + + + Sets a texture used to determine the height the texture will be displaced when rendered through the use of Parallax Mapping. + Définit une texture déterminant le décalage appliqué lors du rendu provenant du « Parallax Mapping Â». + + + Sets the texture channel used to read the height value from heightMap. + Définit le canal de la texture de hauteur à partir duquel lire les valeurs. + + + Min Map Samples + Échantillons minimum de texture + + + Sets the minimum number of samples used for performing Parallax Occlusion Mapping using the heightMap. + Définit le nombre minimum d'échantillons de la texture des hauteurs à utiliser lors de l'application du « Parallax Occlusion Mapping Â». + + + Max Map Samples + Échantillons maximum de texture + + + Sets the maximum number of samples used for performing Parallax Occlusion Mapping using the heightMap. + Définit le nombre maximum d'échantillons de la texture des hauteurs à utiliser lors de l'application du « Parallax Occlusion Mapping Â». + + + Clearcoat + Vernis + + + Sets the intensity of the clearcoat layer. + Définit l'intensité de la couche de vernis. + + + Sets a texture used to determine the intensity of the clearcoat layer. + Définit la texture déterminant l'intensité de la couche de vernis. + + + Sets the texture channel used to read the intensity from clearcoatMap. + Définit le canal de texture d'intensité à partir duquel lire les valeurs. + + + Roughness Amount + Quantité de rugosité + + + Sets the roughness of the clearcoat layer. + Définit la rugosité de la couche de vernis. + + + Roughness Map + Texture de rugosité + + + Sets a texture used to determine the roughness of the clearcoat layer. + Définit la texture déterminant la rugosité de la couche de vernis. + + + Roughness Channel + Canal de rugosité + + + Sets the texture channel used to read the roughness from clearcoatRoughnessMap. + Définit le canal de la texture de rugosité à partir duquel lire les valeurs. + + + Normal Map + Texture de normales + + + Sets a texture used as a normalMap for the clearcoat layer. + Définit une texture déterminant les normales de la couche de vernis. + + + Refraction + Réfraction + + + Transmission Factor + Coefficient de transmission + + + Sets the base percentage of light that is transmitted through the surface. + Définit le pourcentage de lumière transmis à travers la surface. + + + Transmission Map + Texture de transmission + + + Sets a texture that contains the transmission percentage of a the surface. + Définit une texture déterminant le pourcentage de lumière transmis à travers la surface. + + + Transmission Channel + Canal de transmission + + + Sets the texture channel used to read the transmission percentage from transmissionMap. + Définit le canal de la texture de transmission à partir duquel lire les valeurs. + + + Thickness Factor + Coefficient d'épaisseur + + + Sets the thickness of the volume beneath the surface in model coordinate space. + Définit l'épaisseur du volume en dessous de la surface, dans le système de coordonées du modèle. + + + Thickness Map + Texture d'épaisseur + + + Sets a texture that contains the thickness of a the material volume. + Définit une texture déterminant l'épaisseur du volume du matériau. + + + Thickness Channel + Canal d'épaisseur + + + Sets the texture channel used to read the thickness amount from thicknessMap. + Définit le canal de la texture d'épaisseur à partir duquel lire les valeurs. + + + Attenuation Color + Couleur d'atténuation + + + Sets the color that white lights turn into due to absorption when reaching the attenuation distance. + Définit la couleur prise par la lumière blanche lorsque celle-ci est absorbée après avoir atteint la distance d'atténuation. + + + Attenuation Distance + Distance d'atténuation + + + Sets the average distance in world space that light travels in the medium before interacting with a particle. + Définit la distance moyenne, dans le système de coordonnées du monde, parcourue par la lumière avant d'interagir avec une particule. + + + Advanced + Avancé + + + Vertex Colors + Couleurs des sommets + + + Sets whether vertex colors are used to modulate the base color. + Définit si les couleurs des sommets doivent être utilisées pour altérer la couleur de base. + + + Enabled + Activé + + + Disabled + Désactivé + + + Point Size + Taille de point + + + Sets the size of the points rendered, when the geometry is using a primitive type of points. + Définit la taille des points dessinés lorsque la géométrie utilise le type de primitive points. + + + Line Width + Largeur de ligne + + + Sets the width of the lines rendered, when the geometry is using a primitive type of lines or line strips. + Définit la largeur des lignes dessinées lorsque la géométrie utilise un type de primitif ligne ou ensemble de lignes. + + SpinBoxSpecifics @@ -61948,6 +65512,25 @@ atteint le début ou la fin. Boucle + + SplitButton + + Packing + Empaquetage + + + Sending + Envoi + + + Starting + Démarrage + + + Manage run targets + Gérer les cibles d'exécution + + SplitViewSpecifics @@ -61964,10 +65547,50 @@ atteint le début ou la fin. - SplitViewToggleAction + SpotLightSection - Toggle Split View On/Off - Activer/désactiver la vue scindée + Spot Light + Lumière spot + + + Constant Fade + Atténuation constante + + + Sets the constant attenuation of the light. + Définit l'atténuation constante de la lumière. + + + Linear Fade + Atténuation linéaire + + + Sets the linear attenuation of the light. + Définit l'atténuation linéaire de la lumière. + + + Quadratic Fade + Atténuation quadratique + + + Sets the quadratic attenuation of the light. + Définit l'atténuation quadratique de la lumière. + + + Cone Angle + Angle du cône + + + Sets the angle of the light cone. + Définit l'angle du cône de lumière. + + + Inner Cone Angle + Angle intérieur du cône + + + Sets the angle of the inner light cone. + Définit l'angle intérieur du cône de lumière. @@ -62376,13 +65999,6 @@ atteint le début ou la fin. Dark - - SubComponentManager::parseDirectory - - Invalid meta info - Métadonnées invalides - - SwipeViewSpecifics @@ -62411,17 +66027,6 @@ atteint le début ou la fin. Orientation - - SyncEnvBackgroundAction - - Use Scene Environment - Utiliser l'environnement de la scène - - - Sets the 3D view to use the Scene Environment color or skybox as background color. - Règle la vue 3D pour utiliser la couleur de l'environnement de scène ou de la skybox comme couleur de fond. - - TabBarSpecifics @@ -62509,25 +66114,6 @@ Elle est utilisée pour calculer la taille totale implicite. nom d'étiquette - - TemplateMerge - - Merge With Template - Fusionner avec le modèle - - - &Browse... - &Parcourir… - - - Template: - Modèle : - - - Browse Template - Parcourir les modèles - - TestControlPanel @@ -62957,13 +66543,6 @@ Elle est utilisée pour calculer la taille totale implicite. Si la zone de texte accepte les évènements de survol. - - TextTool - - Text Tool - Outil de texte - - TextureBrowserContextMenu @@ -63010,6 +66589,199 @@ Elle est utilisée pour calculer la taille totale implicite. Ouvrir le navigateur de matériaux. + + TextureEditorTopSection + + Name + Nom + + + Texture name + Nom de texture + + + + TextureInputSection + + Texture Input + Texture en entrée + + + Texture + Texture + + + Sets the input texture. + Définit la texture en entrée. + + + Enabled + Activée + + + Sets the texture enabled state. + Définit si la texture est active. + + + + TextureSection + + Texture + Texture + + + Source + Source + + + Sets the location of an image file containing the data used by the texture. + Définit l'emplacement d'un fichier image contenant les données de la texture. + + + Source Item + Élément source + + + Sets an item to be used as the source of the texture. + Définit un élément à utiliser comme source de la texture. + + + Texture Data + Données de la texture + + + Sets a reference to a TextureData component which defines the contents and properties of raw texture data. + Définit une référence vers un composant TextureData définissant le contenu et les propriétés des données brutes de texture. + + + Scale + Échelle + + + Sets how to scale the U texture coordinate when mapping to UV coordinates of a mesh. + Définit un redimensionnement des coordonnées de texture U lors de la mise en correspondance avec les coordonnées UV d'un modèle. + + + Sets how to scale the V texture coordinate when mapping to UV coordinates of a mesh. + Définit un redimensionnement des coordonnées de texture V lors de la mise en correspondance avec les coordonnées UV d'un modèle. + + + Flip V + Retournement V + + + Sets the use of the vertically flipped coordinates. + Définit l'inversion verticale des coordonnées. + + + Flip U + Retournement U + + + Sets the use of the horizontally flipped texture coordinates. + Définit l'inversion horizontale des coordonnées. + + + Auto Orientation + Orientation automatique + + + Sets if a texture transformation, such as flipping the V texture coordinate, is applied automatically for textures where this is typically relevant. + Définit si la transformation de la texture, tel que le retournement des coordonnées de texture V, est appliquée automatiquement pour les textures où cela est pertinent. + + + Texture Mapping + Application de la texture + + + Sets which method of mapping to use when sampling this texture. + Définit quelle méthode d'application utiliser lors de l'échantillonage de cette texture. + + + U Tiling + Mise en tuile U + + + Sets how the texture is mapped when the U scaling value is greater than 1. + Définit comment la texture est appliquée lorsque les coordonnées U sont plus grandes que 1. + + + V Tiling + Mise en tuile V + + + Sets how the texture is mapped when the V scaling value is greater than 1. + Définit comment la texture est appliquée lorsque les coordonnées V sont plus grandes que 1. + + + UV Index + Indice UV + + + Sets the UV coordinate index used by this texture. + Définit l'indice des coordonnées UV utilisées par cette texture. + + + UV Rotation + Rotation UV + + + Sets the rotation of the texture around the pivot point. + Définit la rotation de la texture autour du point de pivot. + + + Position + Position + + + Sets the U coordinate mapping offset from left to right. + Définit le décalage lors de l'application des coordonnées U de gauche à droite. + + + Sets the V coordinate mapping offset from bottom to top. + Définit le décalage lors de l'application des coordonnées V de bas à haut. + + + Pivot + Pivot + + + Sets the pivot U position. + Définit la position U du pivot. + + + Sets the pivot V position. + Définit la position V du pivot. + + + Generate Mipmaps + Générer les mipmaps + + + Sets if mipmaps are generated for textures that do not provide mipmap levels themselves. + Détermine si les mipmaps sont générées pour les textures qui n'en proposent pas elles-mêmes. + + + Mag Filter + Filtre d'agrandissement + + + Sets how the texture is sampled when a texel covers more than one pixel. + Définit comment la texture est échantillonnée lorsque les texels font plus d'un pixel. + + + Min Filter + Filtre de rétrécissement + + + Mip Filter + Filtre de rétrécissement de mipmap + + + Sets how the texture mipmaps are sampled when a texel covers less than one pixel. + Définit comment la mipmap de la texture est échantillonnée lorsque les texels font moins d'un pixel. + + ThumbnailDelegate @@ -63363,10 +67135,42 @@ Voulez-vous vraiment le supprimer ? - VisibilityTogglesAction + View3DSection - Visibility Toggles - Alterne la visibilité + View3D + Vue 3D + + + Camera + Caméra + + + Sets which camera is used to render the scene. + Définit quelle caméra utiliser pour le rendu de la scène. + + + Environment + Environnement + + + Sets the scene environment used to render the scene. + Définit l'environnement de la scène utilisé pour dessiner la scène. + + + Import Scene + Importer une scène + + + Sets the reference node of the scene to render to the viewport. + Définit un nÅ“ud de référence de la scène pour le rendu dans la vue. + + + Render Format + Format de rendu + + + Sets the format of the backing texture. + Définit le format pour la texture. @@ -63406,14 +67210,6 @@ Voulez-vous vraiment le supprimer ? WidgetPluginManager - - Failed to create instance of file "%1": %2 - Impossible de créer une instance à partir du fichier « %1 Â» : %2 - - - Failed to create instance of file "%1". - Impossible de créer une instance à partir du fichier « %1 Â». - File "%1" is not a Qt Quick Designer plugin. Le fichier « %1 Â» n'est pas un greffon Qt Quick Designer. @@ -63501,6 +67297,289 @@ Voulez-vous vraiment le supprimer ? Sélectionnez un composant pour voir ses propriétés. + + itemlibrary + + Item + Élément + + + Rectangle + Rectangle + + + Text + Texte + + + Text Edit + Éditeur de texte + + + Text Input + Texte en entrée + + + Mouse Area + Zone de souris + + + Image + Image + + + Animated Image + Image animée + + + Animated Sprite + Sprite animé + + + Border Image + Image avec bordure + + + Flickable + Flickable + + + Grid View + Vue en grille + + + List View + Vue en liste + + + Path View + Vue en chemin + + + Focus Scope + Portée de focus + + + Column + Colonne + + + Row + Ligne + + + Grid + Grille + + + Flow + Flux + + + Property + Propriété + + + Pause + Pause + + + Sequential + Séquentiel + + + Parallel + Parallèle + + + Script + Script + + + Color + Couleur + + + Number + Nombre + + + Loader + Chargeur + + + Repeater + Répéteur + + + Busy Indicator + Indicateur d'occupation + + + Button + Bouton + + + Check Box + Case à cocher + + + Check Delegate + Délégué de case à cocher + + + Combo Box + Liste déroulante + + + Control + Contrôle + + + Delay Button + Bouton avec un retard + + + Dial + Cadran + + + Frame + Cadre + + + Group Box + Boîte de groupe + + + Item Delegate + Délégué d'élément + + + Label + Libellé + + + Page + Page + + + Page Indicator + Indicateur de page + + + Pane + Panneau + + + Progress Bar + Barre de progression + + + Radio Button + Bouton radio + + + Radio Delegate + Délégué de bouton radio + + + Range Slider + Slider de plage + + + Round Button + Bouton arrondi + + + Slider + Slider + + + Spin Box + Spin Box + + + Scroll View + Vue défilante + + + Stack View + Vue en tas + + + Swipe Delegate + Délégué de vue en balayage + + + Swipe View + Vue en balayage + + + Switch + Interrupteur + + + Switch Delegate + Délégué d'interrupteur + + + Tab Bar + Barre d'onglets + + + Tab Button + Bouton d'onglet + + + Text Area + Zone de texte + + + Text Field + Champ de texte + + + Tool Bar + Barre d'outils + + + Tool Button + Bouton de barre d'outils + + + Tool Separator + Séparateur d'outil + + + Tumbler + Tumbler + + + Views + Vues + + + Positioner + Positionneur + + + Animation + Animation + + + Instancers + Instanciateur + + + Basic + Basique + + + Controls 2 + Controls 2 + + main From d6c01ef73bfdc0be16669f91e89c414b057d1ba5 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 18 Feb 2025 15:15:48 +0100 Subject: [PATCH 088/117] German translation: Chunk 4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ProjectExplorer, Python, Qbs, QmlJS, QmlProfiler, QmlProjectManager Change-Id: I0b9ac09a9f927b7b8828cc624845e16d1213520c Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 171 ++++++++++--------- 1 file changed, 88 insertions(+), 83 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 73ff1bcd6a2..ce25a262b96 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -12461,7 +12461,7 @@ Dies kann nicht rückgängig gemacht werden. No valid deployment device is set. - Es ist kein gültiges Gerät für das Deployment gesetzt. + Es ist kein gültiges Gerät (Deployment) gesetzt. The deployment device "%1" is invalid. @@ -42048,7 +42048,7 @@ Bitte versuchen Sie es erneut. SDKs - + SDKs Close All Files in Project "%1" @@ -42684,7 +42684,7 @@ The name of the build configuration created by default for a generic project. None Toolchain bundle display name - + Keiner Not all compilers are set up correctly. @@ -43117,15 +43117,15 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein Global - Global + Global Use Customized Settings - Benutzerdefinierte Einstellungen verwenden + Benutzerdefinierte Einstellungen verwenden Use Global Settings - Globale Einstellungen verwenden + Globale Einstellungen verwenden Variables in the run environment. @@ -43437,7 +43437,7 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen. %1 (imported) - + %1 (importiert) %1 - temporary @@ -43465,7 +43465,7 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen. Hide unsuitable kits - + Ungeeignete Kits verbergen Select Kits for Your Project @@ -44808,7 +44808,7 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen. Qt 6.8 - + Qt 6.8 Repository URL is not valid @@ -46190,7 +46190,7 @@ Was soll %1 tun? None No compiler - + Keiner Path to the compiler executable @@ -46222,7 +46222,7 @@ Was soll %1 tun? Device: - Geräte: + Gerät: Unknown device type @@ -46230,39 +46230,39 @@ Was soll %1 tun? No run device set. - + Kein Gerät (Ausführung) gesetzt. Build device is incompatible with this kit. - + Das Gerät (Erstellung) ist mit diesem Kit inkompatibel. Run device is incompatible with this kit. - + Das Gerät (Ausführung) ist mit diesem Kit inkompatibel. Host address (%1) - + Hostadresse (%1) SSH port (%1) - + SSH-Port (%1) User name (%1) - + Benutzername (%1) Private key file (%1) - + Private Schlüsseldatei (%1) Device name (%1) - + Gerätename (%1) Device root directory (%1) - + Wurzelverzeichnis des Geräts (%1) Run device @@ -46274,11 +46274,11 @@ Was soll %1 tun? Build device type - + Gerätetyp (Erstellung) The type of device to build on. - + Der Typ des Geräts für die Erstellung. Change... @@ -46290,23 +46290,23 @@ Was soll %1 tun? Edit Build Environment... - + Build-Umgebung bearbeiten... Edit Run Environment... - + Ausführungsumgebung bearbeiten... Edit Build Environment - + Build-Umgebung bearbeiten Edit Run Environment - + Ausführungsumgebung bearbeiten Force UTF-8 MSVC output - + UTF-8 für MSVC-Ausgaben erzwingen Either switches MSVC to English or keeps the language and just forces UTF-8 output (may vary depending on the used MSVC compiler). @@ -46477,12 +46477,12 @@ Was soll %1 tun? None Stop applications before building: None - + Keine All Stop all projects - Alle + Alle Same Project @@ -46759,7 +46759,7 @@ fails because Clang does not understand the target architecture. No build device set. - Kein Gerät für die Erstellung gesetzt. + Kein Gerät (Erstellung) gesetzt. Run as root user @@ -46897,183 +46897,188 @@ fails because Clang does not understand the target architecture. None Add to project: None - + Keins None No compiler language - + Keine None No compiler category - + Keine Could not open "%1" for writing: %2. - Die Datei "%1" konnte nicht zum Schreiben geöffnet werden: %2. + "%1" konnte nicht zum Schreiben geöffnet werden: %2. Windows Configuration - + Windows-Konfiguration Select the download path of NuGet and Windows App SDK. - + Wählen Sie den Downloadpfad von NuGet und des Windows App SDK aus. Select Download Path - + Downloadpfad auswählen Select the path of NuGet. - + Pfad von NuGet auswählen. Select nuget.exe File - + nuget.exe-Datei auswählen Download NuGet - + NuGet herunterladen Automatically download NuGet. NuGet is needed for downloading Windows App SDK. - + NuGet automatisch herunterladen. + +NuGet wird für das Herunterladen des Windows App SDK benötigt. Select the path of the Windows App SDK. - + Pfad des Windows App SDK auswählen. Download Windows App SDK - + Windows App SDK herunterladen Automatically download Windows App SDK with NuGet. If the automatic download fails, Qt Creator proposes to open the download URL in the system browser for manual download. - + Windows App SDK automatisch mit NuGet herunterladen. + +Wenn das Herunterladen fehlschlägt, bietet Qt Creator an, die URL für das manuelle Herunterladen im Systembrowser zu öffnen. Download path exists. - + Downloadpfad existiert. NuGet path exists. - + NuGet-Pfad existiert. Windows App SDK path exists. - + Windows App SDK-Pfad existiert. Windows App SDK settings are OK. - + Windows App SDK-Einstellungen sind korrekt. Windows App SDK settings have errors. - + Windows App SDK-Einstellungen sind fehlerhaft. Select Windows App SDK Path - + Pfad des Windows App SDK auswählen Download Path - + Downloadpfad Download location: - + Herunterladen nach: NuGet - + NuGet NuGet location: - + NuGet: Windows App SDK Settings - + Windows App SDK-Einstellungen Windows App SDK location: - + Windows App SDK: NuGet download failed. - + Herunterladen von NuGet ist fehlgeschlagen. Open NuGet URL for manual download? - + Soll die URL zum manuellen Herunterladen von NuGet geöffnet werden? Open Download URL - URL zum Herunterladen öffnen + URL zum Herunterladen öffnen Downloading NuGet... - + Lade NuGet herunter... Downloading - + Lade herunter The SDK Tools download URL is empty. - Die URL zum Herunterladen der SDK-Werkzeuge ist nicht gesetzt. + Die URL zum Herunterladen der SDK-Werkzeuge ist nicht gesetzt. Encountered SSL errors, download is aborted. - Es sind SSL-Fehler aufgetreten, das Herunterladen wurde abgebrochen. + Es sind SSL-Fehler aufgetreten, das Herunterladen wurde abgebrochen. Downloading NuGet from URL %1 has failed: %2. - + Das Herunterladen von NuGet von der URL %1 ist fehlgeschlagen: %2. Download from %1 was redirected. - Das Herunterladen von %1 wurde umgeleitet. + Das Herunterladen von %1 wurde umgeleitet. The selected download path (%1) for NuGet already exists. Select a different path. - + Der gewählte Pfad (%1) für das Herunterladen von NuGet existiert bereits. +Wählen Sie einen anderen Pfad. Download path is not configured. - + Der Pfad für das Herunterladen ist nicht konfiguriert. Downloading Windows App SDK - + Lade Windows App SDK herunter Windows App SDK is already configured. - + Windows App SDK ist bereits konfiguriert. Downloading Windows App SDK... - + Lade Windows App SDK herunter... Windows App SDK download failed. - + Das Herunterladen des Windows App SDK ist fehlgeschlagen. Open Windows App SDK URL for manual download? - + Soll die URL zum manuellen Herunterladen des Windows App SDK geöffnet werden? Windows App SDK - + Windows App SDK @@ -47113,7 +47118,7 @@ Select a different path. None No Python interpreter - + Kein Executable is empty. @@ -47546,7 +47551,7 @@ Select a different path. <No build device> - + <Kein Gerät (Erstellung)> Qbs Build @@ -47765,7 +47770,7 @@ Dies ist selten nötig. The qbs executable was not found at the specified path, or it is not executable. - + Die ausführbare qbs-Datei wurde am angegebenen Pfad nicht gefunden oder ist nicht ausführbar. The qbs process quit unexpectedly. @@ -50806,7 +50811,7 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Current kit does not have a valid Qt version, disabling QML Language Server. - + Das aktuelle Kit hat keine gültige Qt-Version, deaktiviere den QML Language Server. Use from latest Qt version @@ -50858,7 +50863,7 @@ Sie können eine Annotation "// @uri My.Module.Uri" hinzufügen, um de Open Language Server preferences... - + Einstellungen des Language Servers öffnen... Static Analyzer @@ -51879,17 +51884,17 @@ Speichern fehlgeschlagen. All All frames - Alle + Alle None Compare Frame: None - + Kein All All View3D frames - Alle + Alle Quick3D Frame @@ -51906,7 +51911,7 @@ Speichern fehlgeschlagen. All Compare Frame: All - Alle + Alle @@ -52160,7 +52165,7 @@ Sind Sie sicher? The project was created with a Qt Design Studio version earlier than Qt Design Studio 4.5. Due to limitations of the project structure in earlier Qt Design Studio versions, the resulting application might not display all the assets. Referring to assets between different QML modules does not work in the compiled application.<br><a href="https://doc.qt.io/qtdesignstudio/studio-designer-developer-workflow.html">See the documentation for details.</a> - + Das Projekt wurde mit einer früheren Version von Qt Design Studio als Qt Design Studio 4.5 erstellt. Wegen der Einschränkungen der Projektstruktur in früheren Versionen von Qt Design Studio könnte die resultierende Anwendung nicht alle Assets anzeigen. Verweise auf Assets zwischen verschiedenen QML-Modulen funktionieren in der erstellten Anwendung nicht.<br><a href="https://doc.qt.io/qtdesignstudio/studio-designer-developer-workflow.html">Details finden Sie in der Dokumentation.</a> From 5129c8647fc5e9ce28c684b9a4581c972fa1ce43 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 5 Mar 2025 16:54:41 +0100 Subject: [PATCH 089/117] Doc: Link more visibly between Coco topics Turn the setup topic into a how-to topic, so the topics appear in the same list in How Tos. Fixes: QTCREATORBUG-32569 Change-Id: I6b2bf0127998720fe7bb24e74702d8634b8553fe Reviewed-by: hjk Reviewed-by: Markus Redeker --- doc/qtcreator/src/analyze/creator-coco.qdoc | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/doc/qtcreator/src/analyze/creator-coco.qdoc b/doc/qtcreator/src/analyze/creator-coco.qdoc index 6ed56a2029f..aee0060f6cf 100644 --- a/doc/qtcreator/src/analyze/creator-coco.qdoc +++ b/doc/qtcreator/src/analyze/creator-coco.qdoc @@ -3,16 +3,16 @@ /*! \page creator-coco.html - \previouspage creator-reference.html + \previouspage creator-how-tos.html - \ingroup creator-reference-analyzer + \ingroup creator-how-to-analyze - \title Coco + \title Set up code coverage from Coco - \brief Measure and analyze the code coverage of tests. - - With Coco, you can measure and analyze the code coverage of tests. You can - set up a project for code coverage and display the coverage in \QC. + With Coco, you can measure and analyze the code coverage of tests. The + following sections describe how to set up a project for code coverage. + For more information about viewing the results in \QC, see + \l{View code coverage reports from Coco}. To use the plugin, you must download and install Coco version 6.0 or later. @@ -143,6 +143,9 @@ loading an instrumentation database (a \c .csmes file), which was generated by Coco CoverageScanner. + For more information about how to set up a project for code coverage in \QC, + see \l{Set up code coverage from Coco}. + To measure and check code coverage: \list 1 @@ -182,5 +185,6 @@ \li Implicit Manual Coverage Validation \endlist - \sa {Enable and disable plugins}, {Font & Colors}, {Analyzing Code}, {Coco} + \sa {Enable and disable plugins}, {Set up code coverage from Coco}, + {Font & Colors}, {Analyzing Code}, */ From c9cdc25bc3ee92ee2533c21b6da53eee3953476a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 5 Mar 2025 11:22:04 +0100 Subject: [PATCH 090/117] Python: use thread pool to cache venv and pip usability If no threadpool is passed to async run we use the global thread pool that has an unlimited max thread count that results in potentially opening more file handles than the operating system allows. Using an own threadpool reduces the number of parallel running checks to ideal thread count which should be lower than the maximum open file handle limit. Change-Id: I248c325cbdb0068a89eb301ee3ba04b86bc58783 Reviewed-by: Friedemann Kleint Reviewed-by: David Schulz --- src/plugins/python/pythonsettings.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/python/pythonsettings.cpp b/src/plugins/python/pythonsettings.cpp index 54f1fc0b869..b6a7208fceb 100644 --- a/src/plugins/python/pythonsettings.cpp +++ b/src/plugins/python/pythonsettings.cpp @@ -858,8 +858,9 @@ QString PythonSettings::pylsConfiguration() static void cacheVenvAndPipUsability(const Interpreter &interpreter) { - Utils::asyncRun(&venvIsUsable, interpreter.command); - Utils::asyncRun(&pipIsUsable, interpreter.command); + static QPointer pool(new QThreadPool(PythonSettings::instance())); + Utils::asyncRun(pool.get(), &venvIsUsable, interpreter.command); + Utils::asyncRun(pool.get(), &pipIsUsable, interpreter.command); } void PythonSettings::addInterpreter(const Interpreter &interpreter, bool isDefault) From 844a62fb1d98a85ca2dc1fc57aa7535681cccc8c Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 5 Mar 2025 17:37:51 +0100 Subject: [PATCH 091/117] Debugger: Improve visibility of location marker and breakpoint Make the location marker use the "non-toolbar" warnig color and use error/warning colors from "flat/Hybrid (2016)" theme rather than using color tokens. Revert back to tokens when Red and Yellow tokens are available. Fixes: QTCREATORBUG-32572 Change-Id: Iffb04433de859e4b78b4dcf1454514afefaa583f Reviewed-by: hjk --- share/qtcreator/themes/light-2024.creatortheme | 5 +++++ src/plugins/debugger/debuggericons.cpp | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/themes/light-2024.creatortheme b/share/qtcreator/themes/light-2024.creatortheme index 532faa02dfc..e0adbbb5974 100644 --- a/share/qtcreator/themes/light-2024.creatortheme +++ b/share/qtcreator/themes/light-2024.creatortheme @@ -337,6 +337,11 @@ TerminalAnsi13=d22dde TerminalAnsi14=69e2e4 TerminalAnsi15=e5e5e6 +;Hack for QTCREATORBUG-32572. Use these two colors from "flat/Hybrid (2016)" theme rather than +;using color tokens. Revert when Red and Yellow tokens are available. +IconsErrorColor=ffdf4f4f +IconsWarningColor=ffecbc1c + [Flags] ComboBoxDrawTextShadow=false DerivePaletteFromTheme=true diff --git a/src/plugins/debugger/debuggericons.cpp b/src/plugins/debugger/debuggericons.cpp index fef65347492..5c4e64d7f04 100644 --- a/src/plugins/debugger/debuggericons.cpp +++ b/src/plugins/debugger/debuggericons.cpp @@ -16,7 +16,7 @@ const Icon BREAKPOINT_PENDING({ {":/debugger/images/breakpoint_pending_overlay.png", Theme::PanelTextColorDark}}, Icon::IconStyleOptions(Icon::Tint | Icon::PunchEdges)); const Icon BREAKPOINT_WITH_LOCATION({ {":/utils/images/filledcircle.png", Theme::IconsErrorColor}, - {":/debugger/images/location.png", Theme::IconsWarningToolBarColor}}, Icon::Tint); + {":/debugger/images/location.png", Theme::IconsWarningColor}}, Icon::Tint); const Icon BREAKPOINTS( ":/debugger/images/debugger_breakpoints.png"); const Icon WATCHPOINT({ @@ -65,10 +65,10 @@ const Icon DEBUG_EXIT_SMALL_TOOLBAR({ {":/utils/images/debugger_overlay_small.png", Theme::IconsDebugColor}}); const Icon LOCATION({ {":/debugger/images/location_background.png", Theme::IconsCodeModelOverlayForegroundColor}, - {":/debugger/images/location.png", Theme::IconsWarningToolBarColor}}, Icon::Tint); + {":/debugger/images/location.png", Theme::IconsWarningColor}}, Icon::Tint); const Icon REVERSE_LOCATION({ {":/debugger/images/debugger_reversemode_background.png", Theme::IconsCodeModelOverlayForegroundColor}, - {":/debugger/images/debugger_reversemode.png", Theme::IconsWarningToolBarColor}}, Icon::Tint); + {":/debugger/images/debugger_reversemode.png", Theme::IconsWarningColor}}, Icon::Tint); const Icon REVERSE_MODE({ {":/debugger/images/debugger_reversemode_background.png", Theme::IconsCodeModelOverlayForegroundColor}, {":/debugger/images/debugger_reversemode.png", Theme::IconsInfoColor}}, Icon::Tint); From 1aa43d4bdf8d401c13f73e77ba309a25911c2ec6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 4 Mar 2025 12:05:13 +0100 Subject: [PATCH 092/117] German translation: SerialTerminal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I1128bfbfbece4c31d689f122cb74450421a227b5 Reviewed-by: Robert Löhning Reviewed-by: Christian Stenger --- share/qtcreator/translations/qtcreator_de.ts | 43 ++++++++++---------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index ce25a262b96..fd6b64d3267 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -55003,87 +55003,88 @@ Zeile: %4, Spalte: %5 QtC::SerialTerminal Unable to open port %1: %2. - + Port %1 konnte nicht geöffnet werden: %2. Session resumed. - + Sitzung fortgesetzt. Starting new session on %1... - + Starte eine neue Sitzung auf %1... Session finished on %1. - + Sitzung auf %1 wurde beendet. Session paused... - + Sitzung wird pausiert... No Port - + Kein Port Serial port error: %1 (%2) - + Fehler am seriellen Port: %1 (%2) Close Tab - Reiter schließen + Reiter schließen Close All Tabs - Alle schließen + Alle schließen Close Other Tabs - Andere Reiter schließen + Andere Reiter schließen Type text and hit Enter to send. - + Geben Sie Text ein und drücken Sie die Eingabetaste, um ihn abzuschicken. Serial Terminal Window - + Serielles Terminalfenster Connect - Verbinden + Verbinden Disconnect - + Trennen Reset Board - + Board zurücksetzen Add New Terminal - + Neues Terminal hinzufügen Serial Terminal - + Serielles Terminal None - + Kein Zeilenende + Keins LF - LF + LF CR - + CR CRLF - CRLF + CRLF From 87c904edf126ee2b9fd22f46d06f56ac0fb4355b Mon Sep 17 00:00:00 2001 From: Lukasz Papierkowski Date: Thu, 6 Mar 2025 15:26:51 +0100 Subject: [PATCH 093/117] AI Assistant: qdoc enabling inline chat code syntax highlighting Change-Id: I95cea21445b61c66258f549e9195743ae87a4848 Reviewed-by: Marcus Tillmanns Reviewed-by: Leena Miettinen --- .../src/editors/creator-only/creator-aiassistant.qdoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc b/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc index 2c8406fba5e..bba2234cd11 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc @@ -42,6 +42,14 @@ then select \uicontrol Install. \endlist + \section1 Enable code syntax highlighting in the inline chat window + + To enable code syntax highlighting in the inline chat window, go to + \preferences > \uicontrol {Text Editor} > \uicontrol {Generic Highlighter}, + and then select \uicontrol {Download Definitions}. + \image qtcreator-syntax-highlighter.png {Generic Highlighter preferences} + For more information, see \l{Download highlight definitions}. + \section1 Connect to an LLM You can connect to the following LLMs: From f2c25b8cf271dbaf3f0d20a9bdb0771f015e1fc1 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 7 Mar 2025 10:13:20 +0100 Subject: [PATCH 094/117] Update qbs submodule to HEAD of 2.6 branch Change-Id: I248223b91c4749d9cd021b627112867bdb9a02da 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 66e0959dfd9..410653d3314 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 66e0959dfd9a746746ec4893e199627ad9ae6e15 +Subproject commit 410653d331469aacef5db7568132a04cd92a9302 From b7b80d3b438782656d71b30802b9572e111dda13 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 4 Mar 2025 16:18:36 +0100 Subject: [PATCH 095/117] German translation: MCU MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia27a627059d2f61a83d198c8eeb8fa24991e8d72 Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 247 ++++++++++--------- 1 file changed, 126 insertions(+), 121 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index fd6b64d3267..ec91c34e92d 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -38360,483 +38360,488 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan MCU Dependencies - + MCU-Abhängigkeiten Paths to 3rd party dependencies - + Pfade zu Abhängigkeiten von Drittanbietern The MCU dependencies setting value is invalid. - + Die Einstellungen für MCU-Abhängigkeiten sind ungültig. CMake variable %1 not defined. - + CMake-Variable %1 ist nicht definiert. CMake variable %1: path %2 does not exist. - + CMake-Variable %1: Der Pfad %2 existiert nicht. Warning for target %1: invalid toolchain path (%2). Update the toolchain in Edit > Preferences > Kits. - + Warnung für Ziel %1: Der Pfad der Toolchain ist ungültig (%2). Aktualisieren Sie die Toolchain in Bearbeiten > Einstellungen > Kits. Kit for %1 created. - + Kit für %1 wurde erstellt. Error registering Kit for %1. - + Fehler beim Registrieren des Kits für %1. Path %1 does not exist. Add the path in Edit > Preferences > SDKs > MCU. - + Der Pfad %1 existiert nicht. Fügen Sie den Pfad in Bearbeiten > Einstellungen > SDKs > MCU hinzu. Missing %1. Add the path in Edit > Preferences > SDKs > MCU. - + %1 fehlt. Fügen Sie den Pfad in Bearbeiten > Einstellungen > SDKs > MCU hinzu. Qt for MCUs Kit Creation - + Kit-Erstellung für Qt for MCUs Fix - + Korrigieren Help - Hilfe + Hilfe Qt for MCUs path %1 - + Pfad zu Qt for MCUs %1 Target - Ziel + Ziel Warning - Warnung + Warnung Error - Fehler + Fehler Package - Paket + Paket Status - Status + Status No target selected. - + Kein Ziel ausgewählt. Invalid paths present for target %1 - + Für das Ziel +%1 +sind ungültige Pfade vorhanden. Warning for target %1: missing CMake toolchain file expected at %2. - + Warnung für das Ziel %1: Die in %2 erwartete CMake-Toolchain-Datei fehlt. Warning for target %1: missing QulGenerators expected at %2. - + Seems to be a QulGenerators.cmake file that is not found + Warnung für das Ziel %1: Die in %2 erwartete QulGenerators-Datei fehlt. Qt for MCUs SDK version %1 detected, only supported by Qt Creator version %2. This version of Qt Creator requires Qt for MCUs %3 or greater. - + Für Qt for MCUs wurde die SDK-Version %1 erkannt, die nur von Qt Creator-Version %2 unterstützt wird. Diese Version von Qt Creator erfordert Qt for MCUs %3 oder höher. Skipped %1. Unsupported version "%2". - + Überspringe %1. Nicht unterstützte Version "%2". Detected version "%1", only supported by Qt Creator %2. - + Die erkannte Version "%1" wird nur von Qt Creator %2 unterstützt. Unsupported version "%1". - + Nicht unterstützte Version "%1". Skipped %1. %2 Qt for MCUs version >= %3 required. - + Überspringe %1. %2 Qt for MCUs-Version >= %3 wird benötigt. No valid kit descriptions found at %1. - + In %1 wurde keine gültige Beschreibung für ein Kit gefunden. Error creating kit for target %1, package %2: %3 - + Fehler beim Erstellen des Kits für das Ziel %1, Paket %2: %3 Warning creating kit for target %1, package %2: %3 - + Warnung beim Erstellen des Kits für das Ziel %1, Paket %2: %3 Path %1 exists, but does not contain %2. - + Der Pfad %1 existiert, enthält aber %2 nicht. No CMake tool was detected. Add a CMake tool in Edit > Preferences > Kits > CMake. - + Es wurde kein CMake-Werkzeug erkannt. Fügen Sie in Bearbeiten > Einstellungen > Kits > CMake ein CMake-Werkzeug hinzu. or - + oder Path %1 exists. - + Der Pfad %1 existiert. Path %1 exists. Version %2 was found. - + Der Pfad %1 existiert. Version %2 wurde gefunden. Path %1 is valid, %2 was found. - + Der Pfad %1 ist gültig, %2 wurde gefunden. but only version %1 is supported - + aber nur Version %1 wird unterstützt but only versions %1 are supported - + aber nur die Versionen %1 werden unterstützt Path %1 is valid, %2 was found, %3. - + Der Pfad %1 ist gültig, %2 wurde gefunden, %3. Path %1 does not exist. - + Der Pfad %1 existiert nicht. Path is empty. - + Der Pfad ist leer. Path is empty, %1 not found. - + Der Pfad ist leer, %1 wurde nicht gefunden. Path %1 exists, but version %2 could not be detected. - + Der Pfad %1 existiert, aber Version %2 konnte nicht erkannt werden. Download from "%1". - + Von "%1" herunterladen. Board SDK for MIMXRT1050-EVK - + Board SDK für MIMXRT1050-EVK Board SDK MIMXRT1060-EVK - + Board SDK MIMXRT1060-EVK Board SDK for MIMXRT1060-EVK - + Board SDK für MIMXRT1060-EVK Board SDK for MIMXRT1064-EVK - + Board SDK für MIMXRT1064-EVK Board SDK for MIMXRT1170-EVK - + Board SDK für MIMXRT1170-EVK Board SDK for STM32F469I-Discovery - + Board SDK für STM32F469I-Discovery Board SDK for STM32F769I-Discovery - + Board SDK für STM32F769I-Discovery Board SDK for STM32H750B-Discovery - + Board SDK für STM32H750B-Discovery Board SDK - + Board SDK Flexible Software Package for Renesas RA MCU Family - + Flexibles Softwarepaket für die Renesas RA MCU-Familie Graphics Driver for Traveo II Cluster Series - + Grafiktreiber für die Traveo II Cluster-Serie Renesas Graphics Library - + Renesas Grafikbibliothek Cypress Auto Flash Utility - + Cypress Auto Flash-Werkzeug MCUXpresso IDE - + MCUXpresso IDE Path to SEGGER J-Link - + Pfad zu SEGGER J-Link Path to Renesas Flash Programmer - + Pfad zu Renesas Flash Programmer Green Hills Compiler for ARM - + Green Hills Compiler für ARM IAR ARM Compiler - + IAR ARM Compiler Green Hills Compiler - + Green Hills Compiler GNU Toolchain - + GNU Toolchain MSVC Toolchain - + MSVC Toolchain FreeRTOS SDK for MIMXRT1050-EVK - + FreeRTOS SDK für MIMXRT1050-EVK FreeRTOS SDK for MIMXRT1064-EVK - + FreeRTOS SDK für MIMXRT1064-EVK FreeRTOS SDK for MIMXRT1170-EVK - + FreeRTOS SDK für MIMXRT1170-EVK FreeRTOS SDK for EK-RA6M3G - + FreeRTOS SDK für EK-RA6M3G FreeRTOS SDK for STM32F769I-Discovery - + FreeRTOS SDK für STM32F769I-Discovery Path to project for Renesas e2 Studio - + Pfad zum Projekt für Renesas e2 Studio Arm GDB at %1 - + ARM GDB in %1 MSVC Binary directory - + MSVC Binary-Verzeichnis GCC Toolchain - + GCC Toolchain GNU Arm Embedded Toolchain - + GNU Arm Embedded Toolchain STM32CubeProgrammer - + STM32CubeProgrammer the toolchain.id JSON entry is empty - + der JSON-Eintrag toolchain.id ist leer the given toolchain "%1" is not supported - + die angegebene Toolchain "%1" wird nicht unterstützt the toolchain.compiler.cmakeVar JSON entry is empty - + der JSON-Eintrag toolchain.compiler.cmakeVar ist leer the toolchain.file.cmakeVar JSON entry is empty - + der JSON-Eintrag toolchain.file.cmakeVar ist leer Toolchain is invalid because %2 in file "%3". - + The source is broken because of too much language arithmetics. + Die Toolchain in Datei "%3" ist ungültig: %2. Toolchain description for "%1" is invalid because %2 in file "%3". - + The source is broken because of too much language arithmetics. + Die Toolchain-Beschreibung für "%1" in Datei "%3" ist ungültig: %2. Qt for MCUs Demos - + Qt for MCUs Demos Qt for MCUs Examples - + Qt for MCUs Beispiele Replace Existing Kits - + Existierende Kits ersetzen Create New Kits - + Neue Kits erstellen Qt for MCUs - + Qt for MCUs New version of Qt for MCUs detected. Upgrade existing kits? - + Neue Version von Qt for MCUs wurde erkannt. Existierende Kits aktualisieren? Errors while creating Qt for MCUs kits - + Fehler beim Erstellen von Kits für Qt for MCUs Details - Details + Details Qt for MCUs SDK - + Qt for MCUs SDK Targets supported by the %1 - + Von %1 unterstützte Ziele Requirements - + Anforderungen Automatically create kits for all available targets on start - + Beim Start automatisch Kits für alle verfügbaren Ziele erstellen Create a Kit - + Ein Kit erstellen Create Kit - + Kit erstellen Update Kit - + Kit aktualisieren A kit for the selected target and SDK version already exists. - + Ein Kit für das ausgewählte Ziel und die SDK-Version existiert bereits. Kits for a different SDK version exist. - + Kits für eine andere SDK-Version existieren. A kit for the selected target can be created. - + Ein Kit kann für das ausgewählte Ziel erstellt werden. Provide the package paths to create a kit for your target. - + Geben Sie die Paketpfade zum Erstellen eines Kits für Ihr Ziel an. No CMake tool was detected. Add a CMake tool in the <a href="cmake">CMake options</a> and select Apply. - + Es wurde kein CMake-Werkzeug erkannt. Fügen Sie in den <a href="cmake">CMake-Einstellungen</a> ein CMake-Werkzeug hinzu und wählen Sie "Anwenden". Cannot apply changes in SDKs > MCU. - + Die Änderungen in SDKs > MCU können nicht angewendet werden. MCU - + MCU Qt for MCUs: %1 - + Qt for MCUs: %1 Create Kits for Qt for MCUs? To do it later, select Edit > Preferences > SDKs > MCU. - + Kits für Qt for MCUs erstellen? Um dies später zu tun, wählen Sie Bearbeiten > Einstellungen > SDKs > MCU. Create Kits for Qt for MCUs - + Kits für Qt for MCUs erstellen Detected %n uninstalled MCU target(s). Remove corresponding kits? - - - + + Ein nicht installiertes MCU-Ziel wurde erkannt. Sollen die entsprechenden Kits entfernt werden? + %n nicht installierte MCU-Ziele wurden erkannt. Sollen die entsprechenden Kits entfernt werden? Keep - + Behalten Remove - Entfernen + Entfernen Read about Using QtMCUs in the Qt Design Studio - + Über die Benutzung von QtMCUs in Qt Design Studio informieren Go to the Documentation - + Dokumentation öffnen Create new kits - + Neue Kits erstellen Replace existing kits - + Existierende Kits ersetzen Proceed - Weiter + Weiter Flash and run CMake parameters: - + Parameter für das Flashen und das Ausführen von CMake: Parsing error: the type entry in JSON kit files must be a string, defaulting to "path" - + Fehler beim Auswerten: Der "type"-Eintrag in den JSON-Dateien für das Kit muss eine Zeichenkette sein, standardmäßig "path" Parsing error: the type entry "%2" in JSON kit files is not supported, defaulting to "path" - + Fehler beim Auswerten: Der "type"-Eintrag "%2" in den JSON-Dateien für das Kit wird nicht unterstützt, standardmäßig "path" From 1b0b715ba7d290ebd9e66c0325ff928c02fe0f6e Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 7 Mar 2025 10:29:42 +0100 Subject: [PATCH 096/117] Build/Linux: Respect explicitly set CMAKE_INSTALL_LIBDIR Amends edc97456e292d6162b36b9ec3b15e39b6e2222b4 Fixes: QTCREATORBUG-32594 Change-Id: Ia508d89004bf2e9849f57a10590b9f597b38f8e5 Reviewed-by: David Faure --- cmake/QtCreatorAPIInternal.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/QtCreatorAPIInternal.cmake b/cmake/QtCreatorAPIInternal.cmake index 65533395bf4..be13eb22a5c 100644 --- a/cmake/QtCreatorAPIInternal.cmake +++ b/cmake/QtCreatorAPIInternal.cmake @@ -77,7 +77,7 @@ elseif(WIN32) set(_IDE_CMAKE_INSTALL_PATH "lib/cmake") else () # Small hack to silence a warning in the stable branch - but it means the value is incorrect - if (NOT CMAKE_LIBRARY_ARCHITECTURE) + if (NOT CMAKE_LIBRARY_ARCHITECTURE AND NOT CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR "lib") endif() include(GNUInstallDirs) From 54e47b9e0a443a62fa0637cfc93e7742821e8649 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Fri, 7 Mar 2025 16:23:36 +0100 Subject: [PATCH 097/117] Git: InstantBlame: Escape commit summaries in tooltip Fixes: QTCREATORBUG-32345 Change-Id: I2e948eb5e02156c7ff32d87424194865f8f1569f Reviewed-by: Orgad Shaneh --- src/plugins/git/instantblame.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/git/instantblame.cpp b/src/plugins/git/instantblame.cpp index a1e174ee390..928952cfee5 100644 --- a/src/plugins/git/instantblame.cpp +++ b/src/plugins/git/instantblame.cpp @@ -140,7 +140,7 @@ QString BlameMark::toolTipText(const CommitInfo &info) const .arg(colors.hash, info.hash, colors.author, info.author, info.authorMail, colors.date, info.authorDate.toString("yyyy-MM-dd hh:mm:ss"), - colors.subject, info.subject); + colors.subject, info.subject.toHtmlEscaped()); QString result = actions + header; From cf04e887ac0a35d672b06aea218a51b2bacf2bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Thu, 6 Mar 2025 21:34:30 +0100 Subject: [PATCH 098/117] German translation: Disambiguate "Provide" "Bestimmen" has two different meanings. It can mean that something is being dictated by the user, but we are often using it in the sense of something being automatically detected by Creator. Change-Id: I974a2742e60d6561d8ea663b90d1f5e17a71608e Reviewed-by: Eike Ziller --- share/qtcreator/translations/qtcreator_de.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index ec91c34e92d..b363d2de750 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -25595,7 +25595,7 @@ Dies ist normalerweise nicht empfehlenswert, da die Datei wahrscheinlich währen Provide the type - Typ bestimmen + Typ festlegen Data type: @@ -46897,7 +46897,7 @@ fails because Clang does not understand the target architecture. Provide manually - Manuell bestimmen + Manuell festlegen None From f27f946d6db0de11bda5d553c5517cd702d2344d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 10 Mar 2025 10:14:04 +0100 Subject: [PATCH 099/117] Update change log for 16.0.0 Change-Id: Id85c25a11b5e0a67978f7b9f0abc22f276feb926 Reviewed-by: Leena Miettinen --- dist/changelog/changes-16.0.0.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dist/changelog/changes-16.0.0.md b/dist/changelog/changes-16.0.0.md index 7f1a99537e8..fd2c8db4ec6 100644 --- a/dist/changelog/changes-16.0.0.md +++ b/dist/changelog/changes-16.0.0.md @@ -38,6 +38,8 @@ Editing ([QTCREATORBUG-31931](https://bugreports.qt.io/browse/QTCREATORBUG-31931)) * Fixed the generation of getters for local enum types ([QTCREATORBUG-32473](https://bugreports.qt.io/browse/QTCREATORBUG-32473)) +* Fixed the header guard creation for file names with special characters + ([QTCREATORBUG-32539](https://bugreports.qt.io/browse/QTCREATORBUG-32539)) * Built-in * Added support for init-statements in range-based `for` loops ([QTCREATORBUG-31961](https://bugreports.qt.io/browse/QTCREATORBUG-31961)) @@ -231,8 +233,13 @@ Terminal ([QTCREATORBUG-32197](https://bugreports.qt.io/browse/QTCREATORBUG-32197)) * Fixed killing the shell process ([QTCREATORBUG-32509](https://bugreports.qt.io/browse/QTCREATORBUG-32509)) -* Fixed auto-scrolling - ([QTCREATORBUG-32167](https://bugreports.qt.io/browse/QTCREATORBUG-32167)) +* Fixed the scrolling behavior + ([QTCREATORBUG-32167](https://bugreports.qt.io/browse/QTCREATORBUG-32167), + [QTCREATORBUG-32546](https://bugreports.qt.io/browse/QTCREATORBUG-32546)) +* Fixed the title of tabs + ([QTCREATORBUG-32197](https://bugreports.qt.io/browse/QTCREATORBUG-32197)) +* Fixed the handling of `Home` and `End` keys + ([QTCREATORBUG-32545](https://bugreports.qt.io/browse/QTCREATORBUG-32545)) Version Control Systems ----------------------- @@ -313,6 +320,7 @@ Credits for these changes go to: Alessandro Portale Alexander Drozdov Alexander Pershin +Alexandre Laurent Alexis Jeandet Ali Kianian Andre Hartmann @@ -348,6 +356,7 @@ Mats Honkamaa Miikka Heikkinen Mitch Curtis Morteza Jamshidi +Nicholas Bennett Nikolaus Demmel Olivier De Cannière Orgad Shaneh @@ -367,4 +376,5 @@ Thiago Macieira Thomas Hartmann Tim Jenßen Vikas Pachdha +Ville Lavonius Xu Jin From 7f96f91585b0f8ff193b8038615e85c4d7acd3c2 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 19 Feb 2025 09:33:04 +0100 Subject: [PATCH 100/117] German translation: Chunk 5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QtSupport, RemoteLinux, Terminal, TextEditor, Utils, Valgrind Change-Id: Icb62d0cf9b41acbb7818984cc41220c4d34b24a9 Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 93 ++++++++++---------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index b363d2de750..6b4ebf44c2b 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -52613,12 +52613,12 @@ wirklich entfernen? All All documentation - Alle + Alle None No documentation - + Keine Not all possible target environments can be supported due to missing compilers. @@ -52812,7 +52812,7 @@ wirklich entfernen? Qt version is not properly installed - + Die Qt-Version ist nicht korrekt installiert Name: @@ -52848,7 +52848,7 @@ wirklich entfernen? Cannot update Qt version information from %1: %2. - + Kann die Qt-Versionsinformation von %1 nicht aktualisieren: %2. Qt version @@ -52972,12 +52972,12 @@ wirklich entfernen? Mkspec: - + Mkspec: None No Qt version - + Keine Name of Qt Version @@ -53085,23 +53085,23 @@ wirklich entfernen? Could not determine target OS - + Das Zielbetriebssystem konnte nicht bestimmt werden Could not determine target architecture - + Die Zielarchitektur konnte nicht bestimmt werden Could not determine OS sub-type - + Der Betriebssystemuntertyp konnte nicht bestimmt werden Error reading "%1": %2 - + Fehler beim Lesen von "%1": %2 Core.json not found for Qt at "%1" - + Core.json wurde für Qt in "%1" nicht gefunden @@ -53920,7 +53920,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Unknown error - + Unbekannter Fehler The ssh-keygen tool at "%1" failed: %2 @@ -56394,11 +56394,11 @@ Die Datei "%1" konnte nicht geöffnet werden. Delete Word Left - + Wort links löschen Delete Line Left - + Zeile links löschen Clear Terminal @@ -57239,7 +57239,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. None Backspace indentation: None - + Keine Enable scroll &wheel zooming @@ -57443,7 +57443,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Display tab settings - + Tabulatoreinstellungen anzeigen &Highlight selection @@ -57631,11 +57631,11 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. Auto detect - + Automatisch bestimmen %1 tries to detect the indentation settings based on the file contents. It will fallback to the settings below if the detection fails. - + %1 versucht, die Einstellungen für die Einrückung aufgrund des Dateiinhalts zu bestimmen. Wenn die Bestimmung fehlschlägt, werden die unten angegebenen Einstellungen benutzt. Not At All @@ -57651,11 +57651,11 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. Default tab policy: - + Vorgabe-Tabulatorverhalten: Default &indent size: - + Vorgabe-Einrückungst&iefe: The text editor indentation setting is used for non-code files only. See the C++ and Qt Quick coding style settings to configure indentation for code files. @@ -57733,31 +57733,31 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. Spaces - + Leerzeichen Tabs - Tabulatoren + Tabulatoren Document Settings - + Dokumenteinstellungen Tab Settings - + Tabulatoreinstellungen Indent Size - + Einrückungstiefe Tab Size - + Tabulatorweite Global Settings... - + Globale Einstellungen... Unix Line Endings (LF) @@ -58410,7 +58410,8 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. None Case-sensitivity: None - + Groß-/Kleinschreibung: + Keine First Letter @@ -59168,19 +59169,19 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Info - Info + Info Underline color of info diagnostics. - + Unterstreichung von Informationen. Info Context - + Informationskontext Underline color of the contexts of info diagnostics. - + Unterstreichung der Kontexte von Informationen. Static Member @@ -59465,19 +59466,19 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Blame %1 - + Blame von %1 Blame Parent - + Blame des Eltern-Commits File at %1 - + Datei bei %1 Log for line %1 - + Log für Zeile %1 <b>Note:</b> "%1" or "%2" is enabled in the instant blame settings. @@ -59486,11 +59487,11 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Not Committed Yet - + Noch nicht in Commit Modified line in %1 - + Geänderte Zeile in %1 You @@ -60324,7 +60325,7 @@ Die Trace-Daten sind verloren. Device is unavailable. - + Gerät ist nicht verfügbar. Failed to watch "%1". @@ -60467,7 +60468,7 @@ Die Trace-Daten sind verloren. File %1 does not exist. - + Datei %1 existiert nicht. Failed to set up scratch buffer in "%1". @@ -61036,7 +61037,7 @@ Zeilen, die mit "##" beginnen, werden als Kommentare behandelt. Remote error output was: %1 - Fehlerausgabe: %1 + Fehlerausgabe des Geräts: %1 @@ -61594,11 +61595,11 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch Starting Memory Analyzer... - + Starte Speicheranalyse... Memory Analyzer running... - + Speicheranalyse läuft... Open Memcheck XML Log File @@ -61792,11 +61793,11 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch Starting Function Profiler... - + Starte Funktionsprofiler... Function Profiler running... - + Funktionsprofiler läuft... Remove template parameter lists when displaying function names. @@ -61981,7 +61982,7 @@ Check settings or ensure Valgrind is installed and available in PATH. None Leak details: None - + Keine Simple From 76f01761b80ae805a612d562a10dcb1e63a61d1d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 7 Mar 2025 13:56:07 +0000 Subject: [PATCH 101/117] CMakePM: Better check for CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT Amends 58e1873c7a53b946cc45544e9b4890245e9cd8eb. Boot2Qt toolchain is setting CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT explicitly and modifying the CMAKE_INSTALL_PREFIX. Qt Creator needs to check if CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT matches with the default value of CMAKE_INSTALL_PREFIX set by CMake. Fixes: QTCREATORBUG-32601 Change-Id: I06ecdabefbd1bc080105e422214ba0bb17ac167a Reviewed-by: Eike Ziller --- .../3rdparty/package-manager/auto-setup.cmake | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/share/3rdparty/package-manager/auto-setup.cmake b/src/share/3rdparty/package-manager/auto-setup.cmake index acec58c41cf..29a6a23ed97 100644 --- a/src/share/3rdparty/package-manager/auto-setup.cmake +++ b/src/share/3rdparty/package-manager/auto-setup.cmake @@ -18,7 +18,27 @@ endif() # Set a better default value for CMAKE_INSTALL_PREFIX # function(qtc_modify_default_install_prefix) - if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + # If at configure time the user didn't specify a CMAKE_INSTALL_PREFIX variable + # Modules/CMakeGenericSystem.cmake will set a default value + # to CMAKE_INSTALL_PREFIX and set CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT to ON + + # In practice there are cases when CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT is + # set to ON and a custom CMAKE_INSTALL_PREFIX is set + + # Do the original CMAKE_INSTALL_PREFIX detection + if(CMAKE_HOST_UNIX) + set(original_cmake_install_prefix "/usr/local") + else() + GetDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES) + set(original_cmake_install_prefix + "${CMAKE_GENERIC_PROGRAM_FILES}/${PROJECT_NAME}") + unset(CMAKE_GENERIC_PROGRAM_FILES) + endif() + + # When the user code didn't modify the CMake set CMAKE_INSTALL_PREFIX + # then set the "/tmp" better value for CMAKE_INSTALL_PREFIX + if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND + CMAKE_INSTALL_PREFIX STREQUAL "${original_cmake_install_prefix}") set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "/tmp") endif() endfunction() From 6a675d105c5241d7ab03d5768afa3f3d7feeb510 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 10 Mar 2025 14:47:55 +0100 Subject: [PATCH 102/117] ProjectExplorer: Fix nullptr access on exit Change-Id: I2071a941c5395d276a8d80fe4a8df29b52fef152 Reviewed-by: hjk --- src/plugins/projectexplorer/runcontrol.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index f9ef09b6680..c345afc82a6 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -1816,7 +1816,8 @@ void RunWorker::initiateStop() */ void RunWorker::reportStopped() { - d->runControl->d->onWorkerStopped(this); + if (QTC_GUARD(d && d->runControl && d->runControl->d)) + d->runControl->d->onWorkerStopped(this); emit stopped(); } From b1a51c2c97d5a2afc1ca0f48259a5f45c987bbc6 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 10 Mar 2025 14:32:14 +0100 Subject: [PATCH 103/117] Utils: Don't fail reading files if it takes longer than 10 seconds Task-number: QTCREATORBUG-32562 Change-Id: Iba4bb5537d631b83011a4e04eaf97b4b7a4437e2 Reviewed-by: hjk --- src/libs/utils/devicefileaccess.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/devicefileaccess.cpp b/src/libs/utils/devicefileaccess.cpp index 0eb8818fcc2..18bf2812e6c 100644 --- a/src/libs/utils/devicefileaccess.cpp +++ b/src/libs/utils/devicefileaccess.cpp @@ -1479,10 +1479,11 @@ expected_str UnixDeviceFileAccess::fileContents(const FilePath &file } #ifndef UTILS_STATIC_LIBRARY const FilePath dd = filePath.withNewPath("dd"); + using namespace std::literals::chrono_literals; Process p; p.setCommand({dd, args, OsType::OsTypeLinux}); - p.runBlocking(); + p.runBlocking(0s); // Run forever if (p.exitCode() != 0) { return make_unexpected(Tr::tr("Failed reading file \"%1\": %2") .arg(filePath.toUserOutput(), p.readAllStandardError())); From 6403f71db7fff1c7d052232a7def33839aebc5cd Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 10 Mar 2025 14:24:58 +0100 Subject: [PATCH 104/117] Boot2Qt: Do not start a gdbserver for debugging on our own This is handled by the appcontroller. Change-Id: Ia85a1265f51552db931cc089a435efeab8f60d4d Reviewed-by: Marcus Tillmanns --- src/plugins/boot2qt/qdbdevicedebugsupport.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/boot2qt/qdbdevicedebugsupport.cpp b/src/plugins/boot2qt/qdbdevicedebugsupport.cpp index 987ac7d446e..5b42771ba34 100644 --- a/src/plugins/boot2qt/qdbdevicedebugsupport.cpp +++ b/src/plugins/boot2qt/qdbdevicedebugsupport.cpp @@ -124,6 +124,7 @@ public: rp.setUseContinueInsteadOfRun(true); rp.setContinueAfterAttach(true); rp.addSolibSearchDir("%{sysroot}/system/lib"); + rp.setSkipDebugServer(true); auto debuggee = createQdbDeviceInferiorWorker(runControl, QmlDebuggerServices); worker->addStartDependency(debuggee); From 8a124883e0aa1ca46010075830ce31b5d4c8a1a1 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 10 Mar 2025 11:33:32 +0100 Subject: [PATCH 105/117] Fix safety margins for macOS application icons The assumed ratio between icon size to safety margin of 16 to 1 is not valid for bigger icons. The margins in these updated icons correspond to the specification from: https://developer.apple.com/design/resources/#macos-apps Change-Id: I1a07ca5ef57c5f38cf6b7aa1edff2f232411f2e8 Reviewed-by: Eike Ziller --- .../qtcreator.appiconset/icon_128x128.png | Bin 4109 -> 3993 bytes .../qtcreator.appiconset/icon_128x128@2x.png | Bin 9169 -> 8293 bytes .../qtcreator.appiconset/icon_256x256.png | Bin 9169 -> 8293 bytes .../qtcreator.appiconset/icon_256x256@2x.png | Bin 21636 -> 19277 bytes .../qtcreator.appiconset/icon_32x32@2x.png | Bin 2202 -> 2132 bytes .../qtcreator.appiconset/icon_512x512.png | Bin 21636 -> 19277 bytes .../qtcreator.appiconset/icon_512x512@2x.png | Bin 53963 -> 49381 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_128x128.png b/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_128x128.png index 6a5bd0b9cb21a1e37fa75e3ad75bd5a1c5af8cc3..414928e27cbdfb9d7d6310cf3041107272fa91bc 100644 GIT binary patch literal 3993 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 literal 4109 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_UduXwsRhE&{oJNIX}NVr(T z=jea!E{}x@dks51)eMbK&Y9_%rZ&qmF!_o^@}duj}@F54~Dl8ei4P z$}Of7u_57L6O6HFzM;~!zfT{|N}Y9GUys$_SVR24hRfUu8mEFao*%w2d6~_}X2br)f8^R^jGqQh z`JCXfLbJan{mfyF=ZCV}eI%PcMOWy~INhxAT;ems^xyj%4{Cg$S@b?9nQh@5*5>as zioW|uv=oV-TAz5qFPLr79LDA{iO*LX*7xj`eOgjcI$QH^pkH(NcB#)(?=O=o=02tW zaO&A7nZF;o7azT@!|bfZbMS&3$FuKF1&5fJ92uT{Wo+=aWBBD%(7@kxvq^wQs3n0- zk>&CVhlJaY;vaR%pB1&c#lpbPa=2Qd;C1VRCRUav2Awy|4XaOR80E9KtxUX*$(g12N@jVIdV)yZ(L>nX1$GHBmPgsx*r?g9dKm$)^fnI z_Cfa1;0nXTzqW{m;Al89Iuew>SJ`xW`_m^_sa$P_GIXt7A^fw??QjBlAY=R9LB z>6(8=)c&M!6~l`*g@Y`OFG3!it7(|UU!z*7HG#Lmd(-qbW(FRHFRcf%L=x;Cbl54# zH)v}gRFzcaWI4nBLEy$U_7r9VA;yBEEDb>d2J#d54w`Xuu+%u%F=%QxiZi*^Cam05 zo3Q?EO#>4{921Y3d#(*Z7~XUttc57;rv-?(fqzksPhl7;ygyV!~EjfcN|XZ*+0`c*9)S_kelbs*j9T3?pXnL%xrfXp3@2iIIUMb46(-(c zceB{Q&r`}GzoCM&wT5An00WDFf&2mQg|ambN(_I389y@~|Hf#=kf0E-o?oY=N`3;vVFUjOwgeL<2Q8K}>`U&eykb*mS;rs1c!0rinmLb-e1yw8=H)Wi zL7|z;lCb5f#)Btz0)_^l7|LEK&9wWs!=48Im?S%eC(NH1PdGB1XmB{e9(1Diz|qFq zgc(V82I1TId6w}xn0;n+)GP^*U%=dORO7)GyMl|?>RtA6HBbLZvxQbM+r;n^f>&|Jue_(ZUUX%S?Vub!kX{$T?%? zX6bvrk=e!aKNPA=&v^2(tbY^m;d1Livs#rm8a+*CcNITaZOi*k@}PlorgqJmk8Oe( zAsd$R%cy*2{K=3Z$WW`W-~sder#}wAJ5`~Pv%2wl{XT|EE3)>pFVDJ^=$AJ^NucM! zzp}G8*dK;Q7Ht14=+T*8Z_~cX{i{Iq+SUeXK?8M7hGXrzn>X{HS;oomKg5BHQHs^> zdS3gJ-{uef-}T?o$Xm_6{g3mNnuM2M1ym=R-5-be@EH}jjKKQWiUM+k;Y~tM_X}6>QH8`6N zB=tTzZu?ZrXqDRY0Y6Q2R zT<5#?3G;+}mV}% ztNGz5&y;*&>7t{)i~c`lIdE`Q%8Msm-a^M$uS;@o3^bJcFhN`8;!^eU)D4mKjB4tC zxssKqf40+?sI1f6Q-6_rpT`I0>s$6dSZ&MN?k%La&`jR0Rh8T`+^lpoWCWX_Dl0l?>Kkw z$s|68JpvrR54`$h@P_kTWyr<#?QSp34E2;=7rV@kcp(?|Nb!{IqORwxpBQ&MC9)Ul$sm$NfCrfe5EI+yQjGEXd zMhyps5B*Fvb_R~Gx$6_&eSN+)^kkHaP)O(gom(vITgv|)xbsHg&G~nly{grmt->Zd zm#{Zzu~QM@vLQGn;0cl|7Sg;DDb_p zH1y#O;XO;9RJ=E4HfA_cli)PV{F}9&>C1}i!td659QpTV$`##JnOUx!4BQ+pH3`+a z|BP~X)vbTyx^&0wBa*sH_jsT53t67n|9jw2y0{pwEp9Mi`7Qn7`wew*mQ!&d zRqr!rzbJnZy}I(caNE_ir2hANUGlG*Y@ERFuuza8h=b4kVf|sdtGSc+&fBnVGwbf8 zj`vGL9)A6CR9^T|eUR^DZ!U&4?1>y}Y9HLV%kzfwU&Qv-dO^=NRu-jT$I9x-FUs%K zT{^ORmBlJW@#>n#kHc0iJGr!mA#WCg#v3+=1MDSk3{JBzbuv!aeDaCk?jOJQPCEW| z&u{Jvxk)iS-Je5zCwqG_bo4Sk3wA8H9Quay-*Mjho4>iUtloFmxic0q%=1-y{`$k| z%g2sauUxiLRF*--VZ(C9|4VYc9_rov&Hc{4T4$fjn?%d};MJG6Uf*#1d)c9^t0sG= z@gL9?W{BYEVfb;?E!qFWoJ9$L76tY2KbTgmYVx{r`>fUwwdDTyi?!`mWfpldHt;6! zIm*jli2i-xl-Hld3H`U1|K7Ww;c4~E*BkE_ZZex&e)(nJCy75CQ~%A*niUhol)yZ} zk9G6urj6R!WVpc0IFo;iO}$c8)9T$(OLC1ierPmk z>Q$Sc^6TTiDX%{3{ApgoeP?P@)U2qJYzZ+R-2~bi?z3OIeQJaH&(DYE{=JoN@$8mV zMvd0KLgBk=VpW_+cWAHP@LKe>RaD63Cqax1AA%2_Ydamm&}SN}d?O|4EpvBwUy{A` z9z*vpf0WhL+yBDMY?s+le-~JLY|(!Zlx*ko;$G#OC3X(%3`!hlY7gvJ?0ccISoiUZp9jB0 z|E^&CvHYC;wh-6k_kT*=14@<3GJn3%ws-t|Ic(8+X9w14M-N;%!yqC0{2=$i9TEN& z=83#M`*yL$Z02w9KPY)4T#8-L^!h{n!t6J%m_IRU+)d$gFlU*u^1)mu`!`n`t`@x! zpIfl}v)mK=b#0fvxjkC+U8MW>cVXk&j&I^`)^xnRe(%7x=du?r{A7rlXJ@9Pe|+zo zN0*oMmVIUPV#pDaWNlIWu(FpWx-I;q4P+91I3+o33X zqiO?G2hZjmP=gS|n!!!G_kOYd_C@_!PwJjnT-J9Yn(PYIzyQ^mtS z9xacoesk+emk>i;%i@L~e;a>_9(TAO=lzvsdr{E0z;*NAOb(7W3<8hz8-m&s|>>D$qMX$g9X1&JW`|IM9B9-afC5i&~CNTHL z@~g_T@6yu9Tig7iO81Ajt7P5p`#YXwURM(wBp zH@zqjAf6u)x@Gr2qnwqUjW@(LZLiSPuyXpl^s4-_Ux&s6?$i0qhBvvUfaJv zX7$UQM$YTC5tF^SIYby5`uIH>6H<>xE(%oGq1S4AEoA47KU$ znxglm7><8reCeyh<~8}W>zA&4)`sSv4Rh4Qv~r6)xBu9~aN{a_g~ExY_phAttZk_K z$jTUSik)leZ-z)=?y2TGZMH|ueALbS;EdgZRcg~uiN=dCus1pw%6k;E$ww^8`M8n6 zVitb}`vm?Qi+;E;ocP+P6#ctl`{&;cYrFjU8Z24PfSUgYyfrKsa>8qp7-sO_IKtlM zuDdn&qblQq4g5VzA2DZ(eq@ZcF_Bug(fMN}a!(r6rC!zbpIQI(x6_UHH|jAkFfe$! L`njxgN@xNAyh3I! diff --git a/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_128x128@2x.png b/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_128x128@2x.png index 71642ef953e6170ca646da9ebc8f6679a2c92d56..80f535f41fe949bc24c984b2d09bc5535b369141 100644 GIT binary patch literal 8293 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 x?b>z~)o!eP061wfc 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 x?b>z~)o!eP061wfc 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∓~CW3PYs zw3)~JFCW+S*3AK(Q?;7`bS4OB!|*ZTp_7=U;fP)}GGa zJfbm%ZP&c*EbI zX@69|TfdxYx2|+)FSh{WLl)$nrW?B13v&NS-~3a{?r;Ru{Q#d>Q?t(BD?Iz&kNo@D zQ>KbfdU{mY_?CH{J>!DgfgqnXuy5GSp75Dp3zWke4EmXp){C}m{TQFWPZiYbetvWQ zPP5+{{i#VTunS zYp;GTOQsJDTrQw-G!0P5b%AWMWSH}Bf`X014MBs=MfC@I_rEFY?a{oiRBNohE&tC! z&@{w`HS7|g1F~33#TQ7+Ey&&Yvt1T6vg#lqw;=zUie_oPYE7)w!R)bQh3n)z_innn|^!s{qg_zo!_kPd}<7M%6i&2hA3qRPyP$%efSSN zTb~V9o#^85ep|imd!pOkASIhxEu=}a8;69U@fN*B-e2EKB(+`z<8yf;j)c`7ISTopKK>z~*e2%6=mgloYpzf@1(&wt?0SM6+!8dD|KslH8RICg4RT36t0pK5x%O zC}iM&aF=<*&)aqkYanNkiP|~{fh^p@p76Qc2deO^%>hBsqB0>+WFBN(kO2*mYF7q1 z2Uq?B&)$PNkDxhmN45hJHVu&)0{jWfKqizhJYf98-f)d$!yfh-kb>*YOU4_2I2qo` zIed0*`oM6ivf&=6%$RKJ(DT-oVYWTv10MblEthQ%aDtuuAcp^fDicVDO~X3K^1fTl zJsTFXOEj^+kYe~A+kJLEGzg#Bsc`Twn8SYKxd#7%XQ0vYoY#y+;GkuYJCMz=;ioVt z-+_{qJ}9f4lv5~Rfe30>G}!rlXMofU4(=i+z}i1Bn0;b+2@X+(j@=A7|G*Ow5O3(b z2hC`h)r02(4=}HI#W)F6Ssk_kc_CpTxZsp|#8?GNtjDStzzP%k*k^!FC$hNCeB>dc z$Y+M{^4)2l)fsX`K^v$Wn&YKf*bgwXh%@H=V`;dhApot!r+i}go%@h6X7+yturUw^ zh;%d9G)!~{sb!Emu!W;w3j2%8}J++ f!pQ5)fBx$$C){Pv>bT6nz`)??>gTe~DWM4fSRUgd diff --git a/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_32x32@2x.png b/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_32x32@2x.png index 0876aa7827a83ab20848bbd93272ff48553fa711..02493934b76c8000674965891b26d199b78412cb 100644 GIT binary patch delta 2119 zcmbOwctv1>O1-qFi(^Q|t+%sohKsn1wEwl966)Z}JL!nJzuc!O?N3w;rMB;ob}e8x z4>)3L`0kjf$Q|(j7gnWL3QA0yI8XE)R*NpUAt>Tlzw%{S)v{&Pv)0LdF;FkI{TfpH zE2Q?`uV?qN+ITm&+rCNUufE|NxZ~cp&qcd8$2>2qmb{bqGx15iuhF7f!%xS8diMCa zP2rDGKDlEX%erv!!(UG&?TGm&t2bTj;8P~a=i-N+-eIzsud1A6H|Oy4gFnyMSj?Tr zy?ldZ0hj9ID>)W(fAIDlKWSmc-RGWu=;QmD1r|okeC;PKOl0}kmmhq1z@+EKe{Hun zbGroVCvHsVYWx3_yY0W@v3K<+7bX6E_I}dY<7=<%JgUdu=)fSrVVK0RPNqdwP2dZ| zi5)B2H%w@LaK>?lKJP;jN%i!@7nNFGGO_R-uw!n~+$6B(&Yvv(@AYA??mP}Zpj*bu z-*B3VnI&GB!_J0dJmRiAyY5b}m+Mh&bT-e>-6FKpheZ#-_xq>wn3lZEMk$RU9b zjfWZR64)M0lvwcj!jEQ$23HQRT7i=fnhWaLxLy;KNz$hVBFviyZUm(L@TUkV~7%;eBu;8Ii2c96Y26QuVp17lO~&jW#v>NPen zdt7E#a4r$iaR_+TJe$XE$AJgU!flHcbX`Rm%$m+KX>x3P&RoXulBI#+;2HLQi5h|9 z51O;*pJPA6aLk6cMWsdY33ED|{08O|3Jfe9+uk#mG0b#)ps<8J>BY|k#?Aa8ObUlD z1^!U6i?BLjXW*2;K4B{-v*QoT=L+Yp+SR)ShRa6XD_!{B+1~0`RlwE1To=Deey9{% zc7omRrFy~ZRJK*S;}(97<^Of>`{J*;;#yYH6R!j`JZ}B?!Pic$?Z5-(GKQNh4GfLn z8lO+@-En0?7ypy{4ij&#I(mJUgQt8?e{}P4U)KPk-n(nHY7C-3Fd8$QpL15g@yCni zj$g+U>O22@lj`w{P)92WT3;PC-ZGaloabO*W|_SBL+w4rFZC7v zy6b+F+LmP{KZq7+>^&O3@SSMnBDRRQ&MUl%#~@G_b=|%P0xO( z7M+fDXBRyCCVt;+HGd8JR=WiD3ENq1TFx@Ha9S#c-1@fX{m~m+9J;?cdUr8k?_f z`u*u%-je+WC+rf~13VaJIR04qL}TlVL+`A(mm2XaF4CL1j@4^XOWne4%V+*;_25}H zdzs@mM(c(}xepXuI0V$}?tAL)s$aaHecsI3I^VcwrR`GqbkbgT%ekFzuU@$`WefAE z_xusH4hkEXHPje<6eMZ_?%#IPttq+~xG+R6`B8IWrenry<9Wrk_YDkHBX-#DxIDvo zZ@PQomP5apOYIWa4A!MsS8#j@?8rH{L~LEAc3b+jv|X7>ksFq4ONPP02MeEJ>s z(}A@?)*y}XZS#z4G0XA{R&Jf)QOF#xGV=>}dVQ9hR$cqH*YT(AIu`Xet#0AJ!8k>b zK}^9%<3`_&Z8fgk`c<**`j^ZDzcw;9rC+kTlY1)o%e-6f(pJ|T;9F3mUcqtO@#lgI zFPdjQP292Qv_q!9vbs&}{0qMu{a$ZZIlKS#P3`LWJ1q2h40|K*_)hxg=J|i#x_#y= z)Mb7|(I9((o9O^c(-i(CzgW+|IeX&ms)Y(Rxz|s{uhQD<;e?>vZ)DPp`SXM} hcH1`}?K}T7SpAEhpzXkx&%nUI;OXk;vd$@?2>|+L%%T7Q delta 2190 zcmca2FiUWPN`0cIi(^Q|t+%s&2Tuu=I6nIy&(zu6i;m9NA7Xs2q;S^Cv{|z}&YGBZ zoA^2&RS`^fWfs)ly<%qevesox-MgYR#CK|)Xi{=I)YNfj{Yl?xv+tkV{rlb1H^1M_ zE5Co&)r7CO?h#M%x%THj_na@j_kHDZwc}4_$V_fFopNfq=<{ozj5e%g6s8&*jM{Z1!^1Ek9wiQ>d=Kj%&a0{6pU>IBJCL8{f;P{QGBE(_hOof3fz1 z&$rz_SUNphfBIo@h2@^m(+_GhH22gietyvY;onc^3fTyz^?$n`ZtXua->%_$zkI?i z{%(V}zrP#i>d(Bddt^(#c+xBLdTxW#^EE!c3dP^6XGr~*TlR+Q*pwaRhN@u}sj~Ot zg;xb-Tx)V@;5<~q+;UZf#h$rkYCoG36TjlTb^-A>Yz%iE{^tw*86UxZw9-hEBilt` zjZmY25>sNU;2}Y|Ly3G$>Jwlf|Ok~@&3&Cp%J@IKm=kw5W!&1wyf`Z7j_ z@*i6arvAU5_~E~{2opzo1;?|Hh+K2gKRgUhD>Ocsx*X)v;;IR`Ca`94LZ^p_j*w?7 ztI|pV9p;9YA2MGjGCC|{JYc0II_IY0!U z91T9q4QKu5@ZVrqSHmgQB%|3knLp&*?*`rnT8s&88zNZ_xqLks)>^RQ!9(caJPif~; z4pZi}KgxH=FXlg9P+!4N&US0Ut(cy#sqTi4AF+AbMNF96V4t-)uyQ|R?60_ytoijZFT${<53wISf%u4h#n;ajnmM9C-0MhorLjLlHUGG zSf<94F1^n2)rC8IpKaow!H_o9rLisH`&z$q&f1zc^Vnl~vI?Atme>idL0dnO4xJ9e!15tXTX{ne%aI{PJtDS6GgS}xZwO3TSe zAM0+t?fSae(sJSpS;-~!*WRzPa<-M)d|P|P{plrFtuC6JT+e@lA+Ls2xkZD^si@j; z>%-G`r}DjK?)4Rk$OVzWK#6%QxY zZdmu(0B2r_JYx#iWZgM}+WhPoZ*NSrOn^t`#MR($Kj+^w2?^}ky;MDGuN zefz8Jvmi^2zub=h^w0dC7OArHFuM=K`5BBe79Dued~RZ0*5QY{>}9`kYv;=?yT;%1 z>g?Y`pChAL8Sb6yEq|=qRSR;4wqlDw>${1JS%;-d)n&eMD?ZiA`g`F<$IkeQhnoZr zMDHy8G;5jg9uZYg`VwOdkkf6bzhH62H`n5m-=xEJiLp-&v;O{_$X;`K3*+X^N-PZb z&iWTr?^pOXsg-v@6T<_=h~Eo7IT~+$xVKka_8Yf#){En6*Ntbq<7Ya#W$J@Zi)#H$ zed~@YyEsT^-J>F)o1edA8@p|8sxEd|CK<$yYeRdmsCqjj%M=5uDVoj zm%zM2g~3HZ#bjxq^gGGg21`}1j=S+b2V;CjpZ&fdm< z_vyU-0yDPOb9VApw&ew$3YgqcaFsoW;i`3FivV-A9mlSfN1pvs$=H>@!0&#dfYSGf z$5t-41*6OTmc%d64}C8F{^-kPtJ~@tUn^P4zc_jS(W&%zVVZll^01ePZ~SrUyWZ~x zUI%xEkoN+O3tBdKEc)FVc}v6bvWbCJOZe78qkH;0elONZ)~felUSRCn_%}r0wfK&8 zALmBfb9BjgzkYM;H*5J7b{_^u(|Bpdkkjo8vQ92!xFh@K!0B5N>;i{e?GJr8;yx>f zVQaiI$H9I4N8a&2o1%5m;Z3~TB}Jd<9g(dQo0gsY*>B*aD_~;7A_)p}VQ#4=8~Hs2 zwd%DitER3ON!^=YGP|BXeoY7hC5G~H%`|{lNYHt$KEBP&acmP zK|!eZI`(^wExifq}u3-PO-!ol`;+ E0I-Yb#Q*>R diff --git a/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_512x512.png b/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_512x512.png index cb6599145d3a83ab6f330ce4cdf04430aa55aced..6971a20ef88420fe7fcbf2bbc431c450c4007dcb 100644 GIT binary patch literal 19277 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∓~CW3PYs zw3)~JFCW+S*3AK(Q?;7`bS4OB!|*ZTp_7=U;fP)}GGa zJfbm%ZP&c*EbI zX@69|TfdxYx2|+)FSh{WLl)$nrW?B13v&NS-~3a{?r;Ru{Q#d>Q?t(BD?Iz&kNo@D zQ>KbfdU{mY_?CH{J>!DgfgqnXuy5GSp75Dp3zWke4EmXp){C}m{TQFWPZiYbetvWQ zPP5+{{i#VTunS zYp;GTOQsJDTrQw-G!0P5b%AWMWSH}Bf`X014MBs=MfC@I_rEFY?a{oiRBNohE&tC! z&@{w`HS7|g1F~33#TQ7+Ey&&Yvt1T6vg#lqw;=zUie_oPYE7)w!R)bQh3n)z_innn|^!s{qg_zo!_kPd}<7M%6i&2hA3qRPyP$%efSSN zTb~V9o#^85ep|imd!pOkASIhxEu=}a8;69U@fN*B-e2EKB(+`z<8yf;j)c`7ISTopKK>z~*e2%6=mgloYpzf@1(&wt?0SM6+!8dD|KslH8RICg4RT36t0pK5x%O zC}iM&aF=<*&)aqkYanNkiP|~{fh^p@p76Qc2deO^%>hBsqB0>+WFBN(kO2*mYF7q1 z2Uq?B&)$PNkDxhmN45hJHVu&)0{jWfKqizhJYf98-f)d$!yfh-kb>*YOU4_2I2qo` zIed0*`oM6ivf&=6%$RKJ(DT-oVYWTv10MblEthQ%aDtuuAcp^fDicVDO~X3K^1fTl zJsTFXOEj^+kYe~A+kJLEGzg#Bsc`Twn8SYKxd#7%XQ0vYoY#y+;GkuYJCMz=;ioVt z-+_{qJ}9f4lv5~Rfe30>G}!rlXMofU4(=i+z}i1Bn0;b+2@X+(j@=A7|G*Ow5O3(b z2hC`h)r02(4=}HI#W)F6Ssk_kc_CpTxZsp|#8?GNtjDStzzP%k*k^!FC$hNCeB>dc z$Y+M{^4)2l)fsX`K^v$Wn&YKf*bgwXh%@H=V`;dhApot!r+i}go%@h6X7+yturUw^ zh;%d9G)!~{sb!Emu!W;w3j2%8}J++ f!pQ5)fBx$$C){Pv>bT6nz`)??>gTe~DWM4fSRUgd diff --git a/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_512x512@2x.png b/src/app/qtcreator.xcassets/qtcreator.appiconset/icon_512x512@2x.png index 760b7f8a08ddd1031d36507b5df5fa819faf737d..f9b69ff4ca91301eff85d9390c9b7f91b3f6ab08 100644 GIT binary patch literal 49381 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 Date: Mon, 10 Mar 2025 14:12:07 +0100 Subject: [PATCH 106/117] CmdBridge: Fix possible access to failed expected value Change-Id: Idc0b1b81c92ac44081e6a26a2c2ca5485afdc502 Reviewed-by: Eike Ziller --- src/libs/gocmdbridge/client/cmdbridgeclient.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/gocmdbridge/client/cmdbridgeclient.cpp b/src/libs/gocmdbridge/client/cmdbridgeclient.cpp index d35256fe356..33a6961f46d 100644 --- a/src/libs/gocmdbridge/client/cmdbridgeclient.cpp +++ b/src/libs/gocmdbridge/client/cmdbridgeclient.cpp @@ -857,7 +857,10 @@ Utils::expected_str> Client::signalProcess(int pid, Utils::Control bool Client::exit() { try { - createVoidJob(d.get(), QCborMap{{"Type", "exit"}}, "exitres")->waitForFinished(); + createVoidJob(d.get(), QCborMap{{"Type", "exit"}}, "exitres").and_then([](auto future) { + future.waitForFinished(); + return expected_str(); + }); return true; } catch (const std::runtime_error &e) { if (e.what() == std::string("NormalExit")) From e42a4b52091d07a01042c5620b1fecf865500976 Mon Sep 17 00:00:00 2001 From: Lukasz Papierkowski Date: Mon, 10 Mar 2025 15:19:17 +0100 Subject: [PATCH 107/117] LUA: Fix QCompleter event filter crash by giving it a parent Previously, QCompleter was created without a parent and returned to Lua via a unique_ptr, which could lead to a use after free when the event filter was triggered. By assigning a parent to the QCompleter and returning a raw pointer instead, Qt properly manages its lifetime, preventing the crash. Change-Id: I53bcd8202094397c0cb40aacd52673027883c52c Reviewed-by: Marcus Tillmanns --- src/plugins/lua/bindings/gui.cpp | 5 ++++- src/plugins/lua/bindings/qt.cpp | 11 +++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/plugins/lua/bindings/gui.cpp b/src/plugins/lua/bindings/gui.cpp index a69c5a36ab6..02fa73f7647 100644 --- a/src/plugins/lua/bindings/gui.cpp +++ b/src/plugins/lua/bindings/gui.cpp @@ -11,6 +11,7 @@ #include #include +#include using namespace Layouting; using namespace Utils; @@ -196,8 +197,10 @@ void setProperties(std::unique_ptr &item, const sol::table &children, QObject if constexpr (has_setCompleter) { const auto completer = children.get("completer"sv); - if (completer) + if (completer) { item->setCompleter(completer); + completer->setParent(item->emerge()); + } } if constexpr (has_setMinimumHeight) { diff --git a/src/plugins/lua/bindings/qt.cpp b/src/plugins/lua/bindings/qt.cpp index 5f0d8c2e88a..16bcb12b714 100644 --- a/src/plugins/lua/bindings/qt.cpp +++ b/src/plugins/lua/bindings/qt.cpp @@ -29,8 +29,15 @@ void setupQtModule() qt.new_usertype( "QCompleter", "create", - [](const QStringList &list) -> std::unique_ptr { - return std::make_unique(list); + [](const QStringList &list) -> QCompleter* { + return new QCompleter(list); + }, + sol::meta_function::garbage_collect, [](QCompleter *self) { + // If the user never parented this QCompleter to any QObject, + // then we own it, so let's delete it to avoid a memory leak. + if (!self->parent()) { + self->deleteLater(); + } }, "currentCompletion", &QCompleter::currentCompletion, From 88170f87f44a9ac06d57c2a1ec1fe5c5af013574 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 10 Mar 2025 14:48:30 +0100 Subject: [PATCH 108/117] Debugger: Don't try to elf-read remote paths It takes way to long and blocks the main thread. Task-number: QTCREATORBUG-32562 Change-Id: I7f4fa5ea862ab5d82b1d355e79536da4b26e9038 Reviewed-by: Marcus Tillmanns Reviewed-by: hjk --- src/plugins/debugger/moduleshandler.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp index a2d6cac565c..75655056566 100644 --- a/src/plugins/debugger/moduleshandler.cpp +++ b/src/plugins/debugger/moduleshandler.cpp @@ -296,13 +296,18 @@ void ModulesHandler::updateModule(const Module &module) m_model->rootItem()->appendChild(item); } - try { // MinGW occasionallly throws std::bad_alloc. - ElfReader reader(path); - item->module.elfData = reader.readHeaders(); - item->update(); - } catch(...) { - qWarning("%s: An exception occurred while reading module '%s'", - Q_FUNC_INFO, qPrintable(module.modulePath.toUserOutput())); + if (path.isLocal()) { + try { // MinGW occasionallly throws std::bad_alloc. + ElfReader reader(path); + item->module.elfData = reader.readHeaders(); + item->update(); + } catch(...) { + qWarning("%s: An exception occurred while reading module '%s'", + Q_FUNC_INFO, qPrintable(module.modulePath.toUserOutput())); + } + } else { + m_model->engine->showMessage( + QString("Skipping elf-reading of remote path %1").arg(path.toUserOutput())); } item->updated = true; } From df1871d44c226ae9106d0cb8f9daad4d28322a1b Mon Sep 17 00:00:00 2001 From: Sami Shalayel Date: Mon, 10 Mar 2025 15:47:21 +0100 Subject: [PATCH 109/117] qmlls: disable by default Disable qmlls by default. This disables qmlls when running qt creator with '-tcs'. Fixes: QTCREATORBUG-32591 Change-Id: I878729d07ca55625c4b70bc616b487ae09563333 Reviewed-by: Fabian Kosmale Reviewed-by: Eike Ziller --- src/plugins/qmljseditor/qmllsclientsettings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/qmljseditor/qmllsclientsettings.cpp b/src/plugins/qmljseditor/qmllsclientsettings.cpp index 88b1b6f5152..270a237f876 100644 --- a/src/plugins/qmljseditor/qmllsclientsettings.cpp +++ b/src/plugins/qmljseditor/qmllsclientsettings.cpp @@ -65,6 +65,7 @@ QmllsClientSettings::QmllsClientSettings() m_settingsTypeId = Constants::QMLLS_CLIENT_SETTINGS_ID; m_startBehavior = RequiresProject; m_initializationOptions = "{\"qtCreatorHighlighting\": true}"; + m_enabled = false; // disabled by default } static QtVersion *qtVersionFromProject(const Project *project) From 809744657acdca01b83db4f1968d630d4622f48e Mon Sep 17 00:00:00 2001 From: Lukasz Papierkowski Date: Mon, 10 Mar 2025 15:41:43 +0100 Subject: [PATCH 110/117] TextEditor: Fix memory leak Change-Id: Ifef65683793b27cc2d992074449ddf3547cd6b65 Reviewed-by: Marcus Tillmanns --- src/plugins/texteditor/texteditor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index ec61980c657..2560315ad70 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -4121,7 +4121,8 @@ void TextEditorWidgetPrivate::forceUpdateScrollbarSize() // scrollarea which is a private part of the QPlainTextEdit. // During the resizeEvent the plain text edit will resize its scrollbars. // The TextEditorWidget will also update its scrollbar overlays. - q->resizeEvent(new QResizeEvent(q->size(), q->size())); + QResizeEvent event(q->size(), q->size()); + q->resizeEvent(&event); } std::unique_ptr TextEditorWidgetPrivate::insertWidget( From fbb647671564d5f4fa4e320b20996ca407e6af11 Mon Sep 17 00:00:00 2001 From: Krzysztof Chrusciel Date: Fri, 7 Mar 2025 00:07:31 +0100 Subject: [PATCH 111/117] AI Assistant: qdoc instructions for installing models for ollama Change-Id: I7f6f9ecc42ebafd949cc9a225562a0482b283f3d Reviewed-by: Eike Ziller Reviewed-by: Leena Miettinen --- .../creator-only/creator-aiassistant.qdoc | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc b/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc index bba2234cd11..dcc418f4d2e 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-aiassistant.qdoc @@ -50,6 +50,45 @@ \image qtcreator-syntax-highlighter.png {Generic Highlighter preferences} For more information, see \l{Download highlight definitions}. + \section1 Install and use Ollama + + To use LLMs running locally on your computer with the Qt AI Assistant extension, + install Ollama. You can run models available from the Ollama selection as well + as custom models added by you to Ollama. + + \section2 Run models on Ollama + + To run models, enter: + + \code + ollama run + \endcode + + For example: + + \code + ollama run codellama:7b-code + \endcode + + \section2 Supported models from Ollama + + You can use the following models directly from Ollama: + + \list + \li \c codellama:7b-code + \li \c deepseek-coder-v2:lite + \li \c starcoder2:7b + \endlist + + \section2 Custom models + + For custom models, follow the specific installation instructions for that mode. + You can use the following custom models: + + \list + \li \l {https://huggingface.co/QtGroup/CodeLlama-13B-QML}{codellama:13b-code-qml} + \endlist + \section1 Connect to an LLM You can connect to the following LLMs: From e6751e664f7be9d5f2de33bac03cbb17edbcb9e2 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 7 Mar 2025 08:41:02 +0100 Subject: [PATCH 112/117] LSP: add swift mime type Fixes: QTCREATORBUG-32595 Change-Id: Ic46bee0a81b976bcf0406d38967ef7e92d8a190a Reviewed-by: Eike Ziller --- src/libs/languageserverprotocol/lsptypes.cpp | 1 + src/plugins/texteditor/TextEditor.json.in | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libs/languageserverprotocol/lsptypes.cpp b/src/libs/languageserverprotocol/lsptypes.cpp index e6d99ab18c7..05cda63fcb7 100644 --- a/src/libs/languageserverprotocol/lsptypes.cpp +++ b/src/libs/languageserverprotocol/lsptypes.cpp @@ -145,6 +145,7 @@ static QHash mimeTypeLanguageIdMap() {"application/xml", "xml"}, {"application/xslt+xml", "xsl"}, {"application/x-yaml", "yaml"}, + {"text/x-swift", "swift"}, }; for (const QPair &languageIdForMimeTypeName : languageIdsForMimeTypeNames) { const Utils::MimeType &mimeType = Utils::mimeTypeForName(languageIdForMimeTypeName.first); diff --git a/src/plugins/texteditor/TextEditor.json.in b/src/plugins/texteditor/TextEditor.json.in index d88f141a18f..11da1b42b8c 100644 --- a/src/plugins/texteditor/TextEditor.json.in +++ b/src/plugins/texteditor/TextEditor.json.in @@ -52,10 +52,15 @@ " ", " ", " ", - " Rust souce file", + " Rust source file", " ", " ", " ", + " ", + " Swift source file", + " ", + " ", + " ", "" ] } From db7f96168568d6b582180147eb7be532ff9ed86d Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 11 Mar 2025 10:47:09 +0100 Subject: [PATCH 113/117] Doc: Remove broken links to JSLint Error Explanations The site at the old URL no longer exists. Link to the GitHub pages where users can find the explanations. Change-Id: I2bdbdbbdd7483266bdc66b3cce4c3b04ff9992d6 Reviewed-by: Fabian Kosmale --- .../src/editors/creator-code-syntax.qdoc | 81 +++++++++---------- 1 file changed, 38 insertions(+), 43 deletions(-) diff --git a/doc/qtcreator/src/editors/creator-code-syntax.qdoc b/doc/qtcreator/src/editors/creator-code-syntax.qdoc index 75d81c1e08c..b5b230720dd 100644 --- a/doc/qtcreator/src/editors/creator-code-syntax.qdoc +++ b/doc/qtcreator/src/editors/creator-code-syntax.qdoc @@ -137,7 +137,8 @@ Many of the error messages are similar to the ones in Douglas Crockford's \l{http://www.jslint.com}{JSLint} tool. For more information about JSLint - errors, see \l{http://linterrors.com/js}{JSLint Error Explanations}. + errors, see \l{https://github.com/jamesallardice/jslint-error-explanations} + {JSLint Error Explanations}. \table \header @@ -204,33 +205,30 @@ \li M10 \li Error \li Duplicate property binding - \li See also: \l{http://linterrors.com/js/duplicate-key-a} - {Duplicate key '{a}'}. + \li For more information, see \e {Duplicate key '{a}'} in + \e {JSLint Error Explanations}. \row \li M11 \li Error \li Id expected - \li See also: - \l{http://linterrors.com/js/expected-an-identifier-and-instead-saw-a-a-reserved-word} - {Expected an identifier and instead saw '{a}' (a reserved word)}. + \li For more information, see + \e {Expected an identifier and instead saw '{a}' (a reserved word)} + in \e {JSLint Error Explanations}. \row \li M14 \li Error \li Invalid id - \li See also: - \l{http://linterrors.com/js/expected-an-identifier-and-instead-saw-a-a-reserved-word} - {Expected an identifier and instead saw '{a}' (a reserved word)}. - + \li For more information, see + \e {Expected an identifier and instead saw '{a}' (a reserved word)}. \row \li M15 \li Error \li Duplicate id \li Ids in a file must be unique. - See also: \l{http://linterrors.com/js/duplicate-key-a} - {Duplicate key '{a}'}. + For more information, see \e {Duplicate key '{a}'}. \row \li M16 @@ -270,7 +268,8 @@ \li M23 \li Warning \li Do not use \c eval - \li See also: \l{http://linterrors.com/js/eval-is-evil}{eval is evil}. + \li For more information, see \e {eval is evil} in + \e {JSLint Error Explanations}. \row \li M28 @@ -282,8 +281,8 @@ \li M29 \li Warning \li Do not use \c with - \li See also: \l{http://linterrors.com/js/unexpected-with} - {Unexpected 'with'}. + \li For more information, see \e {Unexpected 'with'} in + \e {JSLint Error Explanations}. \row \li M30 @@ -333,51 +332,48 @@ \li M108 \li Warning \li Function \c name is used before its declaration - \li See also: \l{http://linterrors.com/js/a-was-used-before-it-was-defined} - {{a} was used before it was defined}. + \li For more information, see \e {{a} was used before it was defined} in + \e {JSLint Error Explanations}. \row \li M109 \li Warning \li Do not use \c Boolean as a constructor - \li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} - {Do not use {a} as a constructor}. + \li For more information, see \e {Do not use {a} as a constructor} in + \e {JSLint Error Explanations}. \row \li M110 \li Warning \li Do not use \c String as a constructor - \li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} - {Do not use {a} as a constructor}. + \li For more information, see \e {Do not use {a} as a constructor}. \row \li M111 \li Warning \li Do not use \c Object as a constructor - \li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} - {Do not use {a} as a constructor}. + \li For more information, see \e {Do not use {a} as a constructor}. \row \li M112 \li Warning \li Do not use \c Array as a constructor - \li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} - {Do not use {a} as a constructor}. + \li For more information, see \e {Do not use {a} as a constructor}. \row \li M113 \li Warning \li Do not use \c Function as a constructor - \li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} - {Do not use {a} as a constructor}. + \li For more information, see \e {Do not use {a} as a constructor}. \row \li M114 \li Hint \li The \c function keyword and the opening parenthesis should be separated by a single space - \li See also: \l{http://linterrors.com/js/expected-exactly-one-space-between-a-and-b} - {Expected exactly one space between {a} and {b}}. + \li For more information, see + \e {Expected exactly one space between {a} and {b}} in + \e {JSLint Error Explanations}. \row \li M115 @@ -397,15 +393,15 @@ \li M117 \li Warning \li Confusing pluses - \li See also: \l{http://linterrors.com/js/confusing-pluses} - {Confusing pluses}. + \li For more information, see \e {Confusing pluses} in + \e {JSLint Error Explanations}. \row \li M119 \li Warning \li Confusing minuses - \li See also: \l{http://linterrors.com/js/confusing-minuses} - {Confusing minuses}. + \li For more information, see \e {Confusing minuses} in + \e {JSLint Error Explanations}. \row \li M121 @@ -453,9 +449,9 @@ \li M201 \li Hint \li Place var declarations at the start of a function - \li See also: - \l{http://linterrors.com/js/move-var-declarations-to-the-top-of-the-function} - {Move 'var' declarations to the top of the function}. + \li For more information, see + \e {Move 'var' declarations to the top of the function} in + \e {JSLint Error Explanations}. \row \li M202 @@ -609,15 +605,14 @@ \li M307 \li Warning \li Use \c new only with functions that start with an uppercase letter - \li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} - {Do not use {a} as a constructor}. + \li For more information, see \e {Do not use {a} as a constructor} in + \e {JSLint Error Explanations}. \row \li M308 \li Warning \li Do not use \c Number as a constructor - \li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} - {Do not use {a} as a constructor}. + \li For more information, see \e {Do not use {a} as a constructor}. \row \li M309 @@ -707,9 +702,9 @@ \li M323 \li Error \li \c Number elements expected in array value - \li See also: - \l{http://linterrors.com/js/the-array-literal-notation-is-preferrable} - {The array literal notation [] is preferable}. + \li For more information, see + \e {The array literal notation [] is preferable} in + \e {JSLint Error Explanations}. \row \li M324 From 817996336c7a916cf5405062656168665b38c3eb Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 11 Mar 2025 10:10:03 +0100 Subject: [PATCH 114/117] Docker: Fix that GDB cannot write the index cache The default setting for Docker devices is that we set the user ID for operations on the device to the local host user ID. This makes sure that when files are created by the Docker device in mounted local host directories their user ID is sensible (and not root, which would be the default). Unfortunately that user ID (most probably) does not actually exist on the Docker container, and the HOME directory defaults to the root directory "/". GDB then tries to create its index cache directory in "$HOME/.cache" which is not writable by the user ID. Fix this by explicitly setting the HOME environment variable to something writable when we use the local user ID on the Docker device. Task-number: QTCREATORBUG-32562 Change-Id: Ice8be129c6b1da051438b49261ffcafec0864e04 Reviewed-by: Marcus Tillmanns Reviewed-by: hjk --- src/plugins/docker/dockerdevice.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 29f6a90e990..c89a9f7d16e 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -935,8 +935,10 @@ CommandLine DockerDevicePrivate::createCommandLine() #ifdef Q_OS_UNIX // no getuid() and getgid() on Windows. - if (q->useLocalUidGid()) + if (q->useLocalUidGid()) { dockerCreate.addArgs({"-u", QString("%1:%2").arg(getuid()).arg(getgid())}); + dockerCreate.addArgs({"-e", QString("HOME=/tmp/qtc_home/%1").arg(getuid())}); + } #endif if (!q->network().isEmpty()) { From 55ce4e9c06e3651b66219dd9503f68214152e853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Mon, 10 Mar 2025 22:07:25 +0100 Subject: [PATCH 115/117] SquishTests: Don't try interacting with disabled "Details" buttons When creating a Qt Quick UI project, the "Details" buttons of available kits are disabled. Change-Id: Ie05eac3b5f9d59eef4cdba84bbb7981f7ee15fdb Reviewed-by: Christian Stenger --- tests/system/shared/project.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index a46d522cfa6..b9f351aff02 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -437,10 +437,14 @@ def __chooseTargets__(targets, availableTargets=None, additionalFunc=None): checkedTargets.add(current) # perform additional function on detailed kits view - if additionalFunc: + if additionalFunc and detailsButton.enabled: ensureChecked(detailsButton) additionalFunc() - ensureChecked(detailsButton, False) + if detailsButton.enabled: + ensureChecked(detailsButton, False) + else: + test.verify(not detailsButton.checked, + 'A disabled "Details" button should not be expanded.') except LookupError: if mustCheck: test.fail("Failed to check target '%s'." % Targets.getStringForTarget(current)) From 211095893064b092336fe52264b3b066d4c9c3cf Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 11 Mar 2025 10:55:43 +0100 Subject: [PATCH 116/117] ProjectExplorer: Fix possible crash when renaming files An event loop might run during renameFiles(), so we cannot be sure that the nodes still exist in the end. Amends 05430afdcf1e10f4cc9b43407f996993a6175854. Change-Id: If93ea2bea525fc1d4a191e4feaa243399cba6957 Reviewed-by: Tim Jenssen --- src/plugins/projectexplorer/projectexplorer.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index d67c636255a..81bcd0c7f07 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2482,6 +2482,13 @@ FilePairs ProjectExplorerPlugin::renameFiles( = Utils::filtered(nodesAndNewFilePaths, [](const std::pair &elem) { return !elem.first->filePath().equalsCaseSensitive(elem.second); }); + + // The same as above, for use when the nodes might no longer exist. + const QList> oldAndNewFilePathsFiltered + = Utils::transform(nodesAndNewFilePathsFiltered, [](const std::pair &p) { + return std::make_pair(p.first->filePath(), p.second); + }); + FilePaths renamedOnly; FilePaths failedRenamings; const auto renameFile = [&failedRenamings](const Node *node, const FilePath &newFilePath) { @@ -2547,9 +2554,9 @@ FilePairs ProjectExplorerPlugin::renameFiles( } FilePairs allRenamedFiles; - for (const std::pair &candidate : nodesAndNewFilePathsFiltered) { - if (!failedRenamings.contains(candidate.first->filePath())) - allRenamedFiles.emplaceBack(candidate.first->filePath(), candidate.second); + for (const std::pair &candidate : oldAndNewFilePathsFiltered) { + if (!failedRenamings.contains(candidate.first)) + allRenamedFiles.emplaceBack(candidate.first, candidate.second); } emit instance()->filesRenamed(allRenamedFiles); return allRenamedFiles; From 2109a4ad5747cc4e056aa5a0a57a1c5dc0ca984b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 11 Mar 2025 12:26:37 +0100 Subject: [PATCH 117/117] Update qbs submodule to HEAD of 2.6 branch Change-Id: I493e31dbeb45065dd95c119d8015d51203f8a137 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 410653d3314..217c7add0ef 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 410653d331469aacef5db7568132a04cd92a9302 +Subproject commit 217c7add0efcc8f84d1f80da5d332730af251ffe