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)) ([QTCREATORBUG-31931](https://bugreports.qt.io/browse/QTCREATORBUG-31931))
* Fixed the generation of getters for local enum types * Fixed the generation of getters for local enum types
([QTCREATORBUG-32473](https://bugreports.qt.io/browse/QTCREATORBUG-32473)) ([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 * Built-in
* Added support for init-statements in range-based `for` loops * Added support for init-statements in range-based `for` loops
([QTCREATORBUG-31961](https://bugreports.qt.io/browse/QTCREATORBUG-31961)) ([QTCREATORBUG-31961](https://bugreports.qt.io/browse/QTCREATORBUG-31961))
@@ -231,8 +233,13 @@ Terminal
([QTCREATORBUG-32197](https://bugreports.qt.io/browse/QTCREATORBUG-32197)) ([QTCREATORBUG-32197](https://bugreports.qt.io/browse/QTCREATORBUG-32197))
* Fixed killing the shell process * Fixed killing the shell process
([QTCREATORBUG-32509](https://bugreports.qt.io/browse/QTCREATORBUG-32509)) ([QTCREATORBUG-32509](https://bugreports.qt.io/browse/QTCREATORBUG-32509))
* Fixed auto-scrolling * Fixed the scrolling behavior
([QTCREATORBUG-32167](https://bugreports.qt.io/browse/QTCREATORBUG-32167)) ([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 Version Control Systems
----------------------- -----------------------
@@ -313,6 +320,7 @@ Credits for these changes go to:
Alessandro Portale Alessandro Portale
Alexander Drozdov Alexander Drozdov
Alexander Pershin Alexander Pershin
Alexandre Laurent
Alexis Jeandet Alexis Jeandet
Ali Kianian Ali Kianian
Andre Hartmann Andre Hartmann
@@ -348,6 +356,7 @@ Mats Honkamaa
Miikka Heikkinen Miikka Heikkinen
Mitch Curtis Mitch Curtis
Morteza Jamshidi Morteza Jamshidi
Nicholas Bennett
Nikolaus Demmel Nikolaus Demmel
Olivier De Cannière Olivier De Cannière
Orgad Shaneh Orgad Shaneh
@@ -367,4 +376,5 @@ Thiago Macieira
Thomas Hartmann Thomas Hartmann
Tim Jenßen Tim Jenßen
Vikas Pachdha Vikas Pachdha
Ville Lavonius
Xu Jin Xu Jin

View File

@@ -240,7 +240,7 @@
\li \uicontrol {Use CDB console} \li \uicontrol {Use CDB console}
\li If a console application does not start up properly in the configured \li If a console application does not start up properly in the configured
console and the subsequent attach fails, diagnose the issue by 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 console set in the Windows system environment variables. Note that
the native console does not prompt on application exit. the native console does not prompt on application exit.
\row \row

View File

@@ -282,7 +282,7 @@
If a console application does not start up properly in the configured If a console application does not start up properly in the configured
console and the subsequent attach fails, you can diagnose the issue by 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 \uicontrol Debugger > \uicontrol CDB > \uicontrol {Use CDB console} to
override the console set in the Windows system environment variables. override the console set in the Windows system environment variables.
Note that the native console does not prompt on application exit. 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 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 \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 \table
\header \header
@@ -204,33 +205,30 @@
\li M10 \li M10
\li Error \li Error
\li Duplicate property binding \li Duplicate property binding
\li See also: \l{http://linterrors.com/js/duplicate-key-a} \li For more information, see \e {Duplicate key '{a}'} in
{Duplicate key '{a}'}. \e {JSLint Error Explanations}.
\row \row
\li M11 \li M11
\li Error \li Error
\li Id expected \li Id expected
\li See also: \li For more information, see
\l{http://linterrors.com/js/expected-an-identifier-and-instead-saw-a-a-reserved-word} \e {Expected an identifier and instead saw '{a}' (a reserved word)}
{Expected an identifier and instead saw '{a}' (a reserved word)}. in \e {JSLint Error Explanations}.
\row \row
\li M14 \li M14
\li Error \li Error
\li Invalid id \li Invalid id
\li See also: \li For more information, see
\l{http://linterrors.com/js/expected-an-identifier-and-instead-saw-a-a-reserved-word} \e {Expected an identifier and instead saw '{a}' (a reserved word)}.
{Expected an identifier and instead saw '{a}' (a reserved word)}.
\row \row
\li M15 \li M15
\li Error \li Error
\li Duplicate id \li Duplicate id
\li Ids in a file must be unique. \li Ids in a file must be unique.
See also: \l{http://linterrors.com/js/duplicate-key-a} For more information, see \e {Duplicate key '{a}'}.
{Duplicate key '{a}'}.
\row \row
\li M16 \li M16
@@ -270,7 +268,8 @@
\li M23 \li M23
\li Warning \li Warning
\li Do not use \c eval \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 \row
\li M28 \li M28
@@ -282,8 +281,8 @@
\li M29 \li M29
\li Warning \li Warning
\li Do not use \c with \li Do not use \c with
\li See also: \l{http://linterrors.com/js/unexpected-with} \li For more information, see \e {Unexpected 'with'} in
{Unexpected 'with'}. \e {JSLint Error Explanations}.
\row \row
\li M30 \li M30
@@ -333,51 +332,48 @@
\li M108 \li M108
\li Warning \li Warning
\li Function \c name is used before its declaration \li Function \c name is used before its declaration
\li See also: \l{http://linterrors.com/js/a-was-used-before-it-was-defined} \li For more information, see \e {{a} was used before it was defined} in
{{a} was used before it was defined}. \e {JSLint Error Explanations}.
\row \row
\li M109 \li M109
\li Warning \li Warning
\li Do not use \c Boolean as a constructor \li Do not use \c Boolean as a constructor
\li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} \li For more information, see \e {Do not use {a} as a constructor} in
{Do not use {a} as a constructor}. \e {JSLint Error Explanations}.
\row \row
\li M110 \li M110
\li Warning \li Warning
\li Do not use \c String as a constructor \li Do not use \c String as a constructor
\li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} \li For more information, see \e {Do not use {a} as a constructor}.
{Do not use {a} as a constructor}.
\row \row
\li M111 \li M111
\li Warning \li Warning
\li Do not use \c Object as a constructor \li Do not use \c Object as a constructor
\li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} \li For more information, see \e {Do not use {a} as a constructor}.
{Do not use {a} as a constructor}.
\row \row
\li M112 \li M112
\li Warning \li Warning
\li Do not use \c Array as a constructor \li Do not use \c Array as a constructor
\li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} \li For more information, see \e {Do not use {a} as a constructor}.
{Do not use {a} as a constructor}.
\row \row
\li M113 \li M113
\li Warning \li Warning
\li Do not use \c Function as a constructor \li Do not use \c Function as a constructor
\li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} \li For more information, see \e {Do not use {a} as a constructor}.
{Do not use {a} as a constructor}.
\row \row
\li M114 \li M114
\li Hint \li Hint
\li The \c function keyword and the opening parenthesis should be \li The \c function keyword and the opening parenthesis should be
separated by a single space separated by a single space
\li See also: \l{http://linterrors.com/js/expected-exactly-one-space-between-a-and-b} \li For more information, see
{Expected exactly one space between {a} and {b}}. \e {Expected exactly one space between {a} and {b}} in
\e {JSLint Error Explanations}.
\row \row
\li M115 \li M115
@@ -397,15 +393,15 @@
\li M117 \li M117
\li Warning \li Warning
\li Confusing pluses \li Confusing pluses
\li See also: \l{http://linterrors.com/js/confusing-pluses} \li For more information, see \e {Confusing pluses} in
{Confusing pluses}. \e {JSLint Error Explanations}.
\row \row
\li M119 \li M119
\li Warning \li Warning
\li Confusing minuses \li Confusing minuses
\li See also: \l{http://linterrors.com/js/confusing-minuses} \li For more information, see \e {Confusing minuses} in
{Confusing minuses}. \e {JSLint Error Explanations}.
\row \row
\li M121 \li M121
@@ -453,9 +449,9 @@
\li M201 \li M201
\li Hint \li Hint
\li Place var declarations at the start of a function \li Place var declarations at the start of a function
\li See also: \li For more information, see
\l{http://linterrors.com/js/move-var-declarations-to-the-top-of-the-function} \e {Move 'var' declarations to the top of the function} in
{Move 'var' declarations to the top of the function}. \e {JSLint Error Explanations}.
\row \row
\li M202 \li M202
@@ -609,15 +605,14 @@
\li M307 \li M307
\li Warning \li Warning
\li Use \c new only with functions that start with an uppercase letter \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} \li For more information, see \e {Do not use {a} as a constructor} in
{Do not use {a} as a constructor}. \e {JSLint Error Explanations}.
\row \row
\li M308 \li M308
\li Warning \li Warning
\li Do not use \c Number as a constructor \li Do not use \c Number as a constructor
\li See also: \l{http://linterrors.com/js/do-not-use-a-as-a-constructor} \li For more information, see \e {Do not use {a} as a constructor}.
{Do not use {a} as a constructor}.
\row \row
\li M309 \li M309
@@ -707,9 +702,9 @@
\li M323 \li M323
\li Error \li Error
\li \c Number elements expected in array value \li \c Number elements expected in array value
\li See also: \li For more information, see
\l{http://linterrors.com/js/the-array-literal-notation-is-preferrable} \e {The array literal notation [] is preferable} in
{The array literal notation [] is preferable}. \e {JSLint Error Explanations}.
\row \row
\li M324 \li M324

View File

@@ -50,6 +50,45 @@
\image qtcreator-syntax-highlighter.png {Generic Highlighter preferences} \image qtcreator-syntax-highlighter.png {Generic Highlighter preferences}
For more information, see \l{Download highlight definitions}. 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 \section1 Connect to an LLM
You can connect to the following LLMs: You can connect to the following LLMs:

View File

@@ -461,7 +461,7 @@
\inlineimage icons/refactormarker.png \inlineimage icons/refactormarker.png
\row \row
\li Convert Function Call to Qt Meta-Method Invocation \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, invocation. This applies to signals and slots in general,
as well as functions explicitly marked with \c Q_INVOKABLE. as well as functions explicitly marked with \c Q_INVOKABLE.
For example, for the following class: For example, for the following class:
@@ -499,7 +499,7 @@
} }
\endcode \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 visible from the location where they are called from. For example, it
rewrites rewrites

View File

@@ -20,8 +20,7 @@
\note Since \QDS 2.3.0, \QDS project wizard templates generate projects that \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 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 Qt Creator to continue developing the project.
to create a Qt Quick Application project that you can open in \QDS.
\target wizard-template-note \target wizard-template-note
\note Since \QDS 3.9.0, \QDS project wizard templates generate projects that \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. show the main QML file when the application starts.
\if defined(qtcreator) \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 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, 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 you have to build the module and install it to your Qt to be able to
build your project. For more information, see 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. 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 If you only install Qt Creator and Qt, remember to also select the
@@ -110,7 +109,7 @@
project. project.
\note If you get error messages related to modules, perfom the steps \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 \endlist
For example, if you copy the source files of the \e ProgressBar 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 using the Qt resource system dynamically. For more information, see
\l{The Qt Resource System}. \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 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. 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 git clone https://code.qt.io/qt-labs/qtquickdesigner-components.git
\endcode \endcode
\li Install the Qt Quick Designer Components module. \li Install the Qt Quick Studio Components module.
\badcode \badcode
mkdir build mkdir build

View File

@@ -369,7 +369,7 @@
\li \l {git branch} \li \l {git branch}
\row \row
\li \uicontrol {Copy <hash>} \li \uicontrol {Copy <hash>}
\li Copy the commit's <hash> to the clipboard. \li Copy the commit <hash> to the clipboard.
\li \li
\row \row
\li \uicontrol {Describe Change <hash>} \li \uicontrol {Describe Change <hash>}
@@ -1005,7 +1005,7 @@
In the \uicontrol {Git Branches} view, right-click a remote branch, and 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 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, work to merge together. To allow Git to move the branch pointer forward,
select \uicontrol {Merge <remote branch> into <local branch> (Fast-Forward)}. select \uicontrol {Merge <remote branch> into <local branch> (Fast-Forward)}.
If you do not want to fast-forward the branch, select 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>
<message> <message>
<source>Provide the type</source> <source>Provide the type</source>
<translation>Typ bestimmen</translation> <translation>Typ festlegen</translation>
</message> </message>
<message> <message>
<source>Data type:</source> <source>Data type:</source>
@@ -46897,7 +46897,7 @@ fails because Clang does not understand the target architecture.</source>
</message> </message>
<message> <message>
<source>Provide manually</source> <source>Provide manually</source>
<translation>Manuell bestimmen</translation> <translation>Manuell festlegen</translation>
</message> </message>
<message> <message>
<source>None</source> <source>None</source>
@@ -52613,12 +52613,12 @@ wirklich entfernen?</translation>
<message> <message>
<source>All</source> <source>All</source>
<comment>All documentation</comment> <comment>All documentation</comment>
<translation type="unfinished">Alle</translation> <translation>Alle</translation>
</message> </message>
<message> <message>
<source>None</source> <source>None</source>
<comment>No documentation</comment> <comment>No documentation</comment>
<translation type="unfinished"></translation> <translation>Keine</translation>
</message> </message>
<message> <message>
<source>Not all possible target environments can be supported due to missing compilers.</source> <source>Not all possible target environments can be supported due to missing compilers.</source>
@@ -52812,7 +52812,7 @@ wirklich entfernen?</translation>
</message> </message>
<message> <message>
<source>Qt version is not properly installed</source> <source>Qt version is not properly installed</source>
<translation type="unfinished"></translation> <translation>Die Qt-Version ist nicht korrekt installiert</translation>
</message> </message>
<message> <message>
<source>Name:</source> <source>Name:</source>
@@ -52848,7 +52848,7 @@ wirklich entfernen?</translation>
</message> </message>
<message> <message>
<source>Cannot update Qt version information from %1: %2.</source> <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>
<message> <message>
<source>Qt version</source> <source>Qt version</source>
@@ -52972,12 +52972,12 @@ wirklich entfernen?</translation>
</message> </message>
<message> <message>
<source>Mkspec:</source> <source>Mkspec:</source>
<translation type="unfinished"></translation> <translation>Mkspec:</translation>
</message> </message>
<message> <message>
<source>None</source> <source>None</source>
<comment>No Qt version</comment> <comment>No Qt version</comment>
<translation type="unfinished"></translation> <translation>Keine</translation>
</message> </message>
<message> <message>
<source>Name of Qt Version</source> <source>Name of Qt Version</source>
@@ -53085,23 +53085,23 @@ wirklich entfernen?</translation>
</message> </message>
<message> <message>
<source>Could not determine target OS</source> <source>Could not determine target OS</source>
<translation type="unfinished"></translation> <translation>Das Zielbetriebssystem konnte nicht bestimmt werden</translation>
</message> </message>
<message> <message>
<source>Could not determine target architecture</source> <source>Could not determine target architecture</source>
<translation type="unfinished"></translation> <translation>Die Zielarchitektur konnte nicht bestimmt werden</translation>
</message> </message>
<message> <message>
<source>Could not determine OS sub-type</source> <source>Could not determine OS sub-type</source>
<translation type="unfinished"></translation> <translation>Der Betriebssystemuntertyp konnte nicht bestimmt werden</translation>
</message> </message>
<message> <message>
<source>Error reading &quot;%1&quot;: %2</source> <source>Error reading &quot;%1&quot;: %2</source>
<translation type="unfinished"></translation> <translation>Fehler beim Lesen von &quot;%1&quot;: %2</translation>
</message> </message>
<message> <message>
<source>Core.json not found for Qt at &quot;%1&quot;</source> <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> </message>
</context> </context>
<context> <context>
@@ -53920,7 +53920,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
</message> </message>
<message> <message>
<source>Unknown error</source> <source>Unknown error</source>
<translation type="unfinished"></translation> <translation>Unbekannter Fehler</translation>
</message> </message>
<message> <message>
<source>The ssh-keygen tool at &quot;%1&quot; failed: %2</source> <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>
<message> <message>
<source>Delete Word Left</source> <source>Delete Word Left</source>
<translation type="unfinished"></translation> <translation>Wort links löschen</translation>
</message> </message>
<message> <message>
<source>Delete Line Left</source> <source>Delete Line Left</source>
<translation type="unfinished"></translation> <translation>Zeile links löschen</translation>
</message> </message>
<message> <message>
<source>Clear Terminal</source> <source>Clear Terminal</source>
@@ -57239,7 +57239,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält.
<message> <message>
<source>None</source> <source>None</source>
<comment>Backspace indentation: None</comment> <comment>Backspace indentation: None</comment>
<translation type="unfinished"></translation> <translation>Keine</translation>
</message> </message>
<message> <message>
<source>Enable scroll &amp;wheel zooming</source> <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>
<message> <message>
<source>Display tab settings</source> <source>Display tab settings</source>
<translation type="unfinished"></translation> <translation>Tabulatoreinstellungen anzeigen</translation>
</message> </message>
<message> <message>
<source>&amp;Highlight selection</source> <source>&amp;Highlight selection</source>
@@ -57631,11 +57631,11 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
</message> </message>
<message> <message>
<source>Auto detect</source> <source>Auto detect</source>
<translation type="unfinished"></translation> <translation>Automatisch bestimmen</translation>
</message> </message>
<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> <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>
<message> <message>
<source>Not At All</source> <source>Not At All</source>
@@ -57651,11 +57651,11 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
</message> </message>
<message> <message>
<source>Default tab policy:</source> <source>Default tab policy:</source>
<translation type="unfinished"></translation> <translation>Vorgabe-Tabulatorverhalten:</translation>
</message> </message>
<message> <message>
<source>Default &amp;indent size:</source> <source>Default &amp;indent size:</source>
<translation type="unfinished"></translation> <translation>Vorgabe-Einrückungst&amp;iefe:</translation>
</message> </message>
<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> <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>
<message> <message>
<source>Spaces</source> <source>Spaces</source>
<translation type="unfinished"></translation> <translation>Leerzeichen</translation>
</message> </message>
<message> <message>
<source>Tabs</source> <source>Tabs</source>
<translation type="unfinished">Tabulatoren</translation> <translation>Tabulatoren</translation>
</message> </message>
<message> <message>
<source>Document Settings</source> <source>Document Settings</source>
<translation type="unfinished"></translation> <translation>Dokumenteinstellungen</translation>
</message> </message>
<message> <message>
<source>Tab Settings</source> <source>Tab Settings</source>
<translation type="unfinished"></translation> <translation>Tabulatoreinstellungen</translation>
</message> </message>
<message> <message>
<source>Indent Size</source> <source>Indent Size</source>
<translation type="unfinished"></translation> <translation>Einrückungstiefe</translation>
</message> </message>
<message> <message>
<source>Tab Size</source> <source>Tab Size</source>
<translation type="unfinished"></translation> <translation>Tabulatorweite</translation>
</message> </message>
<message> <message>
<source>Global Settings...</source> <source>Global Settings...</source>
<translation type="unfinished"></translation> <translation>Globale Einstellungen...</translation>
</message> </message>
<message> <message>
<source>Unix Line Endings (LF)</source> <source>Unix Line Endings (LF)</source>
@@ -58410,7 +58410,8 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen.
<message> <message>
<source>None</source> <source>None</source>
<comment>Case-sensitivity: None</comment> <comment>Case-sensitivity: None</comment>
<translation type="unfinished"></translation> <translatorcomment>Groß-/Kleinschreibung:</translatorcomment>
<translation>Keine</translation>
</message> </message>
<message> <message>
<source>First Letter</source> <source>First Letter</source>
@@ -59168,19 +59169,19 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten.</translation>
</message> </message>
<message> <message>
<source>Info</source> <source>Info</source>
<translation type="unfinished">Info</translation> <translation>Info</translation>
</message> </message>
<message> <message>
<source>Underline color of info diagnostics.</source> <source>Underline color of info diagnostics.</source>
<translation type="unfinished"></translation> <translation>Unterstreichung von Informationen.</translation>
</message> </message>
<message> <message>
<source>Info Context</source> <source>Info Context</source>
<translation type="unfinished"></translation> <translation>Informationskontext</translation>
</message> </message>
<message> <message>
<source>Underline color of the contexts of info diagnostics.</source> <source>Underline color of the contexts of info diagnostics.</source>
<translation type="unfinished"></translation> <translation>Unterstreichung der Kontexte von Informationen.</translation>
</message> </message>
<message> <message>
<source>Static Member</source> <source>Static Member</source>
@@ -59465,19 +59466,19 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten.</translation>
</message> </message>
<message> <message>
<source>Blame %1</source> <source>Blame %1</source>
<translation type="unfinished"></translation> <translation>Blame von %1</translation>
</message> </message>
<message> <message>
<source>Blame Parent</source> <source>Blame Parent</source>
<translation type="unfinished"></translation> <translation>Blame des Eltern-Commits</translation>
</message> </message>
<message> <message>
<source>File at %1</source> <source>File at %1</source>
<translation type="unfinished"></translation> <translation>Datei bei %1</translation>
</message> </message>
<message> <message>
<source>Log for line %1</source> <source>Log for line %1</source>
<translation type="unfinished"></translation> <translation>Log für Zeile %1</translation>
</message> </message>
<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> <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>
<message> <message>
<source>Not Committed Yet</source> <source>Not Committed Yet</source>
<translation type="unfinished"></translation> <translation>Noch nicht in Commit</translation>
</message> </message>
<message> <message>
<source>Modified line in %1</source> <source>Modified line in %1</source>
<translation type="unfinished"></translation> <translation>Geänderte Zeile in %1</translation>
</message> </message>
<message> <message>
<source>You</source> <source>You</source>
@@ -60324,7 +60325,7 @@ Die Trace-Daten sind verloren.</translation>
</message> </message>
<message> <message>
<source>Device is unavailable.</source> <source>Device is unavailable.</source>
<translation type="unfinished"></translation> <translation>Gerät ist nicht verfügbar.</translation>
</message> </message>
<message> <message>
<source>Failed to watch &quot;%1&quot;.</source> <source>Failed to watch &quot;%1&quot;.</source>
@@ -60467,7 +60468,7 @@ Die Trace-Daten sind verloren.</translation>
</message> </message>
<message> <message>
<source>File %1 does not exist.</source> <source>File %1 does not exist.</source>
<translation type="unfinished"></translation> <translation>Datei %1 existiert nicht.</translation>
</message> </message>
<message> <message>
<source>Failed to set up scratch buffer in &quot;%1&quot;.</source> <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>
<message> <message>
<source>Remote error output was: %1</source> <source>Remote error output was: %1</source>
<translation type="unfinished">Fehlerausgabe: %1</translation> <translation>Fehlerausgabe des Geräts: %1</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -61594,11 +61595,11 @@ Wird ein Problem gefunden, dann wird die Anwendung angehalten und kann untersuch
</message> </message>
<message> <message>
<source>Starting Memory Analyzer...</source> <source>Starting Memory Analyzer...</source>
<translation type="unfinished"></translation> <translation>Starte Speicheranalyse...</translation>
</message> </message>
<message> <message>
<source>Memory Analyzer running...</source> <source>Memory Analyzer running...</source>
<translation type="unfinished"></translation> <translation>Speicheranalyse läuft...</translation>
</message> </message>
<message> <message>
<source>Open Memcheck XML Log File</source> <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>
<message> <message>
<source>Starting Function Profiler...</source> <source>Starting Function Profiler...</source>
<translation type="unfinished"></translation> <translation>Starte Funktionsprofiler...</translation>
</message> </message>
<message> <message>
<source>Function Profiler running...</source> <source>Function Profiler running...</source>
<translation type="unfinished"></translation> <translation>Funktionsprofiler läuft...</translation>
</message> </message>
<message> <message>
<source>Remove template parameter lists when displaying function names.</source> <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> <message>
<source>None</source> <source>None</source>
<comment>Leak details: None</comment> <comment>Leak details: None</comment>
<translation type="unfinished"></translation> <translation>Keine</translation>
</message> </message>
<message> <message>
<source>Simple</source> <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() bool Client::exit()
{ {
try { 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; return true;
} catch (const std::runtime_error &e) { } catch (const std::runtime_error &e) {
if (e.what() == std::string("NormalExit")) if (e.what() == std::string("NormalExit"))

View File

@@ -145,6 +145,7 @@ static QHash<Utils::MimeType, QString> mimeTypeLanguageIdMap()
{"application/xml", "xml"}, {"application/xml", "xml"},
{"application/xslt+xml", "xsl"}, {"application/xslt+xml", "xsl"},
{"application/x-yaml", "yaml"}, {"application/x-yaml", "yaml"},
{"text/x-swift", "swift"},
}; };
for (const QPair<QString, QString> &languageIdForMimeTypeName : languageIdsForMimeTypeNames) { for (const QPair<QString, QString> &languageIdForMimeTypeName : languageIdsForMimeTypeNames) {
const Utils::MimeType &mimeType = Utils::mimeTypeForName(languageIdForMimeTypeName.first); 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 #ifndef UTILS_STATIC_LIBRARY
const FilePath dd = filePath.withNewPath("dd"); const FilePath dd = filePath.withNewPath("dd");
using namespace std::literals::chrono_literals;
Process p; Process p;
p.setCommand({dd, args, OsType::OsTypeLinux}); p.setCommand({dd, args, OsType::OsTypeLinux});
p.runBlocking(); p.runBlocking(0s); // Run forever
if (p.exitCode() != 0) { if (p.exitCode() != 0) {
return make_unexpected(Tr::tr("Failed reading file \"%1\": %2") return make_unexpected(Tr::tr("Failed reading file \"%1\": %2")
.arg(filePath.toUserOutput(), p.readAllStandardError())); .arg(filePath.toUserOutput(), p.readAllStandardError()));

View File

@@ -1134,6 +1134,11 @@ void MarkdownBrowser::setEnableCodeCopyButton(bool enable)
access(this)->setEnableCodeCopyButton(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 // Special If
If::If( If::If(

View File

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

View File

@@ -124,6 +124,7 @@ public:
rp.setUseContinueInsteadOfRun(true); rp.setUseContinueInsteadOfRun(true);
rp.setContinueAfterAttach(true); rp.setContinueAfterAttach(true);
rp.addSolibSearchDir("%{sysroot}/system/lib"); rp.addSolibSearchDir("%{sysroot}/system/lib");
rp.setSkipDebugServer(true);
auto debuggee = createQdbDeviceInferiorWorker(runControl, QmlDebuggerServices); auto debuggee = createQdbDeviceInferiorWorker(runControl, QmlDebuggerServices);
worker->addStartDependency(debuggee); worker->addStartDependency(debuggee);

View File

@@ -296,13 +296,18 @@ void ModulesHandler::updateModule(const Module &module)
m_model->rootItem()->appendChild(item); m_model->rootItem()->appendChild(item);
} }
try { // MinGW occasionallly throws std::bad_alloc. if (path.isLocal()) {
ElfReader reader(path); try { // MinGW occasionallly throws std::bad_alloc.
item->module.elfData = reader.readHeaders(); ElfReader reader(path);
item->update(); item->module.elfData = reader.readHeaders();
} catch(...) { item->update();
qWarning("%s: An exception occurred while reading module '%s'", } catch(...) {
Q_FUNC_INFO, qPrintable(module.modulePath.toUserOutput())); 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; item->updated = true;
} }

View File

@@ -936,8 +936,10 @@ CommandLine DockerDevicePrivate::createCommandLine()
#ifdef Q_OS_UNIX #ifdef Q_OS_UNIX
// no getuid() and getgid() on Windows. // no getuid() and getgid() on Windows.
if (q->useLocalUidGid()) if (q->useLocalUidGid()) {
dockerCreate.addArgs({"-u", QString("%1:%2").arg(getuid()).arg(getgid())}); dockerCreate.addArgs({"-u", QString("%1:%2").arg(getuid()).arg(getgid())});
dockerCreate.addArgs({"-e", QString("HOME=/tmp/qtc_home/%1").arg(getuid())});
}
#endif #endif
if (!q->network().isEmpty()) { if (!q->network().isEmpty()) {

View File

@@ -154,7 +154,7 @@ QString BlameMark::toolTipText(const CommitInfo &info) const
.arg(colors.hash, info.hash, .arg(colors.hash, info.hash,
colors.author, info.author, info.authorMail, colors.author, info.author, info.authorMail,
colors.date, info.authorDate.toString("yyyy-MM-dd hh:mm:ss"), colors.date, info.authorDate.toString("yyyy-MM-dd hh:mm:ss"),
colors.subject, info.subject); colors.subject, info.subject.toHtmlEscaped());
QString result = actions + header; QString result = actions + header;

View File

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

View File

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

View File

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

View File

@@ -2488,6 +2488,13 @@ FilePairs ProjectExplorerPlugin::renameFiles(
= Utils::filtered(nodesAndNewFilePaths, [](const std::pair<Node *, FilePath> &elem) { = Utils::filtered(nodesAndNewFilePaths, [](const std::pair<Node *, FilePath> &elem) {
return !elem.first->filePath().equalsCaseSensitive(elem.second); 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 renamedOnly;
FilePaths failedRenamings; FilePaths failedRenamings;
const auto renameFile = [&failedRenamings](const Node *node, const FilePath &newFilePath) { const auto renameFile = [&failedRenamings](const Node *node, const FilePath &newFilePath) {
@@ -2553,9 +2560,9 @@ FilePairs ProjectExplorerPlugin::renameFiles(
} }
FilePairs allRenamedFiles; FilePairs allRenamedFiles;
for (const std::pair<Node *, FilePath> &candidate : nodesAndNewFilePathsFiltered) { for (const std::pair<FilePath, FilePath> &candidate : oldAndNewFilePathsFiltered) {
if (!failedRenamings.contains(candidate.first->filePath())) if (!failedRenamings.contains(candidate.first))
allRenamedFiles.emplaceBack(candidate.first->filePath(), candidate.second); allRenamedFiles.emplaceBack(candidate.first, candidate.second);
} }
emit instance()->filesRenamed(allRenamedFiles); emit instance()->filesRenamed(allRenamedFiles);
return allRenamedFiles; return allRenamedFiles;

View File

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

View File

@@ -65,6 +65,7 @@ QmllsClientSettings::QmllsClientSettings()
m_settingsTypeId = Constants::QMLLS_CLIENT_SETTINGS_ID; m_settingsTypeId = Constants::QMLLS_CLIENT_SETTINGS_ID;
m_startBehavior = RequiresProject; m_startBehavior = RequiresProject;
m_initializationOptions = "{\"qtCreatorHighlighting\": true}"; m_initializationOptions = "{\"qtCreatorHighlighting\": true}";
m_enabled = false; // disabled by default
} }
static QtVersion *qtVersionFromProject(const Project *project) static QtVersion *qtVersionFromProject(const Project *project)

View File

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

View File

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

View File

@@ -4128,7 +4128,8 @@ void TextEditorWidgetPrivate::forceUpdateScrollbarSize()
// scrollarea which is a private part of the QPlainTextEdit. // scrollarea which is a private part of the QPlainTextEdit.
// During the resizeEvent the plain text edit will resize its scrollbars. // During the resizeEvent the plain text edit will resize its scrollbars.
// The TextEditorWidget will also update its scrollbar overlays. // 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( std::unique_ptr<EmbeddedWidgetInterface> TextEditorWidgetPrivate::insertWidget(

View File

@@ -18,7 +18,27 @@ endif()
# Set a better default value for CMAKE_INSTALL_PREFIX # Set a better default value for CMAKE_INSTALL_PREFIX
# #
function(qtc_modify_default_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") set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "/tmp")
endif() endif()
endfunction() 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. 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! 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 ssh-copy-id -i ~/.ssh/id_??????.pub root@localhost
xhost + xhost +
# Get appcontroller source and build ## Get appcontroller source and build
git clone ssh://codereview.qt-project.org/qt-apps/boot2qt-appcontroller 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 ... /path/to/qt-base/bin/qt-cmake ...
ninja ... ninja ...
# Copy binary to "proper" location ## Copy binary to "proper" location
sudo ln -s `pwd`/appcontroller /usr/bin/appcontroller 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 Ensure the "Boot to Qt" plugin is enabled
@@ -36,7 +79,7 @@ Device Address: 127.0.0.1
Press "Apply" Press "Apply"
# Create a suitable Kit ## Create a suitable Kit
Clone your standard kit for normal local work Clone your standard kit for normal local work
Change the "Run Device" to LocalHostForBoot2Qt 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. 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 File -> New Project -> Qt Quick Application
# Tweak project settings ## Tweak project settings
Deployment method: "Deploy to Boot to Qt Target" 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 "Executable on Device" may be red at that stage, it shold get black after a successful build
# Build ## Build
Ctrl-B Ctrl-B
# Test ## Test
At that stage, the program should be runnable, debuggable (C++, QML, and combined QML/C++), At that stage, the program should be runnable, debuggable (C++, QML, and combined QML/C++),
and Qml-Profilable 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) checkedTargets.add(current)
# perform additional function on detailed kits view # perform additional function on detailed kits view
if additionalFunc: if additionalFunc and detailsButton.enabled:
ensureChecked(detailsButton) ensureChecked(detailsButton)
additionalFunc() additionalFunc()
ensureChecked(detailsButton, False) if detailsButton.enabled:
ensureChecked(detailsButton, False)
else:
test.verify(not detailsButton.checked,
'A disabled "Details" button should not be expanded.')
except LookupError: except LookupError:
if mustCheck: if mustCheck:
test.fail("Failed to check target '%s'." % Targets.getStringForTarget(current)) test.fail("Failed to check target '%s'." % Targets.getStringForTarget(current))