Merge remote-tracking branch 'origin/16.0'

Change-Id: I466d212f57f706c71fd0c2624abb33814ea3e783
This commit is contained in:
Eike Ziller
2025-03-13 11:23:09 +01:00
39 changed files with 361 additions and 144 deletions

View File

@@ -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

View File

@@ -240,7 +240,7 @@
\li \uicontrol {Use CDB console}
\li If a console application does not start up properly in the configured
console and the subsequent attach fails, diagnose the issue by
using CDB's native console. Select this checkbox to override the
using the native CDB console. Select this checkbox to override the
console set in the Windows system environment variables. Note that
the native console does not prompt on application exit.
\row

View File

@@ -282,7 +282,7 @@
If a console application does not start up properly in the configured
console and the subsequent attach fails, you can diagnose the issue by
using CDB's native console. Go to \preferences >
using the native CDB console. Go to \preferences >
\uicontrol Debugger > \uicontrol CDB > \uicontrol {Use CDB console} to
override the console set in the Windows system environment variables.
Note that the native console does not prompt on application exit.

View File

@@ -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

View File

@@ -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 <model-name>
\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:

View File

@@ -461,7 +461,7 @@
\inlineimage icons/refactormarker.png
\row
\li Convert Function Call to Qt Meta-Method Invocation
\li Converts an invokable function call into a meta method
\li Converts an invocable function call into a meta method
invocation. This applies to signals and slots in general,
as well as functions explicitly marked with \c Q_INVOKABLE.
For example, for the following class:
@@ -499,7 +499,7 @@
}
\endcode
The quick fix also works on invokable methods outside the class that are
The quick fix also works on invocable methods outside the class that are
visible from the location where they are called from. For example, it
rewrites

View File

@@ -20,8 +20,7 @@
\note Since \QDS 2.3.0, \QDS project wizard templates generate projects that
can be built with CMake. You can open the \e CMakeLists.txt project file in
Qt Creator to continue developing the project. Also, you can use Qt Creator
to create a Qt Quick Application project that you can open in \QDS.
Qt Creator to continue developing the project.
\target wizard-template-note
\note Since \QDS 3.9.0, \QDS project wizard templates generate projects that
@@ -54,12 +53,12 @@
show the main QML file when the application starts.
\if defined(qtcreator)
The \e {Qt Quick Designer Components} module is installed when you
The \e {Qt Quick Studio Components} module is installed when you
install \QDS. If you use Qt Quick Studio Components or Effects
from the module in a project that you want to edit in Qt Creator,
you have to build the module and install it to your Qt to be able to
build your project. For more information, see
\l{Adding Qt Quick Designer Components to Qt Installations}.
\l{Adding Qt Quick Studio Components to Qt Installations}.
The \l{Qt Quick Timeline} module is installed when you install \QDS.
If you only install Qt Creator and Qt, remember to also select the
@@ -110,7 +109,7 @@
project.
\note If you get error messages related to modules, perfom the steps
described in \l{Adding Qt Quick Designer Components to Qt Installations}.
described in \l{Adding Qt Quick Studio Components to Qt Installations}.
\endlist
For example, if you copy the source files of the \e ProgressBar
@@ -142,7 +141,7 @@
using the Qt resource system dynamically. For more information, see
\l{The Qt Resource System}.
\section1 Adding Qt Quick Designer Components to Qt Installations
\section1 Adding Qt Quick Studio Components to Qt Installations
Since \QDS 3.9, the Qt Quick Studio Components module is installed by default
as part of the application created with \QDS. You can also install the module manually.
@@ -154,7 +153,7 @@
git clone https://code.qt.io/qt-labs/qtquickdesigner-components.git
\endcode
\li Install the Qt Quick Designer Components module.
\li Install the Qt Quick Studio Components module.
\badcode
mkdir build

View File

@@ -369,7 +369,7 @@
\li \l {git branch}
\row
\li \uicontrol {Copy <hash>}
\li Copy the commit's <hash> to the clipboard.
\li Copy the commit <hash> to the clipboard.
\li
\row
\li \uicontrol {Describe Change <hash>}
@@ -1005,7 +1005,7 @@
In the \uicontrol {Git Branches} view, right-click a remote branch, and
then select a merge option in the context menu. If the commit you are merging
can be reached by following the first commit's history, there is no divergent
can be reached by following the history of the first commit, there is no divergent
work to merge together. To allow Git to move the branch pointer forward,
select \uicontrol {Merge <remote branch> into <local branch> (Fast-Forward)}.
If you do not want to fast-forward the branch, select

View File

@@ -25595,7 +25595,7 @@ Dies ist normalerweise nicht empfehlenswert, da die Datei wahrscheinlich währen
</message>
<message>
<source>Provide the type</source>
<translation>Typ bestimmen</translation>
<translation>Typ festlegen</translation>
</message>
<message>
<source>Data type:</source>
@@ -46897,7 +46897,7 @@ fails because Clang does not understand the target architecture.</source>
</message>
<message>
<source>Provide manually</source>
<translation>Manuell bestimmen</translation>
<translation>Manuell festlegen</translation>
</message>
<message>
<source>None</source>
@@ -52613,12 +52613,12 @@ wirklich entfernen?</translation>
<message>
<source>All</source>
<comment>All documentation</comment>
<translation type="unfinished">Alle</translation>
<translation>Alle</translation>
</message>
<message>
<source>None</source>
<comment>No documentation</comment>
<translation type="unfinished"></translation>
<translation>Keine</translation>
</message>
<message>
<source>Not all possible target environments can be supported due to missing compilers.</source>
@@ -52812,7 +52812,7 @@ wirklich entfernen?</translation>
</message>
<message>
<source>Qt version is not properly installed</source>
<translation type="unfinished"></translation>
<translation>Die Qt-Version ist nicht korrekt installiert</translation>
</message>
<message>
<source>Name:</source>
@@ -52848,7 +52848,7 @@ wirklich entfernen?</translation>
</message>
<message>
<source>Cannot update Qt version information from %1: %2.</source>
<translation type="unfinished"></translation>
<translation>Kann die Qt-Versionsinformation von %1 nicht aktualisieren: %2.</translation>
</message>
<message>
<source>Qt version</source>
@@ -52972,12 +52972,12 @@ wirklich entfernen?</translation>
</message>
<message>
<source>Mkspec:</source>
<translation type="unfinished"></translation>
<translation>Mkspec:</translation>
</message>
<message>
<source>None</source>
<comment>No Qt version</comment>
<translation type="unfinished"></translation>
<translation>Keine</translation>
</message>
<message>
<source>Name of Qt Version</source>
@@ -53085,23 +53085,23 @@ wirklich entfernen?</translation>
</message>
<message>
<source>Could not determine target OS</source>
<translation type="unfinished"></translation>
<translation>Das Zielbetriebssystem konnte nicht bestimmt werden</translation>
</message>
<message>
<source>Could not determine target architecture</source>
<translation type="unfinished"></translation>
<translation>Die Zielarchitektur konnte nicht bestimmt werden</translation>
</message>
<message>
<source>Could not determine OS sub-type</source>
<translation type="unfinished"></translation>
<translation>Der Betriebssystemuntertyp konnte nicht bestimmt werden</translation>
</message>
<message>
<source>Error reading &quot;%1&quot;: %2</source>
<translation type="unfinished"></translation>
<translation>Fehler beim Lesen von &quot;%1&quot;: %2</translation>
</message>
<message>
<source>Core.json not found for Qt at &quot;%1&quot;</source>
<translation type="unfinished"></translation>
<translation>Core.json wurde für Qt in &quot;%1&quot; nicht gefunden</translation>
</message>
</context>
<context>
@@ -53920,7 +53920,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message>
<message>
<source>Unknown error</source>
<translation type="unfinished"></translation>
<translation>Unbekannter Fehler</translation>
</message>
<message>
<source>The ssh-keygen tool at &quot;%1&quot; failed: %2</source>
@@ -56394,11 +56394,11 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message>
<message>
<source>Delete Word Left</source>
<translation type="unfinished"></translation>
<translation>Wort links löschen</translation>
</message>
<message>
<source>Delete Line Left</source>
<translation type="unfinished"></translation>
<translation>Zeile links löschen</translation>
</message>
<message>
<source>Clear Terminal</source>
@@ -57239,7 +57239,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält.
<message>
<source>None</source>
<comment>Backspace indentation: None</comment>
<translation type="unfinished"></translation>
<translation>Keine</translation>
</message>
<message>
<source>Enable scroll &amp;wheel zooming</source>
@@ -57443,7 +57443,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält.
</message>
<message>
<source>Display tab settings</source>
<translation type="unfinished"></translation>
<translation>Tabulatoreinstellungen anzeigen</translation>
</message>
<message>
<source>&amp;Highlight selection</source>
@@ -57631,11 +57631,11 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
</message>
<message>
<source>Auto detect</source>
<translation type="unfinished"></translation>
<translation>Automatisch bestimmen</translation>
</message>
<message>
<source>%1 tries to detect the indentation settings based on the file contents. It will fallback to the settings below if the detection fails.</source>
<translation type="unfinished"></translation>
<translation>%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.</translation>
</message>
<message>
<source>Not At All</source>
@@ -57651,11 +57651,11 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
</message>
<message>
<source>Default tab policy:</source>
<translation type="unfinished"></translation>
<translation>Vorgabe-Tabulatorverhalten:</translation>
</message>
<message>
<source>Default &amp;indent size:</source>
<translation type="unfinished"></translation>
<translation>Vorgabe-Einrückungst&amp;iefe:</translation>
</message>
<message>
<source>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.</source>
@@ -57733,31 +57733,31 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
</message>
<message>
<source>Spaces</source>
<translation type="unfinished"></translation>
<translation>Leerzeichen</translation>
</message>
<message>
<source>Tabs</source>
<translation type="unfinished">Tabulatoren</translation>
<translation>Tabulatoren</translation>
</message>
<message>
<source>Document Settings</source>
<translation type="unfinished"></translation>
<translation>Dokumenteinstellungen</translation>
</message>
<message>
<source>Tab Settings</source>
<translation type="unfinished"></translation>
<translation>Tabulatoreinstellungen</translation>
</message>
<message>
<source>Indent Size</source>
<translation type="unfinished"></translation>
<translation>Einrückungstiefe</translation>
</message>
<message>
<source>Tab Size</source>
<translation type="unfinished"></translation>
<translation>Tabulatorweite</translation>
</message>
<message>
<source>Global Settings...</source>
<translation type="unfinished"></translation>
<translation>Globale Einstellungen...</translation>
</message>
<message>
<source>Unix Line Endings (LF)</source>
@@ -58410,7 +58410,8 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
<message>
<source>None</source>
<comment>Case-sensitivity: None</comment>
<translation type="unfinished"></translation>
<translatorcomment>Groß-/Kleinschreibung:</translatorcomment>
<translation>Keine</translation>
</message>
<message>
<source>First Letter</source>
@@ -59168,19 +59169,19 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten.</translation>
</message>
<message>
<source>Info</source>
<translation type="unfinished">Info</translation>
<translation>Info</translation>
</message>
<message>
<source>Underline color of info diagnostics.</source>
<translation type="unfinished"></translation>
<translation>Unterstreichung von Informationen.</translation>
</message>
<message>
<source>Info Context</source>
<translation type="unfinished"></translation>
<translation>Informationskontext</translation>
</message>
<message>
<source>Underline color of the contexts of info diagnostics.</source>
<translation type="unfinished"></translation>
<translation>Unterstreichung der Kontexte von Informationen.</translation>
</message>
<message>
<source>Static Member</source>
@@ -59465,19 +59466,19 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten.</translation>
</message>
<message>
<source>Blame %1</source>
<translation type="unfinished"></translation>
<translation>Blame von %1</translation>
</message>
<message>
<source>Blame Parent</source>
<translation type="unfinished"></translation>
<translation>Blame des Eltern-Commits</translation>
</message>
<message>
<source>File at %1</source>
<translation type="unfinished"></translation>
<translation>Datei bei %1</translation>
</message>
<message>
<source>Log for line %1</source>
<translation type="unfinished"></translation>
<translation>Log für Zeile %1</translation>
</message>
<message>
<source>&lt;b&gt;Note:&lt;/b&gt; &quot;%1&quot; or &quot;%2&quot; is enabled in the instant blame settings.</source>
@@ -59486,11 +59487,11 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten.</translation>
</message>
<message>
<source>Not Committed Yet</source>
<translation type="unfinished"></translation>
<translation>Noch nicht in Commit</translation>
</message>
<message>
<source>Modified line in %1</source>
<translation type="unfinished"></translation>
<translation>Geänderte Zeile in %1</translation>
</message>
<message>
<source>You</source>
@@ -60324,7 +60325,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>Device is unavailable.</source>
<translation type="unfinished"></translation>
<translation>Gerät ist nicht verfügbar.</translation>
</message>
<message>
<source>Failed to watch &quot;%1&quot;.</source>
@@ -60467,7 +60468,7 @@ Die Trace-Daten sind verloren.</translation>
</message>
<message>
<source>File %1 does not exist.</source>
<translation type="unfinished"></translation>
<translation>Datei %1 existiert nicht.</translation>
</message>
<message>
<source>Failed to set up scratch buffer in &quot;%1&quot;.</source>
@@ -61036,7 +61037,7 @@ Zeilen, die mit &quot;##&quot; beginnen, werden als Kommentare behandelt.</trans
</message>
<message>
<source>Remote error output was: %1</source>
<translation type="unfinished">Fehlerausgabe: %1</translation>
<translation>Fehlerausgabe des Geräts: %1</translation>
</message>
</context>
<context>
@@ -61594,11 +61595,11 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch
</message>
<message>
<source>Starting Memory Analyzer...</source>
<translation type="unfinished"></translation>
<translation>Starte Speicheranalyse...</translation>
</message>
<message>
<source>Memory Analyzer running...</source>
<translation type="unfinished"></translation>
<translation>Speicheranalyse läuft...</translation>
</message>
<message>
<source>Open Memcheck XML Log File</source>
@@ -61792,11 +61793,11 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch
</message>
<message>
<source>Starting Function Profiler...</source>
<translation type="unfinished"></translation>
<translation>Starte Funktionsprofiler...</translation>
</message>
<message>
<source>Function Profiler running...</source>
<translation type="unfinished"></translation>
<translation>Funktionsprofiler läuft...</translation>
</message>
<message>
<source>Remove template parameter lists when displaying function names.</source>
@@ -61981,7 +61982,7 @@ Check settings or ensure Valgrind is installed and available in PATH.</source>
<message>
<source>None</source>
<comment>Leak details: None</comment>
<translation type="unfinished"></translation>
<translation>Keine</translation>
</message>
<message>
<source>Simple</source>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -857,7 +857,10 @@ Utils::expected_str<QFuture<void>> 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<void>();
});
return true;
} catch (const std::runtime_error &e) {
if (e.what() == std::string("NormalExit"))

View File

@@ -145,6 +145,7 @@ static QHash<Utils::MimeType, QString> mimeTypeLanguageIdMap()
{"application/xml", "xml"},
{"application/xslt+xml", "xsl"},
{"application/x-yaml", "yaml"},
{"text/x-swift", "swift"},
};
for (const QPair<QString, QString> &languageIdForMimeTypeName : languageIdsForMimeTypeNames) {
const Utils::MimeType &mimeType = Utils::mimeTypeForName(languageIdForMimeTypeName.first);

View File

@@ -1463,10 +1463,11 @@ expected_str<QByteArray> 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()));

View File

@@ -1134,6 +1134,11 @@ void MarkdownBrowser::setEnableCodeCopyButton(bool enable)
access(this)->setEnableCodeCopyButton(enable);
}
void MarkdownBrowser::setViewportMargins(int left, int top, int right, int bottom)
{
access(this)->setMargins(QMargins(left, top, right, bottom));
}
// Special If
If::If(

View File

@@ -460,6 +460,7 @@ public:
void setMarkdown(const QString &);
void setBasePath(const Utils::FilePath &);
void setEnableCodeCopyButton(bool enable);
void setViewportMargins(int left, int top, int right, int bottom);
};
// Special

View File

@@ -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);

View File

@@ -296,6 +296,7 @@ void ModulesHandler::updateModule(const Module &module)
m_model->rootItem()->appendChild(item);
}
if (path.isLocal()) {
try { // MinGW occasionallly throws std::bad_alloc.
ElfReader reader(path);
item->module.elfData = reader.readHeaders();
@@ -304,6 +305,10 @@ void ModulesHandler::updateModule(const Module &module)
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;
}

View File

@@ -936,8 +936,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()) {

View File

@@ -154,7 +154,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;

View File

@@ -11,6 +11,7 @@
#include <utils/layoutbuilder.h>
#include <QMetaEnum>
#include <QCompleter>
using namespace Layouting;
using namespace Utils;
@@ -114,6 +115,7 @@ CREATE_HAS_FUNC(setFixedSize, QSize())
CREATE_HAS_FUNC(setVisible, bool())
CREATE_HAS_FUNC(setIcon, Utils::Icon());
CREATE_HAS_FUNC(setContentsMargins, int(), int(), int(), int());
CREATE_HAS_FUNC(setViewportMargins, int(), int(), int(), int());
CREATE_HAS_FUNC(setCursor, Qt::CursorShape())
CREATE_HAS_FUNC(setMinimumWidth, int());
CREATE_HAS_FUNC(setEnableCodeCopyButton, bool());
@@ -127,6 +129,12 @@ void setProperties(std::unique_ptr<T> &item, const sol::table &children, QObject
item->setContentsMargins(margins->left(), margins->top(), margins->right(), margins->bottom());
}
if constexpr (has_setViewportMargins<T>) {
sol::optional<QMargins> margins = children.get<sol::optional<QMargins>>("viewportMargins"sv);
if (margins)
item->setViewportMargins(margins->left(), margins->top(), margins->right(), margins->bottom());
}
if constexpr (has_setCursor<T>) {
const auto cursor = children.get<sol::optional<Qt::CursorShape>>("cursor"sv);
if (cursor)
@@ -196,8 +204,10 @@ void setProperties(std::unique_ptr<T> &item, const sol::table &children, QObject
if constexpr (has_setCompleter<T>) {
const auto completer = children.get<QCompleter *>("completer"sv);
if (completer)
if (completer) {
item->setCompleter(completer);
completer->setParent(item->emerge());
}
}
if constexpr (has_setMinimumHeight<T>) {

View File

@@ -29,8 +29,15 @@ void setupQtModule()
qt.new_usertype<QCompleter>(
"QCompleter",
"create",
[](const QStringList &list) -> std::unique_ptr<QCompleter> {
return std::make_unique<QCompleter>(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,

View File

@@ -232,6 +232,7 @@ local markdownBrowser = {}
---@class (exact) MarkdownBrowserOptions : WidgetOptions
---@field enableCodeCopyButton? boolean Enable or disable the code copy button
---@field viewportMargins? integer[] Four integers representing left, top, right and bottom margins
local markdownBrowserOptions = {}
---@param options MarkdownBrowserOptions

View File

@@ -2488,6 +2488,13 @@ FilePairs ProjectExplorerPlugin::renameFiles(
= Utils::filtered(nodesAndNewFilePaths, [](const std::pair<Node *, FilePath> &elem) {
return !elem.first->filePath().equalsCaseSensitive(elem.second);
});
// The same as above, for use when the nodes might no longer exist.
const QList<std::pair<FilePath, FilePath>> oldAndNewFilePathsFiltered
= Utils::transform(nodesAndNewFilePathsFiltered, [](const std::pair<Node *, FilePath> &p) {
return std::make_pair(p.first->filePath(), p.second);
});
FilePaths renamedOnly;
FilePaths failedRenamings;
const auto renameFile = [&failedRenamings](const Node *node, const FilePath &newFilePath) {
@@ -2553,9 +2560,9 @@ FilePairs ProjectExplorerPlugin::renameFiles(
}
FilePairs allRenamedFiles;
for (const std::pair<Node *, FilePath> &candidate : nodesAndNewFilePathsFiltered) {
if (!failedRenamings.contains(candidate.first->filePath()))
allRenamedFiles.emplaceBack(candidate.first->filePath(), candidate.second);
for (const std::pair<FilePath, FilePath> &candidate : oldAndNewFilePathsFiltered) {
if (!failedRenamings.contains(candidate.first))
allRenamedFiles.emplaceBack(candidate.first, candidate.second);
}
emit instance()->filesRenamed(allRenamedFiles);
return allRenamedFiles;

View File

@@ -1807,6 +1807,7 @@ void RunWorker::initiateStop()
*/
void RunWorker::reportStopped()
{
if (QTC_GUARD(d && d->runControl && d->runControl->d))
d->runControl->d->onWorkerStopped(this);
emit stopped();
}

View File

@@ -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)

View File

@@ -156,9 +156,6 @@ GroupItem GenericDeployStep::transferTask(const Storage<FilesToTransfer> &storag
.arg(FileTransfer::transferMethodName(preferredTransferMethod),
FileTransfer::transferMethodName(transferMethod),
deviceConfiguration()->displayName());
if (transferMethod == FileTransferMethod::GenericCopy)
addWarningMessage(message);
else
addProgressMessage(message);
m_emittedDowngradeWarning = true;
}

View File

@@ -52,10 +52,15 @@
" <glob pattern='*.markdown'/>",
" </mime-type>",
" <mime-type type='text/rust'>",
" <comment>Rust souce file</comment>",
" <comment>Rust source file</comment>",
" <sub-class-of type='text/plain'/>",
" <glob pattern='*.rs'/>",
" </mime-type>",
" <mime-type type='text/x-swift'>",
" <comment>Swift source file</comment>",
" <sub-class-of type='text/plain'/>",
" <glob pattern='*.swift'/>",
" </mime-type>",
"</mime-info>"
]
}

View File

@@ -4128,7 +4128,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<EmbeddedWidgetInterface> TextEditorWidgetPrivate::insertWidget(

View File

@@ -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()

View File

@@ -1,6 +1,49 @@
# Testing Boot2Qt with the Hardware Pool
## Installing the Requirements
### Testing Boot2Qt setup without hardware ###
On macOS, you need to have Docker Desktop installed, including the Docker CLI.
Install the Boot to Qt Software Stack for the Qt version and device hardware
that you want to test with the Qt Online Installer
On macOS, the installer might complain about not being able to run docker.
If that is the case, copy the command line from the dialog into a Terminal
with the Docker CLI in PATH and execute it manually. Choose `Ignore` in the
installer dialog when ready.
## Reserving a Device
Log into https://hw-controller.qt.io/ with your Qt Account. Choose the
appropriate device hardware, select the Qt version that matches what you
installed with the Qt Online Installer, state a reason for your device use,
choose a reservation duration, and select `Reserve`.
The device is then provisioned and booted. When ready, make note of the device
IP address.
## Configuring Qt Creator
Start Qt Creator, open the device options, and add a `Boot to Qt Device`.
Give it a name, and provide the IP that you noted when reserving the device.
The user is `root`.
Now you can open or create a project, select the corresponding Boot to Qt kit,
and build, run & debug.
While an application is running on the device, you can use a VNC[^vnc] viewer to
connect to the apps UI with the device's IP.
[^vnc]: The creation of the VNC connection depends on setting
`QT_QPA_PLATFORM=vnc` in `/etc/default/qt` on the device. That should
be enabled by default for devices created with the web interface.
## Releasing the Device
When you are finished with testing, release the reservation of the device
in the web interface.
# Testing Boot2Qt setup without hardware ###
It is possible to test Boot2Qt without hardware on a plain Linux host system.
@@ -8,12 +51,12 @@ Note: You need an ssh-accessible "root" user on the machine, open X access,
and must be willing to use it. This is not meant for production environments!
# Prepare your machine
## Prepare your machine
ssh-copy-id -i ~/.ssh/id_??????.pub root@localhost
xhost +
# Get appcontroller source and build
## Get appcontroller source and build
git clone ssh://codereview.qt-project.org/qt-apps/boot2qt-appcontroller
@@ -21,12 +64,12 @@ cd boot2qt-appcontroller
/path/to/qt-base/bin/qt-cmake ...
ninja ...
# Copy binary to "proper" location
## Copy binary to "proper" location
sudo ln -s `pwd`/appcontroller /usr/bin/appcontroller
# Set up "Boot to Qt" Device in Creator
## Set up "Boot to Qt" Device in Creator
Ensure the "Boot to Qt" plugin is enabled
@@ -36,7 +79,7 @@ Device Address: 127.0.0.1
Press "Apply"
# Create a suitable Kit
## Create a suitable Kit
Clone your standard kit for normal local work
Change the "Run Device" to LocalHostForBoot2Qt
@@ -46,11 +89,11 @@ Press "Apply"
The kit will have a warning the "Device type is not supported by Qt version" - that's ok.
# Create a test project
## Create a test project
File -> New Project -> Qt Quick Application
# Tweak project settings
## Tweak project settings
Deployment method: "Deploy to Boot to Qt Target"
@@ -60,12 +103,12 @@ Run Environment: Add LD_LIBRARY_PATH=/path/to/qt-base/lib
"Executable on Device" may be red at that stage, it shold get black after a successful build
# Build
## Build
Ctrl-B
# Test
## Test
At that stage, the program should be runnable, debuggable (C++, QML, and combined QML/C++),
and Qml-Profilable

View File

@@ -0,0 +1,57 @@
### Testing QNX setup without hardware ###
It is possible to test QNX without hardware on a plain Linux host system.
Note: This doc assumes you have:
1.1 An access to actual qnx target device available via IP address that has Qt installed.
1.2 A QNX SDP
1.3 A QNX license (placed under: $HOME/.qnx/license/licenses).
# Installations
2.1 Unpack qnx710-windows-linux-20240417.tar.xz in ~/qnx folder.
2.2 Install 'chrpath' on your linux host.
2.3 Install locally Qt for QNX via Qt installer / maintenance tool.
Install matching version of the one that is on the remote device.
Point Qt installer to ~/qnx/qnx710-windows-linux-20240417/qnx710 for the SDP dir.
2.4 Ensure you have cmake 3.21.1 at minimum installed on your host.
# Creator configuration
3.1 Ensure your installed Qt for QNX are detected:
Preferences | Kits | Qt Versions should list installed versions.
Preferences | Kits | Kits should list installed kits (won't be used!).
If not, try: Preferences | Kits | Qt Versions | Link with Qt...
and point to the installed Qt for QNX master dir.
3.2 Create QNX device, pointing to the IP address from 1.1:
Preferences | Devices | Add | QNX Device
3.3 Run device Test - it should already pass.
3.4 Ensure the right "Access via" value for the created QNX device:
it should be: Direct (not Local PC).
3.4 Add QNX SDK:
Preferences | SDKs | QNX | Add...
Point into ~/qnx/qnx710-windows-linux-20240417/qnx710/qnxsdp-env.sh
This should fill the QNX page with content and you should see 3 new buttons:
Create Kit for aarch64le, Create Kit for x86_64 and Create Kit for armle-v7.
3.5 Create a kit: press one of the buttons from the previous point.
Ensure it matches the architecture of the remote device.
You won't see any feedback, but when you switch to the Kits | Kits tab,
you should see a new kit created.
3.6 It might happen that the created kit doesn't have matching
compiler/debugger/Qt version selected. Ensure they have something like:
Compiler: QCC for x86_64 - qnx7 (64-bit ARM)
Debugger: Debugger for QNX 7.1.0 ARMv8
Qt version: Qt 6.8.2 for QNX 7.1 ARMv8
# Create a qnx project
4.1 Try creating a new project:
File | New Project... | Application (Qt) | Qt Console Application
and select the Kit created in point 3.5
4.2 Go to project run settings and fill up the "Alternate executable on device:" field.
Check "Use this command instead" on the right side first to enable the line.
Fill it with "/tmp/bin/[your_target_name]" by typing.
This should match the table in the "Deployment" section above.
Don't worry that it stays red, indicating it's not an existing path.
4.3 The project should build, deploy and run on remote now.

View File

@@ -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()
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))