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
This commit is contained in:
Eike Ziller
2024-09-25 09:50:57 +02:00
57 changed files with 342 additions and 281 deletions

121
dist/changelog/changes-14.0.2.md vendored Normal file
View 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

View File

@@ -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}
*/
/*!

View File

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

View File

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

View File

@@ -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}
*/

View File

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

View File

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

View File

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

View File

@@ -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}
*/

View File

@@ -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}
*/

View File

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

View File

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

View File

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

View File

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

View File

@@ -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}
*/
/*!

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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