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.
|
||||
\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
|
||||
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
|
||||
your operating system has. For example, on Windows, you can use the
|
||||
To use Conan, install it by using \l{Get and Install Qt}{\QOI} or the tools
|
||||
that your operating system has. For example, on Windows, you can use the
|
||||
\c {choco install conan} or \c {pip install conan} command.
|
||||
|
||||
\note Enable the Conan plugin to use it.
|
||||
|
@@ -153,7 +153,8 @@
|
||||
\endlist
|
||||
|
||||
\if defined(qtcreator)
|
||||
\sa {Read Documentation}{How To: Read Documentation}
|
||||
\sa {Read Documentation}{How To: Read Documentation}, {Installation},
|
||||
{Get and Install Qt}
|
||||
\endif
|
||||
*/
|
||||
|
||||
|
@@ -38,5 +38,5 @@
|
||||
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
|
||||
\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
|
||||
|
||||
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:
|
||||
|
||||
\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
|
||||
|
||||
@@ -313,7 +329,7 @@
|
||||
|
||||
\list
|
||||
|
||||
\li \c {Qt\ Creator.app/Contents/MacOS/Qt\ Creator -help}
|
||||
\li \c {~/Qt/Qt\ Creator.app/Contents/MacOS/Qt\ Creator -help}
|
||||
|
||||
\endlist
|
||||
|
||||
|
@@ -121,7 +121,7 @@
|
||||
\b {The Qt API Reference Documentation is missing and context help does
|
||||
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,
|
||||
go to \preferences > \uicontrol Help >
|
||||
|
@@ -17,7 +17,7 @@
|
||||
configured iOS devices.
|
||||
|
||||
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
|
||||
|
||||
|
@@ -178,5 +178,5 @@
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
\table borderless
|
||||
@@ -57,5 +57,5 @@
|
||||
and APIs to develop Qt applications, go to \l {Qt Documentation}.
|
||||
\endtable
|
||||
|
||||
\sa {Installation}
|
||||
\sa {Installation}, {Get and Install Qt}
|
||||
*/
|
||||
|
@@ -210,9 +210,9 @@
|
||||
\li \l {Remote Linux}
|
||||
\endlist
|
||||
|
||||
Install the toolchain for building applications for the targeted
|
||||
embedded platform on the computer, and then use \QOI to install Qt
|
||||
libraries that are built for the platform. Add a kit with the toolchain and
|
||||
Install the toolchain for building applications for the targeted embedded
|
||||
platform on the computer, and then use \l{Get and Install Qt}{\QOI} to install
|
||||
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
|
||||
suitable kits for you.
|
||||
|
||||
|
@@ -19,8 +19,8 @@
|
||||
|
||||
\brief How to build and run a Qt example.
|
||||
|
||||
To test that your \QOI installation is successful, open an existing
|
||||
example application project.
|
||||
To test that your \l{Get and Install Qt}{\QOI} installation is successful,
|
||||
open an existing example application project.
|
||||
|
||||
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
|
||||
|
@@ -22,9 +22,9 @@
|
||||
necessary tools for building an application for and running it on a
|
||||
particular platform.
|
||||
|
||||
\QC automatically detects the compilers that your system or \QOI
|
||||
registers and lists them in \preferences > \uicontrol Kits >
|
||||
\uicontrol Compilers.
|
||||
\QC automatically detects the compilers that your system or
|
||||
\l{Get and Install Qt}{\QOI} registers and lists them in
|
||||
\preferences > \uicontrol Kits > \uicontrol Compilers.
|
||||
|
||||
\image qtcreator-toolchains.png
|
||||
|
||||
|
@@ -31,7 +31,7 @@
|
||||
|
||||
\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
|
||||
to a Qt that the system installed with some other package
|
||||
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},
|
||||
{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
|
||||
you installed Qt, an error message will appear when you try to open
|
||||
\e Main.qml for editing. You can use \l {Installing Qt}
|
||||
{\QOI} to install Qt Virtual Keyboard.
|
||||
\e Main.qml for editing. You can use \l{Get and Install Qt}{\QOI}
|
||||
to install Qt Virtual Keyboard.
|
||||
|
||||
\li Select \uicontrol Next to open the \uicontrol {Kit Selection}
|
||||
dialog.
|
||||
|
@@ -12,7 +12,8 @@
|
||||
\brief Configure CMake and set up compilers, debuggers, devices, Qt versions,
|
||||
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
|
||||
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
|
||||
|
@@ -20,8 +20,8 @@
|
||||
\note Enable the WebAssembly plugin to use it.
|
||||
|
||||
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
|
||||
to \QC.
|
||||
Qt for WebAssembly with \l{Get and Install Qt}{\QOI}. It automatically adds
|
||||
a build and run kit to \QC.
|
||||
|
||||
\section1 Set up WebAssembly development environment
|
||||
|
||||
|
@@ -279,33 +279,33 @@ def package_qtcreator(args, paths):
|
||||
if not args.no_cdb:
|
||||
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_qtcreator:
|
||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'),
|
||||
zipPatternForApp(paths)],
|
||||
common.check_print_call(zip
|
||||
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'),
|
||||
zipPatternForApp(paths)],
|
||||
paths.install)
|
||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'),
|
||||
'*'],
|
||||
common.check_print_call(zip
|
||||
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'),
|
||||
'*'],
|
||||
paths.dev_install)
|
||||
if args.with_debug_info:
|
||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-debug.7z'),
|
||||
'*'],
|
||||
common.check_print_call(zip
|
||||
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-debug.7z'),
|
||||
'*'],
|
||||
paths.debug_install)
|
||||
if common.is_windows_platform():
|
||||
# use -mf=off to avoid usage of the ARM executable compression filter,
|
||||
# which cannot be extracted by the p7zip version on the machine doing
|
||||
# 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'),
|
||||
'*'],
|
||||
common.check_print_call(zip
|
||||
+ [os.path.join(paths.result, 'wininterrupt' + args.zip_infix + '.7z'),
|
||||
'*'],
|
||||
paths.wininterrupt_install)
|
||||
if not args.no_cdb:
|
||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, '-mf=off',
|
||||
os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'),
|
||||
'*'],
|
||||
common.check_print_call(zip
|
||||
+ [os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'),
|
||||
'*'],
|
||||
paths.qtcreatorcdbext_install)
|
||||
|
||||
if common.is_mac_platform() and not args.no_qtcreator:
|
||||
@@ -319,9 +319,9 @@ def package_qtcreator(args, paths):
|
||||
app = apps[0]
|
||||
common.codesign(os.path.join(signed_install_path, app))
|
||||
if not args.no_zip:
|
||||
common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads,
|
||||
os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-signed.7z'),
|
||||
app],
|
||||
common.check_print_call(zip
|
||||
+ [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-signed.7z'),
|
||||
app],
|
||||
signed_install_path)
|
||||
if not args.no_dmg:
|
||||
common.check_print_call(['python', '-u',
|
||||
|
@@ -2088,6 +2088,13 @@ CMakeBuildSystem *CMakeBuildConfiguration::cmakeBuildSystem() 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());
|
||||
// The hack further down is only relevant for desktop
|
||||
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 PACKAGE_MANAGER_DIR[] = ".qtc/package-manager";
|
||||
const char VCPKG_ROOT[] = "VCPKG_ROOT";
|
||||
|
||||
const char CMAKE_LISTS_TXT[] = "CMakeLists.txt";
|
||||
const char CMAKE_CACHE_TXT[] = "CMakeCache.txt";
|
||||
|
@@ -1895,6 +1895,8 @@ void EditorManagerPrivate::addEditorArea(EditorArea *area)
|
||||
&EditorArea::hidden,
|
||||
d,
|
||||
[area = QPointer<EditorArea>(area)] {
|
||||
if (ExtensionSystem::PluginManager::isShuttingDown())
|
||||
return;
|
||||
// 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.
|
||||
const auto isReallyVisibile = [](QWidget *w) {
|
||||
|
@@ -29,22 +29,22 @@ namespace {
|
||||
|
||||
static bool isOwnershipRAIIName(const QString &name)
|
||||
{
|
||||
static QSet<QString> knownNames;
|
||||
if (knownNames.isEmpty()) {
|
||||
static const QSet<QString> knownNames{
|
||||
// Qt
|
||||
knownNames.insert(QLatin1String("QScopedPointer"));
|
||||
knownNames.insert(QLatin1String("QScopedArrayPointer"));
|
||||
knownNames.insert(QLatin1String("QMutexLocker"));
|
||||
knownNames.insert(QLatin1String("QReadLocker"));
|
||||
knownNames.insert(QLatin1String("QWriteLocker"));
|
||||
// Standard C++
|
||||
knownNames.insert(QLatin1String("auto_ptr"));
|
||||
knownNames.insert(QLatin1String("unique_ptr"));
|
||||
// Boost
|
||||
knownNames.insert(QLatin1String("scoped_ptr"));
|
||||
knownNames.insert(QLatin1String("scoped_array"));
|
||||
}
|
||||
"QMutexLocker",
|
||||
"QReadLocker",
|
||||
"QScopedArrayPointer",
|
||||
"QScopedPointer",
|
||||
"QWriteLocker",
|
||||
|
||||
// Standard C++
|
||||
"auto_ptr",
|
||||
"unique_ptr",
|
||||
|
||||
// Boost
|
||||
"scoped_array",
|
||||
"scoped_ptr",
|
||||
};
|
||||
return knownNames.contains(name);
|
||||
}
|
||||
|
||||
@@ -59,8 +59,8 @@ static bool isOwnershipRAIIType(Symbol *symbol, const LookupContext &context)
|
||||
Declaration *declaration = symbol->asDeclaration();
|
||||
const NamedType *namedType = declaration->type()->asNamedType();
|
||||
if (namedType) {
|
||||
ClassOrNamespace *clazz = context.lookupType(namedType->name(),
|
||||
declaration->enclosingScope());
|
||||
ClassOrNamespace *clazz
|
||||
= context.lookupType(namedType->name(), declaration->enclosingScope());
|
||||
if (clazz && !clazz->symbols().isEmpty()) {
|
||||
Overview overview;
|
||||
Symbol *symbol = clazz->symbols().at(0);
|
||||
|
@@ -255,7 +255,7 @@ int CdbEngine::elapsedLogTime()
|
||||
void CdbEngine::createFullBacktrace()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
DebuggerCommand cmd("thread apply all bt full", NeedsTemporaryStop | ConsoleCommand);
|
||||
cmd.callback = [](const DebuggerResponse &response) {
|
||||
if (response.resultClass == ResultDone) {
|
||||
Internal::openTextEditor("Backtrace $",
|
||||
response.consoleStreamOutput + response.logStreamOutput);
|
||||
Internal::openTextEditor("Backtrace$",
|
||||
reverseBacktrace(response.consoleStreamOutput)
|
||||
+ response.logStreamOutput);
|
||||
}
|
||||
};
|
||||
runCommand(cmd);
|
||||
|
@@ -1056,7 +1056,7 @@ void LldbEngine::fetchFullBacktrace()
|
||||
{
|
||||
DebuggerCommand cmd("fetchFullBacktrace");
|
||||
cmd.callback = [](const DebuggerResponse &response) {
|
||||
Internal::openTextEditor("Backtrace $", fromHex(response.data["fulltrace"].data()));
|
||||
Internal::openTextEditor("Backtrace$", fromHex(response.data["fulltrace"].data()));
|
||||
};
|
||||
runCommand(cmd);
|
||||
}
|
||||
|
@@ -505,8 +505,6 @@ public:
|
||||
void duplicateFile();
|
||||
void deleteFile();
|
||||
void handleRenameFile();
|
||||
void handleSetStartupProject();
|
||||
void setStartupProject(Project *project);
|
||||
bool closeAllFilesInProject(const Project *project);
|
||||
|
||||
void checkRecentProjectsAsync();
|
||||
@@ -885,6 +883,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
||||
dd, &ProjectExplorerPluginPrivate::updateActions);
|
||||
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
||||
dd, &ProjectExplorerPluginPrivate::updateActions);
|
||||
connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged,
|
||||
dd, &ProjectExplorerPluginPrivate::updateActions);
|
||||
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
||||
dd, &ProjectExplorerPluginPrivate::updateWelcomePage);
|
||||
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
||||
@@ -1863,7 +1863,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
|
||||
connect(dd->m_createSourceAction, &QAction::triggered,
|
||||
dd, &ProjectExplorerPluginPrivate::addNewHeaderOrSource);
|
||||
connect(dd->m_setStartupProjectAction, &QAction::triggered,
|
||||
dd, &ProjectExplorerPluginPrivate::handleSetStartupProject);
|
||||
dd, [] { ProjectManager::setStartupProject(ProjectTree::currentProject()); });
|
||||
connect(dd->m_closeProjectFilesActionFileMenu, &QAction::triggered,
|
||||
dd, [] { dd->closeAllFilesInProject(ProjectManager::projects().first()); });
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (dd->m_customParsers != settings) {
|
||||
|
@@ -155,6 +155,7 @@ private:
|
||||
void currentChanged(const QModelIndex &index, const QModelIndex &previous);
|
||||
void detailsChanged();
|
||||
void updateCleanButton();
|
||||
void updateGenerateKitButton(const Interpreter &interpreter);
|
||||
void addItem();
|
||||
void deleteItem();
|
||||
void makeDefault();
|
||||
@@ -283,10 +284,10 @@ void InterpreterOptionsWidget::currentChanged(const QModelIndex &index, const QM
|
||||
emit m_model.dataChanged(previous, previous);
|
||||
}
|
||||
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_generateKitButton->setEnabled(
|
||||
!KitManager::kit(Id::fromString(m_model.itemAt(index.row())->itemData.id)));
|
||||
updateGenerateKitButton(interpreter);
|
||||
} else {
|
||||
m_detailsWidget->hide();
|
||||
m_generateKitButton->setEnabled(false);
|
||||
@@ -299,8 +300,10 @@ void InterpreterOptionsWidget::detailsChanged()
|
||||
{
|
||||
const QModelIndex &index = m_view->currentIndex();
|
||||
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);
|
||||
updateGenerateKitButton(interpreter);
|
||||
}
|
||||
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()
|
||||
{
|
||||
const QModelIndex &index = m_model.indexForItem(
|
||||
@@ -568,7 +578,7 @@ void InterpreterOptionsWidget::generateKit()
|
||||
{
|
||||
const QModelIndex &index = m_view->currentIndex();
|
||||
if (index.isValid())
|
||||
PythonSettings::addKitsForInterpreter(m_model.itemAt(index.row())->itemData);
|
||||
PythonSettings::addKitsForInterpreter(m_model.itemAt(index.row())->itemData, true);
|
||||
m_generateKitButton->setEnabled(false);
|
||||
}
|
||||
|
||||
@@ -796,19 +806,20 @@ static void setRelevantAspectsToKit(Kit *k)
|
||||
k->setRelevantAspects(relevantAspects);
|
||||
}
|
||||
|
||||
void PythonSettings::addKitsForInterpreter(const Interpreter &interpreter)
|
||||
void PythonSettings::addKitsForInterpreter(const Interpreter &interpreter, bool force)
|
||||
{
|
||||
if (!KitManager::isLoaded()) {
|
||||
connect(KitManager::instance(), &KitManager::kitsLoaded, settingsInstance, [interpreter]() {
|
||||
addKitsForInterpreter(interpreter);
|
||||
});
|
||||
connect(KitManager::instance(),
|
||||
&KitManager::kitsLoaded,
|
||||
settingsInstance,
|
||||
[interpreter, force]() { addKitsForInterpreter(interpreter, force); });
|
||||
return;
|
||||
}
|
||||
|
||||
const Id kitId = Id::fromString(interpreter.id);
|
||||
if (Kit *k = KitManager::kit(kitId)) {
|
||||
setRelevantAspectsToKit(k);
|
||||
} else if (!isVenvPython(interpreter.command)) {
|
||||
} else if (force || !isVenvPython(interpreter.command)) {
|
||||
KitManager::registerKit(
|
||||
[interpreter](Kit *k) {
|
||||
k->setAutoDetected(true);
|
||||
@@ -844,7 +855,7 @@ void PythonSettings::setInterpreter(const QList<Interpreter> &interpreters, cons
|
||||
QList<Interpreter> toRemove = settingsInstance->m_interpreters;
|
||||
for (const Interpreter &interpreter : interpreters) {
|
||||
if (!Utils::eraseOne(toRemove, Utils::equal(&Interpreter::id, interpreter.id)))
|
||||
addKitsForInterpreter(interpreter);
|
||||
addKitsForInterpreter(interpreter, false);
|
||||
}
|
||||
for (const Interpreter &interpreter : toRemove)
|
||||
removeKitsForInterpreter(interpreter);
|
||||
@@ -889,7 +900,7 @@ void PythonSettings::addInterpreter(const Interpreter &interpreter, bool isDefau
|
||||
if (isDefault)
|
||||
settingsInstance->m_defaultInterpreterId = interpreter.id;
|
||||
saveSettings();
|
||||
addKitsForInterpreter(interpreter);
|
||||
addKitsForInterpreter(interpreter, false);
|
||||
}
|
||||
|
||||
Interpreter PythonSettings::addInterpreter(const FilePath &interpreterPath,
|
||||
@@ -1059,7 +1070,7 @@ void PythonSettings::initFromSettings(QtcSettings *settings)
|
||||
if (cmd.needsDevice() || cmd.parentDir().pathAppended("activate").exists())
|
||||
continue;
|
||||
}
|
||||
addKitsForInterpreter(interpreter);
|
||||
addKitsForInterpreter(interpreter, false);
|
||||
}
|
||||
} else {
|
||||
fixupPythonKits();
|
||||
|
@@ -43,7 +43,7 @@ public:
|
||||
const Utils::FilePath &directory,
|
||||
const std::function<void(const Utils::FilePath &)> &callback = {});
|
||||
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);
|
||||
|
||||
signals:
|
||||
|
@@ -745,10 +745,8 @@ void QmakeBuildSystem::asyncUpdate()
|
||||
|
||||
void QmakeBuildSystem::buildFinished(bool success)
|
||||
{
|
||||
if (success) {
|
||||
if (success)
|
||||
m_invalidateQmakeVfsContents = true;
|
||||
updateQmlJSCodeModel();
|
||||
}
|
||||
}
|
||||
|
||||
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>
|
||||
</categories>
|
||||
<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>
|
||||
<tags>qt creator,build,compile,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-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>
|
||||
<tags>qt creator,qt widgets designer,widgets,c++,text,help</tags>
|
||||
<meta>
|
||||
@@ -28,20 +28,55 @@
|
||||
<entry name="category">Help</entry>
|
||||
</meta>
|
||||
</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>
|
||||
<tags>qt creator,qt quick,qml,states,transitions,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/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>
|
||||
<tags>qt creator,qml,android,ios,controls,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-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">
|
||||
<description><![CDATA[Developing Qt Quick applications using Qt Quick and Qt Quick Controls.]]></description>
|
||||
<tags>qt quick,controls,tumbler,help</tags>
|
||||
@@ -50,42 +85,14 @@
|
||||
</meta>
|
||||
</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">
|
||||
<description><![CDATA[The parts of the Qt Creator UI and the Welcome mode.]]></description>
|
||||
<tags>qt creator,learning,ui,welcome,2023</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>
|
||||
<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[Learn about Qt Creator 14.]]></description>
|
||||
<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/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">
|
||||
<description><![CDATA[Creating state machines.]]></description>
|
||||
<tags>qt creator,SCXML,video</tags>
|
||||
@@ -93,41 +100,6 @@
|
||||
<entry name="category">Online</entry>
|
||||
</meta>
|
||||
</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">
|
||||
<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>
|
||||
@@ -135,55 +107,6 @@
|
||||
<entry name="category">Online</entry>
|
||||
</meta>
|
||||
</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">
|
||||
<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/tutorialicon.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/youtube2RvhhEAZQxM.webp</file>
|
||||
<file>images/icons/youtube3o2Wo4YzlII.webp</file>
|
||||
<file>images/icons/youtube9BcAYDlpuT8.webp</file>
|
||||
<file>images/icons/youtube9xqhq9nDiOg.webp</file>
|
||||
<file>images/icons/youtubeB0X5FOev9Lw.webp</file>
|
||||
<file>images/icons/youtubeBkgjJfxYN20.webp</file>
|
||||
<file>images/icons/youtubeDP0lMoLVneY.webp</file>
|
||||
<file>images/icons/youtubeDRFz0Tll4G8.webp</file>
|
||||
<file>images/icons/youtubeECA8_oLT0ZE.webp</file>
|
||||
<file>images/icons/youtubeG0AbgVHGdXI.webp</file>
|
||||
<file>images/icons/youtubeKo3DuCgFamo.webp</file>
|
||||
<file>images/icons/youtubePzV2MYRAUYQ.webp</file>
|
||||
<file>images/icons/youtubeR6zWLfHIYJw.webp</file>
|
||||
<file>images/icons/youtubeT_13aX5NTPk.webp</file>
|
||||
<file>images/icons/youtubeTiJiF0MOOFc.webp</file>
|
||||
<file>images/icons/youtubeW3WC-VpKdGQ.webp</file>
|
||||
<file>images/icons/youtubeWIRRoPxIerc.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/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/youtubepN0pRBUqrrc.webp</file>
|
||||
<file>images/icons/youtubeqclquZ99ZVQ.webp</file>
|
||||
<file>images/icons/youtubesRihJdZFuCg.webp</file>
|
||||
<file>images/icons/youtubetnZo9umrPtg.webp</file>
|
||||
<file>images/icons/youtubeuuhmSZxK1mk.webp</file>
|
||||
<file>images/icons/youtubev4glCQt2jE0.webp</file>
|
||||
<file>images/icons/youtubev_ynSET9FHU.webp</file>
|
||||
<file>images/icons/youtubexNIz78IPBu0.webp</file>
|
||||
<file>images/icons/youtubezAqSiIGdj8M.webp</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>
|
||||
<file>images/icons/gs-qtc-14.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@@ -183,6 +183,8 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
|
||||
|
||||
m_assistKind = kind;
|
||||
m_requestProvider = provider;
|
||||
connect(
|
||||
m_requestProvider, &QObject::destroyed, this, &CodeAssistantPrivate::cancelCurrentRequest);
|
||||
IAssistProcessor *processor = provider->createProcessor(assistInterface.get());
|
||||
processor->setAsyncCompletionAvailableHandler([this, reason, processor](
|
||||
IAssistProposal *newProposal) {
|
||||
@@ -365,6 +367,8 @@ QString CodeAssistantPrivate::proposalPrefix() const
|
||||
void CodeAssistantPrivate::invalidateCurrentRequestData()
|
||||
{
|
||||
m_processor = nullptr;
|
||||
disconnect(
|
||||
m_requestProvider, &QObject::destroyed, this, &CodeAssistantPrivate::cancelCurrentRequest);
|
||||
m_requestProvider = nullptr;
|
||||
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)
|
||||
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)
|
||||
message(WARNING "Qt Creator: vcpkg executable not found. "
|
||||
"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.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.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'}
|
||||
: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'}
|
||||
|
@@ -142,41 +142,14 @@ def verifyBuildConfig(currentTarget, configName, shouldBeDebug=False, enableShad
|
||||
|
||||
buildCfCombo = waitForObject("{leftWidget=':scrollArea.Edit build configuration:_QLabel' "
|
||||
"type='QComboBox' unnamed='1' visible='1'}")
|
||||
if shouldBeDebug:
|
||||
test.compare(buildCfCombo.currentText, 'Debug', "Verifying whether it's a debug build")
|
||||
else:
|
||||
test.compare(buildCfCombo.currentText, 'Release', "Verifying whether it's a release build")
|
||||
if enableQmlDebug:
|
||||
try:
|
||||
libLabel = waitForObject(":scrollArea.Library not available_QLabel", 2000)
|
||||
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))
|
||||
buildType = "Debug" if shouldBeDebug else "Release"
|
||||
test.compare(buildCfCombo.currentText, buildType,
|
||||
"Verifying whether it's a %s build" % buildType)
|
||||
qmlDebuggingCombo = waitForObject(':Qt Creator.QML debugging and profiling:_QComboBox')
|
||||
if (selectFromCombo(qmlDebuggingCombo, "Enable" if enableQmlDebug else "Disable")
|
||||
and buildSystem == "qmake"):
|
||||
# Don't rebuild now
|
||||
clickButton(waitForObject(":QML Debugging.No_QPushButton", 5000))
|
||||
clickButton(waitForObject(":scrollArea.Details_Utils::DetailsButton"))
|
||||
switchViewTo(ViewConstants.EDIT)
|
||||
|
||||
|
@@ -129,7 +129,7 @@ def main():
|
||||
for (qType, prop, info) in expect:
|
||||
test.verify(checkIfObjectExists(search % (qType, prop)),
|
||||
"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.")
|
||||
# exit Qt Creator
|
||||
invokeMenuItem("File", "Exit")
|
||||
|
@@ -33,7 +33,7 @@ def main():
|
||||
tutorial = findExampleOrTutorial(listView, ".*", True)
|
||||
test.verify(tutorial is None,
|
||||
"Verifying: 'Tutorials' topic is opened and nothing is shown.")
|
||||
bnr = "Building and Running an Example"
|
||||
bnr = "Build and run"
|
||||
replaceEditorContent(searchTutorials, bnr.lower())
|
||||
listView = __waitForListView__()
|
||||
waitFor('findExampleOrTutorial(listView, "%s.*") is not None' % bnr, 3000)
|
||||
@@ -50,8 +50,8 @@ def main():
|
||||
sendEvent("QCloseEvent", waitForObject(":Help Widget_Help::Internal::HelpWidget"))
|
||||
# check a demonstration video link
|
||||
mouseClick(searchTutorials)
|
||||
replaceEditorContent(searchTutorials, "embedded device")
|
||||
embeddedTutorial = "How to install and set up Qt for Device Creation.*"
|
||||
replaceEditorContent(searchTutorials, "device")
|
||||
embeddedTutorial = "^Qt Creator for Bare Metal Development"
|
||||
listView = __waitForListView__()
|
||||
waitFor('findExampleOrTutorial(listView, embeddedTutorial) is not None', 3000)
|
||||
tutorial = findExampleOrTutorial(listView, embeddedTutorial, True)
|
||||
|