Merge remote-tracking branch 'origin/4.15'
Change-Id: I613b60f7d5cfca19ed611b3777548738d7bd7d67
4
coin/product_dependencies.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
dependencies:
|
||||||
|
../../qt/qt5.git:
|
||||||
|
ref: "6.1"
|
||||||
|
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 6.5 KiB |
BIN
doc/qtcreator/images/qtquick-library-context-menu-hide.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
doc/qtcreator/images/qtquick-library-context-menu.png
Normal file
After Width: | Height: | Size: 9.0 KiB |
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -45,9 +45,9 @@
|
|||||||
|
|
||||||
To run an example application on a Boot2Qt device, you must set up
|
To run an example application on a Boot2Qt device, you must set up
|
||||||
Qt for Device Creation on the development host and create connections
|
Qt for Device Creation on the development host and create connections
|
||||||
between the host and devices. For more information, see the
|
between the host and devices. For more information, see
|
||||||
\l{http://doc.qt.io/QtForDeviceCreation/qtee-installation-guide.html}
|
\l{https://doc.qt.io/QtForDeviceCreation/b2qt-installation-guides.html}
|
||||||
{Installation Guide} in the
|
{Installation Guides} in the
|
||||||
\l{http://doc.qt.io/QtForDeviceCreation/index.html}{Qt for Device Creation}
|
\l{http://doc.qt.io/QtForDeviceCreation/index.html}{Qt for Device Creation}
|
||||||
documentation.
|
documentation.
|
||||||
|
|
||||||
|
@@ -116,6 +116,10 @@
|
|||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
If the \l{glossary-buildandrun-kit}{kit} specifies Qt for Android
|
||||||
|
version 5.14.0 or later, you can select the ABIs for the Android device
|
||||||
|
architectures to build the project for in the \uicontrol ABIs field.
|
||||||
|
|
||||||
The \uicontrol {Equivalent command line} field displays the build command
|
The \uicontrol {Equivalent command line} field displays the build command
|
||||||
that is constructed based on the selected options.
|
that is constructed based on the selected options.
|
||||||
|
|
||||||
|
@@ -76,8 +76,8 @@
|
|||||||
\li Merge File with Template
|
\li Merge File with Template
|
||||||
\li \l{Merging Files with Templates}
|
\li \l{Merging Files with Templates}
|
||||||
\row
|
\row
|
||||||
\li Move Component into Separate File
|
\li Move Component Instances into Separate Files
|
||||||
\li \l{Moving Components into Separate Files}
|
\li \l{Moving Component Instances into Separate Files}
|
||||||
\row
|
\row
|
||||||
\li Add New Signal Handler
|
\li Add New Signal Handler
|
||||||
\li \l{Adding Signal Handlers}
|
\li \l{Adding Signal Handlers}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -42,73 +42,84 @@
|
|||||||
|
|
||||||
A \e component is a reusable building block for a UI.
|
A \e component is a reusable building block for a UI.
|
||||||
|
|
||||||
\QDS comes with \e {preset components} that you can use in your project.
|
\QDS comes with \e {preset components} that you can use in your UI by
|
||||||
These are similar to \e Symbols in Sketch or \e Prefab in Unity.
|
creating instances of them.
|
||||||
|
The preset components are similar to \e Symbols in Sketch or \e Prefab in
|
||||||
|
Unity.
|
||||||
|
|
||||||
Some of the preset components represent simple shapes, text, or images,
|
Some of the preset components represent simple shapes, text, or images,
|
||||||
while others represent complex UI controls with full functionality, such
|
while others represent complex UI controls with full functionality, such
|
||||||
as spin boxes or sliders.
|
as spin boxes or sliders. You can also add instances of preset
|
||||||
|
\l {Using 3D Components}{3D components} to your UIs.
|
||||||
|
|
||||||
You can modify the \e properties of the preset components and combine them
|
To build your own components, you can modify the \e properties of the
|
||||||
to build your own components.
|
component instances and combine them.
|
||||||
|
|
||||||
A component is specified within one file (with the file extension
|
A component is specified within one file (with the file extension
|
||||||
\e ui.qml or \e .qml). For example, a Button component may be defined
|
\e ui.qml or \e .qml). For example, a Button component may be defined
|
||||||
in \e Button.ui.qml. Typically, the visual appearance of a component
|
in \e Button.ui.qml. Typically, the visual appearance of a component
|
||||||
is defined in a \e {UI file} (ui.qml).
|
is defined in a \e {UI file} (ui.qml). To create component files,
|
||||||
|
you can use \l{Creating Components from Scratch}{wizard templates}, or
|
||||||
|
\l{Moving Component Instances into Separate Files}
|
||||||
|
{move component instances into separate component files}.
|
||||||
|
|
||||||
The \l {Library} view \uicontrol Components tab lists the components that
|
Select \l Library > \uicontrol Components to view the preset components that
|
||||||
have been added to your project.
|
have been added to your project. If you cannot find the components you need,
|
||||||
|
add the relevant modules to your project, as described in
|
||||||
|
\l {Adding and Removing Modules}.
|
||||||
|
|
||||||
\image qmldesigner-qml-components.png "Components"
|
\image qtquick-components-tab.png "Components in Library"
|
||||||
|
|
||||||
\note Use as few components as possible. To minimize the number of
|
\note Use as few components as possible. To minimize the number of
|
||||||
components, use \l{Adding Property Aliases}{alias properties} and
|
components, use \l{Adding Property Aliases}{alias properties} and
|
||||||
\l{Adding States}{states} to create the differences in your component
|
\l{Adding States}{states} to create the differences in your component
|
||||||
instances. We recommend reusing components instead of duplicating them,
|
instances. Using component instances instead of duplicating the components
|
||||||
so the components do not need to be processed as completely new component
|
reduces the time needed to load and build the application, as well as the
|
||||||
types. This reduces the time needed to load and build the application,
|
size of the application package.
|
||||||
as well as the size of the application package.
|
|
||||||
|
|
||||||
\section1 Adding Components to Designs
|
\section1 Creating Component Instances
|
||||||
|
|
||||||
\image qmldesigner-editing-components.png "Editing components in Form Editor"
|
\image qmldesigner-editing-components.png "Creating Component Instances"
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Drag and drop components from \uicontrol Library (1) to
|
\li Drag-and-drop components from \uicontrol Library (1) to
|
||||||
\uicontrol Navigator (2) or \uicontrol {Form Editor} (3).
|
\uicontrol Navigator (2), \uicontrol {Form Editor} (3), or
|
||||||
\li Select components in \uicontrol Navigator to edit the
|
\l {3D Editor} (4). This creates instances of the components in the
|
||||||
|
current component file.
|
||||||
|
\li Select component instances in \uicontrol Navigator to edit the
|
||||||
values of their properties in \uicontrol Properties.
|
values of their properties in \uicontrol Properties.
|
||||||
\image qmldesigner-properties-view.png "Properties view"
|
\image qmldesigner-properties-view.png "Properties view"
|
||||||
For more information, see \l {Specifying Component Properties}.
|
For more information, see \l {Specifying Component Properties}.
|
||||||
\li To change the appearance and behavior of your components in ways
|
\li To change the appearance and behavior of the component instances
|
||||||
that are not supported out of the box, you can define custom
|
in ways that are not supported in \QDS by default, you can define
|
||||||
properties for your components in the \uicontrol Connections view,
|
custom properties in \uicontrol {Connection View} >
|
||||||
\uicontrol Properties tab.
|
\uicontrol {Properties}.
|
||||||
\image qmldesigner-dynamicprops.png "Connections view Properties tab"
|
\image qmldesigner-dynamicprops.png "Connection View Properties tab"
|
||||||
For more information, see \l{Specifying Dynamic Properties}.
|
For more information, see \l{Specifying Dynamic Properties}.
|
||||||
\li To enable users to interact with components, connect the components
|
\li To enable users to interact with the component instances, connect
|
||||||
to signals in the \uicontrol Connections view. For example, you can
|
the instances to signals in \uicontrol {Connection View} >
|
||||||
specify what happens when a component is clicked.
|
\uicontrol Connections. For example, you can specify what happens
|
||||||
For more information, see \l{Connecting Components to Signals}.
|
when a component instance is clicked. For more information, see
|
||||||
\image qmldesigner-connections.png "Connections view Connections tab"
|
\l{Connecting Components to Signals}.
|
||||||
\li To dynamically change the behavior of an object when another object
|
\image qmldesigner-connections.png "Connection View Connections tab"
|
||||||
changes, create bindings between components in the
|
\li To dynamically change the behavior of a component instance when
|
||||||
\uicontrol {Connection View}, \uicontrol Bindings tab.
|
another component instance changes, create bindings between them in
|
||||||
|
\uicontrol {Connection View} > \uicontrol Bindings.
|
||||||
For more information, see \l{Adding Bindings Between Properties}.
|
For more information, see \l{Adding Bindings Between Properties}.
|
||||||
\image qmldesigner-bindings.png "Connections view Bindings tab"
|
\image qmldesigner-bindings.png "Connection View Bindings tab"
|
||||||
\li Add states to apply sets of changes to the property values of one
|
\li Add states to apply sets of changes to the property values of one
|
||||||
or several components in the \uicontrol States view.
|
or several component instances in the \uicontrol States view.
|
||||||
For more information, see \l{Adding States}.
|
For more information, see \l{Adding States}.
|
||||||
\li Animate component properties in the \uicontrol Timeline view.
|
\li Animate the properties of component instances in the \uicontrol
|
||||||
For more information, see \l{Creating Animations}.
|
Timeline view. For more information, see \l{Creating Animations}.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section1 Creating Your Own Components
|
\section1 Creating Your Own Components
|
||||||
|
|
||||||
You can either use project wizard templates to create custom components and
|
You can either use project wizard templates to create custom components and
|
||||||
controls or \l{Moving Components into Separate Files}{move subcomponents
|
controls or move component instances into separate files to turn them into
|
||||||
into separate files} to make them reusable in other components.
|
new components that you can create instances of. You can then use the
|
||||||
|
instances of the new components in other components.
|
||||||
|
|
||||||
\section2 Creating Components from Scratch
|
\section2 Creating Components from Scratch
|
||||||
|
|
||||||
@@ -128,27 +139,30 @@
|
|||||||
tab in the \uicontrol Library view only if the filename begins with
|
tab in the \uicontrol Library view only if the filename begins with
|
||||||
a capital letter.
|
a capital letter.
|
||||||
|
|
||||||
\li Click \uicontrol Design to open the component file (ui.qml] in
|
\li Click \uicontrol Design to open the component file (ui.qml) in
|
||||||
\uicontrol {Form Editor}.
|
\uicontrol {Form Editor}.
|
||||||
|
|
||||||
\li Drag and drop a component from \uicontrol Library to
|
\li Drag-and-drop a component from \uicontrol Library to
|
||||||
\uicontrol Navigator or \uicontrol {Form Editor}.
|
\uicontrol Navigator or \uicontrol {Form Editor}.
|
||||||
|
|
||||||
\li Edit component properties in \uicontrol Properties.
|
\li Edit component properties in the \uicontrol Properties view.
|
||||||
|
|
||||||
\image qmldesigner-custom-component-properties.png
|
\image qmldesigner-custom-component-properties.png
|
||||||
|
|
||||||
The available properties depend on the component type. You can
|
The available properties depend on the component type. You can
|
||||||
\l{Specifying Dynamic Properties}{add properties for
|
\l{Specifying Dynamic Properties}{add properties for
|
||||||
components} in the \uicontrol Properties tab of the
|
components} in \uicontrol {Connection View} > \uicontrol Properties.
|
||||||
\uicontrol {Connection View}.
|
|
||||||
|
\li To change the appearance and behavior of the component instances
|
||||||
|
in ways that are not supported in \QDS by default, you can define
|
||||||
|
custom properties in \uicontrol {Connection View} >
|
||||||
|
\uicontrol {Properties}.
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
The following sections contain more information about how to use
|
The following sections contain more information about how to use
|
||||||
\uicontrol {Form Editor} to edit 2D content and \uicontrol {3D Editor}
|
\uicontrol {Form Editor} to edit 2D content and \uicontrol {3D Editor}
|
||||||
to edit 3D scenes, as well as examples of how to create UI controls
|
to edit 3D scenes, as well as examples of how to create UI controls
|
||||||
using basic components:
|
using instances of basic components:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
|
|
||||||
@@ -166,26 +180,26 @@
|
|||||||
\include qtdesignstudio-components.qdocinc creating studio components
|
\include qtdesignstudio-components.qdocinc creating studio components
|
||||||
\endif
|
\endif
|
||||||
|
|
||||||
\section2 Moving Components into Separate Files
|
\section2 Moving Component Instances into Separate Files
|
||||||
|
|
||||||
An alternative way of creating reusable components is to move them
|
An alternative way of creating reusable components is to move component
|
||||||
into separate component files (.ui.qml). Right-click a component
|
instances into separate component files (.ui.qml). Right-click a component
|
||||||
in \uicontrol Navigator or \uicontrol {Form Editor} and select
|
instance in \uicontrol Navigator or \uicontrol {Form Editor}, and select
|
||||||
\uicontrol {Move Component into Separate File} in the context menu.
|
\uicontrol {Move Component into Separate File} in the context menu.
|
||||||
|
|
||||||
\image qtcreator-move-component-into-separate-file.png
|
\image qtcreator-move-component-into-separate-file.png
|
||||||
|
|
||||||
Give the new component a name and select whether properties are set for
|
Give the new component a name, and select whether properties are set for
|
||||||
the new component or for the original one.
|
the new component or for the original one.
|
||||||
|
|
||||||
When you select \uicontrol OK, a new component file is created and a
|
When you select \uicontrol OK, a new component file is created and an
|
||||||
reference to the component is added to the code in the current component
|
instance of the component is added to the code in the current component
|
||||||
file. The way things look in \uicontrol {Form Editor} does not change.
|
file. The look of your UI in \uicontrol {Form Editor} does not change.
|
||||||
|
|
||||||
To open the new component file for editing the properties that you want
|
To open the new component file for editing the properties that you want
|
||||||
to change for all instances of the component, right-click the component
|
to change for all instances of the component, right-click the component,
|
||||||
and then select \uicontrol {Go into Component} in the context menu. For
|
and then select \uicontrol {Go into Component} in the context menu. For
|
||||||
additional ways of opening subcomponents, see \l{Moving Within Components}.
|
additional ways of opening base components, see \l{Moving Within Components}.
|
||||||
|
|
||||||
For an example of creating a reusable custom component, see
|
For an example of creating a reusable custom component, see
|
||||||
\if defined(qtcreator)
|
\if defined(qtcreator)
|
||||||
@@ -194,17 +208,17 @@
|
|||||||
\l{Progress Bar}.
|
\l{Progress Bar}.
|
||||||
\endif
|
\endif
|
||||||
|
|
||||||
Custom components are listed in the \uicontrol {My Components} section
|
Custom components are listed in \uicontrol Library > \uicontrol Components
|
||||||
of the \uicontrol Components tab in \uicontrol Library and you can use
|
> \uicontrol {My Components}, and you can use instances of them to build
|
||||||
them to build more components.
|
more components.
|
||||||
|
|
||||||
\include qtquick-mcu-support.qdocinc mcu qtquick components
|
\include qtquick-mcu-support.qdocinc mcu qtquick components
|
||||||
|
|
||||||
\section1 Merging Files with Templates
|
\section1 Merging Files with Templates
|
||||||
|
|
||||||
You can merge the current component file against an existing second
|
You can merge the current component file against an existing second
|
||||||
component file and using the second file in a way similar to using a
|
component file using the second file in a way similar to using a CSS
|
||||||
CSS stylesheet.
|
stylesheet.
|
||||||
|
|
||||||
To use this experimental feature, right-click a component in the
|
To use this experimental feature, right-click a component in the
|
||||||
\uicontrol Navigator or \uicontrol {Form Editor} view and select
|
\uicontrol Navigator or \uicontrol {Form Editor} view and select
|
||||||
|
@@ -41,9 +41,10 @@
|
|||||||
\image qtquick-components-tab.png "Library view Components tab"
|
\image qtquick-components-tab.png "Library view Components tab"
|
||||||
|
|
||||||
\uicontrol Components displays modules that have been added to your project.
|
\uicontrol Components displays modules that have been added to your project.
|
||||||
The modules contain visual components, such as basic shapes, UI controls,
|
In many modules the components have been further organized into different
|
||||||
and 3D components, and add functionality to the project. All components have
|
categories. The modules contain visual components, such as basic shapes,
|
||||||
a type.
|
UI controls, and 3D components, and add functionality to the project.
|
||||||
|
All components have a type.
|
||||||
|
|
||||||
The UI controls can be styled to have the look and feel of a particular
|
The UI controls can be styled to have the look and feel of a particular
|
||||||
operating system, such as \macOS, Windows, Android, or iOS.
|
operating system, such as \macOS, Windows, Android, or iOS.
|
||||||
@@ -110,4 +111,24 @@
|
|||||||
or \uicontrol {Form Editor}, components with a suitable type are
|
or \uicontrol {Form Editor}, components with a suitable type are
|
||||||
automatically created for you. For example, components of the
|
automatically created for you. For example, components of the
|
||||||
\l{Images}{Image} type will be created for graphics files.
|
\l{Images}{Image} type will be created for graphics files.
|
||||||
|
|
||||||
|
\section1 Context Menu Commands
|
||||||
|
|
||||||
|
\image qtquick-library-context-menu.png "Context menu commands in Library"
|
||||||
|
\image qtquick-library-context-menu-hide.png "Context menu command Hide Category"
|
||||||
|
|
||||||
|
To use the context menu commands in Library, right-click on the name of
|
||||||
|
a module or category and select one of the following commands:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li \uicontrol {Remove Module}: removes the component module added to
|
||||||
|
\uicontrol Library.
|
||||||
|
\li \uicontrol {Expand All}: expands all the modules.
|
||||||
|
\li \uicontrol {Collapse All}: collapses all the modules.
|
||||||
|
\li \uicontrol {Hide Category}: hides the category from the module.
|
||||||
|
\li \uicontrol {Show Module Hidden Categories}: shows the hidden
|
||||||
|
categories of the module.
|
||||||
|
\li \uicontrol {Show All Hidden Categories}: shows the hidden
|
||||||
|
categories in all of the modules.
|
||||||
|
\endlist
|
||||||
*/
|
*/
|
||||||
|
@@ -78,7 +78,7 @@
|
|||||||
\list
|
\list
|
||||||
\li \l{Creating Components}{Library}
|
\li \l{Creating Components}{Library}
|
||||||
\li \l{Component Types}{Preset Components}
|
\li \l{Component Types}{Preset Components}
|
||||||
\li \l{Adding Components to Designs}{My Components}
|
\li \l{Creating Component Instances}{My Components}
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section1 Device
|
\section1 Device
|
||||||
|
@@ -32,6 +32,7 @@ from __future__ import print_function
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import collections
|
import collections
|
||||||
|
import glob
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import common
|
import common
|
||||||
@@ -63,20 +64,24 @@ def get_arguments():
|
|||||||
args.with_debug_info = args.build_type == 'RelWithDebInfo'
|
args.with_debug_info = args.build_type == 'RelWithDebInfo'
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
def qtcreator_prefix_path(qt_creator_path):
|
||||||
|
# on macOS the prefix path must be inside the app bundle, but we want to allow
|
||||||
|
# simpler values for --qtc-path, so search in some variants of that
|
||||||
|
candidates = [qt_creator_path, os.path.join(qt_creator_path, 'Contents', 'Resources')]
|
||||||
|
candidates += [os.path.join(path, 'Contents', 'Resources')
|
||||||
|
for path in glob.glob(os.path.join(qt_creator_path, '*.app'))]
|
||||||
|
for path in candidates:
|
||||||
|
if os.path.exists(os.path.join(path, 'lib', 'cmake')):
|
||||||
|
return [path]
|
||||||
|
return [qt_creator_path]
|
||||||
|
|
||||||
def build(args, paths):
|
def build(args, paths):
|
||||||
if not os.path.exists(paths.build):
|
if not os.path.exists(paths.build):
|
||||||
os.makedirs(paths.build)
|
os.makedirs(paths.build)
|
||||||
if not os.path.exists(paths.result):
|
if not os.path.exists(paths.result):
|
||||||
os.makedirs(paths.result)
|
os.makedirs(paths.result)
|
||||||
prefix_paths = [os.path.abspath(fp) for fp in args.prefix_paths] + [paths.qt_creator, paths.qt]
|
prefix_paths = [os.path.abspath(fp) for fp in args.prefix_paths] + [paths.qt]
|
||||||
if common.is_mac_platform():
|
prefix_paths += qtcreator_prefix_path(paths.qt_creator)
|
||||||
# --qtc-path may be
|
|
||||||
# "/path/Qt Creator.app/Contents/Resources",
|
|
||||||
# "/path/Qt Creator.app", or
|
|
||||||
# "/path",
|
|
||||||
# so add some variants to the prefix path
|
|
||||||
prefix_paths += [os.path.join(paths.qt_creator, 'Contents', 'Resources'),
|
|
||||||
os.path.join(paths.qt_creator, 'Qt Creator.app', 'Contents', 'Resources')]
|
|
||||||
prefix_paths = [common.to_posix_path(fp) for fp in prefix_paths]
|
prefix_paths = [common.to_posix_path(fp) for fp in prefix_paths]
|
||||||
separate_debug_info_option = 'ON' if args.with_debug_info else 'OFF'
|
separate_debug_info_option = 'ON' if args.with_debug_info else 'OFF'
|
||||||
cmake_args = ['cmake',
|
cmake_args = ['cmake',
|
||||||
|
@@ -1782,7 +1782,7 @@ class DumperBase():
|
|||||||
def metaString(self, metaObjectPtr, index, revision):
|
def metaString(self, metaObjectPtr, index, revision):
|
||||||
ptrSize = self.ptrSize()
|
ptrSize = self.ptrSize()
|
||||||
stringdataOffset = ptrSize
|
stringdataOffset = ptrSize
|
||||||
if self.isWindowsTarget():
|
if self.isWindowsTarget() and self.qtVersion() >= 0x060000:
|
||||||
stringdataOffset += ptrSize # indirect super data member
|
stringdataOffset += ptrSize # indirect super data member
|
||||||
stringdata = self.extractPointer(toInteger(metaObjectPtr) + stringdataOffset)
|
stringdata = self.extractPointer(toInteger(metaObjectPtr) + stringdataOffset)
|
||||||
|
|
||||||
|
@@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
#include <QDataStream>
|
#include <QDataStream>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace ClangBackEnd {
|
namespace ClangBackEnd {
|
||||||
|
|
||||||
class ProjectPartId
|
class ProjectPartId
|
||||||
|
@@ -54,6 +54,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
bool m_backgroundCheckered;
|
bool m_backgroundCheckered;
|
||||||
bool m_alphaAllowed;
|
bool m_alphaAllowed;
|
||||||
|
bool m_dialogOpen;
|
||||||
};
|
};
|
||||||
|
|
||||||
void QtColorButtonPrivate::slotEditColor()
|
void QtColorButtonPrivate::slotEditColor()
|
||||||
@@ -61,9 +62,14 @@ void QtColorButtonPrivate::slotEditColor()
|
|||||||
QColorDialog::ColorDialogOptions options;
|
QColorDialog::ColorDialogOptions options;
|
||||||
if (m_alphaAllowed)
|
if (m_alphaAllowed)
|
||||||
options |= QColorDialog::ShowAlphaChannel;
|
options |= QColorDialog::ShowAlphaChannel;
|
||||||
|
emit q_ptr->colorChangeStarted();
|
||||||
|
m_dialogOpen = true;
|
||||||
const QColor newColor = QColorDialog::getColor(m_color, q_ptr, QString(), options);
|
const QColor newColor = QColorDialog::getColor(m_color, q_ptr, QString(), options);
|
||||||
if (!newColor.isValid() || newColor == q_ptr->color())
|
m_dialogOpen = false;
|
||||||
|
if (!newColor.isValid() || newColor == q_ptr->color()) {
|
||||||
|
emit q_ptr->colorUnchanged();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
q_ptr->setColor(newColor);
|
q_ptr->setColor(newColor);
|
||||||
emit q_ptr->colorChanged(m_color);
|
emit q_ptr->colorChanged(m_color);
|
||||||
}
|
}
|
||||||
@@ -117,6 +123,7 @@ QtColorButton::QtColorButton(QWidget *parent)
|
|||||||
d_ptr->m_dragging = false;
|
d_ptr->m_dragging = false;
|
||||||
d_ptr->m_backgroundCheckered = true;
|
d_ptr->m_backgroundCheckered = true;
|
||||||
d_ptr->m_alphaAllowed = true;
|
d_ptr->m_alphaAllowed = true;
|
||||||
|
d_ptr->m_dialogOpen = false;
|
||||||
|
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
|
|
||||||
@@ -165,6 +172,11 @@ bool QtColorButton::isAlphaAllowed() const
|
|||||||
return d_ptr->m_alphaAllowed;
|
return d_ptr->m_alphaAllowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QtColorButton::isDialogOpen() const
|
||||||
|
{
|
||||||
|
return d_ptr->m_dialogOpen;
|
||||||
|
}
|
||||||
|
|
||||||
void QtColorButton::paintEvent(QPaintEvent *event)
|
void QtColorButton::paintEvent(QPaintEvent *event)
|
||||||
{
|
{
|
||||||
QToolButton::paintEvent(event);
|
QToolButton::paintEvent(event);
|
||||||
|
@@ -49,11 +49,16 @@ public:
|
|||||||
|
|
||||||
QColor color() const;
|
QColor color() const;
|
||||||
|
|
||||||
|
bool isDialogOpen() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setColor(const QColor &color);
|
void setColor(const QColor &color);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
void colorChangeStarted();
|
||||||
void colorChanged(const QColor &color);
|
void colorChanged(const QColor &color);
|
||||||
|
void colorUnchanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
@@ -63,7 +68,7 @@ protected:
|
|||||||
void dragLeaveEvent(QDragLeaveEvent *event) override;
|
void dragLeaveEvent(QDragLeaveEvent *event) override;
|
||||||
void dropEvent(QDropEvent *event) override;
|
void dropEvent(QDropEvent *event) override;
|
||||||
#endif
|
#endif
|
||||||
private:
|
|
||||||
class QtColorButtonPrivate *d_ptr;
|
class QtColorButtonPrivate *d_ptr;
|
||||||
friend class QtColorButtonPrivate;
|
friend class QtColorButtonPrivate;
|
||||||
};
|
};
|
||||||
|
@@ -388,6 +388,25 @@ void Project::setExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Project::updateExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentPaths,
|
||||||
|
const DocUpdater &docUpdater)
|
||||||
|
{
|
||||||
|
for (const Utils::FilePath &fp : projectDocumentPaths) {
|
||||||
|
for (const auto &doc : d->m_extraProjectDocuments) {
|
||||||
|
if (doc->filePath() == fp) {
|
||||||
|
docUpdater(doc.get());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Project::updateExtraProjectFiles(const DocUpdater &docUpdater)
|
||||||
|
{
|
||||||
|
for (const auto &doc : qAsConst(d->m_extraProjectDocuments))
|
||||||
|
docUpdater(doc.get());
|
||||||
|
}
|
||||||
|
|
||||||
Target *Project::target(Utils::Id id) const
|
Target *Project::target(Utils::Id id) const
|
||||||
{
|
{
|
||||||
return Utils::findOrDefault(d->m_targets, Utils::equal(&Target::id, id));
|
return Utils::findOrDefault(d->m_targets, Utils::equal(&Target::id, id));
|
||||||
|
@@ -169,6 +169,9 @@ public:
|
|||||||
void setExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentPaths,
|
void setExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentPaths,
|
||||||
const DocGenerator &docGenerator = {},
|
const DocGenerator &docGenerator = {},
|
||||||
const DocUpdater &docUpdater = {});
|
const DocUpdater &docUpdater = {});
|
||||||
|
void updateExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentPaths,
|
||||||
|
const DocUpdater &docUpdater);
|
||||||
|
void updateExtraProjectFiles(const DocUpdater &docUpdater);
|
||||||
|
|
||||||
void setDisplayName(const QString &name);
|
void setDisplayName(const QString &name);
|
||||||
void setProjectLanguage(Utils::Id id, bool enabled);
|
void setProjectLanguage(Utils::Id id, bool enabled);
|
||||||
|
@@ -122,7 +122,8 @@ public:
|
|||||||
Q_UNUSED(errorString)
|
Q_UNUSED(errorString)
|
||||||
Q_UNUSED(flag)
|
Q_UNUSED(flag)
|
||||||
Q_UNUSED(type)
|
Q_UNUSED(type)
|
||||||
m_priFile->scheduleUpdate();
|
if (m_priFile)
|
||||||
|
m_priFile->scheduleUpdate();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,7 +693,26 @@ void QmakeBuildSystem::asyncUpdate()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure we ignore requests for re-evaluation for files whose QmakePriFile objects
|
||||||
|
// will get deleted during the parse.
|
||||||
|
const auto docUpdater = [](Core::IDocument *doc) {
|
||||||
|
static_cast<QmakePriFileDocument *>(doc)->setPriFile(nullptr);
|
||||||
|
};
|
||||||
|
if (m_asyncUpdateState != AsyncFullUpdatePending) {
|
||||||
|
QSet<FilePath> projectFilePaths;
|
||||||
|
for (QmakeProFile * const file : qAsConst(m_partialEvaluate)) {
|
||||||
|
QVector<QmakePriFile *> priFiles = file->children();
|
||||||
|
for (int i = 0; i < priFiles.count(); ++i) {
|
||||||
|
const QmakePriFile * const priFile = priFiles.at(i);
|
||||||
|
projectFilePaths << priFile->filePath();
|
||||||
|
priFiles << priFile->children();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
project()->updateExtraProjectFiles(projectFilePaths, docUpdater);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_asyncUpdateState == AsyncFullUpdatePending) {
|
if (m_asyncUpdateState == AsyncFullUpdatePending) {
|
||||||
|
project()->updateExtraProjectFiles(docUpdater);
|
||||||
rootProFile()->asyncUpdate();
|
rootProFile()->asyncUpdate();
|
||||||
} else {
|
} else {
|
||||||
foreach (QmakeProFile *file, m_partialEvaluate)
|
foreach (QmakeProFile *file, m_partialEvaluate)
|
||||||
|
@@ -187,12 +187,46 @@ void CommentValueDelegate::setEditorData(QWidget *editor, const QModelIndex &ind
|
|||||||
auto *e = qobject_cast<QLineEdit *>(editor);
|
auto *e = qobject_cast<QLineEdit *>(editor);
|
||||||
e->setText(data.toString());
|
e->setText(data.toString());
|
||||||
} else if (data.userType() == QMetaType::QColor) {
|
} else if (data.userType() == QMetaType::QColor) {
|
||||||
auto *e = qobject_cast<Utils::QtColorButton *>(editor);
|
auto *e = qobject_cast<AnnotationTableColorButton *>(editor);
|
||||||
e->setColor(data.value<QColor>());
|
e->setColor(data.value<QColor>());
|
||||||
|
e->installEventFilter(e);
|
||||||
|
connect(e,
|
||||||
|
&AnnotationTableColorButton::editorFinished,
|
||||||
|
this,
|
||||||
|
&CommentValueDelegate::slotEditorFinished,
|
||||||
|
Qt::UniqueConnection);
|
||||||
|
connect(e,
|
||||||
|
&AnnotationTableColorButton::editorCanceled,
|
||||||
|
this,
|
||||||
|
&CommentValueDelegate::slotEditorCanceled,
|
||||||
|
Qt::UniqueConnection);
|
||||||
} else
|
} else
|
||||||
QItemDelegate::setEditorData(editor, index);
|
QItemDelegate::setEditorData(editor, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AnnotationTableColorButton::eventFilter(QObject *object, QEvent *event)
|
||||||
|
{
|
||||||
|
AnnotationTableColorButton *editor = qobject_cast<AnnotationTableColorButton*>(object);
|
||||||
|
if (editor && event->type() == QEvent::FocusOut && editor->isDialogOpen())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return QObject::eventFilter(object, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommentValueDelegate::slotEditorCanceled(QWidget *editor)
|
||||||
|
{
|
||||||
|
emit closeEditor(editor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommentValueDelegate::slotEditorFinished(QWidget *editor)
|
||||||
|
{
|
||||||
|
AnnotationTableColorButton* e = qobject_cast<AnnotationTableColorButton *>(editor);
|
||||||
|
if (e) {
|
||||||
|
emit commitData(editor);
|
||||||
|
emit closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CommentValueDelegate::setModelData(QWidget *editor,
|
void CommentValueDelegate::setModelData(QWidget *editor,
|
||||||
QAbstractItemModel *model,
|
QAbstractItemModel *model,
|
||||||
const QModelIndex &index) const
|
const QModelIndex &index) const
|
||||||
@@ -201,9 +235,11 @@ void CommentValueDelegate::setModelData(QWidget *editor,
|
|||||||
if (data.userType() == qMetaTypeId<RichTextProxy>())
|
if (data.userType() == qMetaTypeId<RichTextProxy>())
|
||||||
return;
|
return;
|
||||||
else if (data.userType() == QMetaType::QColor)
|
else if (data.userType() == QMetaType::QColor)
|
||||||
|
{
|
||||||
model->setData(index,
|
model->setData(index,
|
||||||
qobject_cast<Utils::QtColorButton *>(editor)->color(),
|
qobject_cast<AnnotationTableColorButton *>(editor)->color(),
|
||||||
Qt::DisplayRole);
|
Qt::DisplayRole);
|
||||||
|
}
|
||||||
else if (data.userType() == QMetaType::QString)
|
else if (data.userType() == QMetaType::QString)
|
||||||
model->setData(index, qobject_cast<QLineEdit *>(editor)->text(), Qt::DisplayRole);
|
model->setData(index, qobject_cast<QLineEdit *>(editor)->text(), Qt::DisplayRole);
|
||||||
else
|
else
|
||||||
@@ -247,6 +283,16 @@ void RichTextCellEditor::mouseReleaseEvent(QMouseEvent *)
|
|||||||
emit clicked();
|
emit clicked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AnnotationTableColorButton::AnnotationTableColorButton(QWidget *parent)
|
||||||
|
: Utils::QtColorButton(parent)
|
||||||
|
{
|
||||||
|
connect(this, &Utils::QtColorButton::colorChangeStarted, this, [this](){emit editorStarted(this);});
|
||||||
|
connect(this, &Utils::QtColorButton::colorChanged, this, [this](QColor){emit editorFinished(this);});
|
||||||
|
connect(this, &Utils::QtColorButton::colorUnchanged, this, [this](){emit editorCanceled(this);});
|
||||||
|
}
|
||||||
|
|
||||||
|
AnnotationTableColorButton::~AnnotationTableColorButton() {}
|
||||||
|
|
||||||
AnnotationTableView::AnnotationTableView(QWidget *parent)
|
AnnotationTableView::AnnotationTableView(QWidget *parent)
|
||||||
: QTableView(parent)
|
: QTableView(parent)
|
||||||
, m_model(std::make_unique<QStandardItemModel>())
|
, m_model(std::make_unique<QStandardItemModel>())
|
||||||
@@ -283,7 +329,7 @@ AnnotationTableView::AnnotationTableView(QWidget *parent)
|
|||||||
m_editorFactory->registerEditor(qMetaTypeId<RichTextProxy>(),
|
m_editorFactory->registerEditor(qMetaTypeId<RichTextProxy>(),
|
||||||
new QItemEditorCreator<RichTextCellEditor>("richText"));
|
new QItemEditorCreator<RichTextCellEditor>("richText"));
|
||||||
m_editorFactory->registerEditor(QMetaType::QColor,
|
m_editorFactory->registerEditor(QMetaType::QColor,
|
||||||
new QItemEditorCreator<Utils::QtColorButton>("color"));
|
new QItemEditorCreator<AnnotationTableColorButton>("color"));
|
||||||
|
|
||||||
m_valueDelegate.setItemEditorFactory(m_editorFactory.get());
|
m_valueDelegate.setItemEditorFactory(m_editorFactory.get());
|
||||||
connect(&m_valueDelegate,
|
connect(&m_valueDelegate,
|
||||||
|
@@ -33,12 +33,15 @@
|
|||||||
#include "annotation.h"
|
#include "annotation.h"
|
||||||
#include "defaultannotations.h"
|
#include "defaultannotations.h"
|
||||||
|
|
||||||
|
#include <utils/qtcolorbutton.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QStandardItemModel;
|
class QStandardItemModel;
|
||||||
class QCompleter;
|
class QCompleter;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
class CommentDelegate : public QItemDelegate
|
class CommentDelegate : public QItemDelegate
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -98,6 +101,11 @@ public:
|
|||||||
void setModelData(QWidget *editor,
|
void setModelData(QWidget *editor,
|
||||||
QAbstractItemModel *model,
|
QAbstractItemModel *model,
|
||||||
const QModelIndex &index) const override;
|
const QModelIndex &index) const override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void slotEditorFinished(QWidget* editor);
|
||||||
|
void slotEditorCanceled(QWidget* editor);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void richTextEditorRequested(int index, QString const &richText);
|
void richTextEditorRequested(int index, QString const &richText);
|
||||||
};
|
};
|
||||||
@@ -129,6 +137,21 @@ private:
|
|||||||
QMetaObject::Connection m_connection;
|
QMetaObject::Connection m_connection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AnnotationTableColorButton : public Utils::QtColorButton
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
AnnotationTableColorButton(QWidget* parent);
|
||||||
|
~AnnotationTableColorButton();
|
||||||
|
|
||||||
|
bool eventFilter(QObject *object, QEvent *event) override;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void editorStarted(QWidget* editor);
|
||||||
|
void editorFinished(QWidget* editor);
|
||||||
|
void editorCanceled(QWidget* editor);
|
||||||
|
};
|
||||||
|
|
||||||
class AnnotationTableView : public QTableView
|
class AnnotationTableView : public QTableView
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@@ -292,7 +292,7 @@ void ItemLibraryWidget::handleAddImport(int index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_model->changeImports({import}, {});
|
m_model->changeImports({import}, {});
|
||||||
QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager();
|
|
||||||
m_stackedWidget->setCurrentIndex(0); // switch to the Components view after import is added
|
m_stackedWidget->setCurrentIndex(0); // switch to the Components view after import is added
|
||||||
updateSearch();
|
updateSearch();
|
||||||
}
|
}
|
||||||
|
@@ -3669,7 +3669,7 @@ void TextEditorWidgetPrivate::highlightSearchResults(const QTextBlock &block, co
|
|||||||
QString text = block.text();
|
QString text = block.text();
|
||||||
text.replace(QChar::Nbsp, QLatin1Char(' '));
|
text.replace(QChar::Nbsp, QLatin1Char(' '));
|
||||||
int idx = -1;
|
int idx = -1;
|
||||||
int l = 1;
|
int l = 0;
|
||||||
|
|
||||||
const int left = data.viewportRect.left() - int(data.offset.x());
|
const int left = data.viewportRect.left() - int(data.offset.x());
|
||||||
const int right = data.viewportRect.right() - int(data.offset.x());
|
const int right = data.viewportRect.right() - int(data.offset.x());
|
||||||
|