Merge remote-tracking branch 'origin/14.0'
Conflicts: coin/instructions/build.yaml src/plugins/cppeditor/cpptoolsreuse.cpp src/plugins/projectexplorer/projectexplorer.cpp Change-Id: I26748c67ed58114b392704bbf4eba978b1048c80
121
dist/changelog/changes-14.0.2.md
vendored
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
Qt Creator 14.0.2
|
||||||
|
=================
|
||||||
|
|
||||||
|
Qt Creator version 14.0.2 contains bug fixes.
|
||||||
|
|
||||||
|
The most important changes are listed in this document. For a complete list of
|
||||||
|
changes, see the Git log for the Qt Creator sources that you can check out from
|
||||||
|
the public Git repository. For example:
|
||||||
|
|
||||||
|
<https://code.qt.io/cgit/qt-creator/qt-creator.git/log/?id=v14.0.1..v14.0.2>
|
||||||
|
|
||||||
|
Editing
|
||||||
|
-------
|
||||||
|
|
||||||
|
* Fixed performance issues when long lines are highlighted
|
||||||
|
* Fixed a crash after completion
|
||||||
|
(QTCREATORBUG-31563)
|
||||||
|
|
||||||
|
### C++
|
||||||
|
|
||||||
|
* Fixed generating getters and setters for static pointer members
|
||||||
|
(QTCREATORBUG-27547)
|
||||||
|
* Fixed a crash while parsing
|
||||||
|
(QTCREATORBUG-31569)
|
||||||
|
* Built-in
|
||||||
|
* Fixed an issue with empty lists in member initializations
|
||||||
|
(QTCREATORBUG-30797)
|
||||||
|
* Fixed an issue with empty lists in the placement version of `new`
|
||||||
|
(QTCREATORBUG-30798)
|
||||||
|
|
||||||
|
### QML
|
||||||
|
|
||||||
|
* Fixed that automatic formatting on save with `qmlformat` ignored
|
||||||
|
`.qmlformat.ini`
|
||||||
|
(QTCREATORBUG-29668)
|
||||||
|
* `qmlls`
|
||||||
|
* Fixed semantic highlighting
|
||||||
|
(QTCREATORBUG-31148)
|
||||||
|
* Fixed that enabling `qmlls` disabled code snippets
|
||||||
|
(QTCREATORBUG-31322)
|
||||||
|
|
||||||
|
### Python
|
||||||
|
|
||||||
|
* Fixed the state of the `Generate Kit` button
|
||||||
|
|
||||||
|
### Language Server Protocol
|
||||||
|
|
||||||
|
* Fixed the line number for diagnostics
|
||||||
|
|
||||||
|
### Widget Designer
|
||||||
|
|
||||||
|
* Fixed issues with switching to Design mode when external editor windows are
|
||||||
|
open
|
||||||
|
(QTCREATORBUG-31378)
|
||||||
|
* Fixed a crash when renaming widgets
|
||||||
|
(QTCREATORBUG-31519)
|
||||||
|
|
||||||
|
Projects
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Fixed a crash when editing the project environment
|
||||||
|
(QTCREATORBUG-31483)
|
||||||
|
|
||||||
|
### CMake
|
||||||
|
|
||||||
|
* Fixed that `Clear CMake Configuration` was visible regardless of the used
|
||||||
|
build system
|
||||||
|
* Presets
|
||||||
|
* Fixed the handling of the `PATH` environment variable
|
||||||
|
(QTCREATORBUG-31439)
|
||||||
|
|
||||||
|
### vcpkg
|
||||||
|
|
||||||
|
* Fixed that the wrong `vcpkg` executable could be used
|
||||||
|
|
||||||
|
Debugging
|
||||||
|
---------
|
||||||
|
|
||||||
|
### C++
|
||||||
|
|
||||||
|
* CDB
|
||||||
|
* Fixed the debugging of 32bit applications
|
||||||
|
(QTCREATORBUG-31345)
|
||||||
|
|
||||||
|
Platforms
|
||||||
|
---------
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
* Fixed the detection of ARM compilers and debuggers
|
||||||
|
|
||||||
|
### Android
|
||||||
|
|
||||||
|
* Fixed that the debugger could be interrupted a lot during startup
|
||||||
|
(QTCREATORBUG-29928)
|
||||||
|
|
||||||
|
### Remote Linux
|
||||||
|
|
||||||
|
* Fixed that deployment with `rsync` preserved owner, group, and permissions
|
||||||
|
(QTCREATORBUG-31138)
|
||||||
|
|
||||||
|
Credits for these changes go to:
|
||||||
|
--------------------------------
|
||||||
|
Alessandro Portale
|
||||||
|
Alexandre Laurent
|
||||||
|
Aurélien Brooke
|
||||||
|
Christian Kandeler
|
||||||
|
Christian Stenger
|
||||||
|
Cristian Adam
|
||||||
|
David Schulz
|
||||||
|
Eike Ziller
|
||||||
|
Friedemann Kleint
|
||||||
|
Jaroslaw Kobus
|
||||||
|
Jussi Witick
|
||||||
|
Leena Miettinen
|
||||||
|
Marcus Tillmanns
|
||||||
|
Oliver Wolff
|
||||||
|
Orgad Shaneh
|
||||||
|
Robert Löhning
|
||||||
|
Sami Shalayel
|
||||||
|
Semih Yavuz
|
@@ -43,7 +43,7 @@
|
|||||||
automatically download, install, and configure for you.
|
automatically download, install, and configure for you.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\sa {Android}{How To: Develop for Android}
|
\sa {Android}{How To: Develop for Android}, {Get and Install Qt}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@@ -31,8 +31,8 @@
|
|||||||
sources. Because the client has a local cache for package storage, you can
|
sources. Because the client has a local cache for package storage, you can
|
||||||
work offline, as long as no new packages are needed from remote servers.
|
work offline, as long as no new packages are needed from remote servers.
|
||||||
|
|
||||||
To use Conan, install it by using \QOI or the tools that
|
To use Conan, install it by using \l{Get and Install Qt}{\QOI} or the tools
|
||||||
your operating system has. For example, on Windows, you can use the
|
that your operating system has. For example, on Windows, you can use the
|
||||||
\c {choco install conan} or \c {pip install conan} command.
|
\c {choco install conan} or \c {pip install conan} command.
|
||||||
|
|
||||||
\note Enable the Conan plugin to use it.
|
\note Enable the Conan plugin to use it.
|
||||||
|
@@ -153,7 +153,8 @@
|
|||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\if defined(qtcreator)
|
\if defined(qtcreator)
|
||||||
\sa {Read Documentation}{How To: Read Documentation}
|
\sa {Read Documentation}{How To: Read Documentation}, {Installation},
|
||||||
|
{Get and Install Qt}
|
||||||
\endif
|
\endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -38,5 +38,5 @@
|
|||||||
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
|
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\sa {Enable and disable plugins}
|
\sa {Enable and disable plugins}, {Installation}, {Get and Install Qt}
|
||||||
*/
|
*/
|
||||||
|
@@ -297,15 +297,31 @@
|
|||||||
|
|
||||||
\section1 Examples of CLI commands
|
\section1 Examples of CLI commands
|
||||||
|
|
||||||
|
The following are examples of the commands on supported platforms when you
|
||||||
|
install \QC with \l{Get and Install Qt}{\QOI} to the default location. Change
|
||||||
|
the paths as necessary.
|
||||||
|
|
||||||
On Windows:
|
On Windows:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
|
|
||||||
\li \c {C:\qtcreator\bin>qtcreator -help}
|
\li \c {C:\Qt\Tools\QtCreator\bin\qtcreator -help}
|
||||||
|
|
||||||
\li \c {C:\qtcreator\bin>qtcreator C:\TextFinder\textfinder.cpp:100:2}
|
\li \c {C:\Qt\Tools\QtCreator\bin\qtcreator C:\TextFinder\textfinder.cpp:100:2}
|
||||||
|
|
||||||
\li \c {C:\qtcreator\bin>qtcreator C:\TextFinder\textfinder.cpp +100+2}
|
\li \c {C:\Qt\Tools\QtCreator\bin\qtcreator C:\TextFinder\textfinder.cpp +100+2}
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
On Linux:
|
||||||
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\li \c {~/Qt/Tools/QtCreator/bin/qtcreator -help}
|
||||||
|
|
||||||
|
\li \c {~/Qt/Tools/QtCreator/bin/qtcreator /src/TextFinder/textfinder.cpp:100:2}
|
||||||
|
|
||||||
|
\li \c {~/Qt/Tools/QtCreator/bin/qtcreator /src/TextFinder/textfinder.cpp+100+2}
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
@@ -313,7 +329,7 @@
|
|||||||
|
|
||||||
\list
|
\list
|
||||||
|
|
||||||
\li \c {Qt\ Creator.app/Contents/MacOS/Qt\ Creator -help}
|
\li \c {~/Qt/Qt\ Creator.app/Contents/MacOS/Qt\ Creator -help}
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
@@ -121,7 +121,7 @@
|
|||||||
\b {The Qt API Reference Documentation is missing and context help does
|
\b {The Qt API Reference Documentation is missing and context help does
|
||||||
not find topics. What can I do?}
|
not find topics. What can I do?}
|
||||||
|
|
||||||
Install a Qt version and Qt documentation with \QOI.
|
Install a Qt version and Qt documentation with \l{Get and Install Qt}{\QOI}.
|
||||||
|
|
||||||
To view the installed documentation (.qch files) and to add documentation,
|
To view the installed documentation (.qch files) and to add documentation,
|
||||||
go to \preferences > \uicontrol Help >
|
go to \preferences > \uicontrol Help >
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
configured iOS devices.
|
configured iOS devices.
|
||||||
|
|
||||||
You only need Qt libraries that are built for iOS. You can install Qt for iOS
|
You only need Qt libraries that are built for iOS. You can install Qt for iOS
|
||||||
with \QOI.
|
with \l{Get and Install Qt}{\QOI}.
|
||||||
|
|
||||||
\section1 iOS 17 Devices
|
\section1 iOS 17 Devices
|
||||||
|
|
||||||
|
@@ -178,5 +178,5 @@
|
|||||||
|
|
||||||
For more information, see \l{Download highlight definitions}.
|
For more information, see \l{Download highlight definitions}.
|
||||||
|
|
||||||
\sa {Installation}, {Reset \QC settings}, {Preferences}
|
\sa {Installation}, {Reset \QC settings}, {Preferences}, {Get and Install Qt}
|
||||||
*/
|
*/
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
\title Getting Started
|
\title Getting Started
|
||||||
|
|
||||||
To learn the basics of \QC, take the
|
To learn the basics of \QC, take the
|
||||||
\l{https://www.qt.io/academy/course-catalog#getting-started-with-qt-creator}
|
\l{https://www.qt.io/academy/course-catalog#getting-started-with-qt-creator-14}
|
||||||
{Getting Started with Qt Creator} course in Qt Academy.
|
{Getting Started with Qt Creator} course in Qt Academy.
|
||||||
|
|
||||||
\table borderless
|
\table borderless
|
||||||
@@ -57,5 +57,5 @@
|
|||||||
and APIs to develop Qt applications, go to \l {Qt Documentation}.
|
and APIs to develop Qt applications, go to \l {Qt Documentation}.
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
\sa {Installation}
|
\sa {Installation}, {Get and Install Qt}
|
||||||
*/
|
*/
|
||||||
|
@@ -210,9 +210,9 @@
|
|||||||
\li \l {Remote Linux}
|
\li \l {Remote Linux}
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
Install the toolchain for building applications for the targeted
|
Install the toolchain for building applications for the targeted embedded
|
||||||
embedded platform on the computer, and then use \QOI to install Qt
|
platform on the computer, and then use \l{Get and Install Qt}{\QOI} to install
|
||||||
libraries that are built for the platform. Add a kit with the toolchain and
|
Qt libraries that are built for the platform. Add a kit with the toolchain and
|
||||||
the Qt version for the device's architecture. When possible, \QOI creates
|
the Qt version for the device's architecture. When possible, \QOI creates
|
||||||
suitable kits for you.
|
suitable kits for you.
|
||||||
|
|
||||||
|
@@ -19,8 +19,8 @@
|
|||||||
|
|
||||||
\brief How to build and run a Qt example.
|
\brief How to build and run a Qt example.
|
||||||
|
|
||||||
To test that your \QOI installation is successful, open an existing
|
To test that your \l{Get and Install Qt}{\QOI} installation is successful,
|
||||||
example application project.
|
open an existing example application project.
|
||||||
|
|
||||||
To run an example application on an Android or iOS device, you must set up
|
To run an example application on an Android or iOS device, you must set up
|
||||||
the development environment for Android or iOS. For more information, see
|
the development environment for Android or iOS. For more information, see
|
||||||
|
@@ -22,9 +22,9 @@
|
|||||||
necessary tools for building an application for and running it on a
|
necessary tools for building an application for and running it on a
|
||||||
particular platform.
|
particular platform.
|
||||||
|
|
||||||
\QC automatically detects the compilers that your system or \QOI
|
\QC automatically detects the compilers that your system or
|
||||||
registers and lists them in \preferences > \uicontrol Kits >
|
\l{Get and Install Qt}{\QOI} registers and lists them in
|
||||||
\uicontrol Compilers.
|
\preferences > \uicontrol Kits > \uicontrol Compilers.
|
||||||
|
|
||||||
\image qtcreator-toolchains.png
|
\image qtcreator-toolchains.png
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
\section1 Register installed Qt versions
|
\section1 Register installed Qt versions
|
||||||
|
|
||||||
You can link to a Qt that \QOI installed to
|
You can link to a Qt that \l{Get and Install Qt}{\QOI} installed to
|
||||||
automatically detect the installed Qt versions. However, you cannot link
|
automatically detect the installed Qt versions. However, you cannot link
|
||||||
to a Qt that the system installed with some other package
|
to a Qt that the system installed with some other package
|
||||||
manager, such as your Linux distribution, brew on \macos, or Chocolatey on
|
manager, such as your Linux distribution, brew on \macos, or Chocolatey on
|
||||||
|
@@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
\sa {Activate kits for a project}, {Configure projects for building},
|
\sa {Activate kits for a project}, {Configure projects for building},
|
||||||
{Configure projects for running}, {Open projects},
|
{Configure projects for running}, {Open projects},
|
||||||
{Activate custom output parsers}
|
{Activate custom output parsers}, {Get and Install Qt}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@@ -57,8 +57,8 @@
|
|||||||
|
|
||||||
\note If you have not installed the Qt Virtual Keyboard module when
|
\note If you have not installed the Qt Virtual Keyboard module when
|
||||||
you installed Qt, an error message will appear when you try to open
|
you installed Qt, an error message will appear when you try to open
|
||||||
\e Main.qml for editing. You can use \l {Installing Qt}
|
\e Main.qml for editing. You can use \l{Get and Install Qt}{\QOI}
|
||||||
{\QOI} to install Qt Virtual Keyboard.
|
to install Qt Virtual Keyboard.
|
||||||
|
|
||||||
\li Select \uicontrol Next to open the \uicontrol {Kit Selection}
|
\li Select \uicontrol Next to open the \uicontrol {Kit Selection}
|
||||||
dialog.
|
dialog.
|
||||||
|
@@ -12,7 +12,8 @@
|
|||||||
\brief Configure CMake and set up compilers, debuggers, devices, Qt versions,
|
\brief Configure CMake and set up compilers, debuggers, devices, Qt versions,
|
||||||
and kits from the command line.
|
and kits from the command line.
|
||||||
|
|
||||||
\QOI uses the SDK Tool (\c sdktool) to configure CMake and set \l {Kits}{Kit}
|
\l{Get and Install Qt}{\QOI} uses the SDK Tool (\c sdktool) to configure
|
||||||
|
CMake and set \l {Kits}{Kit}
|
||||||
preferences, such as compilers, debuggers, devices, and Qt versions. You can
|
preferences, such as compilers, debuggers, devices, and Qt versions. You can
|
||||||
use it from the command line to set Qt and \QC preferences automatically for
|
use it from the command line to set Qt and \QC preferences automatically for
|
||||||
all users of a computer, for example. For a single user, it is usually easier
|
all users of a computer, for example. For a single user, it is usually easier
|
||||||
|
@@ -20,8 +20,8 @@
|
|||||||
\note Enable the WebAssembly plugin to use it.
|
\note Enable the WebAssembly plugin to use it.
|
||||||
|
|
||||||
To build applications for the web and run them in a web browser, install
|
To build applications for the web and run them in a web browser, install
|
||||||
Qt for WebAssembly with \QOI. It automatically adds a build and run kit
|
Qt for WebAssembly with \l{Get and Install Qt}{\QOI}. It automatically adds
|
||||||
to \QC.
|
a build and run kit to \QC.
|
||||||
|
|
||||||
\section1 Set up WebAssembly development environment
|
\section1 Set up WebAssembly development environment
|
||||||
|
|
||||||
|
@@ -279,32 +279,32 @@ def package_qtcreator(args, paths):
|
|||||||
if not args.no_cdb:
|
if not args.no_cdb:
|
||||||
common.check_print_call(command + [paths.qtcreatorcdbext_install])
|
common.check_print_call(command + [paths.qtcreatorcdbext_install])
|
||||||
|
|
||||||
|
# use -mf=off to avoid usage of the ARM executable compression filter,
|
||||||
|
# which cannot be extracted by p7zip
|
||||||
|
zip = ['7z', 'a', '-mmt' + args.zip_threads, '-mf=off']
|
||||||
if not args.no_zip:
|
if not args.no_zip:
|
||||||
if not args.no_qtcreator:
|
if not args.no_qtcreator:
|
||||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
common.check_print_call(zip
|
||||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'),
|
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'),
|
||||||
zipPatternForApp(paths)],
|
zipPatternForApp(paths)],
|
||||||
paths.install)
|
paths.install)
|
||||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
common.check_print_call(zip
|
||||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'),
|
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'),
|
||||||
'*'],
|
'*'],
|
||||||
paths.dev_install)
|
paths.dev_install)
|
||||||
if args.with_debug_info:
|
if args.with_debug_info:
|
||||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
common.check_print_call(zip
|
||||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-debug.7z'),
|
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-debug.7z'),
|
||||||
'*'],
|
'*'],
|
||||||
paths.debug_install)
|
paths.debug_install)
|
||||||
if common.is_windows_platform():
|
if common.is_windows_platform():
|
||||||
# use -mf=off to avoid usage of the ARM executable compression filter,
|
common.check_print_call(zip
|
||||||
# which cannot be extracted by the p7zip version on the machine doing
|
+ [os.path.join(paths.result, 'wininterrupt' + args.zip_infix + '.7z'),
|
||||||
# the repository builds
|
|
||||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, '-mf=off',
|
|
||||||
os.path.join(paths.result, 'wininterrupt' + args.zip_infix + '.7z'),
|
|
||||||
'*'],
|
'*'],
|
||||||
paths.wininterrupt_install)
|
paths.wininterrupt_install)
|
||||||
if not args.no_cdb:
|
if not args.no_cdb:
|
||||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, '-mf=off',
|
common.check_print_call(zip
|
||||||
os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'),
|
+ [os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'),
|
||||||
'*'],
|
'*'],
|
||||||
paths.qtcreatorcdbext_install)
|
paths.qtcreatorcdbext_install)
|
||||||
|
|
||||||
@@ -319,8 +319,8 @@ def package_qtcreator(args, paths):
|
|||||||
app = apps[0]
|
app = apps[0]
|
||||||
common.codesign(os.path.join(signed_install_path, app))
|
common.codesign(os.path.join(signed_install_path, app))
|
||||||
if not args.no_zip:
|
if not args.no_zip:
|
||||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
common.check_print_call(zip
|
||||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-signed.7z'),
|
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-signed.7z'),
|
||||||
app],
|
app],
|
||||||
signed_install_path)
|
signed_install_path)
|
||||||
if not args.no_dmg:
|
if not args.no_dmg:
|
||||||
|
@@ -2088,6 +2088,13 @@ CMakeBuildSystem *CMakeBuildConfiguration::cmakeBuildSystem() const
|
|||||||
|
|
||||||
void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
void CMakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const
|
||||||
{
|
{
|
||||||
|
// Use the user provided VCPKG_ROOT if existing
|
||||||
|
// Visual C++ 2022 (and newer) come with their own VCPKG_ROOT
|
||||||
|
// that is incompatible with Qt Creator
|
||||||
|
const QString vcpkgRoot = qtcEnvironmentVariable(Constants::VCPKG_ROOT);
|
||||||
|
if (!vcpkgRoot.isEmpty())
|
||||||
|
env.set(Constants::VCPKG_ROOT, vcpkgRoot);
|
||||||
|
|
||||||
const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit());
|
const CMakeTool *tool = CMakeKitAspect::cmakeTool(kit());
|
||||||
// The hack further down is only relevant for desktop
|
// The hack further down is only relevant for desktop
|
||||||
if (tool && tool->cmakeExecutable().needsDevice())
|
if (tool && tool->cmakeExecutable().needsDevice())
|
||||||
|
@@ -33,6 +33,7 @@ const char CMAKEFORMATTER_MENU_ID[] = "CMakeFormatter.Menu";
|
|||||||
const char CMAKE_DEBUGGING_GROUP[] = "Debugger.Group.CMake";
|
const char CMAKE_DEBUGGING_GROUP[] = "Debugger.Group.CMake";
|
||||||
|
|
||||||
const char PACKAGE_MANAGER_DIR[] = ".qtc/package-manager";
|
const char PACKAGE_MANAGER_DIR[] = ".qtc/package-manager";
|
||||||
|
const char VCPKG_ROOT[] = "VCPKG_ROOT";
|
||||||
|
|
||||||
const char CMAKE_LISTS_TXT[] = "CMakeLists.txt";
|
const char CMAKE_LISTS_TXT[] = "CMakeLists.txt";
|
||||||
const char CMAKE_CACHE_TXT[] = "CMakeCache.txt";
|
const char CMAKE_CACHE_TXT[] = "CMakeCache.txt";
|
||||||
|
@@ -1895,6 +1895,8 @@ void EditorManagerPrivate::addEditorArea(EditorArea *area)
|
|||||||
&EditorArea::hidden,
|
&EditorArea::hidden,
|
||||||
d,
|
d,
|
||||||
[area = QPointer<EditorArea>(area)] {
|
[area = QPointer<EditorArea>(area)] {
|
||||||
|
if (ExtensionSystem::PluginManager::isShuttingDown())
|
||||||
|
return;
|
||||||
// The connection is queued, because the hiding might be very short term, e.g.
|
// The connection is queued, because the hiding might be very short term, e.g.
|
||||||
// when switching between Edit and Debug modes. Check if it is still hidden.
|
// when switching between Edit and Debug modes. Check if it is still hidden.
|
||||||
const auto isReallyVisibile = [](QWidget *w) {
|
const auto isReallyVisibile = [](QWidget *w) {
|
||||||
|
@@ -29,22 +29,22 @@ namespace {
|
|||||||
|
|
||||||
static bool isOwnershipRAIIName(const QString &name)
|
static bool isOwnershipRAIIName(const QString &name)
|
||||||
{
|
{
|
||||||
static QSet<QString> knownNames;
|
static const QSet<QString> knownNames{
|
||||||
if (knownNames.isEmpty()) {
|
|
||||||
// Qt
|
// Qt
|
||||||
knownNames.insert(QLatin1String("QScopedPointer"));
|
"QMutexLocker",
|
||||||
knownNames.insert(QLatin1String("QScopedArrayPointer"));
|
"QReadLocker",
|
||||||
knownNames.insert(QLatin1String("QMutexLocker"));
|
"QScopedArrayPointer",
|
||||||
knownNames.insert(QLatin1String("QReadLocker"));
|
"QScopedPointer",
|
||||||
knownNames.insert(QLatin1String("QWriteLocker"));
|
"QWriteLocker",
|
||||||
// Standard C++
|
|
||||||
knownNames.insert(QLatin1String("auto_ptr"));
|
|
||||||
knownNames.insert(QLatin1String("unique_ptr"));
|
|
||||||
// Boost
|
|
||||||
knownNames.insert(QLatin1String("scoped_ptr"));
|
|
||||||
knownNames.insert(QLatin1String("scoped_array"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Standard C++
|
||||||
|
"auto_ptr",
|
||||||
|
"unique_ptr",
|
||||||
|
|
||||||
|
// Boost
|
||||||
|
"scoped_array",
|
||||||
|
"scoped_ptr",
|
||||||
|
};
|
||||||
return knownNames.contains(name);
|
return knownNames.contains(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,8 +59,8 @@ static bool isOwnershipRAIIType(Symbol *symbol, const LookupContext &context)
|
|||||||
Declaration *declaration = symbol->asDeclaration();
|
Declaration *declaration = symbol->asDeclaration();
|
||||||
const NamedType *namedType = declaration->type()->asNamedType();
|
const NamedType *namedType = declaration->type()->asNamedType();
|
||||||
if (namedType) {
|
if (namedType) {
|
||||||
ClassOrNamespace *clazz = context.lookupType(namedType->name(),
|
ClassOrNamespace *clazz
|
||||||
declaration->enclosingScope());
|
= context.lookupType(namedType->name(), declaration->enclosingScope());
|
||||||
if (clazz && !clazz->symbols().isEmpty()) {
|
if (clazz && !clazz->symbols().isEmpty()) {
|
||||||
Overview overview;
|
Overview overview;
|
||||||
Symbol *symbol = clazz->symbols().at(0);
|
Symbol *symbol = clazz->symbols().at(0);
|
||||||
|
@@ -255,7 +255,7 @@ int CdbEngine::elapsedLogTime()
|
|||||||
void CdbEngine::createFullBacktrace()
|
void CdbEngine::createFullBacktrace()
|
||||||
{
|
{
|
||||||
runCommand({"~*kp", BuiltinCommand, [](const DebuggerResponse &response) {
|
runCommand({"~*kp", BuiltinCommand, [](const DebuggerResponse &response) {
|
||||||
Internal::openTextEditor("Backtrace $", response.data.data());
|
Internal::openTextEditor("Backtrace$", response.data.data());
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4235,13 +4235,43 @@ void GdbEngine::notifyInferiorSetupFailedHelper(const QString &msg)
|
|||||||
notifyEngineSetupFailed();
|
notifyEngineSetupFailed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QString reverseBacktrace(const QString &trace)
|
||||||
|
{
|
||||||
|
static const QRegularExpression threadPattern(R"(Thread \d+ \(Thread )");
|
||||||
|
Q_ASSERT(threadPattern.isValid());
|
||||||
|
|
||||||
|
if (!trace.contains(threadPattern)) // Pattern mismatch fallback
|
||||||
|
return trace;
|
||||||
|
|
||||||
|
const QStringView traceView{trace};
|
||||||
|
QList<QStringView> threadTraces;
|
||||||
|
const auto traceSize = traceView.size();
|
||||||
|
for (qsizetype pos = 0; pos < traceSize; ) {
|
||||||
|
auto nextThreadPos = traceView.indexOf(threadPattern, pos + 1);
|
||||||
|
if (nextThreadPos == -1)
|
||||||
|
nextThreadPos = traceSize;
|
||||||
|
threadTraces.append(traceView.sliced(pos, nextThreadPos - pos));
|
||||||
|
pos = nextThreadPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString result;
|
||||||
|
result.reserve(traceSize);
|
||||||
|
for (auto it = threadTraces.crbegin(), end = threadTraces.crend(); it != end; ++it) {
|
||||||
|
result += *it;
|
||||||
|
if (result.endsWith('\n'))
|
||||||
|
result += '\n';
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void GdbEngine::createFullBacktrace()
|
void GdbEngine::createFullBacktrace()
|
||||||
{
|
{
|
||||||
DebuggerCommand cmd("thread apply all bt full", NeedsTemporaryStop | ConsoleCommand);
|
DebuggerCommand cmd("thread apply all bt full", NeedsTemporaryStop | ConsoleCommand);
|
||||||
cmd.callback = [](const DebuggerResponse &response) {
|
cmd.callback = [](const DebuggerResponse &response) {
|
||||||
if (response.resultClass == ResultDone) {
|
if (response.resultClass == ResultDone) {
|
||||||
Internal::openTextEditor("Backtrace $",
|
Internal::openTextEditor("Backtrace$",
|
||||||
response.consoleStreamOutput + response.logStreamOutput);
|
reverseBacktrace(response.consoleStreamOutput)
|
||||||
|
+ response.logStreamOutput);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
runCommand(cmd);
|
runCommand(cmd);
|
||||||
|
@@ -1056,7 +1056,7 @@ void LldbEngine::fetchFullBacktrace()
|
|||||||
{
|
{
|
||||||
DebuggerCommand cmd("fetchFullBacktrace");
|
DebuggerCommand cmd("fetchFullBacktrace");
|
||||||
cmd.callback = [](const DebuggerResponse &response) {
|
cmd.callback = [](const DebuggerResponse &response) {
|
||||||
Internal::openTextEditor("Backtrace $", fromHex(response.data["fulltrace"].data()));
|
Internal::openTextEditor("Backtrace$", fromHex(response.data["fulltrace"].data()));
|
||||||
};
|
};
|
||||||
runCommand(cmd);
|
runCommand(cmd);
|
||||||
}
|
}
|
||||||
|
@@ -505,8 +505,6 @@ public:
|
|||||||
void duplicateFile();
|
void duplicateFile();
|
||||||
void deleteFile();
|
void deleteFile();
|
||||||
void handleRenameFile();
|
void handleRenameFile();
|
||||||
void handleSetStartupProject();
|
|
||||||
void setStartupProject(Project *project);
|
|
||||||
bool closeAllFilesInProject(const Project *project);
|
bool closeAllFilesInProject(const Project *project);
|
||||||
|
|
||||||
void checkRecentProjectsAsync();
|
void checkRecentProjectsAsync();
|
||||||
@@ -885,6 +883,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
|||||||
dd, &ProjectExplorerPluginPrivate::updateActions);
|
dd, &ProjectExplorerPluginPrivate::updateActions);
|
||||||
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
||||||
dd, &ProjectExplorerPluginPrivate::updateActions);
|
dd, &ProjectExplorerPluginPrivate::updateActions);
|
||||||
|
connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged,
|
||||||
|
dd, &ProjectExplorerPluginPrivate::updateActions);
|
||||||
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
||||||
dd, &ProjectExplorerPluginPrivate::updateWelcomePage);
|
dd, &ProjectExplorerPluginPrivate::updateWelcomePage);
|
||||||
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
||||||
@@ -1863,7 +1863,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
|||||||
connect(dd->m_createSourceAction, &QAction::triggered,
|
connect(dd->m_createSourceAction, &QAction::triggered,
|
||||||
dd, &ProjectExplorerPluginPrivate::addNewHeaderOrSource);
|
dd, &ProjectExplorerPluginPrivate::addNewHeaderOrSource);
|
||||||
connect(dd->m_setStartupProjectAction, &QAction::triggered,
|
connect(dd->m_setStartupProjectAction, &QAction::triggered,
|
||||||
dd, &ProjectExplorerPluginPrivate::handleSetStartupProject);
|
dd, [] { ProjectManager::setStartupProject(ProjectTree::currentProject()); });
|
||||||
connect(dd->m_closeProjectFilesActionFileMenu, &QAction::triggered,
|
connect(dd->m_closeProjectFilesActionFileMenu, &QAction::triggered,
|
||||||
dd, [] { dd->closeAllFilesInProject(ProjectManager::projects().first()); });
|
dd, [] { dd->closeAllFilesInProject(ProjectManager::projects().first()); });
|
||||||
connect(dd->m_closeProjectFilesActionContextMenu, &QAction::triggered,
|
connect(dd->m_closeProjectFilesActionContextMenu, &QAction::triggered,
|
||||||
@@ -2187,14 +2187,6 @@ void ProjectExplorerPlugin::openNewProjectDialog()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectExplorerPluginPrivate::setStartupProject(Project *project)
|
|
||||||
{
|
|
||||||
if (!project)
|
|
||||||
return;
|
|
||||||
ProjectManager::setStartupProject(project);
|
|
||||||
updateActions();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ProjectExplorerPluginPrivate::closeAllFilesInProject(const Project *project)
|
bool ProjectExplorerPluginPrivate::closeAllFilesInProject(const Project *project)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(project, return false);
|
QTC_ASSERT(project, return false);
|
||||||
@@ -4026,11 +4018,6 @@ void ProjectExplorerPluginPrivate::handleRenameFile()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectExplorerPluginPrivate::handleSetStartupProject()
|
|
||||||
{
|
|
||||||
setStartupProject(ProjectTree::currentProject());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProjectExplorerPlugin::setCustomParsers(const QList<CustomParserSettings> &settings)
|
void ProjectExplorerPlugin::setCustomParsers(const QList<CustomParserSettings> &settings)
|
||||||
{
|
{
|
||||||
if (dd->m_customParsers != settings) {
|
if (dd->m_customParsers != settings) {
|
||||||
|
@@ -155,6 +155,7 @@ private:
|
|||||||
void currentChanged(const QModelIndex &index, const QModelIndex &previous);
|
void currentChanged(const QModelIndex &index, const QModelIndex &previous);
|
||||||
void detailsChanged();
|
void detailsChanged();
|
||||||
void updateCleanButton();
|
void updateCleanButton();
|
||||||
|
void updateGenerateKitButton(const Interpreter &interpreter);
|
||||||
void addItem();
|
void addItem();
|
||||||
void deleteItem();
|
void deleteItem();
|
||||||
void makeDefault();
|
void makeDefault();
|
||||||
@@ -283,10 +284,10 @@ void InterpreterOptionsWidget::currentChanged(const QModelIndex &index, const QM
|
|||||||
emit m_model.dataChanged(previous, previous);
|
emit m_model.dataChanged(previous, previous);
|
||||||
}
|
}
|
||||||
if (index.isValid()) {
|
if (index.isValid()) {
|
||||||
m_detailsWidget->updateInterpreter(m_model.itemAt(index.row())->itemData);
|
const Interpreter interpreter = m_model.itemAt(index.row())->itemData;
|
||||||
|
m_detailsWidget->updateInterpreter(interpreter);
|
||||||
m_detailsWidget->show();
|
m_detailsWidget->show();
|
||||||
m_generateKitButton->setEnabled(
|
updateGenerateKitButton(interpreter);
|
||||||
!KitManager::kit(Id::fromString(m_model.itemAt(index.row())->itemData.id)));
|
|
||||||
} else {
|
} else {
|
||||||
m_detailsWidget->hide();
|
m_detailsWidget->hide();
|
||||||
m_generateKitButton->setEnabled(false);
|
m_generateKitButton->setEnabled(false);
|
||||||
@@ -299,8 +300,10 @@ void InterpreterOptionsWidget::detailsChanged()
|
|||||||
{
|
{
|
||||||
const QModelIndex &index = m_view->currentIndex();
|
const QModelIndex &index = m_view->currentIndex();
|
||||||
if (index.isValid()) {
|
if (index.isValid()) {
|
||||||
m_model.itemAt(index.row())->itemData = m_detailsWidget->toInterpreter();
|
const Interpreter interpreter = m_detailsWidget->toInterpreter();
|
||||||
|
m_model.itemAt(index.row())->itemData = interpreter;
|
||||||
emit m_model.dataChanged(index, index);
|
emit m_model.dataChanged(index, index);
|
||||||
|
updateGenerateKitButton(interpreter);
|
||||||
}
|
}
|
||||||
updateCleanButton();
|
updateCleanButton();
|
||||||
}
|
}
|
||||||
@@ -312,6 +315,13 @@ void InterpreterOptionsWidget::updateCleanButton()
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InterpreterOptionsWidget::updateGenerateKitButton(const Interpreter &interpreter)
|
||||||
|
{
|
||||||
|
bool enabled = !KitManager::kit(Id::fromString(interpreter.id))
|
||||||
|
&& (interpreter.command.needsDevice() || interpreter.command.isExecutableFile());
|
||||||
|
m_generateKitButton->setEnabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
void InterpreterOptionsWidget::addItem()
|
void InterpreterOptionsWidget::addItem()
|
||||||
{
|
{
|
||||||
const QModelIndex &index = m_model.indexForItem(
|
const QModelIndex &index = m_model.indexForItem(
|
||||||
@@ -568,7 +578,7 @@ void InterpreterOptionsWidget::generateKit()
|
|||||||
{
|
{
|
||||||
const QModelIndex &index = m_view->currentIndex();
|
const QModelIndex &index = m_view->currentIndex();
|
||||||
if (index.isValid())
|
if (index.isValid())
|
||||||
PythonSettings::addKitsForInterpreter(m_model.itemAt(index.row())->itemData);
|
PythonSettings::addKitsForInterpreter(m_model.itemAt(index.row())->itemData, true);
|
||||||
m_generateKitButton->setEnabled(false);
|
m_generateKitButton->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -796,19 +806,20 @@ static void setRelevantAspectsToKit(Kit *k)
|
|||||||
k->setRelevantAspects(relevantAspects);
|
k->setRelevantAspects(relevantAspects);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PythonSettings::addKitsForInterpreter(const Interpreter &interpreter)
|
void PythonSettings::addKitsForInterpreter(const Interpreter &interpreter, bool force)
|
||||||
{
|
{
|
||||||
if (!KitManager::isLoaded()) {
|
if (!KitManager::isLoaded()) {
|
||||||
connect(KitManager::instance(), &KitManager::kitsLoaded, settingsInstance, [interpreter]() {
|
connect(KitManager::instance(),
|
||||||
addKitsForInterpreter(interpreter);
|
&KitManager::kitsLoaded,
|
||||||
});
|
settingsInstance,
|
||||||
|
[interpreter, force]() { addKitsForInterpreter(interpreter, force); });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Id kitId = Id::fromString(interpreter.id);
|
const Id kitId = Id::fromString(interpreter.id);
|
||||||
if (Kit *k = KitManager::kit(kitId)) {
|
if (Kit *k = KitManager::kit(kitId)) {
|
||||||
setRelevantAspectsToKit(k);
|
setRelevantAspectsToKit(k);
|
||||||
} else if (!isVenvPython(interpreter.command)) {
|
} else if (force || !isVenvPython(interpreter.command)) {
|
||||||
KitManager::registerKit(
|
KitManager::registerKit(
|
||||||
[interpreter](Kit *k) {
|
[interpreter](Kit *k) {
|
||||||
k->setAutoDetected(true);
|
k->setAutoDetected(true);
|
||||||
@@ -844,7 +855,7 @@ void PythonSettings::setInterpreter(const QList<Interpreter> &interpreters, cons
|
|||||||
QList<Interpreter> toRemove = settingsInstance->m_interpreters;
|
QList<Interpreter> toRemove = settingsInstance->m_interpreters;
|
||||||
for (const Interpreter &interpreter : interpreters) {
|
for (const Interpreter &interpreter : interpreters) {
|
||||||
if (!Utils::eraseOne(toRemove, Utils::equal(&Interpreter::id, interpreter.id)))
|
if (!Utils::eraseOne(toRemove, Utils::equal(&Interpreter::id, interpreter.id)))
|
||||||
addKitsForInterpreter(interpreter);
|
addKitsForInterpreter(interpreter, false);
|
||||||
}
|
}
|
||||||
for (const Interpreter &interpreter : toRemove)
|
for (const Interpreter &interpreter : toRemove)
|
||||||
removeKitsForInterpreter(interpreter);
|
removeKitsForInterpreter(interpreter);
|
||||||
@@ -889,7 +900,7 @@ void PythonSettings::addInterpreter(const Interpreter &interpreter, bool isDefau
|
|||||||
if (isDefault)
|
if (isDefault)
|
||||||
settingsInstance->m_defaultInterpreterId = interpreter.id;
|
settingsInstance->m_defaultInterpreterId = interpreter.id;
|
||||||
saveSettings();
|
saveSettings();
|
||||||
addKitsForInterpreter(interpreter);
|
addKitsForInterpreter(interpreter, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Interpreter PythonSettings::addInterpreter(const FilePath &interpreterPath,
|
Interpreter PythonSettings::addInterpreter(const FilePath &interpreterPath,
|
||||||
@@ -1059,7 +1070,7 @@ void PythonSettings::initFromSettings(QtcSettings *settings)
|
|||||||
if (cmd.needsDevice() || cmd.parentDir().pathAppended("activate").exists())
|
if (cmd.needsDevice() || cmd.parentDir().pathAppended("activate").exists())
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
addKitsForInterpreter(interpreter);
|
addKitsForInterpreter(interpreter, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fixupPythonKits();
|
fixupPythonKits();
|
||||||
|
@@ -43,7 +43,7 @@ public:
|
|||||||
const Utils::FilePath &directory,
|
const Utils::FilePath &directory,
|
||||||
const std::function<void(const Utils::FilePath &)> &callback = {});
|
const std::function<void(const Utils::FilePath &)> &callback = {});
|
||||||
static QList<Interpreter> detectPythonVenvs(const Utils::FilePath &path);
|
static QList<Interpreter> detectPythonVenvs(const Utils::FilePath &path);
|
||||||
static void addKitsForInterpreter(const Interpreter &interpreter);
|
static void addKitsForInterpreter(const Interpreter &interpreter, bool force);
|
||||||
static void removeKitsForInterpreter(const Interpreter &interpreter);
|
static void removeKitsForInterpreter(const Interpreter &interpreter);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@@ -745,10 +745,8 @@ void QmakeBuildSystem::asyncUpdate()
|
|||||||
|
|
||||||
void QmakeBuildSystem::buildFinished(bool success)
|
void QmakeBuildSystem::buildFinished(bool success)
|
||||||
{
|
{
|
||||||
if (success) {
|
if (success)
|
||||||
m_invalidateQmakeVfsContents = true;
|
m_invalidateQmakeVfsContents = true;
|
||||||
updateQmlJSCodeModel();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tasks QmakeProject::projectIssues(const Kit *k) const
|
Tasks QmakeProject::projectIssues(const Kit *k) const
|
||||||
|
BIN
src/plugins/qtsupport/images/icons/gs-qtc-14.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 7.7 KiB |
@@ -7,14 +7,14 @@
|
|||||||
<category>Talk</category>
|
<category>Talk</category>
|
||||||
</categories>
|
</categories>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-build-example-application.html" projectPath="" name="Building and Running an Example">
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-build-example-application.html" projectPath="" name="Build and run">
|
||||||
<description><![CDATA[Testing that your installation is successful by opening an existing example application project.]]></description>
|
<description><![CDATA[Testing that your installation is successful by opening an existing example application project.]]></description>
|
||||||
<tags>qt creator,build,compile,help</tags>
|
<tags>qt creator,build,compile,help</tags>
|
||||||
<meta>
|
<meta>
|
||||||
<entry name="category">Help</entry>
|
<entry name="category">Help</entry>
|
||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-writing-program.html" projectPath="" name="Creating a Qt Widget-Based Application">
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-writing-program.html" projectPath="" name="Qt Widgets application">
|
||||||
<description><![CDATA[Using Qt Creator to create a small Qt application, Text Finder.]]></description>
|
<description><![CDATA[Using Qt Creator to create a small Qt application, Text Finder.]]></description>
|
||||||
<tags>qt creator,qt widgets designer,widgets,c++,text,help</tags>
|
<tags>qt creator,qt widgets designer,widgets,c++,text,help</tags>
|
||||||
<meta>
|
<meta>
|
||||||
@@ -28,20 +28,55 @@
|
|||||||
<entry name="category">Help</entry>
|
<entry name="category">Help</entry>
|
||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/qtcreator-transitions-example.html" projectPath="" name="Creating a Qt Quick Application">
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/qtcreator-transitions-example.html" projectPath="" name="Qt Quick application">
|
||||||
<description><![CDATA[Using basic QML types and learning about basic concepts of Qt Quick.]]></description>
|
<description><![CDATA[Using basic QML types and learning about basic concepts of Qt Quick.]]></description>
|
||||||
<tags>qt creator,qt quick,qml,states,transitions,help</tags>
|
<tags>qt creator,qt quick,qml,states,transitions,help</tags>
|
||||||
<meta>
|
<meta>
|
||||||
<entry name="category">Help</entry>
|
<entry name="category">Help</entry>
|
||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/qtcreator-accelbubble-example.html" projectPath="" name="Creating a Mobile Qt Application">
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/qtcreator-accelbubble-example.html" projectPath="" name="Mobile application">
|
||||||
<description><![CDATA[Developing Qt Quick applications for Android and iOS devices.]]></description>
|
<description><![CDATA[Developing Qt Quick applications for Android and iOS devices.]]></description>
|
||||||
<tags>qt creator,qml,android,ios,controls,help</tags>
|
<tags>qt creator,qml,android,ios,controls,help</tags>
|
||||||
<meta>
|
<meta>
|
||||||
<entry name="category">Help</entry>
|
<entry name="category">Help</entry>
|
||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-tutorial-python-application-qt-quick.html" projectPath="" name="Qt Quick and Python">
|
||||||
|
<description><![CDATA[Using Python bindings to develop Qt Quick applications.]]></description>
|
||||||
|
<tags>qt creator,qt quick,python,help</tags>
|
||||||
|
<meta>
|
||||||
|
<entry name="category">Help</entry>
|
||||||
|
</meta>
|
||||||
|
</tutorial>
|
||||||
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-tutorial-python-application-qt-widgets.html" projectPath="" name="Qt Widgets and Python">
|
||||||
|
<description><![CDATA[Using Python bindings to develop Qt applications using the Qt Widgets module.]]></description>
|
||||||
|
<tags>qt creator,widgets,python,help</tags>
|
||||||
|
<meta>
|
||||||
|
<entry name="category">Help</entry>
|
||||||
|
</meta>
|
||||||
|
</tutorial>
|
||||||
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-tutorial-python-application-qt-widgets-ui.html" projectPath="" name="Qt Widgets UI and Python">
|
||||||
|
<description><![CDATA[Using Python bindings and Qt Widgets Designer to develop Qt Widgets-based UIs.]]></description>
|
||||||
|
<tags>qt creator,qt widgets designer,widgets,python,help</tags>
|
||||||
|
<meta>
|
||||||
|
<entry name="category">Help</entry>
|
||||||
|
</meta>
|
||||||
|
</tutorial>
|
||||||
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-debugging-example.html" projectPath="" name="C++ debugging">
|
||||||
|
<description><![CDATA[Debugging Qt C++ applications in the Qt Creator Debug mode.]]></description>
|
||||||
|
<tags>qt creator,c++,debugging,help</tags>
|
||||||
|
<meta>
|
||||||
|
<entry name="category">Help</entry>
|
||||||
|
</meta>
|
||||||
|
</tutorial>
|
||||||
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-qml-debugging-example.html" projectPath="" name="Qt Quick debugging">
|
||||||
|
<description><![CDATA[Debugging Qt Quick applications in the Qt Creator Debug mode.]]></description>
|
||||||
|
<tags>qt creator,qt quick,debugging,help</tags>
|
||||||
|
<meta>
|
||||||
|
<entry name="category">Help</entry>
|
||||||
|
</meta>
|
||||||
|
</tutorial>
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtdoc/qtdoc-tutorials-alarms-example.html" projectPath="" name="Getting Started Programming with Qt Quick">
|
<tutorial imageUrl=":qtsupport/images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtdoc/qtdoc-tutorials-alarms-example.html" projectPath="" name="Getting Started Programming with Qt Quick">
|
||||||
<description><![CDATA[Developing Qt Quick applications using Qt Quick and Qt Quick Controls.]]></description>
|
<description><![CDATA[Developing Qt Quick applications using Qt Quick and Qt Quick Controls.]]></description>
|
||||||
<tags>qt quick,controls,tumbler,help</tags>
|
<tags>qt quick,controls,tumbler,help</tags>
|
||||||
@@ -50,42 +85,14 @@
|
|||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubehOx3dod5-1A.webp" difficulty="" projectPath="" name="Qt Creator - UI Tour and the Welcome screen" isVideo="true" videoUrl="https://www.youtube.com/watch?v=hOx3dod5-1A" videoLength="3:21">
|
<tutorial imageUrl=":qtsupport/images/icons/gs-qtc-14.png" difficulty="" projectPath="" name="Getting Started with Qt Creator 14" isVideo="true" videoUrl="https://www.qt.io/academy/course-catalog#getting-started-with-qt-creator-14" videoLength="20:00">
|
||||||
<description><![CDATA[The parts of the Qt Creator UI and the Welcome mode.]]></description>
|
<description><![CDATA[Learn about Qt Creator 14.]]></description>
|
||||||
<tags>qt creator,learning,ui,welcome,2023</tags>
|
<tags>qt creator,ui,welcome,qt widgets designer,widgets,editing,debugging,learning,2024</tags>
|
||||||
<meta>
|
|
||||||
<entry name="category">Learning</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeFTSvDmcAgPI.webp" difficulty="" projectPath="" name="Qt Creator - Create a new project" isVideo="true" videoUrl="https://www.youtube.com/watch?v=FTSvDmcAgPI" videoLength="3:21">
|
|
||||||
<description><![CDATA[Creating a Qt Widgets application project.]]></description>
|
|
||||||
<tags>qt creator,learning,projects,qt widgets,2023</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Learning</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeLnVjI0I7cKs.webp" difficulty="" projectPath="" name="Qt Creator - Design and Edit Modes" isVideo="true" videoUrl="https://www.youtube.com/watch?v=LnVjI0I7cKs" videoLength="4:34">
|
|
||||||
<description><![CDATA[Developing a Qt Widgets application.]]></description>
|
|
||||||
<tags>qt creator,learning,qt widgets designer,coding,2023</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Learning</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeEhJ1eV_6RH8.webp" difficulty="" projectPath="" name="Qt Creator - Debugging" isVideo="true" videoUrl="https://www.youtube.com/watch?v=EhJ1eV_6RH8" videoLength="3:22">
|
|
||||||
<description><![CDATA[Debugging a Qt Widgets application.]]></description>
|
|
||||||
<tags>qt creator,learning,debugging,2023</tags>
|
|
||||||
<meta>
|
<meta>
|
||||||
<entry name="category">Learning</entry>
|
<entry name="category">Learning</entry>
|
||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtube1tSpq5OLkYI.webp" difficulty="" projectPath="" name="How to set up and deploy an application using Qt for Device Creation" isVideo="true" videoUrl="https://youtu.be/1tSpq5OLkYI" videoLength="5:48">
|
|
||||||
<description><![CDATA[Using Qt Creator to deploy applications to an embedded device.]]></description>
|
|
||||||
<tags>qt creator,embedded,device creation,video,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtube9xqhq9nDiOg.webp" difficulty="" projectPath="" name="Qt SCXML and State Machine Tooling in Qt Creator" isVideo="true" videoUrl="https://youtu.be/9xqhq9nDiOg" videoLength="4:53">
|
<tutorial imageUrl=":qtsupport/images/icons/youtube9xqhq9nDiOg.webp" difficulty="" projectPath="" name="Qt SCXML and State Machine Tooling in Qt Creator" isVideo="true" videoUrl="https://youtu.be/9xqhq9nDiOg" videoLength="4:53">
|
||||||
<description><![CDATA[Creating state machines.]]></description>
|
<description><![CDATA[Creating state machines.]]></description>
|
||||||
<tags>qt creator,SCXML,video</tags>
|
<tags>qt creator,SCXML,video</tags>
|
||||||
@@ -93,41 +100,6 @@
|
|||||||
<entry name="category">Online</entry>
|
<entry name="category">Online</entry>
|
||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtube9BcAYDlpuT8.webp" difficulty="" projectPath="" name="Using C++ Models in QML - To-do List" isVideo="true" videoUrl="https://www.youtube.com/watch?v=9BcAYDlpuT8" videoLength="49:48">
|
|
||||||
<description><![CDATA[Creating and using a C++ model in QML.]]></description>
|
|
||||||
<tags>qt creator,qt quick,c++,video</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubezAqSiIGdj8M.webp" difficulty="" projectPath="" name="Qt Creator - Meet Qt Creator" isVideo="true" videoUrl="https://youtu.be/zAqSiIGdj8M" videoLength="2:06">
|
|
||||||
<description><![CDATA[Overview of Qt Creator.]]></description>
|
|
||||||
<tags>qt creator,video</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeR6zWLfHIYJw.webp" difficulty="" projectPath="" name="Qt Creator - Examples" isVideo="true" videoUrl="https://www.youtube.com/watch?v=R6zWLfHIYJw" videoLength="9:29">
|
|
||||||
<description><![CDATA[Using Qt Creator tutorials and examples to develop Qt applications.]]></description>
|
|
||||||
<tags>qt creator,video,2018</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeuuhmSZxK1mk.webp" difficulty="" projectPath="" name="Qt Creator - Introduction to Qt Quick Controls" isVideo="true" videoUrl="https://www.youtube.com/watch?v=uuhmSZxK1mk" videoLength="7:09">
|
|
||||||
<description><![CDATA[Using Qt Quick Controls to develop Qt Quick applications.]]></description>
|
|
||||||
<tags>qt creator,qt quick,controls,video,2018</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeY-MM-9FigTc.webp" difficulty="" projectPath="" name="Debugging inside Qt Creator" isVideo="true" videoUrl="https://youtu.be/Y-MM-9FigTc" videoLength="21:54">
|
|
||||||
<description><![CDATA[Debugging applications in Qt Creator.]]></description>
|
|
||||||
<tags>qt creator,debugging,video,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubexNIz78IPBu0.webp" difficulty="" projectPath="" name="How to do translations with Qt Linguist" isVideo="true" videoUrl="https://youtu.be/xNIz78IPBu0" videoLength="9:14">
|
<tutorial imageUrl=":qtsupport/images/icons/youtubexNIz78IPBu0.webp" difficulty="" projectPath="" name="How to do translations with Qt Linguist" isVideo="true" videoUrl="https://youtu.be/xNIz78IPBu0" videoLength="9:14">
|
||||||
<description><![CDATA[Preparing applications for translation, translating them with Qt Linguist, and using the translations in apps.]]></description>
|
<description><![CDATA[Preparing applications for translation, translating them with Qt Linguist, and using the translations in apps.]]></description>
|
||||||
<tags>qt creator,qt linguist,translation,video,2021</tags>
|
<tags>qt creator,qt linguist,translation,video,2021</tags>
|
||||||
@@ -135,55 +107,6 @@
|
|||||||
<entry name="category">Online</entry>
|
<entry name="category">Online</entry>
|
||||||
</meta>
|
</meta>
|
||||||
</tutorial>
|
</tutorial>
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtube-xhiVA0P4yk.webp" difficulty="" projectPath="" name="Qt Windows Online Installer walkthrough" isVideo="true" videoUrl="https://youtu.be/-xhiVA0P4yk" videoLength="6:17">
|
|
||||||
<description><![CDATA[Downloading and installing Qt with the options that you want.]]></description>
|
|
||||||
<tags>qt,installation,online installer,modules,video,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeYJfFwDBOvqk.webp" difficulty="" projectPath="" name="How to install and set up Qt for Device Creation on Linux" isVideo="true" videoUrl="https://youtu.be/YJfFwDBOvqk" videoLength="6:52">
|
|
||||||
<description><![CDATA[Downloading and installing Qt Device Creation with the options that you want.]]></description>
|
|
||||||
<tags>embedded,installation,device creation,video,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubejbx3Oq1Q4gY.webp" difficulty="" projectPath="" name="Creating a simple widget app" isVideo="true" videoUrl="https://youtu.be/jbx3Oq1Q4gY" videoLength="6:08">
|
|
||||||
<description><![CDATA[Creating a simple widget-based application and running it on your development machine using Qt Creator 5.0.]]></description>
|
|
||||||
<tags>qt creator,widgets,video,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtube2RvhhEAZQxM.webp" difficulty="" projectPath="" name="Qt Widgets or Qt Quick" isVideo="true" videoUrl="https://youtu.be/2RvhhEAZQxM" videoLength="5:00">
|
|
||||||
<description><![CDATA[Learning the differences between Qt Widgets and Qt Quick and making the right choice for your application needs.]]></description>
|
|
||||||
<tags>qt quick,widgets,ui,video,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeDRFz0Tll4G8.webp" difficulty="" projectPath="" name="How to install and set up Qt for MCUs" isVideo="true" videoUrl="https://youtu.be/DRFz0Tll4G8" videoLength="8:29">
|
|
||||||
<description><![CDATA[Downloading and installing Qt for MCUs with the options that you want.]]></description>
|
|
||||||
<tags>qt,mcus,video,STM32H750B-DISCOVERY,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeBkgjJfxYN20.webp" difficulty="" projectPath="" name="How to build your first 'Qt for MCUs' application" isVideo="true" videoUrl="https://youtu.be/BkgjJfxYN20" videoLength="21:54">
|
|
||||||
<description><![CDATA[Building your first application for the NXP IMXRT1050 device.]]></description>
|
|
||||||
<tags>qtformcus,mcus,qt,video,NXP IMXRT1050-EVKB,2020</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubemn-JmXIMCqk.webp" difficulty="" projectPath="" name="How to create a simple application with Qt for MCUs" isVideo="true" videoUrl="https://youtu.be/mn-JmXIMCqk" videoLength="5:16">
|
|
||||||
<description><![CDATA[Creating a simple Qt for MCUs application and running it on your development machine using Qt Creator 5.0.]]></description>
|
|
||||||
<tags>qtformcus,mcus,qt,video,2021</tags>
|
|
||||||
<meta>
|
|
||||||
<entry name="category">Online</entry>
|
|
||||||
</meta>
|
|
||||||
</tutorial>
|
|
||||||
|
|
||||||
<tutorial imageUrl=":qtsupport/images/icons/youtubeKo3DuCgFamo.webp" difficulty="" projectPath="" name="Custom Qt Creator Wizards" isVideo="true" videoUrl="https://www.youtube.com/watch?v=Ko3DuCgFamo" videoLength="27:21">
|
<tutorial imageUrl=":qtsupport/images/icons/youtubeKo3DuCgFamo.webp" difficulty="" projectPath="" name="Custom Qt Creator Wizards" isVideo="true" videoUrl="https://www.youtube.com/watch?v=Ko3DuCgFamo" videoLength="27:21">
|
||||||
<description><![CDATA[Adding custom file and project creation wizards to Qt Creator.]]></description>
|
<description><![CDATA[Adding custom file and project creation wizards to Qt Creator.]]></description>
|
||||||
|
@@ -9,46 +9,30 @@
|
|||||||
<file>images/icons/playoverlay@2x.png</file>
|
<file>images/icons/playoverlay@2x.png</file>
|
||||||
<file>images/icons/tutorialicon.png</file>
|
<file>images/icons/tutorialicon.png</file>
|
||||||
<file>images/icons/tutorialicon@2x.png</file>
|
<file>images/icons/tutorialicon@2x.png</file>
|
||||||
<file>images/icons/youtube-xhiVA0P4yk.webp</file>
|
|
||||||
<file>images/icons/youtube1tSpq5OLkYI.webp</file>
|
|
||||||
<file>images/icons/youtube1w0ak9RNNWY.webp</file>
|
<file>images/icons/youtube1w0ak9RNNWY.webp</file>
|
||||||
<file>images/icons/youtube2RvhhEAZQxM.webp</file>
|
|
||||||
<file>images/icons/youtube3o2Wo4YzlII.webp</file>
|
<file>images/icons/youtube3o2Wo4YzlII.webp</file>
|
||||||
<file>images/icons/youtube9BcAYDlpuT8.webp</file>
|
|
||||||
<file>images/icons/youtube9xqhq9nDiOg.webp</file>
|
<file>images/icons/youtube9xqhq9nDiOg.webp</file>
|
||||||
<file>images/icons/youtubeB0X5FOev9Lw.webp</file>
|
<file>images/icons/youtubeB0X5FOev9Lw.webp</file>
|
||||||
<file>images/icons/youtubeBkgjJfxYN20.webp</file>
|
|
||||||
<file>images/icons/youtubeDP0lMoLVneY.webp</file>
|
<file>images/icons/youtubeDP0lMoLVneY.webp</file>
|
||||||
<file>images/icons/youtubeDRFz0Tll4G8.webp</file>
|
|
||||||
<file>images/icons/youtubeECA8_oLT0ZE.webp</file>
|
<file>images/icons/youtubeECA8_oLT0ZE.webp</file>
|
||||||
<file>images/icons/youtubeG0AbgVHGdXI.webp</file>
|
<file>images/icons/youtubeG0AbgVHGdXI.webp</file>
|
||||||
<file>images/icons/youtubeKo3DuCgFamo.webp</file>
|
<file>images/icons/youtubeKo3DuCgFamo.webp</file>
|
||||||
<file>images/icons/youtubePzV2MYRAUYQ.webp</file>
|
<file>images/icons/youtubePzV2MYRAUYQ.webp</file>
|
||||||
<file>images/icons/youtubeR6zWLfHIYJw.webp</file>
|
|
||||||
<file>images/icons/youtubeT_13aX5NTPk.webp</file>
|
<file>images/icons/youtubeT_13aX5NTPk.webp</file>
|
||||||
<file>images/icons/youtubeTiJiF0MOOFc.webp</file>
|
<file>images/icons/youtubeTiJiF0MOOFc.webp</file>
|
||||||
<file>images/icons/youtubeW3WC-VpKdGQ.webp</file>
|
<file>images/icons/youtubeW3WC-VpKdGQ.webp</file>
|
||||||
<file>images/icons/youtubeWIRRoPxIerc.webp</file>
|
<file>images/icons/youtubeWIRRoPxIerc.webp</file>
|
||||||
<file>images/icons/youtubeX0kEkB0ewyw.webp</file>
|
<file>images/icons/youtubeX0kEkB0ewyw.webp</file>
|
||||||
<file>images/icons/youtubeY-MM-9FigTc.webp</file>
|
|
||||||
<file>images/icons/youtubeYJfFwDBOvqk.webp</file>
|
|
||||||
<file>images/icons/youtubeau3brB7lNms.webp</file>
|
<file>images/icons/youtubeau3brB7lNms.webp</file>
|
||||||
<file>images/icons/youtubehrKz63Q_Rf0.webp</file>
|
<file>images/icons/youtubehrKz63Q_Rf0.webp</file>
|
||||||
<file>images/icons/youtubejbx3Oq1Q4gY.webp</file>
|
|
||||||
<file>images/icons/youtubemn-JmXIMCqk.webp</file>
|
|
||||||
<file>images/icons/youtubenmvurCcsWos.webp</file>
|
<file>images/icons/youtubenmvurCcsWos.webp</file>
|
||||||
<file>images/icons/youtubepN0pRBUqrrc.webp</file>
|
<file>images/icons/youtubepN0pRBUqrrc.webp</file>
|
||||||
<file>images/icons/youtubeqclquZ99ZVQ.webp</file>
|
<file>images/icons/youtubeqclquZ99ZVQ.webp</file>
|
||||||
<file>images/icons/youtubesRihJdZFuCg.webp</file>
|
<file>images/icons/youtubesRihJdZFuCg.webp</file>
|
||||||
<file>images/icons/youtubetnZo9umrPtg.webp</file>
|
<file>images/icons/youtubetnZo9umrPtg.webp</file>
|
||||||
<file>images/icons/youtubeuuhmSZxK1mk.webp</file>
|
|
||||||
<file>images/icons/youtubev4glCQt2jE0.webp</file>
|
<file>images/icons/youtubev4glCQt2jE0.webp</file>
|
||||||
<file>images/icons/youtubev_ynSET9FHU.webp</file>
|
<file>images/icons/youtubev_ynSET9FHU.webp</file>
|
||||||
<file>images/icons/youtubexNIz78IPBu0.webp</file>
|
<file>images/icons/youtubexNIz78IPBu0.webp</file>
|
||||||
<file>images/icons/youtubezAqSiIGdj8M.webp</file>
|
<file>images/icons/gs-qtc-14.png</file>
|
||||||
<file>images/icons/youtubeEhJ1eV_6RH8.webp</file>
|
|
||||||
<file>images/icons/youtubehOx3dod5-1A.webp</file>
|
|
||||||
<file>images/icons/youtubeLnVjI0I7cKs.webp</file>
|
|
||||||
<file>images/icons/youtubeFTSvDmcAgPI.webp</file>
|
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@@ -183,6 +183,8 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
|
|||||||
|
|
||||||
m_assistKind = kind;
|
m_assistKind = kind;
|
||||||
m_requestProvider = provider;
|
m_requestProvider = provider;
|
||||||
|
connect(
|
||||||
|
m_requestProvider, &QObject::destroyed, this, &CodeAssistantPrivate::cancelCurrentRequest);
|
||||||
IAssistProcessor *processor = provider->createProcessor(assistInterface.get());
|
IAssistProcessor *processor = provider->createProcessor(assistInterface.get());
|
||||||
processor->setAsyncCompletionAvailableHandler([this, reason, processor](
|
processor->setAsyncCompletionAvailableHandler([this, reason, processor](
|
||||||
IAssistProposal *newProposal) {
|
IAssistProposal *newProposal) {
|
||||||
@@ -365,6 +367,8 @@ QString CodeAssistantPrivate::proposalPrefix() const
|
|||||||
void CodeAssistantPrivate::invalidateCurrentRequestData()
|
void CodeAssistantPrivate::invalidateCurrentRequestData()
|
||||||
{
|
{
|
||||||
m_processor = nullptr;
|
m_processor = nullptr;
|
||||||
|
disconnect(
|
||||||
|
m_requestProvider, &QObject::destroyed, this, &CodeAssistantPrivate::cancelCurrentRequest);
|
||||||
m_requestProvider = nullptr;
|
m_requestProvider = nullptr;
|
||||||
m_receivedContentWhileWaiting = false;
|
m_receivedContentWhileWaiting = false;
|
||||||
}
|
}
|
||||||
|
@@ -206,7 +206,10 @@ macro(qtc_auto_setup_vcpkg)
|
|||||||
if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP)
|
if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP)
|
||||||
option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF)
|
option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF)
|
||||||
|
|
||||||
find_program(vcpkg_program vcpkg $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg)
|
find_program(vcpkg_program vcpkg
|
||||||
|
PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
)
|
||||||
if (NOT vcpkg_program)
|
if (NOT vcpkg_program)
|
||||||
message(WARNING "Qt Creator: vcpkg executable not found. "
|
message(WARNING "Qt Creator: vcpkg executable not found. "
|
||||||
"Package manager auto-setup will be skipped. "
|
"Package manager auto-setup will be skipped. "
|
||||||
|
@@ -211,7 +211,6 @@
|
|||||||
:scrollArea.Details_Utils::DetailsButton {text='Details' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:scrollArea.Details_Utils::DetailsButton {text='Details' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:scrollArea.Edit build configuration:_QComboBox {leftWidget=':scrollArea.Edit build configuration:_QLabel' type='QComboBox' unnamed='1' visible='1'}
|
:scrollArea.Edit build configuration:_QComboBox {leftWidget=':scrollArea.Edit build configuration:_QLabel' type='QComboBox' unnamed='1' visible='1'}
|
||||||
:scrollArea.Edit build configuration:_QLabel {text='Edit build configuration:' type='QLabel' unnamed='1' visible='1'}
|
:scrollArea.Edit build configuration:_QLabel {text='Edit build configuration:' type='QLabel' unnamed='1' visible='1'}
|
||||||
:scrollArea.Library not available_QLabel {name='qmlDebuggingWarningText' text?='Library not available*' type='QLabel' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
|
||||||
:sourceFileLineEdit_Utils::FileNameValidatingLineEdit {name='SrcFileName' type='Utils::FancyLineEdit' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
:sourceFileLineEdit_Utils::FileNameValidatingLineEdit {name='SrcFileName' type='Utils::FancyLineEdit' visible='1' window=':New_ProjectExplorer::JsonWizard'}
|
||||||
:splitter.Commit File(s)_VcsBase::QActionPushButton {text~='(Commit .+/.+ File.*)' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
:splitter.Commit File(s)_VcsBase::QActionPushButton {text~='(Commit .+/.+ File.*)' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
|
||||||
:splitter.Description_QGroupBox {container=':Qt Creator.splitter_QSplitter' name='descriptionBox' title='Description' type='QGroupBox' visible='1'}
|
:splitter.Description_QGroupBox {container=':Qt Creator.splitter_QSplitter' name='descriptionBox' title='Description' type='QGroupBox' visible='1'}
|
||||||
|
@@ -142,40 +142,13 @@ def verifyBuildConfig(currentTarget, configName, shouldBeDebug=False, enableShad
|
|||||||
|
|
||||||
buildCfCombo = waitForObject("{leftWidget=':scrollArea.Edit build configuration:_QLabel' "
|
buildCfCombo = waitForObject("{leftWidget=':scrollArea.Edit build configuration:_QLabel' "
|
||||||
"type='QComboBox' unnamed='1' visible='1'}")
|
"type='QComboBox' unnamed='1' visible='1'}")
|
||||||
if shouldBeDebug:
|
buildType = "Debug" if shouldBeDebug else "Release"
|
||||||
test.compare(buildCfCombo.currentText, 'Debug', "Verifying whether it's a debug build")
|
test.compare(buildCfCombo.currentText, buildType,
|
||||||
else:
|
"Verifying whether it's a %s build" % buildType)
|
||||||
test.compare(buildCfCombo.currentText, 'Release', "Verifying whether it's a release build")
|
qmlDebuggingCombo = waitForObject(':Qt Creator.QML debugging and profiling:_QComboBox')
|
||||||
if enableQmlDebug:
|
if (selectFromCombo(qmlDebuggingCombo, "Enable" if enableQmlDebug else "Disable")
|
||||||
try:
|
and buildSystem == "qmake"):
|
||||||
libLabel = waitForObject(":scrollArea.Library not available_QLabel", 2000)
|
# Don't rebuild now
|
||||||
mouseClick(libLabel, libLabel.width - 10, libLabel.height / 2, 0, Qt.LeftButton)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
# Since waitForObject waits for the object to be enabled,
|
|
||||||
# it will wait here until compilation of the debug libraries has finished.
|
|
||||||
runCMakeButton = ("{type='QPushButton' text='Run CMake' unnamed='1' "
|
|
||||||
"window=':Qt Creator_Core::Internal::MainWindow'}")
|
|
||||||
qmlDebuggingCombo = findObject(':Qt Creator.QML debugging and profiling:_QComboBox')
|
|
||||||
if selectFromCombo(qmlDebuggingCombo, 'Enable'):
|
|
||||||
if buildSystem is None or buildSystem == "CMake": # re-run cmake to apply
|
|
||||||
clickButton(waitForObject(runCMakeButton))
|
|
||||||
elif buildSystem == "qmake": # Don't rebuild now
|
|
||||||
clickButton(waitForObject(":QML Debugging.No_QPushButton", 5000))
|
|
||||||
try:
|
|
||||||
problemFound = waitForObject("{window=':Qt Creator_Core::Internal::MainWindow' "
|
|
||||||
"type='QLabel' name='problemLabel' visible='1'}", 1000)
|
|
||||||
if problemFound:
|
|
||||||
test.warning('%s' % problemFound.text)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
qmlDebuggingCombo = findObject(':Qt Creator.QML debugging and profiling:_QComboBox')
|
|
||||||
if selectFromCombo(qmlDebuggingCombo, "Disable"):
|
|
||||||
test.log("Qml debugging libraries are available - unchecked qml debugging.")
|
|
||||||
if buildSystem is None or buildSystem == "CMake": # re-run cmake to apply
|
|
||||||
clickButton(waitForObject(runCMakeButton))
|
|
||||||
elif buildSystem == "qmake": # Don't rebuild now
|
|
||||||
clickButton(waitForObject(":QML Debugging.No_QPushButton", 5000))
|
clickButton(waitForObject(":QML Debugging.No_QPushButton", 5000))
|
||||||
clickButton(waitForObject(":scrollArea.Details_Utils::DetailsButton"))
|
clickButton(waitForObject(":scrollArea.Details_Utils::DetailsButton"))
|
||||||
switchViewTo(ViewConstants.EDIT)
|
switchViewTo(ViewConstants.EDIT)
|
||||||
|
@@ -129,7 +129,7 @@ def main():
|
|||||||
for (qType, prop, info) in expect:
|
for (qType, prop, info) in expect:
|
||||||
test.verify(checkIfObjectExists(search % (qType, prop)),
|
test.verify(checkIfObjectExists(search % (qType, prop)),
|
||||||
"Verifying whether %s is shown" % info)
|
"Verifying whether %s is shown" % info)
|
||||||
checkTableViewForContent(search % (expect[0][0], expect[0][1]), "Creating .*", "Tutorials",
|
checkTableViewForContent(search % (expect[0][0], expect[0][1]), "^Qt .*", "Tutorials",
|
||||||
"Verifying that at least one tutorial is displayed.")
|
"Verifying that at least one tutorial is displayed.")
|
||||||
# exit Qt Creator
|
# exit Qt Creator
|
||||||
invokeMenuItem("File", "Exit")
|
invokeMenuItem("File", "Exit")
|
||||||
|
@@ -33,7 +33,7 @@ def main():
|
|||||||
tutorial = findExampleOrTutorial(listView, ".*", True)
|
tutorial = findExampleOrTutorial(listView, ".*", True)
|
||||||
test.verify(tutorial is None,
|
test.verify(tutorial is None,
|
||||||
"Verifying: 'Tutorials' topic is opened and nothing is shown.")
|
"Verifying: 'Tutorials' topic is opened and nothing is shown.")
|
||||||
bnr = "Building and Running an Example"
|
bnr = "Build and run"
|
||||||
replaceEditorContent(searchTutorials, bnr.lower())
|
replaceEditorContent(searchTutorials, bnr.lower())
|
||||||
listView = __waitForListView__()
|
listView = __waitForListView__()
|
||||||
waitFor('findExampleOrTutorial(listView, "%s.*") is not None' % bnr, 3000)
|
waitFor('findExampleOrTutorial(listView, "%s.*") is not None' % bnr, 3000)
|
||||||
@@ -50,8 +50,8 @@ def main():
|
|||||||
sendEvent("QCloseEvent", waitForObject(":Help Widget_Help::Internal::HelpWidget"))
|
sendEvent("QCloseEvent", waitForObject(":Help Widget_Help::Internal::HelpWidget"))
|
||||||
# check a demonstration video link
|
# check a demonstration video link
|
||||||
mouseClick(searchTutorials)
|
mouseClick(searchTutorials)
|
||||||
replaceEditorContent(searchTutorials, "embedded device")
|
replaceEditorContent(searchTutorials, "device")
|
||||||
embeddedTutorial = "How to install and set up Qt for Device Creation.*"
|
embeddedTutorial = "^Qt Creator for Bare Metal Development"
|
||||||
listView = __waitForListView__()
|
listView = __waitForListView__()
|
||||||
waitFor('findExampleOrTutorial(listView, embeddedTutorial) is not None', 3000)
|
waitFor('findExampleOrTutorial(listView, embeddedTutorial) is not None', 3000)
|
||||||
tutorial = findExampleOrTutorial(listView, embeddedTutorial, True)
|
tutorial = findExampleOrTutorial(listView, embeddedTutorial, True)
|
||||||
|