Merge remote-tracking branch 'origin/9.0'

Conflicts:
	src/plugins/cppeditor/cppeditorplugin.cpp
	src/plugins/docker/dockerdevice.cpp

Change-Id: I41747ff9490e4ab20340d4d4acb4655100aaa3d2
This commit is contained in:
Eike Ziller
2022-12-07 10:47:47 +01:00
36 changed files with 353 additions and 284 deletions

View File

@@ -682,6 +682,20 @@
\li An import statement has been added twice. For more information,
see \l{Import Statements}.
\row
\li M401
\li Error
\li Do not reference the root item as alias
\li The alias property cannot reference the root component directly.
Create an instance of the component instead.
\row
\li M402
\li Warning
\li Avoid referencing the root item in a hierarchy
\li The alias property cannot reference the root component in a
hierarchy. Create an instance of the component instead.
\endtable
\section1 Resetting the Code Model

View File

@@ -8,8 +8,8 @@
\title Using Squish
\l{https://doc.froglogic.com/squish/latest/}{Squish} is an automated GUI
testing framework for testing Android, iOS, Java, Qt, Tk, Windows, and
\l{https://www.qt.io/product/quality-assurance/squish}{Squish} is an automated GUI
testing framework for testing Android, iOS, Java, \macos, Qt, Tk, Windows, and
XView applications, as well as HTML-based web applications running in
browsers, such as Apple Safari, Mozilla Firefox, Google Chrome, and
Microsoft Internet Explorer and Edge.

View File

@@ -175,19 +175,24 @@
\section1 Supported Qt for MCUs SDKs
Since version 7.0.0, \QC supports version 2.0 and later of the Qt for MCUs SDK.
For older versions, refer to the following table.
\note The Qt for MCUs SDK 2.3 requires \QC 9.0.0, or later.
The following table lists the \QC versions you can use to develop
applications with particular Qt for MCUs SDK versions.
\table
\header
\li \QC version
\li Qt for MCUs SDK version
\row
\li 7.0.0 or later
\li 9.0.0 or later
\li 2.0 or later
\row
\li 7.0.0 up to 8.0.2
\li 2.0 up to 2.2
\row
\li 6.0.x
\li 1.3 or later, including 2.0 or later
\li 1.3 up to 2.2
\row
\li 4.12.4 up to 5.0.3
\li 1.3 up to 1.9

View File

@@ -21,7 +21,7 @@
\li {3,1} Development Platform
\header
\li \l Linux
\li \l macOS
\li \l \macos
\li \l Windows
\row
\li \l Android
@@ -50,7 +50,7 @@
\li
\row
\li \l{Microcontroller Units (MCU)}{MCUs}
\li
\li \image ok.png
\li
\li \image ok.png
\row

View File

@@ -165,8 +165,15 @@ def qdump__std____1__stack(d, value):
def std_1_string_dumper(d, value):
charType = value['__l']['__data_'].dereference().type
D = None
try: # LLDB
D = value[0][0][0][0]
except: # GDB
try: # std::string
D = value[0].members(True)[0][0][0]
except: # std::u16string, std::u32string
D = value[2].members(True)[0][0][0]
layoutDecider = D[0][0]
if not layoutDecider:
@@ -225,6 +232,7 @@ def std_1_string_dumper(d, value):
return
def qdump__std____1__string(d, value):
std_1_string_dumper(d, value)

View File

@@ -124,19 +124,19 @@
<name>CMakeProjectManager</name>
<message>
<source>Initial Configuration</source>
<translation type="unfinished"></translation>
<translation>Initiale Konfiguration</translation>
</message>
<message>
<source>Current Configuration</source>
<translation type="unfinished"></translation>
<translation>Aktuelle Konfiguration</translation>
</message>
<message>
<source>Kit Configuration</source>
<translation type="unfinished"></translation>
<translation>Kit-Konfiguration</translation>
</message>
<message>
<source>Edit the current kit&apos;s CMake configuration.</source>
<translation type="unfinished"></translation>
<translation>Die CMake-Konfiguration des aktuellen Kits bearbeiten.</translation>
</message>
<message>
<source>Filter</source>
@@ -176,11 +176,11 @@
</message>
<message>
<source>&amp;Set</source>
<translation type="unfinished"></translation>
<translation>&amp;Setzen</translation>
</message>
<message>
<source>Set a value in the CMake configuration.</source>
<translation type="unfinished"></translation>
<translation>Einen Wert in der CMake-Konfiguration setzen.</translation>
</message>
<message>
<source>&amp;Unset</source>
@@ -200,11 +200,11 @@
</message>
<message>
<source>Batch Edit...</source>
<translation type="unfinished"></translation>
<translation>Als Text bearbeiten...</translation>
</message>
<message>
<source>Set or reset multiple values in the CMake configuration.</source>
<translation type="unfinished"></translation>
<translation>Mehrere Variablen in der CMake-Konfiguration setzen oder zurücksetzen.</translation>
</message>
<message>
<source>Advanced</source>
@@ -212,63 +212,63 @@
</message>
<message>
<source>Clear system environment</source>
<translation type="unfinished">Systemumgebung löschen</translation>
<translation>Systemumgebung löschen</translation>
</message>
<message>
<source>Help</source>
<translation type="unfinished">Hilfe</translation>
<translation>Hilfe</translation>
</message>
<message>
<source>Apply Kit Value</source>
<translation type="unfinished"></translation>
<translation>Wert des Kits anwenden</translation>
</message>
<message>
<source>Apply Initial Configuration Value</source>
<translation type="unfinished"></translation>
<translation>Wert der initialen Konfiguration anwenden</translation>
</message>
<message>
<source>Copy</source>
<translation type="unfinished">Kopieren</translation>
<translation>Kopieren</translation>
</message>
<message>
<source>Change the build directory to &quot;%1&quot; and start with a basic CMake configuration?</source>
<translation type="unfinished"></translation>
<translation>Wollen Sie das Build-Verzeichnis auf &quot;%1&quot; ändern und mit einer grundlegenden CMake-Konfiguration beginnen?</translation>
</message>
<message>
<source>The CMake flag for the development team</source>
<translation type="unfinished"></translation>
<translation>Das CMake-Flag für das Entwicklerteam</translation>
</message>
<message>
<source>The CMake flag for the provisioning profile</source>
<translation type="unfinished"></translation>
<translation>Das CMake-Flag für das Provisioning-Profil</translation>
</message>
<message>
<source>The CMake flag for the architecture on macOS</source>
<translation type="unfinished"></translation>
<translation>Das CMake-Flag für die macOS-Architektur</translation>
</message>
<message>
<source>The CMake flag for QML debugging, if enabled</source>
<translation type="unfinished"></translation>
<translation>Das CMake-Flag für QML-Debuggen, falls aktiviert</translation>
</message>
<message>
<source>Profile</source>
<translation type="unfinished">Profile</translation>
<translation>Profile</translation>
</message>
<message>
<source>Clean Environment</source>
<translation type="unfinished">Saubere Umgebung</translation>
<translation>Saubere Umgebung</translation>
</message>
<message>
<source>System Environment</source>
<translation type="unfinished">Systemumgebung</translation>
<translation>Systemumgebung</translation>
</message>
<message>
<source>Additional CMake &lt;a href=&quot;options&quot;&gt;options&lt;/a&gt;:</source>
<translation type="unfinished"></translation>
<translation>Weitere CMake-&lt;a href=&quot;options&quot;&gt;Optionen&lt;/a&gt;:</translation>
</message>
<message>
<source>Build type:</source>
<translation type="unfinished"></translation>
<translation>Build-Typ:</translation>
</message>
<message>
<source>&lt;UNSET&gt;</source>
@@ -276,31 +276,31 @@
</message>
<message>
<source>Enter one CMake &lt;a href=&quot;variable&quot;&gt;variable&lt;/a&gt; per line.&lt;br/&gt;To set or change a variable, use -D&amp;lt;variable&amp;gt;:&amp;lt;type&amp;gt;=&amp;lt;value&amp;gt;.&lt;br/&gt;&amp;lt;type&amp;gt; can have one of the following values: FILEPATH, PATH, BOOL, INTERNAL, or STRING.&lt;br/&gt;To unset a variable, use -U&amp;lt;variable&amp;gt;.&lt;br/&gt;</source>
<translation type="unfinished"></translation>
<translation>Geben Sie eine CMake-&lt;a href=&quot;variable&quot;&gt;Variable&lt;/a&gt; pro Zeile ein.&lt;br/&gt;Um eine Variable zu setzen oder zu ändern, benutzen Sie -D&amp;lt;Variable&amp;gt;:&amp;lt;Typ&amp;gt;=&amp;lt;Wert&amp;gt;.&lt;br/&gt;&amp;lt;Typ&amp;gt; kann einer der folgenden Werte sein: FILEPATH, PATH, BOOL, INTERNAL oder STRING.&lt;br/&gt;Um eine Variable zurückzusetzen, benutzen Sie -U&amp;lt;Variable&amp;gt;.&lt;br/&gt;</translation>
</message>
<message>
<source>Re-configure with Initial Parameters</source>
<translation type="unfinished"></translation>
<translation>Mit initialen Parametern neu konfigurieren</translation>
</message>
<message>
<source>Clear CMake configuration and configure with initial parameters?</source>
<translation type="unfinished"></translation>
<translation>Die CMake-Konfiguration löschen und mit initialen Parametern konfigurieren?</translation>
</message>
<message>
<source>Do not ask again</source>
<translation type="unfinished">Nicht noch einmal nachfragen</translation>
<translation>Nicht noch einmal nachfragen</translation>
</message>
<message>
<source>Kit CMake Configuration</source>
<translation type="unfinished"></translation>
<translation>CMake-Konfiguration des Kits</translation>
</message>
<message>
<source>Configure</source>
<translation type="unfinished">Konfigurieren</translation>
<translation>Konfigurieren</translation>
</message>
<message>
<source>Stop CMake</source>
<translation type="unfinished"></translation>
<translation>CMake abbrechen</translation>
</message>
<message>
<source>bool</source>
@@ -336,7 +336,7 @@
</message>
<message>
<source>Clear CMake Configuration</source>
<translation>CMake-Konfiguration bereinigen</translation>
<translation>CMake-Konfiguration löschen</translation>
</message>
<message>
<source>Rescan Project</source>
@@ -372,15 +372,15 @@
</message>
<message>
<source>CMakeUserPresets.json cannot re-define the %1 preset: %2</source>
<translation type="unfinished"></translation>
<translation>CMakeUserPresets.json kann das Preset %1 nicht erneut definieren: %2</translation>
</message>
<message>
<source>Build preset %1 is missing a corresponding configure preset.</source>
<translation type="unfinished"></translation>
<translation>Im Build-Preset %1 fehlt ein entsprechendes Configure-Preset.</translation>
</message>
<message>
<source>Failed to load %1: %2</source>
<translation type="unfinished"></translation>
<translation>%1 konnte nicht geladen werden: %2</translation>
</message>
<message>
<source>yes</source>
@@ -416,35 +416,35 @@
</message>
<message>
<source>Version: %1</source>
<translation type="unfinished">Version: %1</translation>
<translation>Version: %1</translation>
</message>
<message>
<source>Supports fileApi: %1</source>
<translation type="unfinished"></translation>
<translation>Unterstützt fileApi: %1</translation>
</message>
<message>
<source>Detection source: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
<translation>Quelle: &quot;%1&quot;</translation>
</message>
<message>
<source>CMake executable path does not exist.</source>
<translation type="unfinished"></translation>
<translation>Pfad für das CMake-Werkzeug existiert nicht.</translation>
</message>
<message>
<source>CMake executable path is not a file.</source>
<translation type="unfinished"></translation>
<translation>Pfad für das CMake-Werkzeug ist keine Datei.</translation>
</message>
<message>
<source>CMake executable path is not executable.</source>
<translation type="unfinished"></translation>
<translation>Pfad für das CMake-Werkzeug ist nicht ausführbar.</translation>
</message>
<message>
<source>CMake executable does not provide required IDE integration features.</source>
<translation type="unfinished"></translation>
<translation>Ausführbare CMake-Datei unterstützt die benötigten Funktionen für die IDE-Integration nicht.</translation>
</message>
<message>
<source>Path</source>
<translation type="unfinished">Pfad</translation>
<translation>Pfad</translation>
</message>
<message>
<source>Name:</source>
@@ -456,7 +456,7 @@
</message>
<message>
<source>Version:</source>
<translation type="unfinished">Version:</translation>
<translation>Version:</translation>
</message>
<message>
<source>Help file:</source>
@@ -496,27 +496,27 @@
</message>
<message>
<source>Current executable</source>
<translation type="unfinished"></translation>
<translation>Aktuelle ausführbare Datei</translation>
</message>
<message>
<source>Build the executable used in the active run configuration. Currently: %1</source>
<translation type="unfinished"></translation>
<translation>Die ausführbare Datei der aktiven Ausführungskonfiguration erstellen. Aktuell: %1</translation>
</message>
<message>
<source>Target: %1</source>
<translation type="unfinished"></translation>
<translation>Ziel: %1</translation>
</message>
<message>
<source>Enable automatic provisioning updates:</source>
<translation type="unfinished"></translation>
<translation>Automatische Provisionierungsaktualisierungen aktivieren:</translation>
</message>
<message>
<source>Tells xcodebuild to create and download a provisioning profile if a valid one does not exist.</source>
<translation type="unfinished"></translation>
<translation>Veranlasst xcodebuild, ein Provisionierungsprofil zu erstellen und herunterzuladen, wenn kein gültiges vorhanden ist.</translation>
</message>
<message>
<source>Target</source>
<translation type="unfinished">Ziel</translation>
<translation>Ziel</translation>
</message>
<message>
<source>The build configuration is currently disabled.</source>
@@ -524,7 +524,7 @@
</message>
<message>
<source>A CMake tool must be set up for building. Configure a CMake tool in the kit options.</source>
<translation>Zum Erstellen muss ein CMake Tool eingestellt sein. Die Konfiguration erfolgt in den Kit Einstellungen.</translation>
<translation>Zum Erstellen muss ein CMake-Werkzeug eingestellt sein. Die Konfiguration erfolgt in den Kit Einstellungen.</translation>
</message>
<message>
<source>There is a CMakeCache.txt file in &quot;%1&quot;, which suggest an in-source build was done before. You are now building in &quot;%2&quot;, and the CMakeCache.txt file might confuse CMake.</source>
@@ -545,7 +545,7 @@
<message>
<source>CMake Build</source>
<comment>Display name for CMakeProjectManager::CMakeBuildStep id.</comment>
<translation type="unfinished">Erstellen mit CMake</translation>
<translation>Erstellen mit CMake</translation>
</message>
<message>
<source>CMake arguments:</source>
@@ -558,7 +558,7 @@
<message>
<source>Build</source>
<comment>ConfigWidget display name.</comment>
<translation type="unfinished"></translation>
<translation>Erstellen</translation>
</message>
<message>
<source>Targets:</source>
@@ -570,19 +570,19 @@
</message>
<message>
<source>Kit:</source>
<translation type="unfinished">Kit:</translation>
<translation>Kit:</translation>
</message>
<message>
<source>Initial Configuration:</source>
<translation type="unfinished"></translation>
<translation>Initiale Konfiguration:</translation>
</message>
<message>
<source>Current Configuration:</source>
<translation type="unfinished"></translation>
<translation>Aktuelle Konfiguration:</translation>
</message>
<message>
<source>Type:</source>
<translation type="unfinished">Typ:</translation>
<translation>Typ:</translation>
</message>
<message>
<source>Value</source>
@@ -631,23 +631,23 @@
</message>
<message>
<source>Package manager auto setup</source>
<translation type="unfinished"></translation>
<translation>Automatisches Aufsetzen von Paketmanagern</translation>
</message>
<message>
<source>Add the CMAKE_PROJECT_INCLUDE_BEFORE variable pointing to a CMake script that will install dependencies from the conanfile.txt, conanfile.py, or vcpkg.json file from the project source directory.</source>
<translation type="unfinished"></translation>
<translation>Setzt die Variable CMAKE_PROJECT_INCLUDE_BEFORE auf ein CMake-Script, das Abhängigkeiten von einer conanfile.txt, conanfile.py oder vcpkg.json-Datei im Quellverzeichnis des Projekts installiert.</translation>
</message>
<message>
<source>Ask before re-configuring with initial parameters</source>
<translation type="unfinished"></translation>
<translation>Vor dem Neukonfigurieren mit initialen Parametern nachfragen</translation>
</message>
<message>
<source>Show subfolders inside source group folders</source>
<translation type="unfinished"></translation>
<translation>Unterverzeichnisse in Sourcegruppen anzeigen</translation>
</message>
<message>
<source>General</source>
<translation type="unfinished">Allgemein</translation>
<translation>Allgemein</translation>
</message>
<message>
<source>Adding Files</source>
@@ -675,12 +675,12 @@
</message>
<message>
<source>Copy to Clipboard?</source>
<translation type="unfinished">In die Zwischenablage kopieren?</translation>
<translation>In die Zwischenablage kopieren?</translation>
</message>
<message>
<source>Files are not automatically added to the CMakeLists.txt file of the CMake project.
Copy the path to the source files to the clipboard?</source>
<translation type="unfinished">Dateien werden nicht automatisch zur Datei CMakeLists.txt des CMake-Projekts hinzugefügt.
<translation>Dateien werden nicht automatisch zur Datei CMakeLists.txt des CMake-Projekts hinzugefügt.
Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</translation>
</message>
<message>
@@ -689,15 +689,15 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>Run CMake with configuration changes?</source>
<translation type="unfinished"></translation>
<translation>CMake mit Änderungen der Konfiguration ausführen?</translation>
</message>
<message>
<source>&lt;b&gt;CMake configuration failed&lt;b&gt;&lt;p&gt;The backup of the previous configuration has been restored.&lt;/p&gt;&lt;p&gt;Issues and &quot;Projects &gt; Build&quot; settings show more information about the failure.&lt;/p</source>
<translation type="unfinished"></translation>
<translation>&lt;b&gt;CMake-Konfiguration ist fehlgeschlagen&lt;b/&gt;&lt;p&gt;Das Backup der vorherigen Konfiguration wurde wiederhergestellt.&lt;/p&gt;&lt;p&gt;Details zu dem Problem finden Sie in &quot;Probleme&quot; und den Einstellungen in &quot;Projekte &gt; Erstellen&quot;.&lt;/p&gt;</translation>
</message>
<message>
<source>&lt;b&gt;Failed to load project&lt;b&gt;&lt;p&gt;Issues and &quot;Projects &gt; Build&quot; settings show more information about the failure.&lt;/p</source>
<translation type="unfinished"></translation>
<translation>&lt;b&gt;Laden des Projekts fehlgeschlagen&lt;/b&gt;&lt;p&gt;Details zu dem Problem finden Sie in &quot;Probleme&quot; und den Einstellungen in &quot;Projekte &gt; Erstellen&quot;.&lt;/p&gt;</translation>
</message>
<message>
<source>Failed to create build directory &quot;%1&quot;.</source>
@@ -705,11 +705,11 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>No CMake tool set up in kit.</source>
<translation type="unfinished"></translation>
<translation>Im Kit ist kein CMake-Werkzeug eingerichtet.</translation>
</message>
<message>
<source>The remote CMake executable cannot write to the local build directory.</source>
<translation type="unfinished"></translation>
<translation>Das entfernte CMake-Werkzeug kann nicht in das lokale Build-Verzeichnis schreiben.</translation>
</message>
<message>
<source>&lt;No CMake Tool available&gt;</source>
@@ -729,11 +729,11 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>Path to the cmake executable</source>
<translation>Pfad zur ausführbaren Datei von cmake</translation>
<translation>Pfad zum CMake-Werkzeug</translation>
</message>
<message>
<source>CMake version %1 is unsupported. Update to version 3.14 (with file-api) or later.</source>
<translation type="unfinished"></translation>
<translation>Die CMake-Version %1 wird nicht unterstützt. Aktualisieren Sie auf Version 3.14 (mit file-api) oder neuer.</translation>
</message>
<message>
<source>Change...</source>
@@ -749,11 +749,11 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>Platform</source>
<translation type="unfinished">Plattform</translation>
<translation>Plattform</translation>
</message>
<message>
<source>Toolset</source>
<translation type="unfinished"></translation>
<translation>Toolset</translation>
</message>
<message>
<source>Generator:</source>
@@ -777,11 +777,11 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>CMake Tool is unconfigured, CMake generator will be ignored.</source>
<translation>Das CMake-Tool ist nicht konfiguriert. Der CMake-Generator wird ignoriert.</translation>
<translation>Das CMake-Werkzeug ist nicht konfiguriert. Der CMake-Generator wird ignoriert.</translation>
</message>
<message>
<source>CMake Tool does not support the configured generator.</source>
<translation>Das CMake-Tool unterstützt den konfigurierten Generator nicht.</translation>
<translation>Das CMake-Werkzeug unterstützt den konfigurierten Generator nicht.</translation>
</message>
<message>
<source>Platform is not supported by the selected CMake generator.</source>
@@ -813,15 +813,15 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>CMake &lt;a href=&quot;generator&quot;&gt;generator&lt;/a&gt;</source>
<translation type="unfinished"></translation>
<translation>CMake-&lt;a href=&quot;generator&quot;&gt;Generator&lt;/a&gt;</translation>
</message>
<message>
<source>The selected CMake binary does not support file-api. %1 will not be able to parse CMake projects.</source>
<translation type="unfinished"></translation>
<translation>Das gewählte CMake-Werkzeug unterstützt file-api nicht. %1 wird nicht in der Lage sein, CMake-Projekte auszuwerten.</translation>
</message>
<message>
<source>Enter one CMake &lt;a href=&quot;variable&quot;&gt;variable&lt;/a&gt; per line.&lt;br/&gt;To set a variable, use -D&amp;lt;variable&amp;gt;:&amp;lt;type&amp;gt;=&amp;lt;value&amp;gt;.&lt;br/&gt;&amp;lt;type&amp;gt; can have one of the following values: FILEPATH, PATH, BOOL, INTERNAL, or STRING.</source>
<translation type="unfinished"></translation>
<translation>Geben Sie eine CMake-&lt;a href=&quot;variable&quot;&gt;Variable&lt;/a&gt; pro Zeile ein.&lt;br/&gt;Um eine Variable zu setzen, benutzen Sie -D&amp;lt;Variable&amp;gt;:&amp;lt;Typ&amp;gt;=&amp;lt;Wert&amp;gt;.&lt;br/&gt;&amp;lt;Typ&amp;gt; kann einer der folgenden Werte sein: FILEPATH, PATH, BOOL, INTERNAL oder STRING.</translation>
</message>
<message>
<source>CMake Configuration</source>
@@ -877,7 +877,7 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>Builds a target of any open CMake project.</source>
<translation type="unfinished"></translation>
<translation>Erstellt ein Ziel eines geöffneten CMake-Projekts.</translation>
</message>
<message>
<source>Open CMake target</source>
@@ -885,23 +885,23 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>Jumps to the definition of a target of any open CMake project.</source>
<translation type="unfinished"></translation>
<translation>Springt zur Definition eines Ziels eines geöffneten CMake-Projekts.</translation>
</message>
<message>
<source>The source directory %1 is not reachable by the CMake executable %2.</source>
<translation type="unfinished"></translation>
<translation>Das Quellverzeichnis %1 kann vom CMake-Werkzeug %2 nicht erreicht werden.</translation>
</message>
<message>
<source>The build directory %1 is not reachable by the CMake executable %2.</source>
<translation type="unfinished"></translation>
<translation>Das Build-Verzeichnis %1 kann vom CMake-Werkzeug %2 nicht erreicht werden.</translation>
</message>
<message>
<source>The build directory &quot;%1&quot; does not exist</source>
<translation type="unfinished"></translation>
<translation>Das Build-Verzeichnis &quot;%1&quot; existiert nicht</translation>
</message>
<message>
<source>CMake executable &quot;%1&quot; and build directory &quot;%2&quot; must be on the same device.</source>
<translation type="unfinished"></translation>
<translation>Das CMake-Werkzeug &quot;%1&quot; und das Build-Verzeichnis &quot;%2&quot; müssen auf demselben Gerät liegen.</translation>
</message>
<message>
<source>Running %1 in %2.</source>
@@ -913,19 +913,19 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>CMake process failed to start.</source>
<translation type="unfinished"></translation>
<translation>Der CMake-Prozess konnte nicht gestartet werden.</translation>
</message>
<message>
<source>CMake process was canceled by the user.</source>
<translation type="unfinished"></translation>
<translation>Der CMake-Prozess wurde vom Benutzer abgebrochen.</translation>
</message>
<message>
<source>CMake process crashed.</source>
<translation type="unfinished"></translation>
<translation>Der CMake-Prozess ist abgestürzt.</translation>
</message>
<message>
<source>CMake process exited with exit code %1.</source>
<translation type="unfinished"></translation>
<translation>Der CMake-Prozess wurde mit dem Rückgabewert %1 beendet.</translation>
</message>
<message>
<source>&lt;Build Directory&gt;</source>
@@ -937,165 +937,167 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans
</message>
<message>
<source>Unexpected source directory &quot;%1&quot;, expected &quot;%2&quot;. This can be correct in some situations, for example when importing a standalone Qt test, but usually this is an error. Import the build anyway?</source>
<translation type="unfinished"></translation>
<translation>Unerwartetes Quellverzeichnis &quot;%1&quot;, erwartet wurde &quot;%2&quot;. Dies kann in einigen Situationen korrekt sein, zum Beispiel beim Importieren eines eigenständigen Qt-Tests, aber normalerweise ist es ein Fehler. Soll der Build trotzdem importiert werden?</translation>
</message>
<message>
<source>CMake Modules</source>
<translation type="unfinished">CMake-Module</translation>
<translation>CMake-Module</translation>
</message>
<message>
<source>Target type: </source>
<translation type="unfinished">Zieltyp: </translation>
<translation>Zieltyp: </translation>
</message>
<message>
<source>No build artifacts</source>
<translation type="unfinished">Keine Build-Artefakte</translation>
<translation>Keine Build-Artefakte</translation>
</message>
<message>
<source>Build artifacts:</source>
<translation type="unfinished">Build-Artefakte:</translation>
<translation>Build-Artefakte:</translation>
</message>
<message>
<source>Version not parseable</source>
<translation type="unfinished"></translation>
<translation>Version kann nicht ausgewertet werden</translation>
</message>
<message>
<source>Searching CMake binaries...</source>
<translation type="unfinished"></translation>
<translation>Suche CMake-Werkzeuge...</translation>
</message>
<message>
<source>Found &quot;%1&quot;</source>
<translation type="unfinished"></translation>
<translation>&quot;%1&quot; gefunden</translation>
</message>
<message>
<source>Removing CMake entries...</source>
<translation type="unfinished"></translation>
<translation>Entferne CMake-Einträge...</translation>
</message>
<message>
<source>Removed &quot;%1&quot;</source>
<translation type="unfinished"></translation>
<translation>&quot;%1&quot; entfernt</translation>
</message>
<message>
<source>CMake:</source>
<translation type="unfinished"></translation>
<translation>CMake:</translation>
</message>
<message>
<source>Failed to set up CMake file API support. %1 cannot extract project information.</source>
<translation type="unfinished"></translation>
<translation>CMake file-api-Unterstützung konnte nicht aufgesetzt werden. %1 kann keine Projektinformationen auswerten.</translation>
</message>
<message>
<source>Invalid reply file created by CMake.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Antwortdatei erstellt.</translation>
</message>
<message>
<source>Invalid cache file generated by CMake.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Cache-Datei erstellt.</translation>
</message>
<message>
<source>Invalid cmakeFiles file generated by CMake.</source>
<translation type="unfinished"></translation>
<translation>CMake hat ungültige &quot;cmakeFiles&quot; erstellt.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: No directories.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Keine Verzeichnisse.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: Empty directory object.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Leeres Verzeichnisobjekt.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: No projects.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Keine Projekte.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: Empty project object.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Leeres Projektobjekt.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: Broken project data.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Fehlerhafte Projektdaten.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: Empty target object.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Leeres Zielobjekt.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: Broken target data.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Fehlerhafte Zieldaten.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: No configurations.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Keine Konfigurationen.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: Empty configuration object.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Leeres Konfigurationsobjekt.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake: Broken indexes in directories, projects, or targets.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt: Fehlerhafte Indizes in Verzeichnissen, Projekten oder Zielen.</translation>
</message>
<message>
<source>Invalid codemodel file generated by CMake.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Codemodell-Datei erstellt.</translation>
</message>
<message>
<source>Invalid target file: Information is missing.</source>
<translation type="unfinished"></translation>
<translation>Ungültige Zieldatei: Information fehlt.</translation>
</message>
<message>
<source>Invalid target file generated by CMake: Broken indexes in target details.</source>
<translation type="unfinished"></translation>
<translation>CMake hat eine ungültige Zieldatei erstellt: Fehlerhafte Indizes in den Zieldetails.</translation>
</message>
<message>
<source>CMake parsing was canceled.</source>
<translation type="unfinished"></translation>
<translation>CMake-Auswertung wurde abgebrochen.</translation>
</message>
<message>
<source>No &quot;%1&quot; CMake configuration found. Available configurations: &quot;%2&quot;.
Make sure that CMAKE_CONFIGURATION_TYPES variable contains the &quot;Build type&quot; field.</source>
<translation type="unfinished"></translation>
<translation>CMake-Konfiguration &quot;%1 wurde nicht gefunden. Verfügbare Konfigurationen: &quot;%2&quot;.
Stellen Sie sicher, dass der Wert des &quot;Build-Typ&quot;-Felds in der CMAKE_CONFIGURATION_TYPES-Variable enthalten ist.</translation>
</message>
<message>
<source>No &quot;%1&quot; CMake configuration found. Available configuration: &quot;%2&quot;.
Make sure that CMAKE_BUILD_TYPE variable matches the &quot;Build type&quot; field.</source>
<translation type="unfinished"></translation>
<translation>CMake-Konfiguration &quot;%1 wurde nicht gefunden. Verfügbare Konfigurationen: &quot;%2&quot;.
Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der des &quot;Build-Typ&quot;-Felds ist.</translation>
</message>
<message>
<source>CMake returned error code: %1</source>
<translation type="unfinished"></translation>
<translation>CMake hat einen Fehlerwert zurückgegeben: %1</translation>
</message>
<message>
<source>Failed to rename %1 to %2.</source>
<translation type="unfinished"></translation>
<translation>Umbenennen von %1 nach %2 ist fehlgeschlagen.</translation>
</message>
<message>
<source>Failed to copy %1 to %2.</source>
<translation type="unfinished"></translation>
<translation>Kopieren von %1 nach %2 ist fehlgeschlagen.</translation>
</message>
<message>
<source>Failed to read %1 file</source>
<translation type="unfinished"></translation>
<translation>Die Datei %1 konnte nicht gelesen werden</translation>
</message>
<message>
<source>Invalid %1 file</source>
<translation type="unfinished"></translation>
<translation>Ungültige Datei %1</translation>
</message>
<message>
<source>Invalid &quot;version&quot; in %1 file</source>
<translation type="unfinished"></translation>
<translation>Ungültige &quot;version&quot; in Datei %1</translation>
</message>
<message>
<source>Invalid &quot;configurePresets&quot; section in %1 file</source>
<translation type="unfinished"></translation>
<translation>Ungültiger Abschnitt &quot;configurePresets&quot; in Datei %1</translation>
</message>
<message>
<source>Invalid &quot;buildPresets&quot; section in %1 file</source>
<translation type="unfinished"></translation>
<translation>Ungültiger Abschnitt &quot;buildPresets&quot; in Datei %1</translation>
</message>
<message>
<source>&lt;File System&gt;</source>
<translation type="unfinished"></translation>
<translation>&lt;Dateisystem&gt;</translation>
</message>
</context>
<context>
@@ -52708,7 +52710,7 @@ in &quot;%2&quot; aus.
<name>CMakeProjectManager::Tr::Tr</name>
<message>
<source>Tools</source>
<translation type="unfinished">Werkzeuge</translation>
<translation>Werkzeuge</translation>
</message>
</context>
<context>

View File

@@ -494,6 +494,11 @@ int main(int argc, char **argv)
qputenv("QT_ENABLE_REGEXP_JIT", "0");
}
if (Utils::HostOsInfo::isLinuxHost() && !qEnvironmentVariableIsSet("GTK_THEME"))
// Work around QTCREATORBUG-28497:
// Prevent Qt's GTK3 platform theme plugin from enforcing a dark palette
qputenv("GTK_THEME", ":light");
#if defined(QTC_FORCE_XCB)
if (Utils::HostOsInfo::isLinuxHost() && !qEnvironmentVariableIsSet("QT_QPA_PLATFORM")) {
// Enforce XCB on Linux/Gnome, if the user didn't override via QT_QPA_PLATFORM

View File

@@ -374,8 +374,10 @@ void InfoBarDisplay::update()
if (infoWidgetCloseButton)
hbox->addWidget(infoWidgetCloseButton);
} else {
if (infoWidgetCloseButton) {
infoWidgetCloseButton->setText(info.m_cancelButtonText);
hbox->addWidget(infoWidgetCloseButton);
}
if (infoWidgetSuppressButton)
hbox->addWidget(infoWidgetSuppressButton);
}

View File

@@ -93,7 +93,7 @@ FilterDialog::FilterDialog(const Checks &checks, QWidget *parent)
buttonBox,
}.attachTo(this);
connect(m_view->selectionModel(), &QItemSelectionModel::selectionChanged, this, [&] {
connect(m_view->selectionModel(), &QItemSelectionModel::selectionChanged, this, [=] {
const bool hasSelection = !m_view->selectionModel()->selectedRows().isEmpty();
buttonBox->button(QDialogButtonBox::Ok)->setEnabled(hasSelection);
});

View File

@@ -1623,10 +1623,24 @@ bool CMakeBuildConfiguration::fromMap(const QVariantMap &map)
m_buildSystem->setInitialCMakeArguments(cmd.splitArguments());
}
d->m_clearSystemConfigureEnvironment = map.value(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY))
.toBool();
// Upgrading from Qt Creator version <9 to 9, if the build environment is set
// apply the specific values to the configure environment
auto settingsKey = [map](const QLatin1String &configureKey, const QLatin1String &buildKey) {
if (!map.contains(configureKey) && map.contains(buildKey))
return buildKey;
return configureKey;
};
const QLatin1String clearSystemEnvironmentKey
= settingsKey(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY),
QLatin1String(ProjectExplorer::Constants::CLEAR_SYSTEM_ENVIRONMENT_KEY));
const QLatin1String userEnvironmentChangesKey
= settingsKey(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY),
QLatin1String(ProjectExplorer::Constants::USER_ENVIRONMENT_CHANGES_KEY));
d->m_clearSystemConfigureEnvironment = map.value(clearSystemEnvironmentKey).toBool();
d->m_userConfigureEnvironmentChanges = EnvironmentItem::fromStringList(
map.value(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY)).toStringList());
map.value(userEnvironmentChangesKey).toStringList());
updateAndEmitConfigureEnvironmentChanged();

View File

@@ -96,14 +96,24 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP
for (const auto &p : presets)
presetsHash.insert(p.name, p);
auto resolveInherits = [](const auto &presetsHash, auto &presetsList) {
auto resolveInherits = [](auto &presetsHash, auto &presetsList) {
Utils::sort(presetsList, [](const auto &left, const auto &right) {
if (left.inherits) {
if (left.inherits.value().contains(right.name))
return false;
}
return true;
});
for (auto &p : presetsList) {
if (!p.inherits)
continue;
for (const QString &inheritFromName : p.inherits.value())
if (presetsHash.contains(inheritFromName))
for (const QString &inheritFromName : p.inherits.value()) {
if (presetsHash.contains(inheritFromName)) {
p.inheritFrom(presetsHash[inheritFromName]);
presetsHash[p.name] = p;
}
}
}
};

View File

@@ -164,8 +164,8 @@ void CompilationDatabaseTests::testFilterArguments()
{"RELATIVE_PLUGIN_PATH", "\"../lib/qtcreator/plugins\""},
{"QT_CREATOR", "1"}}));
QCOMPARE(testData.fileKind, CppEditor::ProjectFile::Kind::CXXSource);
QCOMPARE(testData.sysRoot.toString(), HostOsInfo::isWindowsHost() ? QString("C:\\sysroot\\embedded")
: QString("/opt/sysroot/embedded"));
QCOMPARE(testData.sysRoot.toUserOutput(), HostOsInfo::isWindowsHost()
? QString("C:\\sysroot\\embedded") : QString("/opt/sysroot/embedded"));
}
static QString kCmakeCommand

View File

@@ -752,7 +752,7 @@ void ExternalToolConfig::showInfoForItem(const QModelIndex &index)
static FilePath getUserFilePath(const QString &proposalFileName)
{
const FilePath resourceDir(ICore::userResourcePath());
const FilePath externalToolsDir = resourceDir / "externalTools";
const FilePath externalToolsDir = resourceDir / "externaltools";
if (!externalToolsDir.isDir())
externalToolsDir.createDir();

View File

@@ -79,7 +79,7 @@ int DocumentModelPrivate::rowCount(const QModelIndex &parent) const
return 0;
}
void DocumentModelPrivate::addEntry(DocumentModel::Entry *entry)
DocumentModel::Entry *DocumentModelPrivate::addEntry(DocumentModel::Entry *entry)
{
const Utils::FilePath filePath = entry->filePath();
@@ -95,9 +95,8 @@ void DocumentModelPrivate::addEntry(DocumentModel::Entry *entry)
this, [this, document = previousEntry->document] { itemChanged(document); });
}
delete entry;
entry = nullptr;
disambiguateDisplayNames(previousEntry);
return;
return nullptr;
}
auto positions = positionEntry(m_entries, entry);
@@ -115,6 +114,7 @@ void DocumentModelPrivate::addEntry(DocumentModel::Entry *entry)
itemChanged(document);
});
endInsertRows();
return entry;
}
bool DocumentModelPrivate::disambiguateDisplayNames(DocumentModel::Entry *entry)
@@ -411,8 +411,7 @@ DocumentModel::Entry *DocumentModelPrivate::addSuspendedDocument(const FilePath
entry->document->setPreferredDisplayName(displayName);
entry->document->setId(id);
entry->isSuspended = true;
d->addEntry(entry);
return entry;
return d->addEntry(entry);
}
DocumentModel::Entry *DocumentModelPrivate::firstSuspendedEntry()

View File

@@ -33,7 +33,7 @@ public:
Qt::DropActions supportedDragActions() const override;
QStringList mimeTypes() const override;
void addEntry(DocumentModel::Entry *entry);
DocumentModel::Entry *addEntry(DocumentModel::Entry *entry);
void removeDocument(int idx);
std::optional<int> indexOfFilePath(const Utils::FilePath &filePath) const;

View File

@@ -720,7 +720,9 @@ void ICore::raiseWindow(QWidget *widget)
if (!widget)
return;
QWidget *window = widget->window();
if (window && window == m_mainwindow) {
if (!window)
return;
if (window == m_mainwindow) {
m_mainwindow->raiseWindow();
} else {
window->raise();

View File

@@ -356,8 +356,8 @@ void CppCodeStylePreferencesWidget::setCodeStyle(CppCodeStylePreferences *codeSt
slotCurrentPreferencesChanged(currentPreferences);
});
setTabSettings(m_preferences->tabSettings());
setCodeStyleSettings(m_preferences->codeStyleSettings(), false);
setTabSettings(m_preferences->currentTabSettings());
setCodeStyleSettings(m_preferences->currentCodeStyleSettings(), false);
slotCurrentPreferencesChanged(m_preferences->currentPreferences(), false);
updatePreview();

View File

@@ -12,7 +12,6 @@
#include "cppeditordocument.h"
#include "cppeditorwidget.h"
#include "cppfilesettingspage.h"
#include "cpphighlighter.h"
#include "cppincludehierarchy.h"
#include "cppmodelmanager.h"
#include "cppoutline.h"
@@ -260,42 +259,6 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err
connect(openInNextSplitAction, &QAction::triggered,
this, [] { CppModelManager::switchHeaderSource(true); });
QAction * const showPreprocessedAction = new QAction(tr("Show Preprocessed Source"), this);
command = ActionManager::registerAction(showPreprocessedAction,
Constants::SHOW_PREPROCESSED_FILE, context);
mcpptools->addAction(command);
connect(showPreprocessedAction, &QAction::triggered,
this, [] { CppModelManager::showPreprocessedFile(false); });
QAction * const showPreprocessedInSplitAction = new QAction
(tr("Show Preprocessed Source in Next Split"), this);
command = ActionManager::registerAction(showPreprocessedInSplitAction,
Constants::SHOW_PREPROCESSED_FILE_SPLIT, context);
mcpptools->addAction(command);
connect(showPreprocessedInSplitAction, &QAction::triggered,
this, [] { CppModelManager::showPreprocessedFile(true); });
QAction * const findUnusedFunctionsAction = new QAction(tr("Find Unused Functions"), this);
command = ActionManager::registerAction(findUnusedFunctionsAction,
"CppTools.FindUnusedFunctions");
mcpptools->addAction(command);
connect(findUnusedFunctionsAction, &QAction::triggered,
this, [] { CppModelManager::findUnusedFunctions({}); });
QAction * const findUnusedFunctionsInSubProjectAction
= new QAction(tr("Find Unused C/C++ Functions"), this);
command = ActionManager::registerAction(findUnusedFunctionsInSubProjectAction,
"CppTools.FindUnusedFunctionsInSubProject");
for (ActionContainer * const projectContextMenu : {
ActionManager::actionContainer(ProjectExplorer::Constants::M_SUBPROJECTCONTEXT),
ActionManager::actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT)}) {
projectContextMenu->addSeparator(ProjectExplorer::Constants::G_PROJECT_TREE);
projectContextMenu->addAction(command, ProjectExplorer::Constants::G_PROJECT_TREE);
}
connect(findUnusedFunctionsInSubProjectAction, &QAction::triggered, this, [] {
if (const Node * const node = ProjectTree::currentNode(); node && node->asFolderNode())
CppModelManager::findUnusedFunctions(node->directory());
});
MacroExpander *expander = globalMacroExpander();
expander->registerVariable("Cpp:LicenseTemplate",
tr("The license template."),
@@ -336,9 +299,6 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
touchBar->addAction(cmd, Core::Constants::G_TOUCHBAR_NAVIGATION);
cmd = ActionManager::command(Constants::SHOW_PREPROCESSED_FILE);
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
cmd = ActionManager::command(TextEditor::Constants::FOLLOW_SYMBOL_UNDER_CURSOR);
cmd->setTouchBarText(tr("Follow", "text on macOS touch bar"));
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
@@ -418,6 +378,44 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err
contextMenu->addAction(cmd, Constants::G_CONTEXT_FIRST);
cppToolsMenu->addAction(cmd);
QAction * const showPreprocessedAction = new QAction(tr("Show Preprocessed Source"), this);
command = ActionManager::registerAction(showPreprocessedAction,
Constants::SHOW_PREPROCESSED_FILE, context);
mcpptools->addAction(command);
contextMenu->addAction(command, Constants::G_CONTEXT_FIRST);
connect(showPreprocessedAction, &QAction::triggered,
this, [] { CppModelManager::showPreprocessedFile(false); });
QAction * const showPreprocessedInSplitAction = new QAction
(tr("Show Preprocessed Source in Next Split"), this);
command = ActionManager::registerAction(showPreprocessedInSplitAction,
Constants::SHOW_PREPROCESSED_FILE_SPLIT, context);
mcpptools->addAction(command);
connect(showPreprocessedInSplitAction, &QAction::triggered,
this, [] { CppModelManager::showPreprocessedFile(true); });
QAction *const findUnusedFunctionsAction = new QAction(tr("Find Unused Functions"), this);
command = ActionManager::registerAction(findUnusedFunctionsAction,
"CppTools.FindUnusedFunctions");
mcpptools->addAction(command);
connect(findUnusedFunctionsAction, &QAction::triggered, this, [] {
CppModelManager::findUnusedFunctions({});
});
QAction *const findUnusedFunctionsInSubProjectAction
= new QAction(tr("Find Unused C/C++ Functions"), this);
command = ActionManager::registerAction(findUnusedFunctionsInSubProjectAction,
"CppTools.FindUnusedFunctionsInSubProject");
for (ActionContainer *const projectContextMenu :
{ActionManager::actionContainer(ProjectExplorer::Constants::M_SUBPROJECTCONTEXT),
ActionManager::actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT)}) {
projectContextMenu->addSeparator(ProjectExplorer::Constants::G_PROJECT_TREE);
projectContextMenu->addAction(command, ProjectExplorer::Constants::G_PROJECT_TREE);
}
connect(findUnusedFunctionsInSubProjectAction, &QAction::triggered, this, [] {
if (const Node *const node = ProjectTree::currentNode(); node && node->asFolderNode())
CppModelManager::findUnusedFunctions(node->directory());
});
d->m_openTypeHierarchyAction = new QAction(tr("Open Type Hierarchy"), this);
cmd = ActionManager::registerAction(d->m_openTypeHierarchyAction, Constants::OPEN_TYPE_HIERARCHY, context);
cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? tr("Meta+Shift+T") : tr("Ctrl+Shift+T")));

View File

@@ -2871,6 +2871,56 @@ static void formatCdbBreakPointResponse(int modelId, const QString &responseId,
str << '\n';
}
// Helper to retrieve an int child from GDBMI
static inline std::optional<int> gdbmiChildToInt(const GdbMi &parent, const char *childName)
{
const GdbMi childBA = parent[childName];
if (childBA.isValid()) {
bool ok;
const int v = childBA.data().toInt(&ok);
if (ok)
return v;
}
return std::nullopt;
}
// Helper to retrieve an bool child from GDBMI
static inline std::optional<bool> gdbmiChildToBool(const GdbMi &parent, const char *childName)
{
const GdbMi childBA = parent[childName];
return childBA.isValid() ? std::make_optional(childBA.data() == "true") : std::nullopt;
}
// Parse extension command listing breakpoints.
// Note that not all fields are returned, since file, line, function are encoded
// in the expression (that is in addition deleted on resolving for a bp-type breakpoint).
BreakpointParameters CdbEngine::parseBreakPoint(const GdbMi &gdbmi)
{
BreakpointParameters result;
result.enabled = gdbmiChildToBool(gdbmi, "enabled").value_or(result.enabled);
result.pending = gdbmiChildToBool(gdbmi, "deferred").value_or(result.pending);
const GdbMi moduleG = gdbmi["module"];
if (moduleG.isValid())
result.module = moduleG.data();
const GdbMi sourceFileName = gdbmi["srcfile"];
if (sourceFileName.isValid()) {
NormalizedSourceFileName mappedFile = sourceMapNormalizeFileNameFromDebugger(
sourceFileName.data());
result.fileName = Utils::FilePath::fromUserInput(mappedFile.fileName);
const GdbMi lineNumber = gdbmi["srcline"];
if (lineNumber.isValid())
result.lineNumber = lineNumber.data().toULongLong(nullptr, 0);
}
const GdbMi addressG = gdbmi["address"];
if (addressG.isValid())
result.address = addressG.data().toULongLong(nullptr, 0);
if (const std::optional<int> ignoreCount = gdbmiChildToInt(gdbmi, "passcount"))
result.ignoreCount = *ignoreCount - 1;
result.threadSpec = gdbmiChildToInt(gdbmi, "thread").value_or(result.threadSpec);
return result;
}
void CdbEngine::handleBreakPoints(const DebuggerResponse &response)
{
if (debugBreakpoints) {
@@ -2896,8 +2946,7 @@ void CdbEngine::handleBreakPoints(const DebuggerResponse &response)
for (const GdbMi &breakPointG : response.data) {
// Might not be valid if there is not id
const QString responseId = breakPointG["id"].data();
BreakpointParameters reportedResponse;
parseBreakPoint(breakPointG, &reportedResponse);
BreakpointParameters reportedResponse = parseBreakPoint(breakPointG);
if (debugBreakpoints)
qDebug(" Parsed %s: pending=%d %s\n", qPrintable(responseId),
reportedResponse.pending,

View File

@@ -168,6 +168,7 @@ private:
unsigned parseStackTrace(const GdbMi &data, bool sourceStepInto);
void mergeStartParametersSourcePathMap();
void checkQtSdkPdbFiles(const QString &module);
BreakpointParameters parseBreakPoint(const GdbMi &gdbmi);
const QString m_tokenPrefix;
void handleSetupFailure(const QString &errorMessage);

View File

@@ -189,64 +189,6 @@ QString cdbClearBreakpointCommand(const Breakpoint &bp)
return "bc " + QString::number(firstBreakPoint) + '-' + QString::number(lastBreakPoint);
}
// Helper to retrieve an int child from GDBMI
static inline bool gdbmiChildToInt(const GdbMi &parent, const char *childName, int *target)
{
const GdbMi childBA = parent[childName];
if (childBA.isValid()) {
bool ok;
const int v = childBA.data().toInt(&ok);
if (ok) {
*target = v;
return true;
}
}
return false;
}
// Helper to retrieve an bool child from GDBMI
static inline bool gdbmiChildToBool(const GdbMi &parent, const char *childName, bool *target)
{
const GdbMi childBA = parent[childName];
if (childBA.isValid()) {
*target = childBA.data() == "true";
return true;
}
return false;
}
// Parse extension command listing breakpoints.
// Note that not all fields are returned, since file, line, function are encoded
// in the expression (that is in addition deleted on resolving for a bp-type breakpoint).
void parseBreakPoint(const GdbMi &gdbmi, BreakpointParameters *r,
QString *expression /* = 0 */)
{
gdbmiChildToBool(gdbmi, "enabled", &(r->enabled));
gdbmiChildToBool(gdbmi, "deferred", &(r->pending));
const GdbMi moduleG = gdbmi["module"];
if (moduleG.isValid())
r->module = moduleG.data();
const GdbMi sourceFileName = gdbmi["srcfile"];
if (sourceFileName.isValid()) {
r->fileName = Utils::FilePath::fromUserInput(
Utils::FileUtils::normalizedPathName(sourceFileName.data()));
const GdbMi lineNumber = gdbmi["srcline"];
if (lineNumber.isValid())
r->lineNumber = lineNumber.data().toULongLong(nullptr, 0);
}
if (expression) {
const GdbMi expressionG = gdbmi["expression"];
if (expressionG.isValid())
*expression = expressionG.data();
}
const GdbMi addressG = gdbmi["address"];
if (addressG.isValid())
r->address = addressG.data().toULongLong(nullptr, 0);
if (gdbmiChildToInt(gdbmi, "passcount", &(r->ignoreCount)))
r->ignoreCount--;
gdbmiChildToInt(gdbmi, "thread", &(r->threadSpec));
}
QString cdbWriteMemoryCommand(quint64 addr, const QByteArray &data)
{
QString cmd;

View File

@@ -38,10 +38,6 @@ QString cdbAddBreakpointCommand(const BreakpointParameters &d,
const QList<QPair<QString, QString> > &sourcePathMapping,
const QString &responseId = QString());
QString cdbClearBreakpointCommand(const Breakpoint &bp);
// Parse extension command listing breakpoints.
// Note that not all fields are returned, since file, line, function are encoded
// in the expression (that is in addition deleted on resolving for a bp-type breakpoint).
void parseBreakPoint(const GdbMi &gdbmi, BreakpointParameters *r, QString *expression = nullptr);
// Write memory (f ...).
QString cdbWriteMemoryCommand(quint64 addr, const QByteArray &data);

View File

@@ -249,8 +249,18 @@ void DebuggerKitAspect::fix(Kit *k)
setup(k);
return;
}
const Abi tcAbi = ToolChainKitAspect::targetAbi(k);
if (item->matchTarget(tcAbi) != DebuggerItem::DoesNotMatch)
Abi kitAbi;
if (ToolChainKitAspect::toolChains(k).isEmpty()) {
if (DeviceTypeKitAspect::deviceTypeId(k)
!= ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) {
return;
}
kitAbi = Abi(Abi::UnknownArchitecture, Abi::hostAbi().os());
} else {
kitAbi = ToolChainKitAspect::targetAbi(k);
}
if (item->matchTarget(kitAbi) != DebuggerItem::DoesNotMatch)
return;
k->setValue(DebuggerKitAspect::id(), QVariant());
setup(k);

View File

@@ -419,7 +419,7 @@ void LanguageClientManager::openDocumentWithClient(TextEditor::TextDocument *doc
client->openDocument(document);
else
client->activateDocument(document);
} else if (Core::EditorManager::currentEditor()->document() == document) {
} else if (Core::EditorManager::currentDocument() == document) {
TextEditor::IOutlineWidgetFactory::updateOutline();
}
}

View File

@@ -63,7 +63,7 @@ constexpr auto armgcc_mimxrt1050_evk_freertos_json = R"(
"id": "ARMGCC_CMAKE_TOOLCHAIN_FILE",
"cmakeVar": "CMAKE_TOOLCHAIN_FILE",
"type": "file",
"defaultValue": "%{Qul_ROOT}//lib/cmake/Qul/toolchain/armgcc.cmake",
"defaultValue": "%{Qul_ROOT}/lib/cmake/Qul/toolchain/armgcc.cmake",
"visible": false,
"optional": false
}

View File

@@ -63,7 +63,7 @@ constexpr auto armgcc_mimxrt1064_evk_freertos_json = R"(
"id": "ARMGCC_CMAKE_TOOLCHAIN_FILE",
"cmakeVar": "CMAKE_TOOLCHAIN_FILE",
"type": "file",
"defaultValue": "%{Qul_ROOT}//lib/cmake/Qul/toolchain/armgcc.cmake",
"defaultValue": "%{Qul_ROOT}/lib/cmake/Qul/toolchain/armgcc.cmake",
"visible": false,
"optional": false
}

View File

@@ -63,7 +63,7 @@ constexpr auto armgcc_mimxrt1170_evk_freertos_json = R"(
"id": "ARMGCC_CMAKE_TOOLCHAIN_FILE",
"cmakeVar": "CMAKE_TOOLCHAIN_FILE",
"type": "file",
"defaultValue": "%{Qul_ROOT}//lib/cmake/Qul/toolchain/armgcc.cmake",
"defaultValue": "%{Qul_ROOT}/lib/cmake/Qul/toolchain/armgcc.cmake",
"visible": false,
"optional": false
}

View File

@@ -62,7 +62,7 @@ constexpr auto armgcc_stm32f769i_discovery_freertos_json = R"(
"id": "ARMGCC_CMAKE_TOOLCHAIN_FILE",
"cmakeVar": "CMAKE_TOOLCHAIN_FILE",
"type": "file",
"defaultValue": "%{Qul_ROOT}//lib/cmake/Qul/toolchain/armgcc.cmake",
"defaultValue": "%{Qul_ROOT}/lib/cmake/Qul/toolchain/armgcc.cmake",
"visible": false,
"optional": false
}

View File

@@ -62,7 +62,7 @@ constexpr auto armgcc_stm32h750b_discovery_baremetal_json = R"(
"id": "ARMGCC_CMAKE_TOOLCHAIN_FILE",
"cmakeVar": "CMAKE_TOOLCHAIN_FILE",
"type": "file",
"defaultValue": "%{Qul_ROOT}//lib/cmake/Qul/toolchain/armgcc.cmake",
"defaultValue": "%{Qul_ROOT}/lib/cmake/Qul/toolchain/armgcc.cmake",
"visible": false,
"optional": false
}

View File

@@ -14,6 +14,7 @@ namespace PerfProfiler {
class PERFPROFILER_EXPORT PerfRunConfigurationAspect :
public ProjectExplorer::GlobalOrProjectAspect
{
Q_OBJECT
public:
PerfRunConfigurationAspect(ProjectExplorer::Target *target);
};

View File

@@ -46,8 +46,6 @@ using namespace Utils;
const char BUILD_STEP_LIST_COUNT[] = "ProjectExplorer.BuildConfiguration.BuildStepListCount";
const char BUILD_STEP_LIST_PREFIX[] = "ProjectExplorer.BuildConfiguration.BuildStepList.";
const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "ProjectExplorer.BuildConfiguration.ClearSystemEnvironment";
const char USER_ENVIRONMENT_CHANGES_KEY[] = "ProjectExplorer.BuildConfiguration.UserEnvironmentChanges";
const char CUSTOM_PARSERS_KEY[] = "ProjectExplorer.BuildConfiguration.CustomParsers";
const char PARSE_STD_OUT_KEY[] = "ProjectExplorer.BuildConfiguration.ParseStandardOutput";
@@ -378,8 +376,9 @@ QVariantMap BuildConfiguration::toMap() const
{
QVariantMap map = ProjectConfiguration::toMap();
map.insert(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY), d->m_clearSystemEnvironment);
map.insert(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY), EnvironmentItem::toStringList(d->m_userEnvironmentChanges));
map.insert(QLatin1String(Constants::CLEAR_SYSTEM_ENVIRONMENT_KEY), d->m_clearSystemEnvironment);
map.insert(QLatin1String(Constants::USER_ENVIRONMENT_CHANGES_KEY),
EnvironmentItem::toStringList(d->m_userEnvironmentChanges));
map.insert(QLatin1String(BUILD_STEP_LIST_COUNT), 2);
map.insert(QLatin1String(BUILD_STEP_LIST_PREFIX) + QString::number(0), d->m_buildSteps.toMap());
@@ -393,8 +392,10 @@ QVariantMap BuildConfiguration::toMap() const
bool BuildConfiguration::fromMap(const QVariantMap &map)
{
d->m_clearSystemEnvironment = map.value(QLatin1String(CLEAR_SYSTEM_ENVIRONMENT_KEY)).toBool();
d->m_userEnvironmentChanges = EnvironmentItem::fromStringList(map.value(QLatin1String(USER_ENVIRONMENT_CHANGES_KEY)).toStringList());
d->m_clearSystemEnvironment = map.value(QLatin1String(Constants::CLEAR_SYSTEM_ENVIRONMENT_KEY))
.toBool();
d->m_userEnvironmentChanges = EnvironmentItem::fromStringList(
map.value(QLatin1String(Constants::USER_ENVIRONMENT_CHANGES_KEY)).toStringList());
updateCacheAndEmitEnvironmentChanged();

View File

@@ -220,6 +220,8 @@ const char SETTINGS_MENU_HIDE_BUILD[] = "Menu/HideBuild";
const char SETTINGS_MENU_HIDE_DEBUG[] = "Menu/HideDebug";
const char SETTINGS_MENU_HIDE_ANALYZE[] = "Menu/HideAnalyze";
const char SESSION_TASKFILE_KEY[] = "TaskList.File";
const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "ProjectExplorer.BuildConfiguration.ClearSystemEnvironment";
const char USER_ENVIRONMENT_CHANGES_KEY[] = "ProjectExplorer.BuildConfiguration.UserEnvironmentChanges";
// UI texts
PROJECTEXPLORER_EXPORT QString msgAutoDetected();

View File

@@ -92,7 +92,7 @@ void SquishXmlOutputHandler::mergeResultFiles(const Utils::FilePaths &reportFile
// and finally write test tag (case name) - the prolog tag (for test case)
// will be written outside the if
const QXmlStreamAttributes testAttributes = reader.attributes();
QXmlStreamReader::TokenType token;
QXmlStreamReader::TokenType token = QXmlStreamReader::NoToken;
while (!reader.atEnd()) {
token = reader.readNext();
if (token != QXmlStreamReader::Characters)

View File

@@ -5889,7 +5889,7 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
{
QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y()));
int markWidth;
int markWidth = 0;
extraAreaWidth(&markWidth);
const bool inMarkArea = e->pos().x() <= markWidth && e->pos().x() >= 0;

View File

@@ -4061,15 +4061,15 @@ void tst_Dumpers::dumper_data()
+ Check("list.0", "[0]", "1", "int")
+ Check("list.1", "[1]", "2", "int")
+ Check("list.2", "[2]", "3", "int")
+ Check("v3", "", "@QVariant (@QList<int>)") % Qt5
+ Check("v3", "", "@QVariant (@QList<int>)") % NeedsInferiorCall % Qt5
+ Check("v3.data", "<3 items>", TypePattern(".*QList<int>")) % NeedsInferiorCall % Qt5
+ Check("v3.data.0", "[0]", "1", "int") % NeedsInferiorCall % Qt5
+ Check("v3.data.1", "[1]", "2", "int") % NeedsInferiorCall % Qt5
+ Check("v3.data.2", "[2]", "3", "int") % NeedsInferiorCall % Qt5
+ Check("v3", "<3 items>", "@QVariant (@QList<int>)") % Qt6
+ Check("v3.0", "[0]", "1", "int") % NeedsInferiorCall % Qt6
+ Check("v3.1", "[1]", "2", "int") % NeedsInferiorCall % Qt6
+ Check("v3.2", "[2]", "3", "int") % NeedsInferiorCall % Qt6;
+ Check("v3.0", "[0]", "1", "int") % Qt6
+ Check("v3.1", "[1]", "2", "int") % Qt6
+ Check("v3.2", "[2]", "3", "int") % Qt6;
QTest::newRow("QVariant2")

View File

@@ -115,6 +115,14 @@ void tst_gdb::version_data()
QTest::newRow("Debian 7.12 git")
<< "GNU gdb (Debian 7.12-6) 7.12.0.20161007-git"
<< 71200 << 6 << false << false;
QTest::newRow("Debian 10.1 git")
<< "GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git"
<< 100100 << 1 << false << false;
QTest::newRow("Ubuntu 22.04")
<< "GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1"
<< 120100 << 0 << false << false;
}
static QString chopConst(QString type)