Merge remote-tracking branch 'origin/16.0'
Change-Id: I466d212f57f706c71fd0c2624abb33814ea3e783
14
dist/changelog/changes-16.0.0.md
vendored
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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.
|
||||
|
@@ -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
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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 "%1": %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Fehler beim Lesen von "%1": %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Core.json not found for Qt at "%1"</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Core.json wurde für Qt in "%1" 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 "%1" failed: %2</source>
|
||||
@@ -56394,11 +56394,11 @@ Die Datei "%1" 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 &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>&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 &indent size:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Vorgabe-Einrückungst&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><b>Note:</b> "%1" or "%2" 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 "%1".</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 "%1".</source>
|
||||
@@ -61036,7 +61037,7 @@ Zeilen, die mit "##" 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>
|
||||
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 48 KiB |
@@ -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"))
|
||||
|
@@ -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);
|
||||
|
@@ -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()));
|
||||
|
@@ -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(
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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()) {
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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>) {
|
||||
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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>"
|
||||
]
|
||||
}
|
||||
|
@@ -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(
|
||||
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
57
tests/manual/qnx/README.md
Normal 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.
|
||||
|
@@ -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))
|
||||
|