diff --git a/dist/changelog/changes-14.0.2.md b/dist/changelog/changes-14.0.2.md new file mode 100644 index 00000000000..4e9deb4e273 --- /dev/null +++ b/dist/changelog/changes-14.0.2.md @@ -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: + + + +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 diff --git a/doc/qtcreator/src/android/androiddev.qdoc b/doc/qtcreator/src/android/androiddev.qdoc index e2b064d5b50..cc6c7d23b11 100644 --- a/doc/qtcreator/src/android/androiddev.qdoc +++ b/doc/qtcreator/src/android/androiddev.qdoc @@ -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} */ /*! diff --git a/doc/qtcreator/src/conan/creator-projects-conan.qdoc b/doc/qtcreator/src/conan/creator-projects-conan.qdoc index 67cdd9141ae..4ebd14aa9fb 100644 --- a/doc/qtcreator/src/conan/creator-projects-conan.qdoc +++ b/doc/qtcreator/src/conan/creator-projects-conan.qdoc @@ -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. diff --git a/doc/qtcreator/src/howto/creator-help.qdoc b/doc/qtcreator/src/howto/creator-help.qdoc index 530937337cc..06f669472f0 100644 --- a/doc/qtcreator/src/howto/creator-help.qdoc +++ b/doc/qtcreator/src/howto/creator-help.qdoc @@ -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 */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc index a0f0bb9adb8..fe844c7e952 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc @@ -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} */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc index d31fe7a97bd..b8e05b7ca2c 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc @@ -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 diff --git a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc index a67a8fb7657..63a428febe1 100644 --- a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc +++ b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc @@ -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 > diff --git a/doc/qtcreator/src/ios/creator-ios-dev.qdoc b/doc/qtcreator/src/ios/creator-ios-dev.qdoc index b6c8d53cde9..e465b035617 100644 --- a/doc/qtcreator/src/ios/creator-ios-dev.qdoc +++ b/doc/qtcreator/src/ios/creator-ios-dev.qdoc @@ -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 diff --git a/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc b/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc index fa7b1ddc554..085be899eb3 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc @@ -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} */ diff --git a/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc b/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc index 8c54ecbe91c..b9548b24e60 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc @@ -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} */ diff --git a/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc b/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc index 9ab035a23e1..19717732963 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc @@ -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. diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc index 206e028e348..a0ca1155568 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc @@ -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 diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc index e068ec86d4f..991b8fbff84 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc @@ -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 diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc index 48958f8846e..a535c12b304 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc @@ -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 diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc index 88dfd89f599..2904c073d21 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc @@ -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} */ /*! diff --git a/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc b/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc index d0c4e64970e..f8d87dda1b1 100644 --- a/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc +++ b/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc @@ -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. diff --git a/doc/qtcreator/src/reference/creator-sdk-tool.qdoc b/doc/qtcreator/src/reference/creator-sdk-tool.qdoc index 27f22f1bbce..547cc1b304d 100644 --- a/doc/qtcreator/src/reference/creator-sdk-tool.qdoc +++ b/doc/qtcreator/src/reference/creator-sdk-tool.qdoc @@ -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 diff --git a/doc/qtcreator/src/webassembly/creator-webassembly.qdoc b/doc/qtcreator/src/webassembly/creator-webassembly.qdoc index ab757d7add0..37526abe87d 100644 --- a/doc/qtcreator/src/webassembly/creator-webassembly.qdoc +++ b/doc/qtcreator/src/webassembly/creator-webassembly.qdoc @@ -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 diff --git a/scripts/build.py b/scripts/build.py index 094cc9d6c4b..037ac37a545 100755 --- a/scripts/build.py +++ b/scripts/build.py @@ -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', diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index a5e47469fd4..d50fcdcedb2 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -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()) diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h b/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h index ad903315604..978b41f70a9 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectconstants.h @@ -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"; diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 3f1b3007138..2367a8cb15e 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1895,6 +1895,8 @@ void EditorManagerPrivate::addEditorArea(EditorArea *area) &EditorArea::hidden, d, [area = QPointer(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) { diff --git a/src/plugins/cppeditor/builtincursorinfo.cpp b/src/plugins/cppeditor/builtincursorinfo.cpp index 2b2acf82f1c..bc5ad3f0586 100644 --- a/src/plugins/cppeditor/builtincursorinfo.cpp +++ b/src/plugins/cppeditor/builtincursorinfo.cpp @@ -29,22 +29,22 @@ namespace { static bool isOwnershipRAIIName(const QString &name) { - static QSet knownNames; - if (knownNames.isEmpty()) { + static const QSet 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); diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 840f78dfc93..6fa342d252f 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -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()); }}); } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 92667c9c388..6f9809e6826 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -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 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); diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 90778f26427..936b9ebd76d 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -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); } diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 06864358df5..d3d84551413 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -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 &settings) { if (dd->m_customParsers != settings) { diff --git a/src/plugins/python/pythonsettings.cpp b/src/plugins/python/pythonsettings.cpp index 9e0fd837d9c..6c8fff0e615 100644 --- a/src/plugins/python/pythonsettings.cpp +++ b/src/plugins/python/pythonsettings.cpp @@ -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 &interpreters, cons QList 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(); diff --git a/src/plugins/python/pythonsettings.h b/src/plugins/python/pythonsettings.h index ab5d092a5ff..6419335a32f 100644 --- a/src/plugins/python/pythonsettings.h +++ b/src/plugins/python/pythonsettings.h @@ -43,7 +43,7 @@ public: const Utils::FilePath &directory, const std::function &callback = {}); static QList 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: diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index e43681ab901..971a5115a4c 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -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 diff --git a/src/plugins/qtsupport/images/icons/gs-qtc-14.png b/src/plugins/qtsupport/images/icons/gs-qtc-14.png new file mode 100644 index 00000000000..ee19937e82e Binary files /dev/null and b/src/plugins/qtsupport/images/icons/gs-qtc-14.png differ diff --git a/src/plugins/qtsupport/images/icons/youtube-xhiVA0P4yk.webp b/src/plugins/qtsupport/images/icons/youtube-xhiVA0P4yk.webp deleted file mode 100644 index cd9bcf48a97..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtube-xhiVA0P4yk.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtube1tSpq5OLkYI.webp b/src/plugins/qtsupport/images/icons/youtube1tSpq5OLkYI.webp deleted file mode 100644 index 8d9aa54d4fa..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtube1tSpq5OLkYI.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtube2RvhhEAZQxM.webp b/src/plugins/qtsupport/images/icons/youtube2RvhhEAZQxM.webp deleted file mode 100644 index 3f595e8d335..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtube2RvhhEAZQxM.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtube9BcAYDlpuT8.webp b/src/plugins/qtsupport/images/icons/youtube9BcAYDlpuT8.webp deleted file mode 100644 index f0ec6e5bb46..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtube9BcAYDlpuT8.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeBkgjJfxYN20.webp b/src/plugins/qtsupport/images/icons/youtubeBkgjJfxYN20.webp deleted file mode 100644 index f1d5598844a..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeBkgjJfxYN20.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeDRFz0Tll4G8.webp b/src/plugins/qtsupport/images/icons/youtubeDRFz0Tll4G8.webp deleted file mode 100644 index 382c89979aa..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeDRFz0Tll4G8.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeEhJ1eV_6RH8.webp b/src/plugins/qtsupport/images/icons/youtubeEhJ1eV_6RH8.webp deleted file mode 100644 index 69559d8822d..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeEhJ1eV_6RH8.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeFTSvDmcAgPI.webp b/src/plugins/qtsupport/images/icons/youtubeFTSvDmcAgPI.webp deleted file mode 100644 index d2412e1e489..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeFTSvDmcAgPI.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeLnVjI0I7cKs.webp b/src/plugins/qtsupport/images/icons/youtubeLnVjI0I7cKs.webp deleted file mode 100644 index 76368aea5cf..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeLnVjI0I7cKs.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeR6zWLfHIYJw.webp b/src/plugins/qtsupport/images/icons/youtubeR6zWLfHIYJw.webp deleted file mode 100644 index ed06e95b649..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeR6zWLfHIYJw.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeY-MM-9FigTc.webp b/src/plugins/qtsupport/images/icons/youtubeY-MM-9FigTc.webp deleted file mode 100644 index d6117927c1f..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeY-MM-9FigTc.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeYJfFwDBOvqk.webp b/src/plugins/qtsupport/images/icons/youtubeYJfFwDBOvqk.webp deleted file mode 100644 index 4c387525b07..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeYJfFwDBOvqk.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubehOx3dod5-1A.webp b/src/plugins/qtsupport/images/icons/youtubehOx3dod5-1A.webp deleted file mode 100644 index f42ad7f2388..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubehOx3dod5-1A.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubejbx3Oq1Q4gY.webp b/src/plugins/qtsupport/images/icons/youtubejbx3Oq1Q4gY.webp deleted file mode 100644 index 893553ffb7b..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubejbx3Oq1Q4gY.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubemn-JmXIMCqk.webp b/src/plugins/qtsupport/images/icons/youtubemn-JmXIMCqk.webp deleted file mode 100644 index 42d41e63347..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubemn-JmXIMCqk.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubeuuhmSZxK1mk.webp b/src/plugins/qtsupport/images/icons/youtubeuuhmSZxK1mk.webp deleted file mode 100644 index 086bfeee8c2..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubeuuhmSZxK1mk.webp and /dev/null differ diff --git a/src/plugins/qtsupport/images/icons/youtubezAqSiIGdj8M.webp b/src/plugins/qtsupport/images/icons/youtubezAqSiIGdj8M.webp deleted file mode 100644 index a08e25daca9..00000000000 Binary files a/src/plugins/qtsupport/images/icons/youtubezAqSiIGdj8M.webp and /dev/null differ diff --git a/src/plugins/qtsupport/qtcreator_tutorials.xml b/src/plugins/qtsupport/qtcreator_tutorials.xml index b17b0def6a0..08350da20c1 100644 --- a/src/plugins/qtsupport/qtcreator_tutorials.xml +++ b/src/plugins/qtsupport/qtcreator_tutorials.xml @@ -7,14 +7,14 @@ Talk - + qt creator,build,compile,help Help - + qt creator,qt widgets designer,widgets,c++,text,help @@ -28,20 +28,55 @@ Help - + qt creator,qt quick,qml,states,transitions,help Help - + qt creator,qml,android,ios,controls,help Help + + + qt creator,qt quick,python,help + + Help + + + + + qt creator,widgets,python,help + + Help + + + + + qt creator,qt widgets designer,widgets,python,help + + Help + + + + + qt creator,c++,debugging,help + + Help + + + + + qt creator,qt quick,debugging,help + + Help + + qt quick,controls,tumbler,help @@ -50,42 +85,14 @@ - - - qt creator,learning,ui,welcome,2023 - - Learning - - - - - qt creator,learning,projects,qt widgets,2023 - - Learning - - - - - qt creator,learning,qt widgets designer,coding,2023 - - Learning - - - - - qt creator,learning,debugging,2023 + + + qt creator,ui,welcome,qt widgets designer,widgets,editing,debugging,learning,2024 Learning - - - qt creator,embedded,device creation,video,2021 - - Online - - qt creator,SCXML,video @@ -93,41 +100,6 @@ Online - - - qt creator,qt quick,c++,video - - Online - - - - - qt creator,video - - Online - - - - - qt creator,video,2018 - - Online - - - - - qt creator,qt quick,controls,video,2018 - - Online - - - - - qt creator,debugging,video,2021 - - Online - - qt creator,qt linguist,translation,video,2021 @@ -135,55 +107,6 @@ Online - - - qt,installation,online installer,modules,video,2021 - - Online - - - - - embedded,installation,device creation,video,2021 - - Online - - - - - qt creator,widgets,video,2021 - - Online - - - - - qt quick,widgets,ui,video,2021 - - Online - - - - - qt,mcus,video,STM32H750B-DISCOVERY,2021 - - Online - - - - - qtformcus,mcus,qt,video,NXP IMXRT1050-EVKB,2020 - - Online - - - - - qtformcus,mcus,qt,video,2021 - - Online - - diff --git a/src/plugins/qtsupport/qtsupport.qrc b/src/plugins/qtsupport/qtsupport.qrc index 1fe96a6ed22..4dda636c7c6 100644 --- a/src/plugins/qtsupport/qtsupport.qrc +++ b/src/plugins/qtsupport/qtsupport.qrc @@ -9,46 +9,30 @@ images/icons/playoverlay@2x.png images/icons/tutorialicon.png images/icons/tutorialicon@2x.png - images/icons/youtube-xhiVA0P4yk.webp - images/icons/youtube1tSpq5OLkYI.webp images/icons/youtube1w0ak9RNNWY.webp - images/icons/youtube2RvhhEAZQxM.webp images/icons/youtube3o2Wo4YzlII.webp - images/icons/youtube9BcAYDlpuT8.webp images/icons/youtube9xqhq9nDiOg.webp images/icons/youtubeB0X5FOev9Lw.webp - images/icons/youtubeBkgjJfxYN20.webp images/icons/youtubeDP0lMoLVneY.webp - images/icons/youtubeDRFz0Tll4G8.webp images/icons/youtubeECA8_oLT0ZE.webp images/icons/youtubeG0AbgVHGdXI.webp images/icons/youtubeKo3DuCgFamo.webp images/icons/youtubePzV2MYRAUYQ.webp - images/icons/youtubeR6zWLfHIYJw.webp images/icons/youtubeT_13aX5NTPk.webp images/icons/youtubeTiJiF0MOOFc.webp images/icons/youtubeW3WC-VpKdGQ.webp images/icons/youtubeWIRRoPxIerc.webp images/icons/youtubeX0kEkB0ewyw.webp - images/icons/youtubeY-MM-9FigTc.webp - images/icons/youtubeYJfFwDBOvqk.webp images/icons/youtubeau3brB7lNms.webp images/icons/youtubehrKz63Q_Rf0.webp - images/icons/youtubejbx3Oq1Q4gY.webp - images/icons/youtubemn-JmXIMCqk.webp images/icons/youtubenmvurCcsWos.webp images/icons/youtubepN0pRBUqrrc.webp images/icons/youtubeqclquZ99ZVQ.webp images/icons/youtubesRihJdZFuCg.webp images/icons/youtubetnZo9umrPtg.webp - images/icons/youtubeuuhmSZxK1mk.webp images/icons/youtubev4glCQt2jE0.webp images/icons/youtubev_ynSET9FHU.webp images/icons/youtubexNIz78IPBu0.webp - images/icons/youtubezAqSiIGdj8M.webp - images/icons/youtubeEhJ1eV_6RH8.webp - images/icons/youtubehOx3dod5-1A.webp - images/icons/youtubeLnVjI0I7cKs.webp - images/icons/youtubeFTSvDmcAgPI.webp + images/icons/gs-qtc-14.png diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 415fa3046ca..1cab9f82924 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -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; } diff --git a/src/share/3rdparty/package-manager/auto-setup.cmake b/src/share/3rdparty/package-manager/auto-setup.cmake index 129c69fe4d3..efaaa9917aa 100644 --- a/src/share/3rdparty/package-manager/auto-setup.cmake +++ b/src/share/3rdparty/package-manager/auto-setup.cmake @@ -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. " diff --git a/src/shared/qbs b/src/shared/qbs index 130b3c2a8f1..b5ff1d0e96d 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 130b3c2a8f17c1ed18061d645e908a623f1e73b6 +Subproject commit b5ff1d0e96d7cab0d64f1467453304334d545274 diff --git a/tests/system/objects.map b/tests/system/objects.map index 387c8c76454..461b867b905 100644 --- a/tests/system/objects.map +++ b/tests/system/objects.map @@ -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'} diff --git a/tests/system/shared/build_utils.py b/tests/system/shared/build_utils.py index a47416ca333..fb28c8d8569 100644 --- a/tests/system/shared/build_utils.py +++ b/tests/system/shared/build_utils.py @@ -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) diff --git a/tests/system/suite_WELP/tst_WELP01/test.py b/tests/system/suite_WELP/tst_WELP01/test.py index 89ee6dbd1e3..1cad3151d85 100644 --- a/tests/system/suite_WELP/tst_WELP01/test.py +++ b/tests/system/suite_WELP/tst_WELP01/test.py @@ -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") diff --git a/tests/system/suite_WELP/tst_WELP04/test.py b/tests/system/suite_WELP/tst_WELP04/test.py index 21b4b515bbf..632a803e7e5 100644 --- a/tests/system/suite_WELP/tst_WELP04/test.py +++ b/tests/system/suite_WELP/tst_WELP04/test.py @@ -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)