forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/13.0' into qds/dev
Change-Id: I524162811ad42e406d7b8e5f38e7043e776005e1
This commit is contained in:
131
dist/changelog/changes-13.0.1.md
vendored
Normal file
131
dist/changelog/changes-13.0.1.md
vendored
Normal file
@@ -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
|
@@ -51,6 +51,7 @@
|
|||||||
<li><a href="creator-how-tos.html#create-models-and-diagrams">Create Models and Diagrams</a></li>
|
<li><a href="creator-how-tos.html#create-models-and-diagrams">Create Models and Diagrams</a></li>
|
||||||
<li><a href="creator-how-tos.html#debug">Debug</a></li>
|
<li><a href="creator-how-tos.html#debug">Debug</a></li>
|
||||||
<li><a href="creator-how-tos.html#design-uis">Design UIs</a></li>
|
<li><a href="creator-how-tos.html#design-uis">Design UIs</a></li>
|
||||||
|
<li><a href="creator-how-tos.html#develop-for-devices">Develop for Devices</a></li>
|
||||||
<li><a href="creator-how-tos.html#edit-code">Edit Code</a></li>
|
<li><a href="creator-how-tos.html#edit-code">Edit Code</a></li>
|
||||||
<li><a href="creator-how-tos.html#manage-kits">Manage Kits</a></li>
|
<li><a href="creator-how-tos.html#manage-kits">Manage Kits</a></li>
|
||||||
<li><a href="creator-how-tos.html#manage-projects">Manage Projects</a></li>
|
<li><a href="creator-how-tos.html#manage-projects">Manage Projects</a></li>
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 31 KiB |
BIN
doc/qtcreator/images/qtcreator-mcu-new-project.webp
Normal file
BIN
doc/qtcreator/images/qtcreator-mcu-new-project.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
BIN
doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp
Normal file
BIN
doc/qtcreator/images/qtcreator-preferences-kits-mcu.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
doc/qtcreator/images/qtcreator-preferences-mcu.webp
Normal file
BIN
doc/qtcreator/images/qtcreator-preferences-mcu.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.1 KiB |
@@ -25,6 +25,10 @@
|
|||||||
\externalpage https://doc.qt.io/QtForMCUs/qtul-supported-platforms.html
|
\externalpage https://doc.qt.io/QtForMCUs/qtul-supported-platforms.html
|
||||||
\title \QMCU - Supported Target Platforms
|
\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
|
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-renesas.html
|
||||||
\title Getting Started on Renesas
|
\title Getting Started on Renesas
|
||||||
@@ -37,6 +41,10 @@
|
|||||||
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp.html
|
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp.html
|
||||||
\title Getting Started on NXP
|
\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
|
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-windows.html
|
||||||
\title Getting Started on Windows
|
\title Getting Started on Windows
|
||||||
|
@@ -80,6 +80,21 @@
|
|||||||
|
|
||||||
\generatelist creator-how-to-design
|
\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
|
\section1 Edit Code
|
||||||
|
|
||||||
The code editor offers useful features for editing C++ and QML code, such
|
The code editor offers useful features for editing C++ and QML code, such
|
||||||
|
@@ -85,7 +85,7 @@
|
|||||||
|
|
||||||
\list
|
\list
|
||||||
\li \l{Connecting MCUs}
|
\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}
|
\li \l{https://doc.qt.io/QtForMCUs/index.html}{\QMCU}
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
@@ -107,5 +107,5 @@
|
|||||||
\li \l{Qt for QNX}
|
\li \l{Qt for QNX}
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\sa {Supported Platforms}
|
\sa {Develop for Devices}{How To: Develop for Devices}, {Supported Platforms}
|
||||||
*/
|
*/
|
||||||
|
@@ -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
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\previouspage creator-developing-ios.html
|
|
||||||
\page creator-developing-mcu.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
|
\title Developing for MCUs
|
||||||
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.
|
|
||||||
|
|
||||||
You can connect MCU boards to a development host to build applications for
|
\brief Connect MCU devices to the computer to run and debug applications on
|
||||||
them using the GNU Arm Embedded GCC compiler, libraries, and other GNU tools
|
them.
|
||||||
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.
|
|
||||||
|
|
||||||
The toolchains are available for cross-compilation on Microsoft Windows,
|
\note Enable the McuSupport plugin to develop for MCUs.
|
||||||
Linux, and macOS. However, the Qt for \QMCU SDK is currently only available
|
|
||||||
for Windows and Linux.
|
|
||||||
|
|
||||||
For a list of \QMCU reference implementations, see the
|
Use subsets of QML and Qt Quick Controls to create user interfaces for
|
||||||
\l{\QMCU - Supported Target Platforms}{\QMCU} documentation.
|
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
|
\section1 Requirements
|
||||||
|
|
||||||
@@ -33,157 +31,46 @@
|
|||||||
|
|
||||||
\list
|
\list
|
||||||
\li \QMCU SDK (only available for Windows and Linux)
|
\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}
|
\li \l {\QMCU - Prerequisites}{Suitable toolchain}
|
||||||
{GNU ARM Embedded Toolchain}
|
|
||||||
\endlist
|
\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.
|
The hardware-specific requirements vary depending on the hardware platform you are developing for.
|
||||||
For more information see:
|
For more information see:
|
||||||
\list
|
\list
|
||||||
\li \l{Getting Started on NXP}
|
\li \l{Getting Started on NXP}
|
||||||
\li \l{Getting Started on STM}
|
\li \l{Getting Started on STM}
|
||||||
\li \l{Getting Started on Renesas}
|
\li \l{Getting Started on Renesas}
|
||||||
|
\li \l{Getting Started on Infineon}
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section1 Setting Up the Development Environment
|
\section1 \QMCU SDKs
|
||||||
|
|
||||||
You must download and install the required software and create connections
|
While you can use the latest \QC version to develop with any \QMCU SDK, the
|
||||||
between \QC and MCUs. The following subsections guide you through the
|
following combinations have been tested to work well.
|
||||||
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.
|
|
||||||
|
|
||||||
\table
|
\table
|
||||||
\header
|
\header
|
||||||
\li \QC version
|
\li \QC version
|
||||||
\li \QMCU SDK version
|
\li \QMCU SDK version
|
||||||
\row
|
\row
|
||||||
\li 9.0.0 or later
|
\li 12.0.2 or later
|
||||||
\li 2.0 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
|
\row
|
||||||
\li 7.0.0 up to 8.0.2
|
\li 7.0.0 up to 8.0.2
|
||||||
\li 2.0 up to 2.2
|
\li 2.0 up to 2.2
|
||||||
@@ -203,4 +90,159 @@
|
|||||||
\li 4.11.x
|
\li 4.11.x
|
||||||
\li 1.0
|
\li 1.0
|
||||||
\endtable
|
\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}
|
||||||
*/
|
*/
|
||||||
|
@@ -61,7 +61,7 @@
|
|||||||
\QC detects the tools and configured devices automatically and uses
|
\QC detects the tools and configured devices automatically and uses
|
||||||
the tools to build, deploy, and run applications.
|
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
|
You can connect MCU boards to a development host to deploy, run, and
|
||||||
debug applications on them from \QC.
|
debug applications on them from \QC.
|
||||||
|
@@ -36,6 +36,15 @@
|
|||||||
|
|
||||||
\annotatedlist creator-reference-build-configurations
|
\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
|
\section1 Editors
|
||||||
|
|
||||||
When you open files, \QC chooses a suitable editor according to the file
|
When you open files, \QC chooses a suitable editor according to the file
|
||||||
|
@@ -42,7 +42,6 @@
|
|||||||
\li \l{Connecting Boot2Qt Devices}
|
\li \l{Connecting Boot2Qt Devices}
|
||||||
\li \l{Adding Docker Devices}
|
\li \l{Adding Docker Devices}
|
||||||
\li \l{Connecting iOS Devices}
|
\li \l{Connecting iOS Devices}
|
||||||
\li \l{Connecting MCUs}
|
|
||||||
\li \l{Connecting QNX Devices}
|
\li \l{Connecting QNX Devices}
|
||||||
\li \l{Connecting Remote Linux Devices}
|
\li \l{Connecting Remote Linux Devices}
|
||||||
\li \l{Building Applications for the Web}
|
\li \l{Building Applications for the Web}
|
||||||
@@ -109,6 +108,11 @@
|
|||||||
\generatelist creator-how-to-debug
|
\generatelist creator-how-to-debug
|
||||||
\li Design UIs
|
\li Design UIs
|
||||||
\generatelist creator-how-to-design
|
\generatelist creator-how-to-design
|
||||||
|
\li Develop for Devices
|
||||||
|
\list
|
||||||
|
\li MCUs
|
||||||
|
\generatelist creator-how-to-mcu
|
||||||
|
\endlist
|
||||||
\li Edit Code
|
\li Edit Code
|
||||||
\generatelist creator-how-to-edit
|
\generatelist creator-how-to-edit
|
||||||
\list
|
\list
|
||||||
@@ -148,6 +152,10 @@
|
|||||||
\list
|
\list
|
||||||
\li Build Configurations
|
\li Build Configurations
|
||||||
\generatelist creator-reference-build-configurations
|
\generatelist creator-reference-build-configurations
|
||||||
|
\endlist
|
||||||
|
\li Devices
|
||||||
|
\generatelist creator-reference-devices
|
||||||
|
\list
|
||||||
\li Run Configurations
|
\li Run Configurations
|
||||||
\generatelist creator-reference-run-configurations
|
\generatelist creator-reference-run-configurations
|
||||||
\endlist
|
\endlist
|
||||||
|
@@ -1456,6 +1456,21 @@ class Dumper(DumperBase):
|
|||||||
if bp is not None:
|
if bp is not None:
|
||||||
self.reportBreakpointUpdate(bp)
|
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):
|
def handleEvent(self, event):
|
||||||
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
|
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
|
||||||
self.handleBreakpointEvent(event)
|
self.handleBreakpointEvent(event)
|
||||||
@@ -1490,8 +1505,12 @@ class Dumper(DumperBase):
|
|||||||
if state == lldb.eStateStopped:
|
if state == lldb.eStateStopped:
|
||||||
stoppedThread = self.firstStoppedThread()
|
stoppedThread = self.firstStoppedThread()
|
||||||
if stoppedThread:
|
if stoppedThread:
|
||||||
#self.report("STOPPED THREAD: %s" % stoppedThread)
|
|
||||||
frame = stoppedThread.GetFrameAtIndex(0)
|
frame = stoppedThread.GetFrameAtIndex(0)
|
||||||
|
if self.wantAutoContinue(frame):
|
||||||
|
#self.warn("AUTO CONTINUE")
|
||||||
|
error = self.process.Continue()
|
||||||
|
return
|
||||||
|
|
||||||
#self.report("FRAME: %s" % frame)
|
#self.report("FRAME: %s" % frame)
|
||||||
function = frame.GetFunction()
|
function = frame.GetFunction()
|
||||||
functionName = function.GetName()
|
functionName = function.GetName()
|
||||||
|
@@ -20,7 +20,13 @@ Token_Foreground_Subtle=ff2A2A2A
|
|||||||
Token_Text_Default=ffF8F8F8
|
Token_Text_Default=ffF8F8F8
|
||||||
Token_Text_Muted=ffAEAEAE
|
Token_Text_Muted=ffAEAEAE
|
||||||
Token_Text_Subtle=ff595959
|
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_Strong=ffeeeeee
|
||||||
Token_Stroke_Muted=ff727272
|
Token_Stroke_Muted=ff727272
|
||||||
|
@@ -10,7 +10,12 @@ Token_Accent_Muted=ff1f9b5d
|
|||||||
Token_Accent_Subtle=ff1a8550
|
Token_Accent_Subtle=ff1a8550
|
||||||
|
|
||||||
Token_Background_Default=fffcfcfc
|
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_Background_Subtle=ffe7e7e7
|
||||||
|
|
||||||
Token_Foreground_Default=ffD8D8D8
|
Token_Foreground_Default=ffD8D8D8
|
||||||
@@ -20,7 +25,7 @@ Token_Foreground_Subtle=ffEFEFEF
|
|||||||
Token_Text_Default=ff393939
|
Token_Text_Default=ff393939
|
||||||
Token_Text_Muted=ff6a6a6a
|
Token_Text_Muted=ff6a6a6a
|
||||||
Token_Text_Subtle=ffbebebe
|
Token_Text_Subtle=ffbebebe
|
||||||
Token_Text_Accent=ff28C878
|
Token_Text_Accent=ff1F9B5D
|
||||||
|
|
||||||
Token_Stroke_Strong=ff464646
|
Token_Stroke_Strong=ff464646
|
||||||
Token_Stroke_Muted=ff727272
|
Token_Stroke_Muted=ff727272
|
||||||
|
@@ -197,7 +197,8 @@ FileSaver::FileSaver(const FilePath &filePath, QIODevice::OpenMode mode)
|
|||||||
m_file.reset(tf);
|
m_file.reset(tf);
|
||||||
} else {
|
} else {
|
||||||
const bool readOnlyOrAppend = mode & (QIODevice::ReadOnly | QIODevice::Append);
|
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)
|
if (m_isSafe)
|
||||||
m_file.reset(new SaveFile(filePath));
|
m_file.reset(new SaveFile(filePath));
|
||||||
else
|
else
|
||||||
|
@@ -89,12 +89,10 @@ QTCREATOR_UTILS_EXPORT FileDeletedPromptAnswer
|
|||||||
"Do you want to save it under a different name, or close "
|
"Do you want to save it under a different name, or close "
|
||||||
"the editor?").arg(QDir::toNativeSeparators(fileName));
|
"the editor?").arg(QDir::toNativeSeparators(fileName));
|
||||||
QMessageBox box(QMessageBox::Question, title, msg, QMessageBox::NoButton, parent);
|
QMessageBox box(QMessageBox::Question, title, msg, QMessageBox::NoButton, parent);
|
||||||
QPushButton *close =
|
QPushButton *saveas = box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole);
|
||||||
box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole);
|
QPushButton *close = box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole);
|
||||||
QPushButton *closeAll =
|
QPushButton *closeAll =
|
||||||
box.addButton(Tr::tr("C&lose All"), QMessageBox::RejectRole);
|
box.addButton(Tr::tr("C&lose All"), QMessageBox::RejectRole);
|
||||||
QPushButton *saveas =
|
|
||||||
box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole);
|
|
||||||
QPushButton *save =
|
QPushButton *save =
|
||||||
box.addButton(Tr::tr("&Save"), QMessageBox::AcceptRole);
|
box.addButton(Tr::tr("&Save"), QMessageBox::AcceptRole);
|
||||||
box.setDefaultButton(saveas);
|
box.setDefaultButton(saveas);
|
||||||
|
@@ -1010,7 +1010,13 @@ QFont StyleHelper::uiFont(UiElement element)
|
|||||||
const qreal qrealPointSize = metrics.pixelSize * pixelsToPointSizeFactor;
|
const qreal qrealPointSize = metrics.pixelSize * pixelsToPointSizeFactor;
|
||||||
font.setPointSizeF(qrealPointSize);
|
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;
|
return font;
|
||||||
}
|
}
|
||||||
|
@@ -288,9 +288,11 @@ void ToolTip::hideTipWithDelay()
|
|||||||
void ToolTip::hideTipImmediately()
|
void ToolTip::hideTipImmediately()
|
||||||
{
|
{
|
||||||
if (m_tip) {
|
if (m_tip) {
|
||||||
m_tip->close();
|
TipLabel *tip = m_tip.data();
|
||||||
m_tip->deleteLater();
|
m_tip.clear();
|
||||||
m_tip = nullptr;
|
|
||||||
|
tip->close();
|
||||||
|
tip->deleteLater();
|
||||||
}
|
}
|
||||||
m_showTimer.stop();
|
m_showTimer.stop();
|
||||||
m_hideDelayTimer.stop();
|
m_hideDelayTimer.stop();
|
||||||
|
@@ -254,7 +254,7 @@ static expected_str<void> testJavaC(const FilePath &jdkPath)
|
|||||||
|
|
||||||
jdkVersion = QVersionNumber::fromString(stdOut.mid(outputPrefix.length()).split('\n').first());
|
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)")
|
return make_unexpected(Tr::tr("Unsupported JDK version (needs to be %1): %2 (parsed: %3)")
|
||||||
.arg(requiredJavaMajorVersion)
|
.arg(requiredJavaMajorVersion)
|
||||||
.arg(stdOut)
|
.arg(stdOut)
|
||||||
@@ -813,6 +813,7 @@ void AndroidSettingsWidget::updateUI()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_makeDefaultNdkButton->setEnabled(m_ndkListWidget->count() > 0);
|
||||||
m_makeDefaultNdkButton->setText(isDefaultNdkSelected() ? Tr::tr("Unset Default")
|
m_makeDefaultNdkButton->setText(isDefaultNdkSelected() ? Tr::tr("Unset Default")
|
||||||
: Tr::tr("Make Default"));
|
: Tr::tr("Make Default"));
|
||||||
}
|
}
|
||||||
|
@@ -65,7 +65,11 @@ static void adjustFormatStyleForLineBreak(clang::format::FormatStyle &style,
|
|||||||
|
|
||||||
static llvm::StringRef clearExtraNewline(llvm::StringRef text)
|
static llvm::StringRef clearExtraNewline(llvm::StringRef text)
|
||||||
{
|
{
|
||||||
|
#if LLVM_VERSION_MAJOR >= 16
|
||||||
|
while (text.starts_with("\n\n"))
|
||||||
|
#else
|
||||||
while (text.startswith("\n\n"))
|
while (text.startswith("\n\n"))
|
||||||
|
#endif
|
||||||
text = text.drop_front();
|
text = text.drop_front();
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
@@ -127,7 +127,11 @@ public:
|
|||||||
/// Gets real path of \p Path e.g. collapse all . and .. patterns, resolve
|
/// 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`.
|
/// symlinks. For real file system, this uses `llvm::sys::fs::real_path`.
|
||||||
/// This returns errc::operation_not_permitted if not implemented by subclass.
|
/// This returns errc::operation_not_permitted if not implemented by subclass.
|
||||||
std::error_code getRealPath(const Twine &Path, SmallVectorImpl<char> &Output) const override
|
std::error_code getRealPath(const Twine &Path, SmallVectorImpl<char> &Output)
|
||||||
|
#if LLVM_VERSION_MAJOR < 19
|
||||||
|
const
|
||||||
|
#endif
|
||||||
|
override
|
||||||
{
|
{
|
||||||
Q_UNUSED(Path);
|
Q_UNUSED(Path);
|
||||||
Q_UNUSED(Output);
|
Q_UNUSED(Output);
|
||||||
|
@@ -1354,12 +1354,10 @@ void CMakeBuildSystem::updateProjectData()
|
|||||||
return QtMajorVersion::None;
|
return QtMajorVersion::None;
|
||||||
};
|
};
|
||||||
|
|
||||||
QtMajorVersion qtVersion = kitInfo.projectPartQtVersion;
|
QtMajorVersion qtVersion = qtVersionFromCMake(
|
||||||
if (qtVersion == QtMajorVersion::None)
|
{{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}},
|
||||||
qtVersion = qtVersionFromCMake({{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}},
|
{QtMajorVersion::Qt5, {"Qt5", "Qt5Core"}},
|
||||||
{QtMajorVersion::Qt5, {"Qt5", "Qt5Core"}},
|
{QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}}});
|
||||||
{QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}}
|
|
||||||
});
|
|
||||||
|
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage);
|
RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage);
|
||||||
@@ -1368,7 +1366,7 @@ void CMakeBuildSystem::updateProjectData()
|
|||||||
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
|
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
|
||||||
|
|
||||||
for (RawProjectPart &rpp : rpps) {
|
for (RawProjectPart &rpp : rpps) {
|
||||||
rpp.setQtVersion(qtVersion); // TODO: Check if project actually uses Qt.
|
rpp.setQtVersion(qtVersion);
|
||||||
const FilePath includeFileBaseDir = buildConfiguration()->buildDirectory();
|
const FilePath includeFileBaseDir = buildConfiguration()->buildDirectory();
|
||||||
QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags;
|
QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags;
|
||||||
QStringList cFlags = rpp.flagsForC.commandLineFlags;
|
QStringList cFlags = rpp.flagsForC.commandLineFlags;
|
||||||
|
@@ -136,6 +136,8 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP
|
|||||||
&& left.inherits.value().contains(right.name);
|
&& left.inherits.value().contains(right.name);
|
||||||
|
|
||||||
const bool inheritsGreater = left.inherits && right.inherits
|
const bool inheritsGreater = left.inherits && right.inherits
|
||||||
|
&& !left.inherits.value().isEmpty()
|
||||||
|
&& !right.inherits.value().isEmpty()
|
||||||
&& left.inherits.value().first()
|
&& left.inherits.value().first()
|
||||||
> right.inherits.value().first();
|
> right.inherits.value().first();
|
||||||
|
|
||||||
|
@@ -1473,6 +1473,7 @@ bool EditorManagerPrivate::activateEditorForEntry(EditorView *view, DocumentMode
|
|||||||
void EditorManagerPrivate::closeEditorOrDocument(IEditor *editor)
|
void EditorManagerPrivate::closeEditorOrDocument(IEditor *editor)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(editor, return);
|
QTC_ASSERT(editor, return);
|
||||||
|
EditorManager::addCurrentPositionToNavigationHistory();
|
||||||
QList<IEditor *> visible = EditorManager::visibleEditors();
|
QList<IEditor *> visible = EditorManager::visibleEditors();
|
||||||
if (Utils::contains(visible,
|
if (Utils::contains(visible,
|
||||||
[&editor](IEditor *other) {
|
[&editor](IEditor *other) {
|
||||||
@@ -2690,7 +2691,6 @@ void EditorManager::slotCloseCurrentEditorOrDocument()
|
|||||||
{
|
{
|
||||||
if (!d->m_currentEditor)
|
if (!d->m_currentEditor)
|
||||||
return;
|
return;
|
||||||
addCurrentPositionToNavigationHistory();
|
|
||||||
d->closeEditorOrDocument(d->m_currentEditor);
|
d->closeEditorOrDocument(d->m_currentEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -32,10 +32,28 @@
|
|||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
#ifdef QTCREATOR_PCH_H
|
||||||
|
#define CALLBACK WINAPI
|
||||||
|
#endif
|
||||||
|
#include <qt_windows.h>
|
||||||
|
#include <shlobj.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
namespace Core {
|
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<char16_t *>(str)));
|
||||||
|
#endif
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
// Show error with option to open settings.
|
// Show error with option to open settings.
|
||||||
static void showGraphicalShellError(QWidget *parent, const QString &app, const QString &error)
|
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();
|
const QFileInfo fileInfo = pathIn.toFileInfo();
|
||||||
// Mac, Windows support folder or file.
|
// Mac, Windows support folder or file.
|
||||||
if (HostOsInfo::isWindowsHost()) {
|
if (HostOsInfo::isWindowsHost()) {
|
||||||
const FilePath explorer = FilePath("explorer.exe").searchInPath();
|
const FilePath explorer = windowsDirectory().pathAppended("explorer.exe");
|
||||||
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;
|
|
||||||
}
|
|
||||||
QStringList param;
|
QStringList param;
|
||||||
if (!pathIn.isDir())
|
if (!pathIn.isDir())
|
||||||
param += QLatin1String("/select,");
|
param += QLatin1String("/select,");
|
||||||
|
@@ -287,7 +287,7 @@ static const QPixmap &searchBoxIcon()
|
|||||||
}
|
}
|
||||||
|
|
||||||
SearchBox::SearchBox(QWidget *parent)
|
SearchBox::SearchBox(QWidget *parent)
|
||||||
: QLineEdit(parent)
|
: Utils::FancyLineEdit(parent)
|
||||||
{
|
{
|
||||||
setAttribute(Qt::WA_MacShowFocusRect, false);
|
setAttribute(Qt::WA_MacShowFocusRect, false);
|
||||||
setAutoFillBackground(false);
|
setAutoFillBackground(false);
|
||||||
@@ -301,10 +301,9 @@ SearchBox::SearchBox(QWidget *parent)
|
|||||||
pal.setColor(QPalette::Text, searchBoxTextTF.color());
|
pal.setColor(QPalette::Text, searchBoxTextTF.color());
|
||||||
setPalette(pal);
|
setPalette(pal);
|
||||||
|
|
||||||
const QSize iconSize = searchBoxIcon().deviceIndependentSize().toSize();
|
setContentsMargins({HPaddingXs, ExPaddingGapM, 0, ExPaddingGapM});
|
||||||
setContentsMargins({HPaddingXs, ExPaddingGapM,
|
|
||||||
HPaddingXs + iconSize.width() + HPaddingXs, ExPaddingGapM});
|
|
||||||
setFixedHeight(ExPaddingGapM + searchBoxTextTF.lineHeight() + ExPaddingGapM);
|
setFixedHeight(ExPaddingGapM + searchBoxTextTF.lineHeight() + ExPaddingGapM);
|
||||||
|
setFiltering(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize SearchBox::minimumSizeHint() const
|
QSize SearchBox::minimumSizeHint() const
|
||||||
@@ -351,10 +350,12 @@ void SearchBox::paintEvent(QPaintEvent *event)
|
|||||||
QPainter p(this);
|
QPainter p(this);
|
||||||
|
|
||||||
paintCommonBackground(&p, rect(), this);
|
paintCommonBackground(&p, rect(), this);
|
||||||
const QPixmap icon = searchBoxIcon();
|
if (text().isEmpty()) {
|
||||||
const QSize iconS = icon.deviceIndependentSize().toSize();
|
const QPixmap icon = searchBoxIcon();
|
||||||
const QPoint iconPos(width() - HPaddingXs - iconS.width(), (height() - iconS.height()) / 2);
|
const QSize iconS = icon.deviceIndependentSize().toSize();
|
||||||
p.drawPixmap(iconPos, icon);
|
const QPoint iconPos(width() - HPaddingXs - iconS.width(), (height() - iconS.height()) / 2);
|
||||||
|
p.drawPixmap(iconPos, icon);
|
||||||
|
}
|
||||||
|
|
||||||
QLineEdit::paintEvent(event);
|
QLineEdit::paintEvent(event);
|
||||||
}
|
}
|
||||||
|
@@ -25,8 +25,6 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
namespace Utils { class FancyLineEdit; }
|
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
namespace WelcomePageHelpers {
|
namespace WelcomePageHelpers {
|
||||||
@@ -113,7 +111,7 @@ private:
|
|||||||
const Role m_role = Primary;
|
const Role m_role = Primary;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CORE_EXPORT SearchBox : public QLineEdit
|
class CORE_EXPORT SearchBox : public Utils::FancyLineEdit
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit SearchBox(QWidget *parent = nullptr);
|
explicit SearchBox(QWidget *parent = nullptr);
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include <projectexplorer/runcontrol.h>
|
#include <projectexplorer/runcontrol.h>
|
||||||
|
|
||||||
|
#include <utils/algorithm.h>
|
||||||
#include <utils/environment.h>
|
#include <utils/environment.h>
|
||||||
#include <utils/qtcprocess.h>
|
#include <utils/qtcprocess.h>
|
||||||
#include <utils/processinterface.h>
|
#include <utils/processinterface.h>
|
||||||
@@ -328,6 +329,16 @@ void LldbEngine::handleLldbStarted()
|
|||||||
runEngine();
|
runEngine();
|
||||||
};
|
};
|
||||||
runCommand(cmd3);
|
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 {
|
} else {
|
||||||
notifyEngineSetupFailed();
|
notifyEngineSetupFailed();
|
||||||
}
|
}
|
||||||
|
@@ -235,8 +235,8 @@ void updateEditorToolBar(Core::IEditor *editor)
|
|||||||
TextDocument *document = textEditor->textDocument();
|
TextDocument *document = textEditor->textDocument();
|
||||||
Client *client = LanguageClientManager::clientForDocument(textEditor->textDocument());
|
Client *client = LanguageClientManager::clientForDocument(textEditor->textDocument());
|
||||||
|
|
||||||
ClientExtras *extras = widget->findChild<ClientExtras *>(clientExtrasName,
|
ClientExtras *extras = dynamic_cast<ClientExtras *>(
|
||||||
Qt::FindDirectChildrenOnly);
|
widget->findChild<QObject *>(clientExtrasName, Qt::FindDirectChildrenOnly));
|
||||||
if (!extras) {
|
if (!extras) {
|
||||||
if (!client)
|
if (!client)
|
||||||
return;
|
return;
|
||||||
|
@@ -47,10 +47,9 @@ const char PROJECT_BASE_ID[] = "Welcome.OpenRecentProject";
|
|||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH6};
|
constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH5};
|
||||||
constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementCaptionStrong};
|
constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementH6};
|
||||||
constexpr TextFormat sessionNameTF = {projectNameTF.themeColor, projectNameTF.uiElement,
|
constexpr TextFormat sessionNameTF = projectNameTF;
|
||||||
Qt::AlignVCenter | Qt::TextDontClip};
|
|
||||||
constexpr TextFormat sessionProjectNameTF {Theme::Token_Text_Default, projectNameTF.uiElement};
|
constexpr TextFormat sessionProjectNameTF {Theme::Token_Text_Default, projectNameTF.uiElement};
|
||||||
constexpr TextFormat shortcutNumberTF {Theme::Token_Text_Default,
|
constexpr TextFormat shortcutNumberTF {Theme::Token_Text_Default,
|
||||||
StyleHelper::UiElementCaptionStrong,
|
StyleHelper::UiElementCaptionStrong,
|
||||||
@@ -59,7 +58,7 @@ constexpr TextFormat actionTF {Theme::Token_Text_Default, StyleHelper::UiElement
|
|||||||
Qt::AlignCenter | Qt::TextDontClip};
|
Qt::AlignCenter | Qt::TextDontClip};
|
||||||
constexpr TextFormat actionDisabledTF {Theme::Token_Text_Subtle, actionTF.uiElement,
|
constexpr TextFormat actionDisabledTF {Theme::Token_Text_Subtle, actionTF.uiElement,
|
||||||
actionTF.drawTextFlags};
|
actionTF.drawTextFlags};
|
||||||
constexpr int shortcutNumberWidth = 16;
|
constexpr int shortcutNumberWidth = 6;
|
||||||
constexpr int actionSepWidth = 1;
|
constexpr int actionSepWidth = 1;
|
||||||
constexpr int sessionScrollBarGap = HPaddingXs;
|
constexpr int sessionScrollBarGap = HPaddingXs;
|
||||||
|
|
||||||
@@ -316,36 +315,36 @@ public:
|
|||||||
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||||
const QModelIndex &idx) const final
|
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) | | | | | |
|
// | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
|
||||||
// | | | +------------+ +-------------+ | | | | |
|
// | | | +------------+ +-------------+ | | | | |
|
||||||
// |(HPaddingXs)|<number>|(HGapXxs)| <icon> |(HGapXxs)|<sessionName>|(HGapXs)|<arrow>| | | +-- Header
|
// |(HPaddingXs)|<number>|(HGapXs)| <icon> |(HGapXs)|<sessionName>|(HGapXs)|<arrow>| | | +-- Header
|
||||||
// | |(16x16) | +------------+ +-------------+ | | | | |
|
// | |(w:6) | +------------+ +-------------+ | | | | |
|
||||||
// | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
|
// | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
|
||||||
// |------------+--------+---------+------------+---------+-------------+--------+-------+ | | --+
|
// |------------+--------+--------+------------+--------+-------------+--------+-------+ | | --+
|
||||||
// | +-- | (VPaddingXxs) | | | |
|
// | +-- | (VPaddingXxs) | | | |
|
||||||
// | | +------------------------------+(HPaddingXs)| | |
|
// | | +------------------------------+(HPaddingXs)| | |
|
||||||
// | | | <projectName> | | | |
|
// | | | <projectName> | | | |
|
||||||
// | | +------------------------------+ | | |
|
// | | +------------------------------+ | | |
|
||||||
// | Per project in session --+ | (ExPaddingGapS) | |(sessionScrollBarGap)| |
|
// | Per project in session --+ | (ExPaddingGapS) | |(sessionScrollBarGap)| |
|
||||||
// | | +------------------------------+ | | |
|
// | | +------------------------------+ | | |
|
||||||
// | | | <projectPath> | | | |
|
// | | | <projectPath> | | | |
|
||||||
// | | +------------------------------+ | | +-- Expansion
|
// | | +------------------------------+ | | +-- Expansion
|
||||||
// | +-- | (VPaddingXxs) | | | |
|
// | +-- | (VPaddingXxs) | | | |
|
||||||
// +------------------------------------------------------+------------------------------+------------+ | |
|
// +----------------------------------------------------+------------------------------+------------+ | |
|
||||||
// | (VPaddingXs) | | |
|
// | (VPaddingXs) | | |
|
||||||
// +-----------------------------------------+--------------+-----------------------------------------+ | |
|
// +---------------------------------------+--------------+-----------------------------------------+ | |
|
||||||
// +-- | <cloneButton>|<renameButton>|<deleteButton> | | |
|
// +-- | <cloneButton>|<renameButton>|<deleteButton> | | |
|
||||||
// | +-----------------------------------------+--------------+-----------------------------------------+ | |
|
// | +---------------------------------------+--------------+-----------------------------------------+ | |
|
||||||
// | | (VPaddingXs) | | |
|
// | | (VPaddingXs) | | |
|
||||||
// | +--------------------------------------------------------------------------------------------------+---------------------+ --+
|
// | +------------------------------------------------------------------------------------------------+---------------------+ --+
|
||||||
// | | (VGapL) | +-- Gap between session items
|
// | | (VGapL) | +-- Gap between session items
|
||||||
// | +------------------------------------------------------------------------------------------------------------------------+ --+
|
// | +----------------------------------------------------------------------------------------------------------------------+ --+
|
||||||
// |
|
// |
|
||||||
// \ session action "buttons" and dividers
|
// \ session action "buttons" and dividers
|
||||||
// +-----------------------------------------------+--------+---------+--------+
|
// +-----------------------------------------------+--------+---------+--------+
|
||||||
@@ -381,11 +380,11 @@ public:
|
|||||||
const int y = bgR.y();
|
const int y = bgR.y();
|
||||||
|
|
||||||
const int numberX = x + s(HPaddingXs);
|
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 int arrowX = bgR.right() - s(HPaddingXs) - arrowS.width();
|
||||||
const QRect arrowHoverR(arrowX - s(HGapXs) + 1, y,
|
const QRect arrowHoverR(arrowX - s(HGapXs) + 1, y,
|
||||||
s(HGapXs) + arrowS.width() + s(HPaddingXs), hdR.height());
|
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 iconY = y + (hdR.height() - iconS.height()) / 2;
|
||||||
const int arrowY = y + (hdR.height() - arrowS.height()) / 2;
|
const int arrowY = y + (hdR.height() - arrowS.height()) / 2;
|
||||||
@@ -622,24 +621,24 @@ class ProjectDelegate : public BaseDelegate
|
|||||||
public:
|
public:
|
||||||
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const final
|
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)| | |
|
// | | | | | | (VPaddingXs)| | |
|
||||||
// | | | | | +-------------+ | |
|
// | | | | | +-------------+ | |
|
||||||
// | | | | | |<projectName>| | |
|
// | | | | | |<projectName>| | |
|
||||||
// | | | | | +-------------+ | |
|
// | | | | | +-------------+ | |
|
||||||
// |(HPaddingXs)|<number>|(HGapXxs)|<icon>|(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)|
|
// |(HPaddingXs)|<number>|(HGapXs)|<icon>|(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)|
|
||||||
// | |(16x16) | | | +-------------+ | |
|
// | |(w:6) | | | +-------------+ | |
|
||||||
// | | | | | |<projectPath>| | |
|
// | | | | | |<projectPath>| | |
|
||||||
// | | | | | +-------------+ | |
|
// | | | | | +-------------+ | |
|
||||||
// | | | | | | (VPaddingXs)| | |
|
// | | | | | | (VPaddingXs)| | |
|
||||||
// +------------+--------+---------+------+---------+-------------+------------+------------+ --+
|
// +------------+--------+--------+------+---------+-------------+------------+------------+ --+
|
||||||
// | (VGapL) | +-- Gap between project items
|
// | (VGapL) | +-- Gap between project items
|
||||||
// +----------------------------------------------------------------------------------------+ --+
|
// +---------------------------------------------------------------------------------------+ --+
|
||||||
|
|
||||||
const bool hovered = option.widget->isActiveWindow()
|
const bool hovered = option.widget->isActiveWindow()
|
||||||
&& option.state & QStyle::State_MouseOver;
|
&& option.state & QStyle::State_MouseOver;
|
||||||
@@ -651,9 +650,9 @@ public:
|
|||||||
|
|
||||||
const int x = bgR.x();
|
const int x = bgR.x();
|
||||||
const int numberX = x + s(HPaddingXs);
|
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 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 textWidth = bgR.width() - s(HPaddingXs) - textX;
|
||||||
|
|
||||||
const int y = bgR.y();
|
const int y = bgR.y();
|
||||||
|
@@ -404,7 +404,6 @@ static const QStringList &plugins()
|
|||||||
"pydocstyle",
|
"pydocstyle",
|
||||||
"pyflakes",
|
"pyflakes",
|
||||||
"pylint",
|
"pylint",
|
||||||
"rope_completion",
|
|
||||||
"yapf"};
|
"yapf"};
|
||||||
return plugins;
|
return plugins;
|
||||||
}
|
}
|
||||||
@@ -610,7 +609,6 @@ static QString defaultPylsConfiguration()
|
|||||||
plugins.insert("pydocstyle", disabled);
|
plugins.insert("pydocstyle", disabled);
|
||||||
plugins.insert("pyflakes", enabled);
|
plugins.insert("pyflakes", enabled);
|
||||||
plugins.insert("pylint", disabled);
|
plugins.insert("pylint", disabled);
|
||||||
plugins.insert("rope_completion", enabled);
|
|
||||||
plugins.insert("yapf", enabled);
|
plugins.insert("yapf", enabled);
|
||||||
QJsonObject pylsp;
|
QJsonObject pylsp;
|
||||||
pylsp.insert("plugins", plugins);
|
pylsp.insert("plugins", plugins);
|
||||||
|
@@ -750,6 +750,9 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file,
|
|||||||
|
|
||||||
void QmlJSEditorDocumentPrivate::settingsChanged()
|
void QmlJSEditorDocumentPrivate::settingsChanged()
|
||||||
{
|
{
|
||||||
|
if (q->isTemporary())
|
||||||
|
return;
|
||||||
|
|
||||||
Utils::FilePath newQmlls = qmllsForFile(q->filePath(), ModelManagerInterface::instance());
|
Utils::FilePath newQmlls = qmllsForFile(q->filePath(), ModelManagerInterface::instance());
|
||||||
if (m_qmllsStatus.qmllsPath == newQmlls)
|
if (m_qmllsStatus.qmllsPath == newQmlls)
|
||||||
return;
|
return;
|
||||||
|
@@ -11,6 +11,8 @@
|
|||||||
#include "qtversionfactory.h"
|
#include "qtversionfactory.h"
|
||||||
#include "qtversionmanager.h"
|
#include "qtversionmanager.h"
|
||||||
|
|
||||||
|
#include <android/androidconstants.h>
|
||||||
|
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/progressmanager/progressmanager.h>
|
#include <coreplugin/progressmanager/progressmanager.h>
|
||||||
|
|
||||||
@@ -837,8 +839,11 @@ bool QtVersion::hasQtAbisSet() const
|
|||||||
|
|
||||||
Abis QtVersion::qtAbis() 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();
|
d->m_data.qtAbis = detectQtAbis();
|
||||||
|
}
|
||||||
|
|
||||||
return *d->m_data.qtAbis;
|
return *d->m_data.qtAbis;
|
||||||
}
|
}
|
||||||
|
@@ -119,8 +119,12 @@ void TerminalWidget::setupPty()
|
|||||||
Environment env = m_openParameters.environment.value_or(Environment{})
|
Environment env = m_openParameters.environment.value_or(Environment{})
|
||||||
.appliedToEnvironment(shellCommand.executable().deviceEnvironment());
|
.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
|
// Set some useful defaults
|
||||||
env.setFallback("TERM", "xterm-256color");
|
|
||||||
env.setFallback("TERM_PROGRAM", QCoreApplication::applicationName());
|
env.setFallback("TERM_PROGRAM", QCoreApplication::applicationName());
|
||||||
env.setFallback("COLORTERM", "truecolor");
|
env.setFallback("COLORTERM", "truecolor");
|
||||||
env.setFallback("COMMAND_MODE", "unix2003");
|
env.setFallback("COMMAND_MODE", "unix2003");
|
||||||
|
@@ -216,9 +216,11 @@ void CodeStyleSelectorWidget::slotImportClicked()
|
|||||||
void CodeStyleSelectorWidget::slotExportClicked()
|
void CodeStyleSelectorWidget::slotExportClicked()
|
||||||
{
|
{
|
||||||
ICodeStylePreferences *currentPreferences = m_codeStyle->currentPreferences();
|
ICodeStylePreferences *currentPreferences = m_codeStyle->currentPreferences();
|
||||||
const FilePath filePath = FileUtils::getSaveFilePath(this, Tr::tr("Export Code Style"),
|
const FilePath filePath = FileUtils::getSaveFilePath(
|
||||||
FilePath::fromString(QString::fromUtf8(currentPreferences->id() + ".xml")),
|
this,
|
||||||
Tr::tr("Code styles (*.xml);;All files (*)"));
|
Tr::tr("Export Code Style"),
|
||||||
|
FileUtils::homePath().pathAppended(QString::fromUtf8(currentPreferences->id() + ".xml")),
|
||||||
|
Tr::tr("Code styles (*.xml);;All files (*)"));
|
||||||
if (!filePath.isEmpty()) {
|
if (!filePath.isEmpty()) {
|
||||||
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();
|
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();
|
||||||
codeStylePool->exportCodeStyle(filePath, currentPreferences);
|
codeStylePool->exportCodeStyle(filePath, currentPreferences);
|
||||||
|
@@ -6876,7 +6876,8 @@ void TextEditorWidgetPrivate::handleBackspaceKey()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (typingSettings.m_smartBackspaceBehavior == TypingSettings::BackspaceUnindents) {
|
} 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)
|
if (cursorWithinSnippet)
|
||||||
c.beginEditBlock();
|
c.beginEditBlock();
|
||||||
c.deletePreviousChar();
|
c.deletePreviousChar();
|
||||||
|
Submodule src/shared/qbs updated: ca74c52436...488fbe40e8
@@ -113,10 +113,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
|
|||||||
return
|
return
|
||||||
|
|
||||||
fixedBuildSystems = list(availableBuildSystems)
|
fixedBuildSystems = list(availableBuildSystems)
|
||||||
if template == 'Qt Quick Application':
|
if template == 'Qt Quick 2 Extension Plugin':
|
||||||
fixedBuildSystems.remove('qmake')
|
|
||||||
test.log("Skipped qmake (not supported).")
|
|
||||||
elif template == 'Qt Quick 2 Extension Plugin':
|
|
||||||
fixedBuildSystems.remove('Qbs')
|
fixedBuildSystems.remove('Qbs')
|
||||||
test.log("Skipped Qbs (not supported).")
|
test.log("Skipped Qbs (not supported).")
|
||||||
|
|
||||||
@@ -126,7 +123,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
|
|||||||
clickButton(waitForObject(":Next_QPushButton"))
|
clickButton(waitForObject(":Next_QPushButton"))
|
||||||
if specialHandlingFunc:
|
if specialHandlingFunc:
|
||||||
specialHandlingFunc(displayedPlatforms, *args)
|
specialHandlingFunc(displayedPlatforms, *args)
|
||||||
if not ('Plain C' in template or template == 'Qt Quick Application'):
|
if not ('Plain C' in template):
|
||||||
__createProjectHandleTranslationSelection__()
|
__createProjectHandleTranslationSelection__()
|
||||||
verifyKitCheckboxes(kits, displayedPlatforms)
|
verifyKitCheckboxes(kits, displayedPlatforms)
|
||||||
safeClickButton("Cancel")
|
safeClickButton("Cancel")
|
||||||
|
@@ -25,7 +25,9 @@ def main():
|
|||||||
openContextMenu(waitForObject("{container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack'"
|
openContextMenu(waitForObject("{container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack'"
|
||||||
"text='PushButton' type='QPushButton' visible='1'}"), 5, 5, 1)
|
"text='PushButton' type='QPushButton' visible='1'}"), 5, 5, 1)
|
||||||
activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Change objectName..."))
|
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, "<Return>")
|
||||||
else:
|
else:
|
||||||
# Verify that everything works without ever changing the name
|
# Verify that everything works without ever changing the name
|
||||||
buttonName = "pushButton"
|
buttonName = "pushButton"
|
||||||
|
Reference in New Issue
Block a user