diff --git a/dist/changelog/changes-13.0.1.md b/dist/changelog/changes-13.0.1.md
new file mode 100644
index 00000000000..d13fa8475ef
--- /dev/null
+++ b/dist/changelog/changes-13.0.1.md
@@ -0,0 +1,131 @@
+Qt Creator 13.0.1
+=================
+
+Qt Creator version 13.0.1 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:
+
+ git clone git://code.qt.io/qt-creator/qt-creator.git
+ git log --cherry-pick --pretty=oneline origin/v13.0.0..v13.0.1
+
+General
+-------
+
+* Fixed a crash when hiding tool tips
+ ([QTCREATORBUG-30738](https://bugreports.qt.io/browse/QTCREATORBUG-30738))
+
+Help
+----
+
+* Examples Browser
+ * Fixed that two columns were shown for the wrong category
+ ([QTCREATORBUG-30634](https://bugreports.qt.io/browse/QTCREATORBUG-30634))
+ * Fixed that the clear button was missing after typing in the filter input
+
+* Fixed links to QML properties
+ ([QTCREATORBUG-30625](https://bugreports.qt.io/browse/QTCREATORBUG-30625))
+
+Editing
+-------
+
+* Fixed that backspace could delete more than one whitespace in the middle of a line
+ ([QTCREATORBUG-30725](https://bugreports.qt.io/browse/QTCREATORBUG-30725))
+
+### C++
+
+* Fixed that completion was shown for number literals
+ ([QTCREATORBUG-30607](https://bugreports.qt.io/browse/QTCREATORBUG-30607))
+* Fixed that Flex and Bison files were opened in the C++ editor
+ ([QTCREATORBUG-30686](https://bugreports.qt.io/browse/QTCREATORBUG-30686))
+
+### QML
+
+* Fixed a crash when creating a `Qt Quick Application` when the QML language server is enabled
+ ([QTCREATORBUG-30739](https://bugreports.qt.io/browse/QTCREATORBUG-30739))
+
+### Models
+
+* Fixed a crash when selecting elements
+ ([QTCREATORBUG-30413](https://bugreports.qt.io/browse/QTCREATORBUG-30413))
+
+Projects
+--------
+
+* Fixed that the text editor for environment changes showed a blinking cursor even when not focused
+ ([QTCREATORBUG-30640](https://bugreports.qt.io/browse/QTCREATORBUG-30640))
+* Fixed that the option `Start build processes with low priority` did not persist
+ ([QTCREATORBUG-30696](https://bugreports.qt.io/browse/QTCREATORBUG-30696))
+
+### CMake
+
+* Fixed that `Add build library search path to PATH` missed paths to libraries that were built by
+ the project
+ ([QTCREATORBUG-30644](https://bugreports.qt.io/browse/QTCREATORBUG-30644))
+* Fixed the handling of `source_group`
+ ([QTCREATORBUG-30602](https://bugreports.qt.io/browse/QTCREATORBUG-30602),
+ [QTCREATORBUG-30620](https://bugreports.qt.io/browse/QTCREATORBUG-30620))
+* Fixed that renaming files did not adapt `set_source_file_properties` calls
+ ([QTCREATORBUG-30174](https://bugreports.qt.io/browse/QTCREATORBUG-30174))
+* Fixed a crash when combining presets
+ ([QTCREATORBUG-30755](https://bugreports.qt.io/browse/QTCREATORBUG-30755))
+
+Debugging
+---------
+
+* Fixed a crash when enabling QML debugging
+ ([QTCREATORBUG-30706](https://bugreports.qt.io/browse/QTCREATORBUG-30706))
+* LLDB
+ * Fixed that `Additional Attach Commands` were not used
+
+Analyzer
+--------
+
+### Clang
+
+* Fixed the documentation link for `clang-tidy` checks
+ ([QTCREATORBUG-30658](https://bugreports.qt.io/browse/QTCREATORBUG-30658))
+
+Terminal
+--------
+
+* Fixed the `TERM` environment variable, which broke the functioning of certain command line tools
+ ([QTCREATORBUG-30737](https://bugreports.qt.io/browse/QTCREATORBUG-30737))
+
+Platforms
+---------
+
+### Android
+
+* Updated the command line tools that are installed with `Set Up SDK`
+* Fixed that Qt ABI detection was wrong directly after `Set Up SDK`
+ ([QTCREATORBUG-30568](https://bugreports.qt.io/browse/QTCREATORBUG-30568))
+
+### iOS
+
+* Fixed a crash when starting multiple applications in Simulators
+ ([QTCREATORBUG-30666](https://bugreports.qt.io/browse/QTCREATORBUG-30666))
+
+### Remote Linux
+
+* Fixed that deployment could block Qt Creator until finished
+* Fixed that it was not possible to change the device name
+ ([QTCREATORBUG-30622](https://bugreports.qt.io/browse/QTCREATORBUG-30622))
+
+Credits for these changes go to:
+--------------------------------
+Ahmad Samir
+Alessandro Portale
+BogDan Vatra
+Christian Kandeler
+Christian Stenger
+Cristian Adam
+David Faure
+David Schulz
+Eike Ziller
+Jaroslaw Kobus
+Jussi Witick
+Leena Miettinen
+Marcus Tillmanns
+Robert Löhning
diff --git a/doc/qtcreator/config/style/qt5-sidebar.html b/doc/qtcreator/config/style/qt5-sidebar.html
index 327bd27a293..cf020e31ca0 100644
--- a/doc/qtcreator/config/style/qt5-sidebar.html
+++ b/doc/qtcreator/config/style/qt5-sidebar.html
@@ -51,6 +51,7 @@
Create Models and Diagrams
Debug
Design UIs
+ Develop for Devices
Edit Code
Manage Kits
Manage Projects
diff --git a/doc/qtcreator/images/qtcreator-mcu-kit.png b/doc/qtcreator/images/qtcreator-mcu-kit.png
deleted file mode 100644
index c218ad647e8..00000000000
Binary files a/doc/qtcreator/images/qtcreator-mcu-kit.png and /dev/null differ
diff --git a/doc/qtcreator/images/qtcreator-mcu-new-project.webp b/doc/qtcreator/images/qtcreator-mcu-new-project.webp
new file mode 100644
index 00000000000..270907c08b6
Binary files /dev/null and b/doc/qtcreator/images/qtcreator-mcu-new-project.webp differ
diff --git a/doc/qtcreator/images/qtcreator-mcu-options.png b/doc/qtcreator/images/qtcreator-mcu-options.png
deleted file mode 100644
index a7234466e42..00000000000
Binary files a/doc/qtcreator/images/qtcreator-mcu-options.png and /dev/null differ
diff --git a/doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp b/doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp
new file mode 100644
index 00000000000..cf61f131ecc
Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp differ
diff --git a/doc/qtcreator/images/qtcreator-preferences-mcu.webp b/doc/qtcreator/images/qtcreator-preferences-mcu.webp
new file mode 100644
index 00000000000..83d6fd17e01
Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-mcu.webp differ
diff --git a/doc/qtcreator/src/external-resources/external-resources.qdoc b/doc/qtcreator/src/external-resources/external-resources.qdoc
index 5c2f4f22850..6c385180192 100644
--- a/doc/qtcreator/src/external-resources/external-resources.qdoc
+++ b/doc/qtcreator/src/external-resources/external-resources.qdoc
@@ -25,6 +25,10 @@
\externalpage https://doc.qt.io/QtForMCUs/qtul-supported-platforms.html
\title \QMCU - Supported Target Platforms
*/
+/*!
+ \externalpage https://doc.qt.io/QtForMCUs/qtul-prerequisites.html
+ \title \QMCU - Prerequisites
+*/
/*!
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-renesas.html
\title Getting Started on Renesas
@@ -37,6 +41,10 @@
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp.html
\title Getting Started on NXP
*/
+/*!
+ \externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-infineon.html
+ \title Getting Started on Infineon
+*/
/*!
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-windows.html
\title Getting Started on Windows
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 395c09ad72e..307c436d224 100644
--- a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc
+++ b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc
@@ -80,6 +80,21 @@
\generatelist creator-how-to-design
+ \section1 Develop for Devices
+
+ Install the toolchain for building applications for the targeted
+ embedded or mobile platform on the computer, and use \QOI to
+ install Qt libraries that are built for the platform. Then add a
+ kit with the toolchain and the Qt version for the device's architecture.
+ When possible, \QOI creates suitable kits for you.
+
+ \section2 MCUs
+
+ Install \l {Qt for MCUs} and connect devices to the computer to run and
+ debug applications on them.
+
+ \generatelist creator-how-to-mcu
+
\section1 Edit Code
The code editor offers useful features for editing C++ and QML code, such
diff --git a/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc b/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc
index 1b4051121f7..a6ca31f33fe 100644
--- a/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc
+++ b/doc/qtcreator/src/linux-mobile/creator-embedded-platforms.qdoc
@@ -85,7 +85,7 @@
\list
\li \l{Connecting MCUs}
- \li \l{Running Applications on MCUs}
+ \li \l{MCUs}{How To: Develop for MCUs}
\li \l{https://doc.qt.io/QtForMCUs/index.html}{\QMCU}
\endlist
@@ -107,5 +107,5 @@
\li \l{Qt for QNX}
\endlist
- \sa {Supported Platforms}
+ \sa {Develop for Devices}{How To: Develop for Devices}, {Supported Platforms}
*/
diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc
index 65fba314e28..5d5dc8b956c 100644
--- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc
+++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc
@@ -1,31 +1,29 @@
-// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
- \previouspage creator-developing-ios.html
\page creator-developing-mcu.html
- \nextpage creator-developing-qnx.html
+ \previouspage creator-reference.html
- \title Connecting MCUs
+ \ingroup creator-reference-devices
- \QMCU enables you to use subsets of QML and Qt Quick Controls
- to create user interfaces for devices that are powered by microcontroller
- units (MCU). It includes a new graphics rendering engine that has a low
- memory footprint and is optimized for MCUs and other resource-constrained
- devices.
+ \title Developing for MCUs
- You can connect MCU boards to a development host to build applications for
- them using the GNU Arm Embedded GCC compiler, libraries, and other GNU tools
- necessary for bare metal software development on devices based on the Arm
- Cortex-M processors. You can deploy the applications on MCUs to run and
- debug them using \QC.
+ \brief Connect MCU devices to the computer to run and debug applications on
+ them.
- The toolchains are available for cross-compilation on Microsoft Windows,
- Linux, and macOS. However, the Qt for \QMCU SDK is currently only available
- for Windows and Linux.
+ \note Enable the McuSupport plugin to develop for MCUs.
- For a list of \QMCU reference implementations, see the
- \l{\QMCU - Supported Target Platforms}{\QMCU} documentation.
+ Use subsets of QML and Qt Quick Controls to create user interfaces for
+ devices that are powered by microcontroller units (MCU). \QMCU has a
+ new graphics rendering engine with a low memory footprint and optimization
+ for MCUs and other resource-constrained devices.
+
+ Connect MCU boards to a computer to build applications for them. Deploy the
+ applications on MCUs to run and debug them.
+
+ For a list of \QMCU reference implementations, see
+ \l{\QMCU - Supported Target Platforms}.
\section1 Requirements
@@ -33,157 +31,46 @@
\list
\li \QMCU SDK (only available for Windows and Linux)
- \li \l{https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm}
- {GNU ARM Embedded Toolchain}
+ \li \l {\QMCU - Prerequisites}{Suitable toolchain}
\endlist
+ The toolchains are available for cross-compilation on Microsoft Windows,
+ Linux, and macOS. However, the Qt for \QMCU SDK is currently only available
+ for Windows and Linux.
+
The hardware-specific requirements vary depending on the hardware platform you are developing for.
For more information see:
\list
\li \l{Getting Started on NXP}
\li \l{Getting Started on STM}
\li \l{Getting Started on Renesas}
+ \li \l{Getting Started on Infineon}
\endlist
- \section1 Setting Up the Development Environment
+ \section1 \QMCU SDKs
- You must download and install the required software and create connections
- between \QC and MCUs. The following subsections guide you through the
- setup process.
-
- \section2 MCU Plugin
-
- To be able to develop applications for MCUs, you need the MCU plugin.
- This plugin is enabled automatically by \QOI when you
- install \QMCU.
-
- \section2 Specifying MCU Settings
-
- To configure a connection between \QC and your MCU board, select
- \preferences > \uicontrol Devices > \uicontrol MCU:
-
- \image qtcreator-mcu-options.png "MCU preferences"
-
- \list 1
- \li In the \uicontrol {\QMCU SDK} field, specify the path
- to the directory where you installed \QMCU SDK.
- \li In the \uicontrol {Targets supported by the \QMCU SDK}
- field, select your MCU board.
- \li In the \uicontrol Requirements section, ensure that the
- platform-specific requirements are met. This varies depending
- on the target chosen:
- \list
- \li For STM32 targets:
- \list
- \li The \uicontrol {GNU ARM Embedded Toolchain} or
- \uicontrol {IAR ARM Compiler} path.
- \li The \uicontrol {STM32CubeProgrammer} install path.
- \li The \uicontrol {MCU SDK} for the chosen target.
- \li The \uicontrol {FreeRTOS Sources} for the chosen target.
- \endlist
- \li For NXP targets:
- \list
- \li The \uicontrol {GNU ARM Embedded Toolchain} or
- \uicontrol {IAR ARM Compiler} path.
- \li The \uicontrol {MCUXpresso IDE} install path.
- \li The \uicontrol {MCU SDK} for the chosen target.
- \li The \uicontrol {FreeRTOS Sources} for the chosen target.
- \endlist
- \li For Renesas targets:
- \list
- \li The \uicontrol {Green Hills Compiler} path.
- \li The \uicontrol {Renesas Graphics Library} path.
- \endlist
- \endlist
- \li Select the
- \uicontrol {Automatically create kits for all available targets on start}
- option to create kits automatically the next time Qt Creator is
- started.
- \note You could also use \uicontrol {Create Kit} to manually
- create kits for the chosen target.
- \li Select \uicontrol Apply to save the settings.
- \endlist
-
- \note When updating to other versions of the \QMCU SDK, \QC will
- ask you if you want to replace the existing kits, or create new ones
- alongside. This can also be done manually, for each individual target,
- via \uicontrol {Update Kit} and \uicontrol {Create Kit}, respectively.
-
- \section2 Adding MCU Devices
-
- \note This optional step is not necessary if you have already
- set up the MCU SDK as outlined in \l{Specifying MCU Settings}.
-
- \QC automatically adds a default MCU device when you select
- \uicontrol Apply in the \uicontrol MCU tab after configuring the
- MCU tool chain.
-
- \image qtcreator-mcu-device.png "MCU devices"
-
- To add MCU devices, select \preferences > \uicontrol Devices > \uicontrol Add
- > \uicontrol {MCU Device} > \uicontrol {Start Wizard}:
-
- \list 1
- \li In the \uicontrol Name field, give the device a name.
- \li In the \uicontrol Type field, select the board type.
- \li Select \uicontrol Apply to add the device.
- \endlist
-
- \section2 Managing MCU Kits
-
- \QC automatically adds kits for all the available targets, if the
- \uicontrol {Automatically create kits for all available targets on start}
- option is enabled under the \uicontrol MCU settings tab. You can also
- create kits for individual targets manually, as outlined
- in \l{Specifying MCU Settings}.
-
- \image qtcreator-mcu-kit.png "MCU kits"
-
- You can edit and/or remove individual kits in \preferences > \uicontrol Kits.
-
- However, for adding new kits you should use the \uicontrol {Create Kit}
- button in the {\QMCU} settings tab. This method adds the paths to
- the kit's toolkits and SDKs, and keeps them synchronized when selecting
- \uicontrol Apply or \uicontrol OK.
-
- The \uicontrol {MCU dependencies} field displays paths to 3rd party
- software required for MCU development with the current kit.
-
- \section1 Running Applications on MCUs
-
- You can use a wizard to set up a project for developing an application that
- you can run on MCUs. The project uses a subset of QML and Qt Quick Controls
- that are supported by \QMCU. For more information about developing
- applications for MCUs, see the \QMCU documentation.
-
- To create an application and run it on a MCU board:
-
- \list 1
- \li Select \uicontrol File > \uicontrol {New Project} >
- \uicontrol {Application (\QMCU)} >
- \uicontrol {MCU Support Application} > \uicontrol Choose.
- \li Follow the instructions of the wizard to create the project.
- \li Select \uicontrol Projects > \uicontrol {Build & Run}, and then
- select the kit for building the application and running it on the
- MCU board specified in the kit.
- \li Select \uicontrol Run to specify run settings.
- Usually, you can use the default settings.
- \endlist
-
- \section1 Supported \QMCU SDKs
-
- \note The \QMCU SDK 2.3 requires \QC 9.0.0, or later.
-
- The following table lists the \QC versions you can use to develop
- applications with particular \QMCU SDK versions.
+ While you can use the latest \QC version to develop with any \QMCU SDK, the
+ following combinations have been tested to work well.
\table
\header
\li \QC version
\li \QMCU SDK version
\row
- \li 9.0.0 or later
- \li 2.0 or later
+ \li 12.0.2 or later
+ \li 2.7 or later
+ \row
+ \li 11.0.3
+ \li 2.6
+ \row
+ \li 10.0.2
+ \li 2.5
+ \row
+ \li 10.0.0
+ \li 2.4
+ \row
+ \li 9.0.0
+ \li 2.3
\row
\li 7.0.0 up to 8.0.2
\li 2.0 up to 2.2
@@ -203,4 +90,159 @@
\li 4.11.x
\li 1.0
\endtable
+
+ \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs}
+*/
+
+/*!
+ \page creator-how-to-create-mcu-kits.html
+ \previouspage creator-how-tos.html
+
+ \ingroup creator-how-to-mcu
+
+ \title Connect MCU devices
+
+ \note Enable the McuSupport plugin to develop for MCUs.
+
+ To configure a connection between \QC and your MCU board:
+
+ \list 1
+ \li Go to \preferences > \uicontrol Devices > \uicontrol MCU.
+ \li In \uicontrol {\QMCU SDK}, specify the path to the directory where
+ you installed \QMCU SDK.
+ \image qtcreator-preferences-mcu.webp {MCU preferences}
+ \li In \uicontrol {Targets supported by the \QMCU SDK}, select your MCU
+ board.
+ \li In \uicontrol Requirements, check that the platform-specific
+ requirements are met. This depends on the target:
+ \list
+ \li For STM32 targets:
+ \list
+ \li The \uicontrol {GNU ARM Embedded Toolchain} or
+ \uicontrol {IAR ARM Compiler} path.
+ \li The \uicontrol {STM32CubeProgrammer} install path.
+ \li The \uicontrol {Board SDK} for the chosen target.
+ \li The \uicontrol {FreeRTOS Sources} for the chosen target.
+ \endlist
+ \li For NXP targets:
+ \list
+ \li The \uicontrol {GNU ARM Embedded Toolchain} or
+ \uicontrol {IAR ARM Compiler} path.
+ \li The \uicontrol {MCUXpresso IDE} install path.
+ \li The \uicontrol {Board SDK} for the chosen target.
+ \li The \uicontrol {FreeRTOS Sources} for the chosen target.
+ \endlist
+ \li For Renesas targets:
+ \list
+ \li The \uicontrol {Green Hills Compiler} path.
+ \li The \uicontrol {Renesas Graphics Library} path.
+ \endlist
+ \li For Infineon targets:
+ \list
+ \li The \uicontrol {Green Hills Compiler for ARM} path.
+ \li The \uicontrol {Graphics Driver for Traveo II Cluster Series}
+ path.
+ \li The \uicontrol {Infineon Auto Flash Utility} path.
+ \endlist
+ \endlist
+ \li Select
+ \uicontrol {Automatically create kits for all available targets on start}
+ to create kits automatically the next time \QC starts.
+ \note Select \uicontrol {Create Kit} to manually create kits for the
+ target.
+ \li Select \uicontrol Apply to save the preferences.
+ \endlist
+
+ \section1 Add MCU devices
+
+ \QC automatically adds a default MCU device when you select
+ \uicontrol Apply in the \uicontrol MCU tab after configuring the
+ MCU tool chain.
+
+ \image qtcreator-mcu-device.png {MCU devices}
+
+ To add MCU devices, select \preferences > \uicontrol Devices > \uicontrol Add
+ > \uicontrol {MCU Device} > \uicontrol {Start Wizard}:
+
+ \list 1
+ \li In \uicontrol Name, give the device a name.
+ \li In \uicontrol Type, select the board type.
+ \li Select \uicontrol Apply to add the device.
+ \endlist
+
+ \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs},
+ {Developing for MCUs}
+*/
+
+
+/*!
+ \page creator-how-to-manage-mcu-kits.html
+ \previouspage creator-how-tos.html
+
+ \ingroup creator-how-to-mcu
+
+ \title Manage MCU Kits
+
+ \note Enable the McuSupport plugin to develop for MCUs.
+
+ \QC automatically adds kits for all the available MCU targets if you select
+ \uicontrol {Automatically create kits for all available targets on start}
+ in \preferences > \uicontrol Devices > \uicontrol MCU.
+
+ \image qtcreator-preferences-kits-mcu.webp {MCU kit}
+
+ \note When you update the \QMCU SDK, \QC asks you whether you want to replace
+ the existing kits or create additional kits. To do this manually for each
+ target, select \uicontrol {Update Kit} or \uicontrol {Create Kit}.
+
+ To add new kits, go to \preferences > \uicontrol Devices > \uicontrol MCU,
+ and select \uicontrol {Create Kit}. This adds the paths to the kit's toolkits
+ and SDKs, and keeps them synchronized when you select \uicontrol Apply or
+ \uicontrol OK.
+
+ \section1 Change or remove MCU kits
+
+ To change or remove individual kits, go to \preferences > \uicontrol Kits.
+
+ The \uicontrol {MCU dependencies} field displays paths to 3rd party
+ software required for MCU development with the current kit.
+
+ \sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs},
+ {Developing for MCUs}
+*/
+
+/*!
+ \page creator-how-to-run-on-mcu-devices.html
+ \previouspage creator-how-tos.html
+
+ \ingroup creator-how-to-mcu
+
+ \title Create MCU projects
+
+ \note Enable the McuSupport plugin to develop for MCUs.
+
+ Create a project for developing an application that you can run on MCUs.
+ The project imports a subset of QML and Qt Quick Controls types
+ that are supported by \QMCU. For more information about developing
+ applications for MCUs, see \l {Qt for MCUs}.
+
+ To create an application and run it on a MCU board:
+
+ \list 1
+ \li Go to \uicontrol File > \uicontrol {New Project}.
+ \image qtcreator-mcu-new-project.webp {New Project dialog}
+ \li Select \uicontrol {QmlProject Application (\QMCU)} >
+ \uicontrol {Qt for MCUs Empty Application} or
+ \uicontrol {Qt for MCUs Example Application} > \uicontrol Choose.
+ \li Follow the instructions of the wizard to create the project.
+ \li Select \uicontrol Projects > \uicontrol {Build & Run}, and then
+ select the kit for building the application and running it on the
+ MCU board specified in the kit.
+ \li Select \uicontrol Run to specify run settings.
+ Usually, you can use the default settings.
+ \endlist
+
+ \sa {Configure projects for running}, {Enable and disable plugins},
+ {MCUs}{How To: Develop for MCUs}, {Use project wizards},
+ {Developing for MCUs}
*/
diff --git a/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc b/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc
index fc33900659b..395a5ba4589 100644
--- a/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc
+++ b/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc
@@ -61,7 +61,7 @@
\QC detects the tools and configured devices automatically and uses
the tools to build, deploy, and run applications.
- \li \l{Connecting MCUs}
+ \li \l{Developing for MCUs}
You can connect MCU boards to a development host to deploy, run, and
debug applications on them from \QC.
diff --git a/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc b/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc
index 45432f561bd..86450b31b13 100644
--- a/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc
+++ b/doc/qtcreator/src/overview/creator-only/creator-reference.qdoc
@@ -36,6 +36,15 @@
\annotatedlist creator-reference-build-configurations
+ \section1 Devices
+
+ Connect devices to the computer to run, debug, and analyze applications
+ built for them from \QC. When you install Qt for a target platform, such
+ as Android or QNX, the build and run configurations for the development
+ targets might be set up automatically in \QC.
+
+ \annotatedlist creator-reference-devices
+
\section1 Editors
When you open files, \QC chooses a suitable editor according to the file
diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc
index 0a60027451d..4c6f0c4cb57 100644
--- a/doc/qtcreator/src/qtcreator-toc.qdoc
+++ b/doc/qtcreator/src/qtcreator-toc.qdoc
@@ -42,7 +42,6 @@
\li \l{Connecting Boot2Qt Devices}
\li \l{Adding Docker Devices}
\li \l{Connecting iOS Devices}
- \li \l{Connecting MCUs}
\li \l{Connecting QNX Devices}
\li \l{Connecting Remote Linux Devices}
\li \l{Building Applications for the Web}
@@ -109,6 +108,11 @@
\generatelist creator-how-to-debug
\li Design UIs
\generatelist creator-how-to-design
+ \li Develop for Devices
+ \list
+ \li MCUs
+ \generatelist creator-how-to-mcu
+ \endlist
\li Edit Code
\generatelist creator-how-to-edit
\list
@@ -148,6 +152,10 @@
\list
\li Build Configurations
\generatelist creator-reference-build-configurations
+ \endlist
+ \li Devices
+ \generatelist creator-reference-devices
+ \list
\li Run Configurations
\generatelist creator-reference-run-configurations
\endlist
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 7809a6a3dcb..f2387ac913c 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -1456,6 +1456,21 @@ class Dumper(DumperBase):
if bp is not None:
self.reportBreakpointUpdate(bp)
+ def wantAutoContinue(self, frame):
+ if self.platform_ != 'remote-android':
+ return False
+ funcname = frame.GetFunctionName()
+ if funcname and funcname.startswith('java.'):
+ return True
+ module = frame.GetModule()
+ filespec = module.GetPlatformFileSpec() # Not GetFileSpec
+ filename = filespec.GetFilename()
+ if filename == 'libart.so':
+ return True
+ if funcname == None and not frame.line_entry.file.IsValid() and filename == None:
+ return True
+ return False
+
def handleEvent(self, event):
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
self.handleBreakpointEvent(event)
@@ -1490,8 +1505,12 @@ class Dumper(DumperBase):
if state == lldb.eStateStopped:
stoppedThread = self.firstStoppedThread()
if stoppedThread:
- #self.report("STOPPED THREAD: %s" % stoppedThread)
frame = stoppedThread.GetFrameAtIndex(0)
+ if self.wantAutoContinue(frame):
+ #self.warn("AUTO CONTINUE")
+ error = self.process.Continue()
+ return
+
#self.report("FRAME: %s" % frame)
function = frame.GetFunction()
functionName = function.GetName()
diff --git a/share/qtcreator/themes/dark.figmatokens b/share/qtcreator/themes/dark.figmatokens
index 8937a3cc2d7..194ce7fab25 100644
--- a/share/qtcreator/themes/dark.figmatokens
+++ b/share/qtcreator/themes/dark.figmatokens
@@ -20,7 +20,13 @@ Token_Foreground_Subtle=ff2A2A2A
Token_Text_Default=ffF8F8F8
Token_Text_Muted=ffAEAEAE
Token_Text_Subtle=ff595959
-Token_Text_Accent=ff23B26A
+
+; Token_Text_Accent value from Figma is still too dark. Therefore, it is modified, here.
+; Text (consisting of thin lines) needs to be substantially brighter than accent colors used for
+; larger-area elements like the filled button.
+
+; Token_Text_Accent=ff23B26A
+Token_Text_Accent=ff30C06A
Token_Stroke_Strong=ffeeeeee
Token_Stroke_Muted=ff727272
diff --git a/share/qtcreator/themes/light.figmatokens b/share/qtcreator/themes/light.figmatokens
index 6ef243d17da..138ad74afdf 100644
--- a/share/qtcreator/themes/light.figmatokens
+++ b/share/qtcreator/themes/light.figmatokens
@@ -10,7 +10,12 @@ Token_Accent_Muted=ff1f9b5d
Token_Accent_Subtle=ff1a8550
Token_Background_Default=fffcfcfc
-Token_Background_Muted=ffF2F2F2
+
+; Token_Background_Muted value from Figma is too dark to ensure proper contrast when used as
+; text bachground. Therefore, it is modified, here.
+
+;Token_Background_Muted=ffF2F2F2
+Token_Background_Muted=ffF6F6F6
Token_Background_Subtle=ffe7e7e7
Token_Foreground_Default=ffD8D8D8
@@ -20,7 +25,7 @@ Token_Foreground_Subtle=ffEFEFEF
Token_Text_Default=ff393939
Token_Text_Muted=ff6a6a6a
Token_Text_Subtle=ffbebebe
-Token_Text_Accent=ff28C878
+Token_Text_Accent=ff1F9B5D
Token_Stroke_Strong=ff464646
Token_Stroke_Muted=ff727272
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index a2998e2f07d..b3649a457d1 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -197,7 +197,8 @@ FileSaver::FileSaver(const FilePath &filePath, QIODevice::OpenMode mode)
m_file.reset(tf);
} else {
const bool readOnlyOrAppend = mode & (QIODevice::ReadOnly | QIODevice::Append);
- m_isSafe = !readOnlyOrAppend && !filePath.hasHardLinks();
+ m_isSafe = !readOnlyOrAppend && !filePath.hasHardLinks()
+ && !qtcEnvironmentVariableIsSet("QTC_DISABLE_ATOMICSAVE");
if (m_isSafe)
m_file.reset(new SaveFile(filePath));
else
diff --git a/src/libs/utils/reloadpromptutils.cpp b/src/libs/utils/reloadpromptutils.cpp
index 52571382454..8a07592d3fe 100644
--- a/src/libs/utils/reloadpromptutils.cpp
+++ b/src/libs/utils/reloadpromptutils.cpp
@@ -89,12 +89,10 @@ QTCREATOR_UTILS_EXPORT FileDeletedPromptAnswer
"Do you want to save it under a different name, or close "
"the editor?").arg(QDir::toNativeSeparators(fileName));
QMessageBox box(QMessageBox::Question, title, msg, QMessageBox::NoButton, parent);
- QPushButton *close =
- box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole);
+ QPushButton *saveas = box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole);
+ QPushButton *close = box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole);
QPushButton *closeAll =
box.addButton(Tr::tr("C&lose All"), QMessageBox::RejectRole);
- QPushButton *saveas =
- box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole);
QPushButton *save =
box.addButton(Tr::tr("&Save"), QMessageBox::AcceptRole);
box.setDefaultButton(saveas);
diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp
index 69b5e395565..07f526a4af0 100644
--- a/src/libs/utils/stylehelper.cpp
+++ b/src/libs/utils/stylehelper.cpp
@@ -1010,7 +1010,13 @@ QFont StyleHelper::uiFont(UiElement element)
const qreal qrealPointSize = metrics.pixelSize * pixelsToPointSizeFactor;
font.setPointSizeF(qrealPointSize);
- font.setWeight(metrics.weight);
+ // Intermediate font weights can produce blurry rendering and are harder to read.
+ // For "non-retina" screens, apply the weight only for some fonts.
+ static const bool isHighDpi = qApp->devicePixelRatio() >= 2;
+ const bool setWeight = isHighDpi || element == UiElementCaptionStrong
+ || element <= UiElementH4;
+ if (setWeight)
+ font.setWeight(metrics.weight);
return font;
}
diff --git a/src/libs/utils/tooltip/tooltip.cpp b/src/libs/utils/tooltip/tooltip.cpp
index 93f4c1d2ff0..da11540c083 100644
--- a/src/libs/utils/tooltip/tooltip.cpp
+++ b/src/libs/utils/tooltip/tooltip.cpp
@@ -288,9 +288,11 @@ void ToolTip::hideTipWithDelay()
void ToolTip::hideTipImmediately()
{
if (m_tip) {
- m_tip->close();
- m_tip->deleteLater();
- m_tip = nullptr;
+ TipLabel *tip = m_tip.data();
+ m_tip.clear();
+
+ tip->close();
+ tip->deleteLater();
}
m_showTimer.stop();
m_hideDelayTimer.stop();
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index 24fa0875c47..2dbad6c162b 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -254,7 +254,7 @@ static expected_str testJavaC(const FilePath &jdkPath)
jdkVersion = QVersionNumber::fromString(stdOut.mid(outputPrefix.length()).split('\n').first());
- if (jdkVersion.isNull() || jdkVersion.majorVersion() != requiredJavaMajorVersion) {
+ if (jdkVersion.isNull() /* || jdkVersion.majorVersion() != requiredJavaMajorVersion */ ) {
return make_unexpected(Tr::tr("Unsupported JDK version (needs to be %1): %2 (parsed: %3)")
.arg(requiredJavaMajorVersion)
.arg(stdOut)
@@ -813,6 +813,7 @@ void AndroidSettingsWidget::updateUI()
}
}
+ m_makeDefaultNdkButton->setEnabled(m_ndkListWidget->count() > 0);
m_makeDefaultNdkButton->setText(isDefaultNdkSelected() ? Tr::tr("Unset Default")
: Tr::tr("Make Default"));
}
diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp
index 1d5dc2730c3..b491bd293f1 100644
--- a/src/plugins/clangformat/clangformatbaseindenter.cpp
+++ b/src/plugins/clangformat/clangformatbaseindenter.cpp
@@ -65,7 +65,11 @@ static void adjustFormatStyleForLineBreak(clang::format::FormatStyle &style,
static llvm::StringRef clearExtraNewline(llvm::StringRef text)
{
+#if LLVM_VERSION_MAJOR >= 16
+ while (text.starts_with("\n\n"))
+#else
while (text.startswith("\n\n"))
+#endif
text = text.drop_front();
return text;
}
diff --git a/src/plugins/clangformat/llvmfilesystem.h b/src/plugins/clangformat/llvmfilesystem.h
index fface01fc08..b2d1c5de7e7 100644
--- a/src/plugins/clangformat/llvmfilesystem.h
+++ b/src/plugins/clangformat/llvmfilesystem.h
@@ -127,7 +127,11 @@ public:
/// Gets real path of \p Path e.g. collapse all . and .. patterns, resolve
/// symlinks. For real file system, this uses `llvm::sys::fs::real_path`.
/// This returns errc::operation_not_permitted if not implemented by subclass.
- std::error_code getRealPath(const Twine &Path, SmallVectorImpl &Output) const override
+ std::error_code getRealPath(const Twine &Path, SmallVectorImpl &Output)
+#if LLVM_VERSION_MAJOR < 19
+ const
+#endif
+ override
{
Q_UNUSED(Path);
Q_UNUSED(Output);
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
index 25d51488f8b..b2b042a2b0d 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
@@ -1354,12 +1354,10 @@ void CMakeBuildSystem::updateProjectData()
return QtMajorVersion::None;
};
- QtMajorVersion qtVersion = kitInfo.projectPartQtVersion;
- if (qtVersion == QtMajorVersion::None)
- qtVersion = qtVersionFromCMake({{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}},
- {QtMajorVersion::Qt5, {"Qt5", "Qt5Core"}},
- {QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}}
- });
+ QtMajorVersion qtVersion = qtVersionFromCMake(
+ {{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}},
+ {QtMajorVersion::Qt5, {"Qt5", "Qt5Core"}},
+ {QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}}});
QString errorMessage;
RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage);
@@ -1368,7 +1366,7 @@ void CMakeBuildSystem::updateProjectData()
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
for (RawProjectPart &rpp : rpps) {
- rpp.setQtVersion(qtVersion); // TODO: Check if project actually uses Qt.
+ rpp.setQtVersion(qtVersion);
const FilePath includeFileBaseDir = buildConfiguration()->buildDirectory();
QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags;
QStringList cFlags = rpp.flagsForC.commandLineFlags;
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index 23c68a6e642..9e119bba886 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -136,6 +136,8 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP
&& left.inherits.value().contains(right.name);
const bool inheritsGreater = left.inherits && right.inherits
+ && !left.inherits.value().isEmpty()
+ && !right.inherits.value().isEmpty()
&& left.inherits.value().first()
> right.inherits.value().first();
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 6ec37a6cb8c..bd9b2620670 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1473,6 +1473,7 @@ bool EditorManagerPrivate::activateEditorForEntry(EditorView *view, DocumentMode
void EditorManagerPrivate::closeEditorOrDocument(IEditor *editor)
{
QTC_ASSERT(editor, return);
+ EditorManager::addCurrentPositionToNavigationHistory();
QList visible = EditorManager::visibleEditors();
if (Utils::contains(visible,
[&editor](IEditor *other) {
@@ -2690,7 +2691,6 @@ void EditorManager::slotCloseCurrentEditorOrDocument()
{
if (!d->m_currentEditor)
return;
- addCurrentPositionToNavigationHistory();
d->closeEditorOrDocument(d->m_currentEditor);
}
diff --git a/src/plugins/coreplugin/fileutils.cpp b/src/plugins/coreplugin/fileutils.cpp
index 5712c9c8b5b..f7c7d4a759c 100644
--- a/src/plugins/coreplugin/fileutils.cpp
+++ b/src/plugins/coreplugin/fileutils.cpp
@@ -32,10 +32,28 @@
#include
#include
+#ifdef Q_OS_WIN
+#ifdef QTCREATOR_PCH_H
+#define CALLBACK WINAPI
+#endif
+#include
+#include
+#endif
+
using namespace Utils;
namespace Core {
+static FilePath windowsDirectory()
+{
+#ifdef Q_OS_WIN
+ wchar_t str[UNICODE_STRING_MAX_CHARS] = {};
+ if (SUCCEEDED(SHGetFolderPath(nullptr, CSIDL_WINDOWS, nullptr, 0, str)))
+ return FilePath::fromUserInput(QString::fromUtf16(reinterpret_cast(str)));
+#endif
+ return {};
+}
+
// Show error with option to open settings.
static void showGraphicalShellError(QWidget *parent, const QString &app, const QString &error)
{
@@ -56,13 +74,7 @@ void FileUtils::showInGraphicalShell(QWidget *parent, const FilePath &pathIn)
const QFileInfo fileInfo = pathIn.toFileInfo();
// Mac, Windows support folder or file.
if (HostOsInfo::isWindowsHost()) {
- const FilePath explorer = FilePath("explorer.exe").searchInPath();
- if (explorer.isEmpty()) {
- QMessageBox::warning(parent,
- Tr::tr("Launching Windows Explorer Failed"),
- Tr::tr("Could not find explorer.exe in path to launch Windows Explorer."));
- return;
- }
+ const FilePath explorer = windowsDirectory().pathAppended("explorer.exe");
QStringList param;
if (!pathIn.isDir())
param += QLatin1String("/select,");
diff --git a/src/plugins/coreplugin/welcomepagehelper.cpp b/src/plugins/coreplugin/welcomepagehelper.cpp
index fe01944a6f2..c2b28c1f83e 100644
--- a/src/plugins/coreplugin/welcomepagehelper.cpp
+++ b/src/plugins/coreplugin/welcomepagehelper.cpp
@@ -287,7 +287,7 @@ static const QPixmap &searchBoxIcon()
}
SearchBox::SearchBox(QWidget *parent)
- : QLineEdit(parent)
+ : Utils::FancyLineEdit(parent)
{
setAttribute(Qt::WA_MacShowFocusRect, false);
setAutoFillBackground(false);
@@ -301,10 +301,9 @@ SearchBox::SearchBox(QWidget *parent)
pal.setColor(QPalette::Text, searchBoxTextTF.color());
setPalette(pal);
- const QSize iconSize = searchBoxIcon().deviceIndependentSize().toSize();
- setContentsMargins({HPaddingXs, ExPaddingGapM,
- HPaddingXs + iconSize.width() + HPaddingXs, ExPaddingGapM});
+ setContentsMargins({HPaddingXs, ExPaddingGapM, 0, ExPaddingGapM});
setFixedHeight(ExPaddingGapM + searchBoxTextTF.lineHeight() + ExPaddingGapM);
+ setFiltering(true);
}
QSize SearchBox::minimumSizeHint() const
@@ -351,10 +350,12 @@ void SearchBox::paintEvent(QPaintEvent *event)
QPainter p(this);
paintCommonBackground(&p, rect(), this);
- const QPixmap icon = searchBoxIcon();
- const QSize iconS = icon.deviceIndependentSize().toSize();
- const QPoint iconPos(width() - HPaddingXs - iconS.width(), (height() - iconS.height()) / 2);
- p.drawPixmap(iconPos, icon);
+ if (text().isEmpty()) {
+ const QPixmap icon = searchBoxIcon();
+ const QSize iconS = icon.deviceIndependentSize().toSize();
+ const QPoint iconPos(width() - HPaddingXs - iconS.width(), (height() - iconS.height()) / 2);
+ p.drawPixmap(iconPos, icon);
+ }
QLineEdit::paintEvent(event);
}
diff --git a/src/plugins/coreplugin/welcomepagehelper.h b/src/plugins/coreplugin/welcomepagehelper.h
index cce3b812527..c32e803029e 100644
--- a/src/plugins/coreplugin/welcomepagehelper.h
+++ b/src/plugins/coreplugin/welcomepagehelper.h
@@ -25,8 +25,6 @@
#include
#include
-namespace Utils { class FancyLineEdit; }
-
namespace Core {
namespace WelcomePageHelpers {
@@ -113,7 +111,7 @@ private:
const Role m_role = Primary;
};
-class CORE_EXPORT SearchBox : public QLineEdit
+class CORE_EXPORT SearchBox : public Utils::FancyLineEdit
{
public:
explicit SearchBox(QWidget *parent = nullptr);
diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp
index 0e53afad359..3d21f82ca2e 100644
--- a/src/plugins/debugger/lldb/lldbengine.cpp
+++ b/src/plugins/debugger/lldb/lldbengine.cpp
@@ -30,6 +30,7 @@
#include
+#include
#include
#include
#include
@@ -328,6 +329,16 @@ void LldbEngine::handleLldbStarted()
runEngine();
};
runCommand(cmd3);
+
+ // Execute post attach commands
+ QStringList commands = settings().gdbPostAttachCommands().split('\n');
+ commands = Utils::filtered(commands, [](const QString line) {
+ const QString trimmed = line.trimmed();
+ return !trimmed.isEmpty() && !trimmed.startsWith('#');
+ });
+ for (const QString &cmd : commands) {
+ executeDebuggerCommand(cmd);
+ }
} else {
notifyEngineSetupFailed();
}
diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp
index 0428fd6a844..3df7622548d 100644
--- a/src/plugins/languageclient/languageclientutils.cpp
+++ b/src/plugins/languageclient/languageclientutils.cpp
@@ -235,8 +235,8 @@ void updateEditorToolBar(Core::IEditor *editor)
TextDocument *document = textEditor->textDocument();
Client *client = LanguageClientManager::clientForDocument(textEditor->textDocument());
- ClientExtras *extras = widget->findChild(clientExtrasName,
- Qt::FindDirectChildrenOnly);
+ ClientExtras *extras = dynamic_cast(
+ widget->findChild(clientExtrasName, Qt::FindDirectChildrenOnly));
if (!extras) {
if (!client)
return;
diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp
index 29742256443..4928ae826e0 100644
--- a/src/plugins/projectexplorer/projectwelcomepage.cpp
+++ b/src/plugins/projectexplorer/projectwelcomepage.cpp
@@ -47,10 +47,9 @@ const char PROJECT_BASE_ID[] = "Welcome.OpenRecentProject";
namespace ProjectExplorer {
namespace Internal {
-constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH6};
-constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementCaptionStrong};
-constexpr TextFormat sessionNameTF = {projectNameTF.themeColor, projectNameTF.uiElement,
- Qt::AlignVCenter | Qt::TextDontClip};
+constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH5};
+constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementH6};
+constexpr TextFormat sessionNameTF = projectNameTF;
constexpr TextFormat sessionProjectNameTF {Theme::Token_Text_Default, projectNameTF.uiElement};
constexpr TextFormat shortcutNumberTF {Theme::Token_Text_Default,
StyleHelper::UiElementCaptionStrong,
@@ -59,7 +58,7 @@ constexpr TextFormat actionTF {Theme::Token_Text_Default, StyleHelper::UiElement
Qt::AlignCenter | Qt::TextDontClip};
constexpr TextFormat actionDisabledTF {Theme::Token_Text_Subtle, actionTF.uiElement,
actionTF.drawTextFlags};
-constexpr int shortcutNumberWidth = 16;
+constexpr int shortcutNumberWidth = 6;
constexpr int actionSepWidth = 1;
constexpr int sessionScrollBarGap = HPaddingXs;
@@ -316,36 +315,36 @@ public:
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &idx) const final
{
- // visible on withIcon() Gap + arrow visible on hover Extra margin right of project item
- // | | |
- // +-----------+----------+ +--------+-------+ +----------+----------+
- // | | | | | |
+ // visible on withIcon() Gap + arrow visible on hover Extra margin right of project item
+ // | | |
+ // +----------+----------+ +--------+-------+ +----------+----------+
+ // | | | | | |
//
- // +------------+--------+---------+------------+---------+-------------+--------+-------+------------+---------------------+ --+
- // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
- // | | | +------------+ +-------------+ | | | | |
- // |(HPaddingXs)||(HGapXxs)| |(HGapXxs)||(HGapXs)|| | | +-- Header
- // | |(16x16) | +------------+ +-------------+ | | | | |
- // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
- // |------------+--------+---------+------------+---------+-------------+--------+-------+ | | --+
- // | +-- | (VPaddingXxs) | | | |
- // | | +------------------------------+(HPaddingXs)| | |
- // | | | | | | |
- // | | +------------------------------+ | | |
- // | Per project in session --+ | (ExPaddingGapS) | |(sessionScrollBarGap)| |
- // | | +------------------------------+ | | |
- // | | | | | | |
- // | | +------------------------------+ | | +-- Expansion
- // | +-- | (VPaddingXxs) | | | |
- // +------------------------------------------------------+------------------------------+------------+ | |
- // | (VPaddingXs) | | |
- // +-----------------------------------------+--------------+-----------------------------------------+ | |
- // +-- | || | | |
- // | +-----------------------------------------+--------------+-----------------------------------------+ | |
- // | | (VPaddingXs) | | |
- // | +--------------------------------------------------------------------------------------------------+---------------------+ --+
- // | | (VGapL) | +-- Gap between session items
- // | +------------------------------------------------------------------------------------------------------------------------+ --+
+ // +------------+--------+--------+------------+--------+-------------+--------+-------+------------+---------------------+ --+
+ // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
+ // | | | +------------+ +-------------+ | | | | |
+ // |(HPaddingXs)||(HGapXs)| |(HGapXs)||(HGapXs)|| | | +-- Header
+ // | |(w:6) | +------------+ +-------------+ | | | | |
+ // | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
+ // |------------+--------+--------+------------+--------+-------------+--------+-------+ | | --+
+ // | +-- | (VPaddingXxs) | | | |
+ // | | +------------------------------+(HPaddingXs)| | |
+ // | | | | | | |
+ // | | +------------------------------+ | | |
+ // | Per project in session --+ | (ExPaddingGapS) | |(sessionScrollBarGap)| |
+ // | | +------------------------------+ | | |
+ // | | | | | | |
+ // | | +------------------------------+ | | +-- Expansion
+ // | +-- | (VPaddingXxs) | | | |
+ // +----------------------------------------------------+------------------------------+------------+ | |
+ // | (VPaddingXs) | | |
+ // +---------------------------------------+--------------+-----------------------------------------+ | |
+ // +-- | || | | |
+ // | +---------------------------------------+--------------+-----------------------------------------+ | |
+ // | | (VPaddingXs) | | |
+ // | +------------------------------------------------------------------------------------------------+---------------------+ --+
+ // | | (VGapL) | +-- Gap between session items
+ // | +----------------------------------------------------------------------------------------------------------------------+ --+
// |
// \ session action "buttons" and dividers
// +-----------------------------------------------+--------+---------+--------+
@@ -381,11 +380,11 @@ public:
const int y = bgR.y();
const int numberX = x + s(HPaddingXs);
- const int iconX = numberX + shortcutNumberWidth + s(HGapXxs);
+ const int iconX = numberX + shortcutNumberWidth + s(HGapXs);
const int arrowX = bgR.right() - s(HPaddingXs) - arrowS.width();
const QRect arrowHoverR(arrowX - s(HGapXs) + 1, y,
s(HGapXs) + arrowS.width() + s(HPaddingXs), hdR.height());
- const int textX = withIcon() ? iconX + iconS.width() + s(HGapXxs) : iconX;
+ const int textX = withIcon() ? iconX + iconS.width() + s(HGapXs) : iconX;
const int iconY = y + (hdR.height() - iconS.height()) / 2;
const int arrowY = y + (hdR.height() - arrowS.height()) / 2;
@@ -622,24 +621,24 @@ class ProjectDelegate : public BaseDelegate
public:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const final
{
- // visible on with Icon() Extra margin right of project item
- // | |
- // +--------+-------+ +------+-----+
- // | | | |
+ // visible on with Icon() Extra margin right of project item
+ // | |
+ // +--------+-------+ +------+-----+
+ // | | | |
//
- // +------------+--------+---------+------+---------+-------------+------------+------------+
- // | | | | | | (VPaddingXs)| | |
- // | | | | | +-------------+ | |
- // | | | | | || | |
- // | | | | | +-------------+ | |
- // |(HPaddingXs)||(HGapXxs)||(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)|
- // | |(16x16) | | | +-------------+ | |
- // | | | | | || | |
- // | | | | | +-------------+ | |
- // | | | | | | (VPaddingXs)| | |
- // +------------+--------+---------+------+---------+-------------+------------+------------+ --+
- // | (VGapL) | +-- Gap between project items
- // +----------------------------------------------------------------------------------------+ --+
+ // +------------+--------+--------+------+---------+-------------+------------+------------+
+ // | | | | | | (VPaddingXs)| | |
+ // | | | | | +-------------+ | |
+ // | | | | | || | |
+ // | | | | | +-------------+ | |
+ // |(HPaddingXs)||(HGapXs)||(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)|
+ // | |(w:6) | | | +-------------+ | |
+ // | | | | | || | |
+ // | | | | | +-------------+ | |
+ // | | | | | | (VPaddingXs)| | |
+ // +------------+--------+--------+------+---------+-------------+------------+------------+ --+
+ // | (VGapL) | +-- Gap between project items
+ // +---------------------------------------------------------------------------------------+ --+
const bool hovered = option.widget->isActiveWindow()
&& option.state & QStyle::State_MouseOver;
@@ -651,9 +650,9 @@ public:
const int x = bgR.x();
const int numberX = x + s(HPaddingXs);
- const int iconX = numberX + shortcutNumberWidth + s(HGapXxs);
+ const int iconX = numberX + shortcutNumberWidth + s(HGapXs);
const int iconWidth = iconS.width();
- const int textX = withIcon() ? iconX + iconWidth + s(HGapXxs) : iconX;
+ const int textX = withIcon() ? iconX + iconWidth + s(HGapXs) : iconX;
const int textWidth = bgR.width() - s(HPaddingXs) - textX;
const int y = bgR.y();
diff --git a/src/plugins/python/pythonsettings.cpp b/src/plugins/python/pythonsettings.cpp
index 8d30659f31b..cad296ae5de 100644
--- a/src/plugins/python/pythonsettings.cpp
+++ b/src/plugins/python/pythonsettings.cpp
@@ -404,7 +404,6 @@ static const QStringList &plugins()
"pydocstyle",
"pyflakes",
"pylint",
- "rope_completion",
"yapf"};
return plugins;
}
@@ -610,7 +609,6 @@ static QString defaultPylsConfiguration()
plugins.insert("pydocstyle", disabled);
plugins.insert("pyflakes", enabled);
plugins.insert("pylint", disabled);
- plugins.insert("rope_completion", enabled);
plugins.insert("yapf", enabled);
QJsonObject pylsp;
pylsp.insert("plugins", plugins);
diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp
index 18a9c4d0f26..cef1aefcd2b 100644
--- a/src/plugins/qmljseditor/qmljseditordocument.cpp
+++ b/src/plugins/qmljseditor/qmljseditordocument.cpp
@@ -750,6 +750,9 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file,
void QmlJSEditorDocumentPrivate::settingsChanged()
{
+ if (q->isTemporary())
+ return;
+
Utils::FilePath newQmlls = qmllsForFile(q->filePath(), ModelManagerInterface::instance());
if (m_qmllsStatus.qmllsPath == newQmlls)
return;
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index f94ff8ccf2f..a8d940c6efc 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -11,6 +11,8 @@
#include "qtversionfactory.h"
#include "qtversionmanager.h"
+#include
+
#include
#include
@@ -837,8 +839,11 @@ bool QtVersion::hasQtAbisSet() const
Abis QtVersion::qtAbis() const
{
- if (!d->m_data.qtAbis)
+ if (!d->m_data.qtAbis
+ // QTCREATORBUG-30568 give AndroidQtVersion a "second chance" to detect Qt Abis
+ || (d->m_type == Android::Constants::ANDROID_QT_TYPE && d->m_data.qtAbis->isEmpty())) {
d->m_data.qtAbis = detectQtAbis();
+ }
return *d->m_data.qtAbis;
}
diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp
index 756f1a11bee..c7bdab9b2a8 100644
--- a/src/plugins/terminal/terminalwidget.cpp
+++ b/src/plugins/terminal/terminalwidget.cpp
@@ -119,8 +119,12 @@ void TerminalWidget::setupPty()
Environment env = m_openParameters.environment.value_or(Environment{})
.appliedToEnvironment(shellCommand.executable().deviceEnvironment());
+ // Some OS/Distros set a default value for TERM such as "dumb", which then breaks
+ // command line tools such as "clear" which try to figure out what terminal they are
+ // running in. Therefore we have to force-set our own TERM value here.
+ env.set("TERM", "xterm-256color");
+
// Set some useful defaults
- env.setFallback("TERM", "xterm-256color");
env.setFallback("TERM_PROGRAM", QCoreApplication::applicationName());
env.setFallback("COLORTERM", "truecolor");
env.setFallback("COMMAND_MODE", "unix2003");
diff --git a/src/plugins/texteditor/codestyleselectorwidget.cpp b/src/plugins/texteditor/codestyleselectorwidget.cpp
index ddeea0a74eb..5eb373f00f1 100644
--- a/src/plugins/texteditor/codestyleselectorwidget.cpp
+++ b/src/plugins/texteditor/codestyleselectorwidget.cpp
@@ -216,9 +216,11 @@ void CodeStyleSelectorWidget::slotImportClicked()
void CodeStyleSelectorWidget::slotExportClicked()
{
ICodeStylePreferences *currentPreferences = m_codeStyle->currentPreferences();
- const FilePath filePath = FileUtils::getSaveFilePath(this, Tr::tr("Export Code Style"),
- FilePath::fromString(QString::fromUtf8(currentPreferences->id() + ".xml")),
- Tr::tr("Code styles (*.xml);;All files (*)"));
+ const FilePath filePath = FileUtils::getSaveFilePath(
+ this,
+ Tr::tr("Export Code Style"),
+ FileUtils::homePath().pathAppended(QString::fromUtf8(currentPreferences->id() + ".xml")),
+ Tr::tr("Code styles (*.xml);;All files (*)"));
if (!filePath.isEmpty()) {
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();
codeStylePool->exportCodeStyle(filePath, currentPreferences);
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 1d90c7481f2..bea58df3c88 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -6876,7 +6876,8 @@ void TextEditorWidgetPrivate::handleBackspaceKey()
}
}
} else if (typingSettings.m_smartBackspaceBehavior == TypingSettings::BackspaceUnindents) {
- if (c.positionInBlock() > TabSettings::firstNonSpace(c.block().text())) {
+ if (c.positionInBlock() == 0
+ || c.positionInBlock() > TabSettings::firstNonSpace(c.block().text())) {
if (cursorWithinSnippet)
c.beginEditBlock();
c.deletePreviousChar();
diff --git a/src/shared/qbs b/src/shared/qbs
index ca74c524363..488fbe40e86 160000
--- a/src/shared/qbs
+++ b/src/shared/qbs
@@ -1 +1 @@
-Subproject commit ca74c524363d17c689bb0ec4ca39c744df8d036e
+Subproject commit 488fbe40e86602d06e568a1749277387fd4a565e
diff --git a/tests/system/suite_general/tst_create_proj_wizard/test.py b/tests/system/suite_general/tst_create_proj_wizard/test.py
index 78178d82bb8..176b606b8bf 100644
--- a/tests/system/suite_general/tst_create_proj_wizard/test.py
+++ b/tests/system/suite_general/tst_create_proj_wizard/test.py
@@ -113,10 +113,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
return
fixedBuildSystems = list(availableBuildSystems)
- if template == 'Qt Quick Application':
- fixedBuildSystems.remove('qmake')
- test.log("Skipped qmake (not supported).")
- elif template == 'Qt Quick 2 Extension Plugin':
+ if template == 'Qt Quick 2 Extension Plugin':
fixedBuildSystems.remove('Qbs')
test.log("Skipped Qbs (not supported).")
@@ -126,7 +123,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
clickButton(waitForObject(":Next_QPushButton"))
if specialHandlingFunc:
specialHandlingFunc(displayedPlatforms, *args)
- if not ('Plain C' in template or template == 'Qt Quick Application'):
+ if not ('Plain C' in template):
__createProjectHandleTranslationSelection__()
verifyKitCheckboxes(kits, displayedPlatforms)
safeClickButton("Cancel")
diff --git a/tests/system/suite_tools/tst_designer_autocomplete/test.py b/tests/system/suite_tools/tst_designer_autocomplete/test.py
index c72d86a4e2e..b378407f812 100644
--- a/tests/system/suite_tools/tst_designer_autocomplete/test.py
+++ b/tests/system/suite_tools/tst_designer_autocomplete/test.py
@@ -25,7 +25,9 @@ def main():
openContextMenu(waitForObject("{container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack'"
"text='PushButton' type='QPushButton' visible='1'}"), 5, 5, 1)
activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Change objectName..."))
- typeLines(waitForObject(":FormEditorStack_qdesigner_internal::PropertyLineEdit"), buttonName)
+ buttonNameEdit = waitForObject(":FormEditorStack_qdesigner_internal::PropertyLineEdit")
+ replaceEditorContent(buttonNameEdit, buttonName)
+ type(buttonNameEdit, "")
else:
# Verify that everything works without ever changing the name
buttonName = "pushButton"