diff --git a/doc/qtdesignstudio/examples/doc/treadmilMcu.qdoc b/doc/qtdesignstudio/examples/doc/treadmilMcu.qdoc
index ddb138ede1e..419ad37b0e2 100644
--- a/doc/qtdesignstudio/examples/doc/treadmilMcu.qdoc
+++ b/doc/qtdesignstudio/examples/doc/treadmilMcu.qdoc
@@ -22,7 +22,7 @@
\section1 Getting the MCU Treadmill design to Figma
\list 1
- \li Get the optimized MCU Treadmill for Figma design from \l {https://git.qt.io/public-demos/qtdesign-studio/-/blob/treadmill-revision-revision/examples/TreadmillMcuDemo/figmadesign/McuDemo.fig} {here}.
+ \li Get the optimized MCU Treadmill for Figma design from \l {https://git.qt.io/public-demos/qtdesign-studio/-/blob/master/examples/TreadmillMcuDemo/figmadesign/McuDemo.fig} {here}.
\li Go to \l {https://www.figma.com/}{Figma} and log in.
\li Open the downloaded MCU Treadmill design in Figma.
\endlist
diff --git a/doc/qtdesignstudio/src/best practices/best-practices-glow.qdoc b/doc/qtdesignstudio/src/best practices/best-practices-glow.qdoc
index 29847e73004..6caa58c1311 100644
--- a/doc/qtdesignstudio/src/best practices/best-practices-glow.qdoc
+++ b/doc/qtdesignstudio/src/best practices/best-practices-glow.qdoc
@@ -14,7 +14,7 @@
using image-based lighting) or add ambient light. Using the glow effect is one way to make your
scene more realistic.
- \image glow-example.webp
+ \image {glow-example.webp} {An example showing the difference between using a glow effect and not using a glow effect.}
\section1 Creating a project with ExtendedSceneEnvironment
@@ -29,7 +29,7 @@
\uicontrol {ExtendedSceneEnvironment} component from \uicontrol Components to
the \uicontrol 2D or \uicontrol Navigator view.
- \image ext-scene-env-navigator.webp
+ \image {ext-scene-env-navigator.webp} {The ExtendedSceneEnvironment in the Navigator view.}
\section1 Enabling the Glow effect
@@ -37,7 +37,7 @@
then, in the \uicontrol Properties view, select \uicontrol Enabled in the
\uicontrol Glow section.
- \image glow-properties.webp
+ \image {glow-properties.webp} {The Glow effect properties in the Properties view.}
\note When setting up or experimenting with the glow effect, use the \l {Blend Modes}{Replace}
blend mode to see the effect more clearly.
@@ -52,7 +52,7 @@
properties is to change them directly in the \uicontrol Properties view in \QDS and see the
changes live in the \uicontrol 2D view.
- \image glow-example-project.webp
+ \image {glow-example-project.webp} {The Flashlight Example project running.}
\section1 Basic properties
@@ -96,13 +96,13 @@
\li Example
\row
\li Bloom disabled
- \li \image bleed-scale-no.webp
+ \li \image {bleed-scale-no.webp} {A close-up of a light in the scene with Bloom disabled.}
\row
\li 8
- \li \image bleed-scale-8.webp
+ \li \image {bleed-scale-8.webp} {A close-up of a light in the scene with HDR Scale set to 8.}
\row
\li 1
- \li \image bleed-scale-1.webp
+ \li \image {bleed-scale-1.webp} {A close-up of a light in the scene with HDR Scale set to 1.}
\endtable
\section1 Blur Levels
@@ -122,13 +122,13 @@
\li Example
\row
\li 1, 2, 3
- \li \image glow_low_blur_levels.webp
+ \li \image {glow_low_blur_levels.webp} {A close-up of a light in the scene with Blur level set to 1, 2, 3.}
\row
\li 5, 6, 7
- \li \image glow_high_blur_levels.webp
+ \li \image {glow_high_blur_levels.webp} {A close-up of a light in the scene with Blur level set to 5, 6, 7.}
\row
\li 1, 2, 3, 4, 5, 6, 7
- \li \image glow_all_blur_levels.webp
+ \li \image {glow_all_blur_levels.webp} {A close-up of a light in the scene with Blur level set to 1, 2, 3, 4, 5, 6, 7.}
\endtable
\section2 Blend modes
@@ -143,21 +143,21 @@
\row
\li Additive
\li Often recommended for outdoor scenes with a visible sky or sun.
- \li \image glow-additive-blend.webp
+ \li \image {glow-additive-blend.webp} {A close-up of a light in the scene with Blend mode set to Additive.}
\row
\li Screen
\li Similar to \uicontrol {Additive}, but the result is less bright.
- \li \image glow-screen-blend.webp
+ \li \image {glow-screen-blend.webp} {A close-up of a light in the scene with Blend mode set to Additive.}
\row
\li SoftLight
\li Often recommended for in-door environments.
- \li \image glow-softlight-blend.webp
+ \li \image {glow-softlight-blend.webp} {A close-up of a light in the scene with Blend mode set to SoftLight.}
\row
\li Replace
\li Does not perform any blending, but displays only the contribution
the glow effect would blend with the actual content. In practice, this is useful for
experimenting and troubleshooting when setting up the glow effect.
- \li \image glow-replace-blend.webp
+ \li \image {glow-replace-blend.webp} {A close-up of a light in the scene with Blend mode set to Replace.}
\endtable
\section1 Improvement properties
@@ -187,13 +187,13 @@
\li Example
\row
\li No effect
- \li \image glow-no-enhancment.webp
+ \li \image {glow-no-enhancment.webp} {A close-up of a light in the scene with no effect.}
\row
\li High Quality
- \li \image glow-high-quality.webp
+ \li \image {glow-high-quality.webp} {A close-up of a light in the scene with the High Quality effect.}
\row
\li Bicubic Upsampling
- \li \image glow-bicubic.webp
+ \li \image {glow-bicubic.webp} {A close-up of a light in the scene with the Bicubic Upsampling effect.}
\endtable
diff --git a/doc/qtdesignstudio/src/best practices/best-practices-shader-code.qdoc b/doc/qtdesignstudio/src/best practices/best-practices-shader-code.qdoc
index 7ddd066e961..0e1148ca7b9 100644
--- a/doc/qtdesignstudio/src/best practices/best-practices-shader-code.qdoc
+++ b/doc/qtdesignstudio/src/best practices/best-practices-shader-code.qdoc
@@ -146,7 +146,7 @@
You can control these settings either from the \uicontrol Properties view or from code.
- \image timeRunning_property.webp
+ \image {timeRunning_property.webp} {The Running setting turned on in the Properties view.}
\code
NorthernLights {
diff --git a/doc/qtdesignstudio/src/components/qtquick-components-custom.qdoc b/doc/qtdesignstudio/src/components/qtquick-components-custom.qdoc
index 1c8d5ef8dd6..f22dbdf0cf0 100644
--- a/doc/qtdesignstudio/src/components/qtquick-components-custom.qdoc
+++ b/doc/qtdesignstudio/src/components/qtquick-components-custom.qdoc
@@ -13,7 +13,7 @@
new components that you can create instances of. You can then use the
instances of the new components in other components.
- \image qtquick-components-custom.png "Custom components in My Components"
+ \image {qtquick-components-custom.png} {Custom components in My Components.}
Custom components are stored in \uicontrol Components >
\uicontrol {My Components}. You can create instances of custom components
@@ -86,7 +86,7 @@
in \uicontrol Navigator or the \uicontrol {2D} view, and select
\uicontrol {Create Component} in the context menu.
- \image qtcreator-move-component-into-separate-file.png
+ \image {qtcreator-move-component-into-separate-file.png} {The Move Component into Separate File dialog.}
Give the new component a name, and select whether properties are set for
the new component or for the original one.
@@ -117,7 +117,7 @@
\uicontrol Navigator or \uicontrol {2D} view and select
\uicontrol {Merge File with Template} in the context menu.
- \image qmldesigner-merge-with-template.png "Merge with Template dialog"
+ \image {qmldesigner-merge-with-template.png} {The Merge with Template dialog.}
In the \uicontrol Template field, select the file to use as a template.
*/
diff --git a/doc/qtdesignstudio/src/components/qtquick-controls.qdoc b/doc/qtdesignstudio/src/components/qtquick-controls.qdoc
index aa650ae7d65..227e86cee5b 100644
--- a/doc/qtdesignstudio/src/components/qtquick-controls.qdoc
+++ b/doc/qtdesignstudio/src/components/qtquick-controls.qdoc
@@ -13,7 +13,7 @@
available in \uicontrol Components >
\uicontrol {Qt Quick Controls} > \uicontrol Controls.
- \image qtquick-designer-qtquickcontrols-types.png "Qt Quick Controls components"
+ \image {qtquick-designer-qtquickcontrols-types.png} {The Qt Quick Controls components in the Components view.}
The following types of controls are available for user interaction:
@@ -36,7 +36,7 @@
You can set control properties in the \l Properties view.
- \image qtquick-designer-control-properties.png "Control section in Properties"
+ \image {qtquick-designer-control-properties.png} {The Control section in the Properties view.}
The \uicontrol Enable check box indicates whether the control is enabled.
@@ -64,7 +64,7 @@
most suitable for a use case and discuss the values you can set for button
properties in the \uicontrol Properties view.
- \image qtquick-designer-button-types.png "Button controls in the 2D view"
+ \image {qtquick-designer-button-types.png} {Different types of button controls in the 2D view.}
Recommendations for buttons that contain text:
@@ -387,20 +387,20 @@
\target progress-bar-control
\section2 Progress Bar
- \image qtquickcontrols2-progressbar.gif "Progress bar"
+ \image {qtquickcontrols2-progressbar.gif} {An animation of a Progress Bar running.}
\uicontrol {Progress Bar} indicates the progress of an operation. You
can specify the initial value in the \uicontrol Value field, but it
should be updated regularly. Specify the range in the \uicontrol From
and \uicontrol To fields, which can both contain any value.
- \image qtquick-designer-progressbar-properties.png "Progress Bar properties"
+ \image {qtquick-designer-progressbar-properties.png} {The Progress Bar section in the Properties view.}
Select the \uicontrol Indeterminate check box when unable to determine the
size of the item being downloaded, or if the download progress might get
interrupted due to a network failure.
- \image qtquickcontrols2-progressbar-indeterminate.gif
+ \image {qtquickcontrols2-progressbar-indeterminate.gif} {A runnning Progress Bar with the Indeterminate property turned on.}
The indeterminate mode is similar to a \l {Busy Indicator} in that both can
be used to indicate background activity. Due to their visual differences,
@@ -561,7 +561,7 @@
\section2 Tumbler
- \image qtquickcontrols2-tumbler-wrap.gif
+ \image {qtquickcontrols2-tumbler-wrap.gif} {An animation of a Tumbler with multiple wheels spinning.}
\uicontrol Tumbler allows users to select an option from a spinnable
\e wheel of items. It is useful when there are too many options to use, for
@@ -573,7 +573,7 @@
field. Select the index of the current option in the
\uicontrol {Current index} field.
- \image qtquick-designer-tumbler-properties.png "Tumbler properties"
+ \image {qtquick-designer-tumbler-properties.png} {The Tumbler section in the Properties view.}
To enable wrapping, select the \uicontrol Wrap check box.
@@ -600,18 +600,18 @@
If the total width of the buttons exceeds the available width of the tab
bar, it automatically becomes \l{Flickable}{flickable}.
- \image qtquickcontrols2-tabbar-flickable.png
+ \image {qtquickcontrols2-tabbar-flickable.png} {A Tab Bar exceeding the available width.}
\section1 Tool Bar
- \image qtquickcontrols2-toolbar.png
+ \image {qtquickcontrols2-toolbar.png} {A Tool Bar}
\uicontrol {Tool Bar} contains application-wide and context-sensitive
actions and controls, such as navigation buttons and search fields. A
toolbar is commonly used as a header or footer of an \l ApplicationWindow.
Select the toolbar position in the \uicontrol Position field.
- \image qtquick-designer-toolbar-properties.png "Tool Bar properties"
+ \image {qtquick-designer-toolbar-properties.png} {The Tool Bar section in the Properties View.}
\uicontrol {Tool Button} is nearly identical to \l Button, but it has a
graphical appearance that makes it more suitable for insertion into a
diff --git a/doc/qtdesignstudio/src/components/qtquick-images.qdoc b/doc/qtdesignstudio/src/components/qtquick-images.qdoc
index 6528388f1ae..151ef30bfed 100644
--- a/doc/qtdesignstudio/src/components/qtquick-images.qdoc
+++ b/doc/qtdesignstudio/src/components/qtquick-images.qdoc
@@ -204,12 +204,12 @@
the ISO icon in the \l Navigator or \l {2D} view, and then select
\uicontrol {Choose Icon} in the context menu.
- \image studio-iso-icon.png
+ \image {studio-iso-icon.png} {An Iso Icon selected in the 2D view.}
You can use the \l{Picking colors}{color picker} in \l Properties to
set the value of \uicontrol {Icon color}.
- \image iso-icon-browser.png
+ \image {iso-icon-browser.png} {The Iso Icon browser window.}
\section1 Summary of the image components
diff --git a/doc/qtdesignstudio/src/components/qtquick-shapes.qdoc b/doc/qtdesignstudio/src/components/qtquick-shapes.qdoc
index 310615b0df9..ac386724832 100644
--- a/doc/qtdesignstudio/src/components/qtquick-shapes.qdoc
+++ b/doc/qtdesignstudio/src/components/qtquick-shapes.qdoc
@@ -199,7 +199,7 @@
fields in the \uicontrol Opacity section are used to hide and show either
the front or back side of the item at a time.
- \image studio-flipable.png
+ \image {studio-flipable.png} {A Flipable in the 2D, Navigator, and Properties view.}
The \uicontrol {Flip angle} property is used to animate the angle
of the component to produce the flipping effect. The value of the
diff --git a/doc/qtdesignstudio/src/developers/studio-accessing-output-issues-and-warnings.qdoc b/doc/qtdesignstudio/src/developers/studio-accessing-output-issues-and-warnings.qdoc
index 7bcb6588abb..7f26ce04664 100644
--- a/doc/qtdesignstudio/src/developers/studio-accessing-output-issues-and-warnings.qdoc
+++ b/doc/qtdesignstudio/src/developers/studio-accessing-output-issues-and-warnings.qdoc
@@ -8,7 +8,7 @@
\title Accessing output, issue, and warning messages
- \image studio-output-view.webp Qt Design Studio Output view
+ \image {studio-output-view.webp} {The Qt Design Studio Output view.}
\QDS projects generate output information that represent the
executed processes. It also shows you the issues that stop a project from
@@ -41,10 +41,10 @@
\li Message example
\row
\li Issue notification
- \li \image studio-issue-message.webp
+ \li \image {studio-issue-message.webp} {Example issue notification in the Output view.}
\row
\li Warning notification
- \li \image studio-warning-message.webp
+ \li \image {studio-warning-message.webp} {Example warning notification in the Output view.}
\endtable
diff --git a/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc b/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc
index 7284eee1a1c..d5518ffeed5 100644
--- a/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc
+++ b/doc/qtdesignstudio/src/developers/studio-jump-to-the-code.qdoc
@@ -26,7 +26,7 @@
\li Select \uicontrol {Jump to the Code}.
\endlist
- \image jump-to-the-code-from-navigator-view.webp
+ \image {jump-to-the-code-from-navigator-view.webp} {Selecting Jump to the Code from the context menu in the Navigator view.}
\section1 Jump to the Code from the 2D view
@@ -35,7 +35,7 @@
\li Select \uicontrol {Jump to the Code}.
\endlist
- \image jump-to-the-code-from-2D-view.webp
+ \image {jump-to-the-code-from-2D-view.webp} {Selecting Jump to the Code from the context menu in the 2D view.}
\note Alternatively, you can select the component in the \uicontrol {Navigator} view
or in the \uicontrol {2D} view and select \key {F4}. That takes you to the code
@@ -50,7 +50,7 @@
\li Select \uicontrol {Jump to the Code}.
\endlist
- \image jump-to-the-code-from-state-view.webp
+ \image {jump-to-the-code-from-state-view.webp} {Selecting Jump to the Code from the context menu in the States view.}
\section1 Jump to the Code from the Connections view
@@ -60,6 +60,6 @@
to jump to the code segment related to the connection.
\endlist
- \image jump-to-the-code-from-connections-view.webp
+ \image {jump-to-the-code-from-connections-view.webp} {Selecting Jump to the Code from the context menu in the Connections view.}
*/
diff --git a/doc/qtdesignstudio/src/effects-concept.qdoc b/doc/qtdesignstudio/src/effects-concept.qdoc
index a79198edf25..849b5484d32 100644
--- a/doc/qtdesignstudio/src/effects-concept.qdoc
+++ b/doc/qtdesignstudio/src/effects-concept.qdoc
@@ -19,7 +19,7 @@
designed for both experienced developers and beginners, simplifying the process of developing
visual effects without requiring extensive knowledge of shader coding.
-\image northern-lights-effect.webp
+\image {northern-lights-effect.webp} {A northern lights effect in Effect Composer.}
Key features of the \QDS Effect Composer:
diff --git a/doc/qtdesignstudio/src/mcus/qtdesignstudio-creating-projects-for-mcus.qdoc b/doc/qtdesignstudio/src/mcus/qtdesignstudio-creating-projects-for-mcus.qdoc
index ea8912f12dd..247a456f27b 100644
--- a/doc/qtdesignstudio/src/mcus/qtdesignstudio-creating-projects-for-mcus.qdoc
+++ b/doc/qtdesignstudio/src/mcus/qtdesignstudio-creating-projects-for-mcus.qdoc
@@ -12,7 +12,7 @@
project. When you create a project with the wizard, all the necessary files
are created, you can adjust the project settings, and save custom presets.
- \image studio-preset-for-mcus.png
+ \image studio-preset-for-mcus.png {The Qt for MCU preset on the Qt Design Studio Welcome page.}
Using the \uicontrol {\QMCU} preset creates an application that uses a subset
of the default components that you can deploy, run, and debug on MCU boards.
diff --git a/doc/qtdesignstudio/src/mcus/qtdesignstudio-developing-applications-for-mcus.qdoc b/doc/qtdesignstudio/src/mcus/qtdesignstudio-developing-applications-for-mcus.qdoc
index 00f8b6f9ae2..9d8291f34af 100644
--- a/doc/qtdesignstudio/src/mcus/qtdesignstudio-developing-applications-for-mcus.qdoc
+++ b/doc/qtdesignstudio/src/mcus/qtdesignstudio-developing-applications-for-mcus.qdoc
@@ -18,7 +18,7 @@
mode to modify UI files (.ui.qml). For more information, see
\l {Implementing applications}.
- \image qds-mcu-target-deployment.png
+ \image {qds-mcu-target-deployment.png} {The workflow of using Qt Design Studio and Qt for MCUs to create an application for an MCU target device.}
With Qt Creator, you can test, preview, and fine-tune your designs directly
on the desktop or on an actual MCU target device. As a developer you can use
diff --git a/doc/qtdesignstudio/src/overviews/qt-design-viewer-navigation.qdoc b/doc/qtdesignstudio/src/overviews/qt-design-viewer-navigation.qdoc
index 61a4c378e4a..2f945b58dae 100644
--- a/doc/qtdesignstudio/src/overviews/qt-design-viewer-navigation.qdoc
+++ b/doc/qtdesignstudio/src/overviews/qt-design-viewer-navigation.qdoc
@@ -68,7 +68,7 @@
\endlist
- \image web-navigation-components.png
+ \image {web-navigation-components.png} {The structure of the web application in the Navigator view.}
\section1 Creating the pages
@@ -88,7 +88,7 @@
\li Set \uicontrol {Root Item} to \e Rectangle.
\endlist
- \image web-navigation-new-file.png
+ \image {web-navigation-new-file.png} {The New File dialog.}
When you have created the new page, select \e rectangle in
\uicontrol Navigator, and in the \uicontrol Properties view:
@@ -114,7 +114,7 @@
\li Top, 100
\li Left, 50
\endlist
- \image web-navigation-page-margins.png
+ \image {web-navigation-page-margins.png} {The Anchor and Margin properties for the web application header.}
\endlist
Now, with the first page done, create two more pages in the same way. For these
@@ -124,13 +124,13 @@ You can change the file that you are working on from the drop-down menu in the
toolbar. Now, select \e Screen01.ui.qml from this menu to go back to your
main page.
-\image web-navigation-change-file.png
+\image {web-navigation-change-file.png} {Changing the file in top toolbar.}
You can see the pages you created under \uicontrol {My Components} in the
\uicontrol Components view. To edit a component, right-click it in
\uicontrol Components and select \uicontrol {Edit Component}
-\image web-navigation-page-components.png
+\image {web-navigation-page-components.png} {The web app pages in the Components view.}
\section1 Organizing the pages
@@ -139,7 +139,7 @@ To organize the pages vertically:
\list 1
\li From \uicontrol Components, drag each of the pages to
\e columnLayout in \uicontrol Navigator.
- \image web-navigation-components-2.png
+ \image {web-navigation-components-2.png} {}
\li Select \e columnLayout in Navigator and in \uicontrol Properties:
\list
\li Next to \uicontrol Size > \uicontrol W and \uicontrol Size >
@@ -189,7 +189,7 @@ main rectangle so that it adapts to the window size:
\imageactioniconbinding
next to \uicontrol Width and select \uicontrol {Set Binding}.
\li Enter \c {Window.width}
- \image web-navigation-size-binding.png
+ \image {web-navigation-size-binding.png} {Window.width set in Binding Editor.}
\li Repeat step 2 and 3 for \uicontrol Height and set the value to
\c {Window.height}.
\endlist
@@ -226,7 +226,7 @@ vertically to the correct place:
\li Select \imageactioniconbinding
next to \uicontrol Width and select \uicontrol {Set Binding}.
\li Enter \c {parent.width}.
- \image web-navigation-size-binding-2.png
+ \image {web-navigation-size-binding-2.png} {parent.width set in Binding Editor.}
\li In \uicontrol Navigator:
\list 1
\li Select \e Button and on the \uicontrol Button tab in \uicontrol Properties,
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-overview.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-overview.qdoc
index f93808d2619..b0dcc5f8e37 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-overview.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-overview.qdoc
@@ -13,7 +13,7 @@
You can use \QBF to export designs from Figma to a \e {.qtbridge}
archive that you can \l{Importing 2D Assets}{import} to projects in \QDS.
- \image studio-figma-export.png
+ \image {studio-figma-export.png} {Qt Bridge for Figma open in Figma.}
The following topics describe setting up and using \QBF:
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-using.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-using.qdoc
index edcdeed411a..b58151a5e0e 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-using.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-figma-using.qdoc
@@ -226,7 +226,7 @@
\section2 Settings
- \image qt-figma-bridge-settings.png
+ \image {qt-figma-bridge-settings.png} {The Qt Bridge for Figma settings window in Figma.}
You can export assets in the selected format (JPG, PNG, or SVG).
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-overview.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-overview.qdoc
index 80c41467290..fe198b067f3 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-overview.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-overview.qdoc
@@ -13,7 +13,7 @@
You can use \QBPS to export designs from Adobe Photoshop to \e {.metadata}
format that you can \l{Importing 2D Assets}{import} to projects in \QDS.
- \image studio-ps-export.png
+ \image {studio-ps-export.png} {Qt Bridge for Photoshop open in Adobe Photoshop.}
The following topics describe setting up and using \QBPS:
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-setup.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-setup.qdoc
index 489dbabeeff..0e7a4443f85 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-setup.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-setup.qdoc
@@ -81,7 +81,7 @@
enter a password in the \uicontrol Password field.
\li To test that the connection is working properly, start \QBPS and
select the settings icon in the top right corner.
- \image qt-bridge-settings.png
+ \image {qt-bridge-settings.png} {The Qt Bridge for Photoshop settings window in Adobe Photoshop.}
\li In the \uicontrol Password field, enter the password you entered in
Adobe Photoshop and select \uicontrol {Connect}.
\li In the \uicontrol {Export Path} group, select the folder button
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-using.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-using.qdoc
index f6d78347464..7c68cea1377 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-using.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-ps-using.qdoc
@@ -133,7 +133,7 @@
\l{Property Aliases}{property aliases} to fetch the values from other
properties.
- \image qt-bridge.png
+ \image {qt-bridge.png} {The Qt Bridge for Photoshop default home screen.}
\section2 Specifying settings for exporting assets
@@ -238,7 +238,7 @@
In the \uicontrol {ID Suffix} field, specify an ID suffix that will be
appended to all auto generated IDs.
- \image qt-bridge-qml-id-settings.png
+ \image {qt-bridge-qml-id-settings.png} {The ID Prefix field highlighted in the settings.}
\section1 Cloning documents
@@ -246,7 +246,7 @@
allows the user to filter out certain kind of layers and groups. In the \QBPS
\uicontrol Settings dialog, select \uicontrol {Clone} to start cloning the document.
- \image qt-bridge-clone.png
+ \image {qt-bridge-clone.png} {The Clone button highlighted in the Clone document settings.}
\section2 Clone options
The following exclusion options can be selected to exclude certain kind of layers and
@@ -273,7 +273,7 @@
\note The sanitization is done in memory and the document must be saved to
keep the sanitized state.
- \image qt-bridge-sanitize.png
+ \image {qt-bridge-sanitize.png} {The Sanitize button highlighted in the settings.}
\section1 Extending \QBPS
You can change the default behavior of \QBPS with the help of a JSX script. One can write
@@ -297,11 +297,11 @@
PSD layer instance.
\endlist
- \note Please refer to \l {https://www.adobe.com/devnet/photoshop/scripting.html}
+ \note See the \l {https://www.adobe.com/devnet/photoshop/scripting.html}
{Adobe Photoshop CC Javascript} scripting guide to understand the object model and \e Document
and \e Layer instances.
- \image qt-bridge-override.png
+ \image {qt-bridge-override.png} {The Script Path field highlighted in the settings.}
In the \QBPS \uicontrol Settings dialog, select \uicontrol {Override JSX Script} to set the
override JSX script.
@@ -317,14 +317,14 @@
Select the \uicontrol Import button to launch the \uicontrol Import panel. Alternatively, \QB
import can be launched from \uicontrol Window > \uicontrol Extensions.
- \image qt-bridge-import.png
+ \image {qt-bridge-import.png} {The Qt Bridge import dialog.}
Create a new PSD document and launch the \uicontrol Import dialog. Open the metadata file to
import and select \uicontrol Import.
\note The import process removes all the existing layers in the selected PSD document.
- \image qt-bridge-import-warning.png
+ \image {qt-bridge-import-warning.png} {An import warning in the Qt Bridge import dialog.}
The following guidelines are followed to generate the Photoshop document:
\list
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-overview.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-overview.qdoc
index 12156d6733b..118bc1f5042 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-overview.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-overview.qdoc
@@ -13,7 +13,7 @@
You can use \QBSK to export designs from Sketch to \e {.metadata}
format that you can \l{Importing 2D Assets}{import} to projects in \QDS.
- \image studio-sketch-export.png
+ \image {studio-sketch-export.png} {Qt Bridge for Sketch open in Sketch.}
The following topics describe setting up and using \QBSK:
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-using.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-using.qdoc
index d052bf3138c..69e815f8f64 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-using.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-sketch-using.qdoc
@@ -160,7 +160,7 @@
component in \QDS. Or you could export a button as a Qt Quick Controls
\l Button component.
- \image qt-sketch-bridge.png
+ \image {qt-sketch-bridge.png} {Qt Bridge for Sketch open with default settings.}
\section2 Specifying settings for exporting assets
@@ -253,7 +253,7 @@
You can export assets into JPG, PNG, or SVG format. To specify export path
and asset format, select \uicontrol Settings.
- \image qt-sketch-bridge-settings.png
+ \image {qt-sketch-bridge-settings.png} {Qt Bridge for Sketch export settings with export path and asset format specified.}
\QBSK exports assets to a .qtbridge archive named after your
Sketch file. By default, the directory is located inside the parent directory
@@ -303,5 +303,5 @@
To export a library, select \uicontrol Export. \QBSK asks you whether you want to export the
complete library or to unlink the symbols.
- \image qt-sketch-bridge-library.png
+ \image {qt-sketch-bridge-library.png} {Qt Bridge for Sketch Export Library dialog.}
*/
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-overview.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-overview.qdoc
index 13442251676..edf28dca206 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-overview.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-overview.qdoc
@@ -16,7 +16,7 @@
You can use \QBXD to export designs from Adobe XD to \e {.qtbridge}
format that you can \l{Importing 2D Assets}{import} to projects in \QDS.
- \image qt-bridge-xd.png
+ \image {qt-bridge-xd.png} {The Qt Bridge for Adobe XD open in Adobe XD.}
The following topics describe setting up and using \QBXD:
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-setup.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-setup.qdoc
index a20bfddd969..e9087911f3b 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-setup.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-setup.qdoc
@@ -29,7 +29,7 @@
\note Since the plugin is not distributed through Adobe's marketplace, during
the installation Adobe XD might warn about the third-party developer.
- \image qt-bridge-xd-warn.png
+ \image {qt-bridge-xd-warn.png} {The Install Qt Bridge plugin warning dialog.}
You can launch the plugin from \uicontrol Plugins > \uicontrol {\QB}.
*/
diff --git a/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-using.qdoc b/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-using.qdoc
index 0bc76b1eca5..647beea35b0 100644
--- a/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-using.qdoc
+++ b/doc/qtdesignstudio/src/qtbridge/qtbridge-xd-using.qdoc
@@ -68,7 +68,7 @@
exported. The \uicontrol {Home} panel displays and allows layer annotation for
export.
- \image qt-bridge-xd-home.png
+ \image {qt-bridge-xd-home.png} {The Qt Bridge for Adobe XD home panel.}
\list 1
\li In the \uicontrol ID field, enter a unique and descriptive name.
@@ -180,8 +180,8 @@
\list 1
\li Select \uicontrol Settings.
- \image qt-bridge-xd-menu.png
- \image qt-bridge-xd-settings.png
+ \image {qt-bridge-xd-menu.png} {Settings selected in the file menu.}
+ \image {qt-bridge-xd-settings.png} {The Qt Bridge for Adobe XD Settings panel.}
\li You can now edit the following settings:
\list
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-exporting-and-importing.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-exporting-and-importing.qdoc
index bc5ccdc12ab..55d4708fc72 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-exporting-and-importing.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-exporting-and-importing.qdoc
@@ -19,7 +19,7 @@
The following image describes the workflow in a basic way using \QBPS and \QDS:
- \image studio-workflow.png
+ \image {studio-workflow.png} {The complete designer-developer workflow from design tool to a finished application.}
The workflow consists of the following steps:
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-qt-runtime-version.qdocinc b/doc/qtdesignstudio/src/qtdesignstudio-qt-runtime-version.qdocinc
index fb74f9180db..c92a1545bd4 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-qt-runtime-version.qdocinc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-qt-runtime-version.qdocinc
@@ -5,6 +5,6 @@
\QDS runs projects using a specific version of Qt.
In \QDS, find the Qt runtime version in the bottom toolbar.
- \image studio-qt-development-kit.webp
+ \image {studio-qt-development-kit.webp} {The kit selector dropdown menu in the bottom toolbar.}
//! [qt-runtime-version]
*/
diff --git a/doc/qtdesignstudio/src/qtdesignstudio-using-effect-maker-effects.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-using-effect-maker-effects.qdoc
index 42588f7d2b4..0a97a5e4dc4 100644
--- a/doc/qtdesignstudio/src/qtdesignstudio-using-effect-maker-effects.qdoc
+++ b/doc/qtdesignstudio/src/qtdesignstudio-using-effect-maker-effects.qdoc
@@ -23,11 +23,11 @@
\li Right-click in the \uicontrol Assets view and
select \uicontrol {New Effect}.
\QDS creates an effect file and opens it in \QQEM.
- \image qt-quick-effect-maker.webp
+ \image {qt-quick-effect-maker.webp} {The Qt Effect Maker default view.}
\li Edit the effect.
\li In \QQEM, go to \uicontrol File > \uicontrol Save.
\li With the default settings, select \uicontrol OK.
- \image effect-maker-export.png
+ \image {effect-maker-export.png} {Qt Effect Maker export effect dialog.}
\endlist
Now, you can close \QQEM and return to \QDS and apply the
@@ -39,6 +39,6 @@
from the \uicontrol Assets view to the component in the \uicontrol 2D or
\uicontrol Navigator view.
- \image apply-effect-maker-effect.webp
+ \image {apply-effect-maker-effect.webp} {Qt Design Studio with a Qt Effect Maker effect applied.}
*/
diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-camera.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-camera.qdoc
index f40b0633e04..bd598bc4399 100644
--- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-camera.qdoc
+++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-camera.qdoc
@@ -137,7 +137,7 @@
\li In \uicontrol Navigator, select the camera.
\li In \uicontrol Properties > \uicontrol {Look-at-Node}, select the object that
the camera should look at.
- \image camera-look-at-node.webp
+ \image {camera-look-at-node.webp} {Selecting the Look-at-Node object in the Camera sections in the Properties view.}
\endlist
When you set a camera to look at an object, the camera automatically rotates to
diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc
index 9b365110a77..b26d9c962c4 100644
--- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc
+++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc
@@ -186,7 +186,7 @@
In the 3D view, you can show a small window displaying the camera view.
- \image 3d-view-camera-view.webp
+ \image {3d-view-camera-view.webp} {The Camera view in the 3D view.}
To toggle this view,
select \imagevisibilityon
diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-importing.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-importing.qdoc
index cafa97421a5..b98be425d0b 100644
--- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-importing.qdoc
+++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-importing.qdoc
@@ -23,7 +23,7 @@
For more information about exporting 3D graphics, see
\l{Exporting 3D assets}.
- \image studio-import-3d.webp
+ \image {studio-import-3d.webp} {The Asset Import dialog.}
\section1 Importing a 3D asset
diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc
index 8b4f76e90f1..56191e5b602 100644
--- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc
+++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc
@@ -249,7 +249,7 @@
\li Select \uicontrol Bake.
\endlist
- \image bake-lights-dialog.png
+ \image {bake-lights-dialog.png} {The Lights Baking Setup dialog.}
\section2 Manually baking lightmaps for a 3D model
@@ -261,7 +261,7 @@
\list 1
\li From \uicontrol Components, drag a \uicontrol {Baked Lightmap} component
to the 3D model in the \uicontrol Navigator view.
- \image baked-lightmaps-navigator.png
+ \image {baked-lightmaps-navigator.png} {The Baked Lightmap component in the Navigator view.}
\li In the \uicontrol Navigator view, select \e bakedLightmap, and in the
\uicontrol Properties view:
\list
@@ -289,15 +289,15 @@
\list 1
\li In the \uicontrol Navigator view, right-click the subcomponent and select
\uicontrol {Edit Component}.
- \image baked-lightmaps-edit-component.png
+ \image {baked-lightmaps-edit-component.png} {Selecting Edit Component from the context menu in the Navigator view.}
\li In the \uicontrol Navigator view, select the root component.
\li In the \uicontrol Properties view, select \imageplus
in the \uicontrol {Local Custom Properties} section.
\li Add a new property, set \uicontrol Type to alias.
- \image baked-lightmaps-add-property.png
+ \image {baked-lightmaps-add-property.png} {The Add New Property dialog.}
\li For the property, set the value to the ID of the 3D model that you want
to bake lightmaps for.
- \image baked-lightmaps-property-value.png
+ \image {baked-lightmaps-property-value.png} {The custom property set to sphere in the Local Custom Tab in the Properties view.}
\li In the \uicontrol Navigator view, select the 3D model and in the \uicontrol Properties
view:
\list
@@ -306,10 +306,10 @@
\endlist
\li Save your changes (\key {Ctrl+S}) and return to the main project file. To do this, select
the bread crumb in the top toolbar.
- \image baked-lightmaps-exit-component.png
+ \image {baked-lightmaps-exit-component.png} {Selecting the main project file bread crumb in the top toolbar.}
\li From the \uicontrol Components view, drag a \uicontrol {Baked Lightmap} component to the
subcomponent in the \uicontrol Navigator view.
- \image baked-lightmaps-navigator-blm.png
+ \image {baked-lightmaps-navigator-blm.png} {The Baked Lightmap component in the Navigator view.}
\li In the \uicontrol Navigator view, select the subcomponent and go to the
\uicontrol Code view.
\li In the \uicontrol Code view, you need to set the properties for the model inside the sub
diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-loader-3d.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-loader-3d.qdoc
index f9034f4a227..7d33d87540e 100644
--- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-loader-3d.qdoc
+++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-loader-3d.qdoc
@@ -67,10 +67,10 @@
\li From \uicontrol {Components}, drag a \uicontrol Loader3D component to
\e scene in the \uicontrol Navigator or \uicontrol{3D} view.
\li In \uicontrol {Navigator}, select \e{loader3D}.
- \image loader3d-navigator.png
+ \image {loader3d-navigator.png} {The loader3D component in the Navigator view.}
\li In \uicontrol {Properties}, select \uicontrol{Source} and select a
QML file.
- \image loader3d-select-source.png
+ \image {loader3d-select-source.png} {Setting the Loader3D Source setting in the Properties view.}
\endlist
\section1 Setting Loader3D to load a Component3D component
@@ -85,12 +85,12 @@
\li In \uicontrol {Navigator}, select the filter icon and clear
\uicontrol {Show Only Visible Components}. This makes the \uicontrol Component3D
component visible in \uicontrol Navigator.
- \image navigator-show-all-loader.png
+ \image {navigator-show-all-loader.png} {Toggling component visibility in the Navigator view.}
\li In \uicontrol {Navigator}, select \e{loader3D}.
\li In \uicontrol {Properties}, select \uicontrol{Source Component}
and select \e {component3D}.
- \image loader3d-select-source-component.png
+ \image {loader3d-select-source-component.png} {Selecting Source Component in the Properties view.}
\endlist
\section1 Setting the Visibility of loading components
@@ -101,7 +101,7 @@
\list 1
\li In \uicontrol Properties > \uicontrol Loader3D, select the
\uicontrol Asynchronous check box.
- \image loader3d-visibility.png
+ \image {loader3d-visibility.png} {The Asynchronous setting turned on in the Properties view.}
\li In \uicontrol {Visibility},
select \imageactionicon
to open the actions menu, and then select \uicontrol {Set Binding}.
diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-particles.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-particles.qdoc
index 14cc442158e..6834b5005b2 100644
--- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-particles.qdoc
+++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-particles.qdoc
@@ -311,7 +311,7 @@
\uicontrol Navigator. You can also drag it to the \uicontrol{3D} view.
\endlist
- \image studio-3d-particles-sprite-template.png
+ \image {studio-3d-particles-sprite-template.png} {The particle system template components in the Component view.}
\section1 Performance considerations
@@ -536,7 +536,7 @@
Specify properties for line particles in \uicontrol Properties >
\uicontrol {Line Particle}.
- \image studio-3d-properties-line-particle.png
+ \image {studio-3d-properties-line-particle.png} {The Line Particle properties in the Properties view.}
\uicontrol {Segments} defines the number of segments in each line.
@@ -845,7 +845,7 @@
Specify properties for emit bursts in \uicontrol Properties >
\uicontrol {Dynamic Burst}.
- \image studio-3d-properties-particle-dynamic-burst.png
+ \image {studio-3d-properties-particle-dynamic-burst.png} {The Dynamic Burst properties in the Properties view.}
\uicontrol {Trigger Mode} defines when the burst is triggered:
@@ -1022,7 +1022,7 @@
Specify settings for \uicontrol Repeller component instances in
\uicontrol Properties > \uicontrol {Particle Repeller}.
- \image studio-3d-properties-particle-repeller.png
+ \image {studio-3d-properties-particle-repeller.png} {The Repeller properties in the Properties view.}
\uicontrol {Outer Radius} defines the outer radius of the repeller. The
particle is not affected until it enters this radius and the repel
@@ -1038,7 +1038,7 @@
\uicontrol {Scale Affector} scales particles based on their lifetime and
other parameters.
- \image studio-3d-properties-particle-scale-affector.png
+ \image {studio-3d-properties-particle-scale-affector.png} {The Particle Scale Affector properties in the Properties view.}
\uicontrol {Minimum Size} defines the minimum size that the affector can
scale particles to.
diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-repeater-3d.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-repeater-3d.qdoc
index ec3ed257926..87632a6e703 100644
--- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-repeater-3d.qdoc
+++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-repeater-3d.qdoc
@@ -74,7 +74,7 @@
\e scene in \uicontrol Navigator.
\li Select \e repeater3D in \uicontrol Navigator and in
\uicontrol Properties, set \uicontrol Model to 4.
- \image repeater3d-model-property.png
+ \image {repeater3d-model-property.png} {The Repeater Model property set to 4 in the Properties view.}
\endlist
Now, you have set up the \uicontrol Repeater3D component to use a numeric
model that draws four instances of the same item. Next, you need to add the
@@ -90,11 +90,11 @@
\li Select \uicontrol {Set binding} to open \uicontrol {Binding Editor}.
\li In the binding editor, enter \c{index * 150}. This sets the X
location to increase by 150 for each of the cube instances.
- \image repeater3d-index-binding.png
+ \image {repeater3d-index-binding.png} {index * 150 set in Bindings Editor.}
\li Select \uicontrol OK and go to the \uicontrol{3D} view to see the
result.
\endlist
- \image repeater3d-numeric-model.webp
+ \image {repeater3d-numeric-model.webp} {Four cubes rendered with the Repeater component in the 3D view.}
\section1 Adding a Repeater3D component with a List Model
@@ -172,7 +172,7 @@
\list 1
\li From \uicontrol Components, drag a \uicontrol Sphere to \e _3DRepeater
in \uicontrol Navigator.
- \image repeater3d-listmodel-navigator.png
+ \image {repeater3d-listmodel-navigator.png} {The Sphere component in the Navigator view.}
\li Select \e sphere in \uicontrol Navigator and in the \uicontrol Properties view, select
\imageactionicon
next to \uicontrol Scale > \uicontrol X.
@@ -180,7 +180,7 @@
\li In the binding editor, enter \c{radius}. This sets the X
scale to the radius value defined in the list model for each of the sphere
instances.
- \image repeater3d-radius-binding.png
+ \image {repeater3d-radius-binding.png} {radius set in Binding Editor.}
\li Select \uicontrol OK.
\li Repeat steps 2 to 5 for \uicontrol Scale > \uicontrol Y and
\uicontrol Scale > \uicontrol Z.
@@ -196,7 +196,7 @@
\li Select \uicontrol {Set binding} to open \uicontrol {Binding Editor}.
\li In the binding editor, enter \c{index * 1000}. This sets the X
location to increase by 1000 for each of the sphere instances.
- \image repeater3d-location-binding.png
+ \image {repeater3d-location-binding.png} {index * 1000 set in Binding Editor.}
\li Select \uicontrol OK and go to the \uicontrol{3D} view to see the
result. You need to zoom out to see all the spheres.
\endlist
diff --git a/doc/qtdesignstudio/src/qtquickdesigner-components/qtdesignstudio-logic-helpers.qdoc b/doc/qtdesignstudio/src/qtquickdesigner-components/qtdesignstudio-logic-helpers.qdoc
index e0b24f21772..077b953a67f 100644
--- a/doc/qtdesignstudio/src/qtquickdesigner-components/qtdesignstudio-logic-helpers.qdoc
+++ b/doc/qtdesignstudio/src/qtquickdesigner-components/qtdesignstudio-logic-helpers.qdoc
@@ -246,7 +246,7 @@
is under or over the going value. We then use \uicontrol {And Operator}
components to determine whether the value is below minimum or above maximum.
- \image studio-logic-helper-combining-example.gif
+ \image {studio-logic-helper-combining-example.gif} {An animated example of an app combining several logic helpers.}
We use one \uicontrol {String Mapper} component to map the
slider value to a \uicontrol Text component that displays the price, as
@@ -295,7 +295,7 @@
and sell hints. For this purpose, we create the states and set
\c when conditions for them.
- \image studio-logic-helper-combining-example.png
+ \image {studio-logic-helper-combining-example.png} {The different stats of the app in the States view.}
First, we create a \e tooLow state and set a \c when condition to
apply it when the value of the \uicontrol {Below min} field of
diff --git a/doc/qtdesignstudio/src/reference/qtdesignstudio-keyboard-shortcuts.qdoc b/doc/qtdesignstudio/src/reference/qtdesignstudio-keyboard-shortcuts.qdoc
index 3d1b1d00821..646876a3bfa 100644
--- a/doc/qtdesignstudio/src/reference/qtdesignstudio-keyboard-shortcuts.qdoc
+++ b/doc/qtdesignstudio/src/reference/qtdesignstudio-keyboard-shortcuts.qdoc
@@ -14,7 +14,7 @@
To view all \QDS functions in and their keyboard shortcuts, select
\preferences > \uicontrol Environment > \uicontrol Keyboard.
- \image qtcreator-keyboard-shortcuts.png
+ \image {qtcreator-keyboard-shortcuts.png} {Keyboard shortcut settings.}
The shortcuts that are displayed in red color are associated with several
functions. \QDS executes the function that is available in the current
diff --git a/doc/qtdesignstudio/src/views/qtquick-connection-editor-bindings.qdoc b/doc/qtdesignstudio/src/views/qtquick-connection-editor-bindings.qdoc
index cc7f1e2cdb5..e91adb949fd 100644
--- a/doc/qtdesignstudio/src/views/qtquick-connection-editor-bindings.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-connection-editor-bindings.qdoc
@@ -25,7 +25,7 @@
You can create bindings between components in \uicontrol Bindings.
- \image qmldesigner-bindings.webp
+ \image {qmldesigner-bindings.webp} {The Bindings tab in the Connections view.}
\section1 Creating bindings between component properties
@@ -35,7 +35,7 @@
\li Place two components in the \uicontrol {2D} view.
- \image qmldesigner-components-before-binding.webp
+ \image {qmldesigner-components-before-binding.webp} {Two components next to each other in the 2D view.}
\li Name the first component as \e {viewBox}.
\li Name the second component as \e {connectBox}.
@@ -46,7 +46,7 @@
(\uicontrol Add) button to add a binding to the currently selected
component.
- \image qmldesigner-updated-bindings-editor.webp
+ \image qmldesigner-updated-bindings-editor.webp {The Add Binding dialog.}
\li From the pop-up \uicontrol {Bindings editor}, in the \uicontrol From section,
select \e {viewBox} as the parent component, then select its \uicontrol {border.color}
@@ -58,7 +58,7 @@
instantly getting applied to the \uicontrol {color} of the \e {connectBox}
component.
- \image qmldesigner-components-after-binding.webp
+ \image qmldesigner-components-after-binding.webp {Two components next to each other in the 2D view with the property binding applied.}
\endlist
diff --git a/doc/qtdesignstudio/src/views/qtquick-connection-editor-properties.qdoc b/doc/qtdesignstudio/src/views/qtquick-connection-editor-properties.qdoc
index fd5e13e23f6..8cf4e901f8f 100644
--- a/doc/qtdesignstudio/src/views/qtquick-connection-editor-properties.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-connection-editor-properties.qdoc
@@ -40,9 +40,9 @@
\li Select the \imageplus
(\uicontrol Add) button to add a custom property for the currently
selected component.
- \image add-local-custom-property.png
+ \image {add-local-custom-property.png} {Selecting the Add button in the Properties view.}
\li Set the \uicontrol Name and \uicontrol Type for the property.
- \image add-new-property-dialog.png
+ \image {add-new-property-dialog.png} {Selecting the Type for the property in the Add New Property dialog.}
\endlist
\section1 Binding a property value
@@ -69,14 +69,14 @@
\uicontrol {2D} view or in the \uicontrol {Navigator} view.
\li Select \uicontrol {Properties} from the \uicontrol {Connections} view.
- \image add-updated-local-custom-property.webp
+ \image {add-updated-local-custom-property.webp} {The Properties tab in the Connections view.}
\li Select the \imageplus
(\uicontrol Add) button to add a Custom property.
\li From the pop-up \uicontrol {Custom property editor}, select the \uicontrol {Type}
of the property you want to include.
- \image add-updated-local-custom-property-editor.webp
+ \image {add-updated-local-custom-property-editor.webp} {The Custom Property Editor dialog.}
\li Next, set the \uicontrol{Name} of the property.
\li Set a value to the Custom property in the \uicontrol {Value} field.
diff --git a/doc/qtdesignstudio/src/views/qtquick-connection-editor-signals.qdoc b/doc/qtdesignstudio/src/views/qtquick-connection-editor-signals.qdoc
index 683a01e2921..f231a9fcf74 100644
--- a/doc/qtdesignstudio/src/views/qtquick-connection-editor-signals.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-connection-editor-signals.qdoc
@@ -45,7 +45,7 @@
put \b {logical conditions} on this \uicontrol Actions to control them
according to your needs.
- \image qmldesigner-connections-advanced.webp
+ \image {qmldesigner-connections-advanced.webp} {The Connections tab in the Connections view.}
Initiate a new connection for a component:
@@ -57,7 +57,7 @@
(\uicontrol Add) button to add a connection.
\endlist
- \image qmldesigner-connections-editor.webp
+ \image {qmldesigner-connections-editor.webp} {The Add Connection dialog.}
Connect component \uicontrol Signal to \uicontrol Action:
@@ -108,7 +108,7 @@
\li Follow the steps described above in Connect component \uicontrol Signal to
\uicontrol Action. For a list of \uicontrol Actions and their properties, see
\l {Action Properties}.
- \image qmldesigner-connections-ConditionalAction-Autometic.webp
+ \image {qmldesigner-connections-ConditionalAction-Autometic.webp} {The Add Connection dialog with a JavaScript expression.}
\li Open the \uicontrol {Manual Code Edit} window from the
\uicontrol {Connections} view and write JavaScript expressions with components
and logical expressions manually.
@@ -118,7 +118,7 @@
level \e {if-else} expression. For nested level \e {if-else} expressions,
use the \uicontrol {Manual Code Edit}.
- \image qmldesigner-connections-ConditionalAction-Manual.webp
+ \image {qmldesigner-connections-ConditionalAction-Manual.webp} {A JavaScript code snippet in the Manual Code Edit dialog.}
\endlist
\section2 Action properties
diff --git a/doc/qtdesignstudio/src/views/qtquick-navigator.qdoc b/doc/qtdesignstudio/src/views/qtquick-navigator.qdoc
index 8238dc1b467..d5b90450eec 100644
--- a/doc/qtdesignstudio/src/views/qtquick-navigator.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-navigator.qdoc
@@ -162,7 +162,7 @@
(\uicontrol Export) button in \uicontrol Navigator to export
a component as a property alias with a valid alias reference.
- \image qmldesigner-export-item.png
+ \image {qmldesigner-export-item.png} {Selecting the Export button in the Navigator view.}
You can then use the property alias in other components to
\l{Working with connections}{create connections} to this component.
diff --git a/doc/qtdesignstudio/src/views/qtquick-properties-view.qdoc b/doc/qtdesignstudio/src/views/qtquick-properties-view.qdoc
index 84faad338d9..24d1d7a80b3 100644
--- a/doc/qtdesignstudio/src/views/qtquick-properties-view.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-properties-view.qdoc
@@ -44,7 +44,7 @@
\li A property that has been added inside a component.
\endtable
- \image custom-properties.png
+ \image {custom-properties.png} {Local Custom Properties and Exposed Custom Properties settings in the Settings view.}
\section1 Viewing changes in properties
@@ -81,21 +81,21 @@
\table
\row
- \li \image qmldesigner-boolean-true.png
+ \li \image {qmldesigner-boolean-true.png} {The Visibility property selected but not highlighted.}
\li TRUE
\li The component is visible by default. The visibility might be
overridden by the visibility set in the base state.
\row
- \li \image qmldesigner-boolean-true-blue.png
+ \li \image {qmldesigner-boolean-true-blue.png} {The Visibility property selected and highlighted.}
\li TRUE (highlighted)
\li The component is explicitly set to visible.
\row
- \li \image qmldesigner-boolean-false.png
+ \li \image {qmldesigner-boolean-false.png} {The Visibility property not selected and not highlighted.}
\li FALSE
\li The component is hidden by default. The visibility might be
overridden by the visibility set in the base state.
\row
- \li \image qmldesigner-boolean-false-blue.png
+ \li \image {qmldesigner-boolean-false-blue.png} {The Visibility property not selected but highlighted.}
\li FALSE (hightlighted)
\li The component is explicitly set to hidden.
\endtable
diff --git a/doc/qtdesignstudio/src/views/qtquick-properties.qdoc b/doc/qtdesignstudio/src/views/qtquick-properties.qdoc
index f4ff275ec14..c31ca5d33f3 100644
--- a/doc/qtdesignstudio/src/views/qtquick-properties.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-properties.qdoc
@@ -208,7 +208,7 @@
or \uicontrol Vertical in the \uicontrol {Gradient Controls} section of the
color picker.
- \image qtquick-designer-gradient-stops.gif
+ \image {qtquick-designer-gradient-stops.gif} {An Animation showing how to add and remove gradient stops.}
Calculating gradients can be computationally expensive compared to the
use of solid color fills or images. Consider using gradients only for
@@ -462,5 +462,5 @@
you can also right-click components to open the inline editors from the
context menu.
- \image qmldesigner-inline-editing.png
+ \image qmldesigner-inline-editing.png {Selecting Edit Color from the context menu in the 2D view.}
*/
diff --git a/doc/qtdesignstudio/src/views/qtquick-states.qdoc b/doc/qtdesignstudio/src/views/qtquick-states.qdoc
index a3daed09935..b87789f790a 100644
--- a/doc/qtdesignstudio/src/views/qtquick-states.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-states.qdoc
@@ -183,10 +183,10 @@
Here, extended states are not used:
- \image no-extended-state.webp
+ \image {no-extended-state.webp} {Three states in the States view with no extended state.}
Here, \e State2 is extended from \e State1:
- \image extended-state.webp
+ \image {extended-state.webp} {Three states in the States view with State2 extended from State1.}
*/
diff --git a/doc/qtdesignstudio/src/views/qtquick-timeline.qdoc b/doc/qtdesignstudio/src/views/qtquick-timeline.qdoc
index 715a822fc51..82843990428 100644
--- a/doc/qtdesignstudio/src/views/qtquick-timeline.qdoc
+++ b/doc/qtdesignstudio/src/views/qtquick-timeline.qdoc
@@ -37,7 +37,7 @@
of the timeline. Negative values are allowed.
\li In the \uicontrol {End frame} field, set the last frame
of the timeline.
- \image timeline-settings-dialog.png
+ \image {timeline-settings-dialog.png} {The Timeline Settings dialog.}
\endlist
\li On the \uicontrol {Animation Settings} tab:
\list
@@ -87,13 +87,13 @@
. This creates another timeline.
\li In the table below the \uicontrol {Animation Settings} tab, set the
Timeline for the state where you want to use it.
- \image timeline-settings-dialog-second.png
+ \image {timeline-settings-dialog-second.png} {Two timelines in the Timeline Settings dialog.}
\endlist
To set the keyframe values for the timeline you created, first select the
state in \uicontrol {States} and the timeline is available in
\uicontrol{Timelines}.
- \image timeline-states.webp
+ \image {timeline-states.webp} {The Timeline and States views.}
\section2 Setting keyframe values
@@ -114,11 +114,11 @@
\li In the \l Properties view, select \imageactionicon
(\uicontrol Actions) > \uicontrol {Insert Keyframe} for the property
that you want to animate.
- \image timeline-insert-keyframe.png
+ \image {timeline-insert-keyframe.png} {Selecting Insert Keyframe from the Action drop-down menu in the Properties view.}
\li In the \l Timeline view, select the
\uicontrol {Per Property Recording} button
to start recording property changes.
- \image timeline-per-property-recording.webp
+ \image {timeline-per-property-recording.webp} {Selecting the Per Property Recording button in the Timeline view.}
\li Ensure that the playhead is in frame 0 and enter the value of the
property in the field next to the property name on the timeline.
Select \key Enter to save the value.
@@ -155,7 +155,7 @@
next to the \uicontrol {Animation Settings} tab to delete the
animation. If you have several animations, delete all.
\li In \uicontrol {Expression binding}, enter \c {slider.value}.
- \image timeline-settings-property-binding.png
+ \image {timeline-settings-property-binding.png} {Expression binding set to slider.value in the Timeline Settings dialog.}
\endlist
\section2 Binding animations to states
@@ -172,7 +172,7 @@
the timeline with the animation you want to bind to the state.
\li Double-click the value in the \uicontrol Animation field and
select the animation you want to bind to the state.
- \image timeline-bind-animation-state.png
+ \image {timeline-bind-animation-state.png} {Selecting an Animation in the Timeline Settings dialog window to bind it to a state.}
\endlist
\endlist
To bind a state to a certain keyframe in an animation without running the
diff --git a/doc/qtdesignstudio/src/views/studio-content-library.qdoc b/doc/qtdesignstudio/src/views/studio-content-library.qdoc
index 2bbb3d6e691..9d71b3d0677 100644
--- a/doc/qtdesignstudio/src/views/studio-content-library.qdoc
+++ b/doc/qtdesignstudio/src/views/studio-content-library.qdoc
@@ -26,7 +26,7 @@
Assets added to \uicontrol {User Assets} are always available in \uicontrol {Content Library}
regardless of what project you are working on.
- \image content-library.webp
+ \image {content-library.webp} {The Materials tab in the Content Library view.}
\section1 Adding a material to your project
@@ -86,7 +86,7 @@
\section1 User Assets
- \image user-assets.webp
+ \image {user-assets.webp} {The User Assets tab in the Content Library view.}
Add assets to \uicontrol {User Assets} to access them in any project.
diff --git a/doc/qtdesignstudio/src/views/studio-qtinsight.qdoc b/doc/qtdesignstudio/src/views/studio-qtinsight.qdoc
index ef77d6e3641..65dbbf3f8d2 100644
--- a/doc/qtdesignstudio/src/views/studio-qtinsight.qdoc
+++ b/doc/qtdesignstudio/src/views/studio-qtinsight.qdoc
@@ -21,7 +21,7 @@
\l{https://www.qt.io/product/insight/onboarding-instructions}{Getting Started with Qt Insight}
documentation.
- \image qt-insight-view.png
+ \image {qt-insight-view.png} {The Qt Insight view.}
In \QDS, you can do the following with Qt Insight:
\list
diff --git a/doc/qtdesignstudio/src/views/studio-translations.qdoc b/doc/qtdesignstudio/src/views/studio-translations.qdoc
index f4f9310478d..c31faaa56a0 100644
--- a/doc/qtdesignstudio/src/views/studio-translations.qdoc
+++ b/doc/qtdesignstudio/src/views/studio-translations.qdoc
@@ -106,13 +106,13 @@
\li \uicontrol{Exceeds boundaries} highlights translations where
the text is too long to fit in the text object.
\endlist
- \image translation-tester.png
+ \image {translation-tester.png} {The Translation Tester dialog with all highlights selected.}
\li Select \uicontrol{Run Tests}.
\endlist
When the test has completed, you can see the test result highlights in
the \uicontrol {2D} view.
- \image qml-translation-test-result.png
+ \image {qml-translation-test-result.png} {The Test Results dialog.}
If the test finds an error, it is highlighted for all languages. For
example, if a translation is missing for Swedish, it is also highlighted
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
index 3dba67243fe..f64306743f7 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
@@ -13,12 +13,14 @@ StudioControls.Menu {
property var targetTexture: null
property bool hasSceneEnv: false
property bool showRemoveAction: false // true: adds an option to remove targetTexture
+ property bool showInGraphicalShellVisible: false
property bool canUse3D: targetTexture && ContentLibraryBackend.rootView.hasQuick3DImport && ContentLibraryBackend.rootView.hasMaterialLibrary
- function popupMenu(targetTexture = null)
+ function popupMenu(targetTexture = null, showInGraphicalShellItemVisible = false)
{
this.targetTexture = targetTexture
+ root.showInGraphicalShellVisible = showInGraphicalShellItemVisible
ContentLibraryBackend.rootView.updateSceneEnvState();
popup()
}
@@ -49,4 +51,20 @@ StudioControls.Menu {
height: visible ? implicitHeight : 0
onTriggered: ContentLibraryBackend.userModel.removeTexture(root.targetTexture)
}
+
+ StudioControls.MenuSeparator {
+ visible: root.showInGraphicalShellVisible
+ height: visible ? StudioTheme.Values.border : 0
+ }
+
+ StudioControls.MenuItem {
+ text: ContentLibraryBackend.rootView.showInGraphicalShellMsg
+
+ visible: root.showInGraphicalShellVisible
+ height: visible ? implicitHeight : 0
+
+ onTriggered: {
+ ContentLibraryBackend.rootView.showInGraphicalShell(root.targetTexture.textureParentPath)
+ }
+ }
}
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml
index 4ee3af47f83..15e36666d96 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryUserView.qml
@@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import QtQuick
+import QtQuick.Layouts
import Qt.labs.qmlmodels
import HelperWidgets as HelperWidgets
import StudioControls as StudioControls
@@ -79,171 +80,222 @@ Item {
}
}
- HelperWidgets.ScrollView {
- id: scrollView
+ ColumnLayout {
+ id: col
+
anchors.fill: parent
+ spacing: 0
- clip: true
- interactive: !ctxMenuItem.opened && !ctxMenuTexture.opened
- && !ContentLibraryBackend.rootView.isDragging && !HelperWidgets.Controller.contextMenuOpened
- hideHorizontalScrollBar: true
+ Rectangle {
+ id: toolbar
- Column {
- Repeater {
- id: categoryRepeater
+ width: parent.width
+ height: StudioTheme.Values.toolbarHeight
+ color: StudioTheme.Values.themeToolbarBackground
- model: ContentLibraryBackend.userModel
+ HelperWidgets.AbstractButton {
+ style: StudioTheme.Values.viewBarButtonStyle
+ buttonIcon: StudioTheme.Constants.add_medium
+ enabled: (this.hasMaterial ?? false)
+ && hasModelSelection
+ && hasQuick3DImport
+ && hasMaterialLibrary
+ tooltip: qsTr("Add a custom bundle folder.")
+ onClicked: ContentLibraryBackend.rootView.browseBundleFolder()
+ x: 5 // left margin
+ }
+ }
- delegate: HelperWidgets.Section {
- id: section
+ HelperWidgets.ScrollView {
+ id: scrollView
- width: root.width
- leftPadding: StudioTheme.Values.sectionPadding
- rightPadding: StudioTheme.Values.sectionPadding
- topPadding: StudioTheme.Values.sectionPadding
- bottomPadding: StudioTheme.Values.sectionPadding
+ Layout.fillWidth: true
+ Layout.fillHeight: true
- caption: categoryTitle
- dropEnabled: true
- category: "ContentLib_User"
+ clip: true
+ interactive: !ctxMenuItem.opened && !ctxMenuTexture.opened
+ && !ContentLibraryBackend.rootView.isDragging && !HelperWidgets.Controller.contextMenuOpened
+ hideHorizontalScrollBar: true
- function expandSection() {
- section.expanded = true
- }
+ Column {
+ Repeater {
+ id: categoryRepeater
- property alias count: repeater.count
+ model: ContentLibraryBackend.userModel
- onCountChanged: root.assignMaxCount()
+ delegate: HelperWidgets.Section {
+ id: section
- onDropEnter: (drag) => {
- let has3DNode = ContentLibraryBackend.rootView
- .has3DNode(drag.getDataAsArrayBuffer(drag.formats[0]))
-
- let hasTexture = ContentLibraryBackend.rootView
- .hasTexture(drag.formats[0], drag.urls)
-
- drag.accepted = (categoryTitle === "Textures" && hasTexture)
- || (categoryTitle === "Materials" && drag.formats[0] === "application/vnd.qtdesignstudio.material")
- || (categoryTitle === "3D" && has3DNode)
-
- section.highlight = drag.accepted
- }
-
- onDropExit: {
- section.highlight = false
- }
-
- onDrop: (drag) => {
- section.highlight = false
- drag.accept()
- section.expandSection()
-
- if (categoryTitle === "Textures") {
- if (drag.formats[0] === "application/vnd.qtdesignstudio.assets")
- ContentLibraryBackend.rootView.acceptTexturesDrop(drag.urls)
- else if (drag.formats[0] === "application/vnd.qtdesignstudio.texture")
- ContentLibraryBackend.rootView.acceptTextureDrop(drag.getDataAsString(drag.formats[0]))
- } else if (categoryTitle === "Materials") {
- ContentLibraryBackend.rootView.acceptMaterialDrop(drag.getDataAsString(drag.formats[0]))
- } else if (categoryTitle === "3D") {
- ContentLibraryBackend.rootView.accept3DDrop(drag.getDataAsArrayBuffer(drag.formats[0]))
- }
- }
-
- Grid {
- width: section.width - section.leftPadding - section.rightPadding
- spacing: StudioTheme.Values.sectionGridSpacing
- columns: root.numColumns
-
- Repeater {
- id: repeater
- model: categoryItems
-
- delegate: DelegateChooser {
- role: "bundleId"
-
- DelegateChoice {
- roleValue: "UserMaterials"
- ContentLibraryItem {
- width: root.cellWidth
- height: root.cellHeight
- visible: modelData.bundleItemVisible && !infoText.visible
-
- onShowContextMenu: ctxMenuItem.popupMenu(modelData)
- onAddToProject: ContentLibraryBackend.userModel.addToProject(modelData)
- }
- }
- DelegateChoice {
- roleValue: "UserTextures"
- delegate: ContentLibraryTexture {
- width: root.cellWidth
- height: root.cellWidth // for textures use a square size since there is no name row
-
- onShowContextMenu: ctxMenuTexture.popupMenu(modelData)
- }
- }
- DelegateChoice {
- roleValue: "User3D"
- delegate: ContentLibraryItem {
- width: root.cellWidth
- height: root.cellHeight
- visible: modelData.bundleItemVisible && !infoText.visible
-
- onShowContextMenu: ctxMenuItem.popupMenu(modelData)
- onAddToProject: ContentLibraryBackend.userModel.addToProject(modelData)
- }
- }
- }
-
- onCountChanged: root.assignMaxCount()
- }
- }
-
- Text {
- text: qsTr("No match found.");
- color: StudioTheme.Values.themeTextColor
- font.pixelSize: StudioTheme.Values.baseFontSize
- leftPadding: 10
- visible: infoText.text === "" && !searchBox.isEmpty() && categoryNoMatch
- }
-
- Text {
- id: infoText
-
- text: {
- let categoryName = (categoryTitle === "3D") ? categoryTitle + " assets"
- : categoryTitle.toLowerCase()
- if (!ContentLibraryBackend.rootView.isQt6Project) {
- qsTr("Content Library is not supported in Qt5 projects.")
- } else if (!ContentLibraryBackend.rootView.hasQuick3DImport && categoryTitle !== "Textures") {
- qsTr('To use %1, add the QtQuick3D module and the View3D
- component in the Components view, or click
-
- here.')
- .arg(categoryName)
- .arg(StudioTheme.Values.themeInteraction)
- } else if (!ContentLibraryBackend.rootView.hasMaterialLibrary && categoryTitle !== "Textures") {
- qsTr("Content Library is disabled inside a non-visual component.")
- } else if (categoryEmpty) {
- qsTr("There are no "+ categoryName + " in the User Assets.")
- } else {
- ""
- }
- }
- textFormat: Text.RichText
- color: StudioTheme.Values.themeTextColor
- font.pixelSize: StudioTheme.Values.mediumFontSize
- padding: 10
- visible: infoText.text !== ""
- horizontalAlignment: Text.AlignHCenter
- wrapMode: Text.WordWrap
width: root.width
+ leftPadding: StudioTheme.Values.sectionPadding
+ rightPadding: StudioTheme.Values.sectionPadding
+ topPadding: StudioTheme.Values.sectionPadding
+ bottomPadding: StudioTheme.Values.sectionPadding
- onLinkActivated: ContentLibraryBackend.rootView.addQtQuick3D()
+ caption: categoryTitle
+ captionTooltip: section.isCustomCat ? categoryBundlePath : ""
+ dropEnabled: true
+ category: "ContentLib_User"
+ showCloseButton: section.isCustomCat
+ closeButtonToolTip: qsTr("Remove folder")
+ closeButtonIcon: StudioTheme.Constants.deletepermanently_small
- HoverHandler {
- enabled: infoText.hoveredLink
- cursorShape: Qt.PointingHandCursor
+ onCloseButtonClicked: {
+ ContentLibraryBackend.userModel.removeBundleDir(index)
+ }
+
+ function expandSection() {
+ section.expanded = true
+ }
+
+ property alias count: repeater.count
+ property bool isCustomCat: !["Textures", "Materials", "3D"].includes(section.caption);
+
+ onCountChanged: root.assignMaxCount()
+
+ onDropEnter: (drag) => {
+ let has3DNode = ContentLibraryBackend.rootView
+ .has3DNode(drag.getDataAsArrayBuffer(drag.formats[0]))
+
+ let hasTexture = ContentLibraryBackend.rootView
+ .hasTexture(drag.formats[0], drag.urls)
+
+ drag.accepted = (categoryTitle === "Textures" && hasTexture)
+ || (categoryTitle === "Materials" && drag.formats[0] === "application/vnd.qtdesignstudio.material")
+ || (categoryTitle === "3D" && has3DNode)
+ || (section.isCustomCat && hasTexture)
+
+ section.highlight = drag.accepted
+ }
+
+ onDropExit: {
+ section.highlight = false
+ }
+
+ onDrop: (drag) => {
+ section.highlight = false
+ drag.accept()
+ section.expandSection()
+
+ if (categoryTitle === "Textures") {
+ if (drag.formats[0] === "application/vnd.qtdesignstudio.assets")
+ ContentLibraryBackend.rootView.acceptTexturesDrop(drag.urls)
+ else if (drag.formats[0] === "application/vnd.qtdesignstudio.texture")
+ ContentLibraryBackend.rootView.acceptTextureDrop(drag.getDataAsString(drag.formats[0]))
+ } else if (categoryTitle === "Materials") {
+ ContentLibraryBackend.rootView.acceptMaterialDrop(drag.getDataAsString(drag.formats[0]))
+ } else if (categoryTitle === "3D") {
+ ContentLibraryBackend.rootView.accept3DDrop(drag.getDataAsArrayBuffer(drag.formats[0]))
+ } else { // custom bundle folder
+ if (drag.formats[0] === "application/vnd.qtdesignstudio.assets")
+ ContentLibraryBackend.rootView.acceptTexturesDrop(drag.urls, categoryBundlePath)
+ else if (drag.formats[0] === "application/vnd.qtdesignstudio.texture")
+ ContentLibraryBackend.rootView.acceptTextureDrop(drag.getDataAsString(drag.formats[0]), categoryBundlePath)
+ }
+ }
+
+ Grid {
+ id: grid
+
+ width: section.width - section.leftPadding - section.rightPadding
+ spacing: StudioTheme.Values.sectionGridSpacing
+ columns: root.numColumns
+
+ property int catIdx: index
+
+ Repeater {
+ id: repeater
+
+ model: categoryItems
+
+ delegate: DelegateChooser {
+ role: "bundleId"
+
+ DelegateChoice {
+ roleValue: "UserMaterials"
+ ContentLibraryItem {
+ width: root.cellWidth
+ height: root.cellHeight
+ visible: modelData.bundleItemVisible && !infoText.visible
+
+ onShowContextMenu: ctxMenuItem.popupMenu(modelData)
+ onAddToProject: ContentLibraryBackend.userModel.addToProject(modelData)
+ }
+ }
+ DelegateChoice {
+ roleValue: "UserTextures"
+ delegate: ContentLibraryTexture {
+ width: root.cellWidth
+ height: root.cellWidth // for textures use a square size since there is no name row
+
+ onShowContextMenu: ctxMenuTexture.popupMenu(modelData, grid.catIdx > 2)
+ }
+ }
+ DelegateChoice {
+ roleValue: "User3D"
+ delegate: ContentLibraryItem {
+ width: root.cellWidth
+ height: root.cellHeight
+ visible: modelData.bundleItemVisible && !infoText.visible
+
+ onShowContextMenu: ctxMenuItem.popupMenu(modelData)
+ onAddToProject: ContentLibraryBackend.userModel.addToProject(modelData)
+ }
+ }
+ }
+
+ onCountChanged: root.assignMaxCount()
+ }
+ }
+
+ Text {
+ text: qsTr("No match found.");
+ color: StudioTheme.Values.themeTextColor
+ font.pixelSize: StudioTheme.Values.baseFontSize
+ leftPadding: 10
+ visible: infoText.text === "" && !searchBox.isEmpty() && categoryNoMatch
+ }
+
+ Text {
+ id: infoText
+
+ text: {
+ let categoryName = (categoryTitle === "3D") ? categoryTitle + " assets"
+ : categoryTitle.toLowerCase()
+ if (!ContentLibraryBackend.rootView.isQt6Project) {
+ qsTr("Content Library is not supported in Qt5 projects.")
+ } else if (!ContentLibraryBackend.rootView.hasQuick3DImport
+ && categoryTitle !== "Textures" && !section.isCustomCat) {
+ qsTr('To use %1, add the QtQuick3D module and the View3D
+ component in the Components view, or click
+
+ here.')
+ .arg(categoryName)
+ .arg(StudioTheme.Values.themeInteraction)
+ } else if (!ContentLibraryBackend.rootView.hasMaterialLibrary
+ && categoryTitle !== "Textures" && !section.isCustomCat) {
+ qsTr("Content Library is disabled inside a non-visual component.")
+ } else if (categoryEmpty) {
+ qsTr("There are no items in this category.")
+ } else {
+ ""
+ }
+ }
+ textFormat: Text.RichText
+ color: StudioTheme.Values.themeTextColor
+ font.pixelSize: StudioTheme.Values.mediumFontSize
+ padding: 10
+ visible: infoText.text !== ""
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+ width: root.width
+
+ onLinkActivated: ContentLibraryBackend.rootView.addQtQuick3D()
+
+ HoverHandler {
+ enabled: infoText.hoveredLink
+ cursorShape: Qt.PointingHandCursor
+ }
}
}
}
diff --git a/share/qtcreator/qmldesigner/designsystem/Main.qml b/share/qtcreator/qmldesigner/designsystem/Main.qml
index 9578c6f8ef1..7b2344ecc67 100644
--- a/share/qtcreator/qmldesigner/designsystem/Main.qml
+++ b/share/qtcreator/qmldesigner/designsystem/Main.qml
@@ -23,12 +23,11 @@ Rectangle {
readonly property int cellWidth: 200
readonly property int cellHeight: 40
- readonly property color textColor: "#ffffff"
- readonly property color iconColor: "#959595"
- readonly property color backgroundColor: "#2c2c2c"
- readonly property color borderColor: "#444444"
+ readonly property color backgroundColor: StudioTheme.Values.themePanelBackground
+ // TODO This is not a proper color value, but will be fixed with new design
+ readonly property color borderColor: StudioTheme.Values.themeControlBackground_topToolbarHover
- readonly property int borderWidth: 1
+ readonly property int borderWidth: StudioTheme.Values.border
readonly property int textSize: 18
readonly property int iconSize: 16
@@ -127,7 +126,7 @@ Rectangle {
overlayInvalid.show()
}
- function showHeaderData(section: int, orientation: var) {
+ function showHeaderData(section: int, orientation: var, message: string) {
if (orientation === Qt.Horizontal) {
overlayInvalid.parent = horizontalHeaderView.contentItem
overlayInvalid.cellItem = horizontalHeaderView.itemAtCell(Qt.point(overlay.section, 0))
@@ -136,7 +135,7 @@ Rectangle {
overlayInvalid.cellItem = verticalHeaderView.itemAtCell(Qt.point(0, overlay.section))
}
- notification.message = qsTr("This name is already in use, please use a different name.")
+ notification.message = message
overlayInvalid.show()
}
@@ -1095,8 +1094,14 @@ Rectangle {
// Revoke active focus from text field by forcing active focus on another item
tableView.forceActiveFocus()
- if (!result && overlayTextField.previousText !== overlayTextField.text)
- overlayInvalid.showHeaderData(overlay.section, overlay.orientation)
+ if (overlayTextField.text === "")
+ overlayInvalid.showHeaderData(overlay.section,
+ overlay.orientation,
+ qsTr("No name found, please enter a valid name."))
+ else if (!result && overlayTextField.previousText !== overlayTextField.text)
+ overlayInvalid.showHeaderData(overlay.section,
+ overlay.orientation,
+ qsTr("This name is already in use, please use a different name."))
}
Text {
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/BlurHelper.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/BlurHelper.qml
index da68339603a..733f0a15a0b 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/BlurHelper.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/BlurHelper.qml
@@ -4,6 +4,7 @@
// This file should match the BlurHelper.qml in qtquickdesigner repository, except for shader paths
import QtQuick
+import EffectComposerPropertyData
Item {
id: rootItem
@@ -20,8 +21,8 @@ Item {
visible: false
layer.enabled: true
layer.smooth: true
- vertexShader: g_propertyData.blur_vs_path
- fragmentShader: g_propertyData.blur_fs_path
+ vertexShader: GlobalPropertyData?.blur_vs_path ?? ""
+ fragmentShader: GlobalPropertyData?.blur_fs_path ?? ""
}
QtObject {
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml
index d8c36e34c22..7c7f167e07b 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerPreview.qml
@@ -7,6 +7,7 @@ import HelperWidgets as HelperWidgets
import StudioControls as StudioControls
import StudioTheme as StudioTheme
import EffectComposerBackend
+import EffectComposerPropertyData
Column {
id: root
@@ -298,8 +299,8 @@ Column {
BlurHelper {
id: blurHelper
source: source
- property int blurMax: g_propertyData.blur_helper_max_level ? g_propertyData.blur_helper_max_level : 64
- property real blurMultiplier: g_propertyData.blurMultiplier ? g_propertyData.blurMultiplier : 0
+ property int blurMax: GlobalPropertyData?.blur_helper_max_level ?? 64
+ property real blurMultiplier: GlobalPropertyData?.blurMultiplier ?? 0
}
Item {
diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml
index 243cd1ea317..33c8fe9d3fe 100644
--- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml
+++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectCompositionNode.qml
@@ -80,9 +80,10 @@ HelperWidgets.Section {
function showNodeExistsWarning(enable)
{
infoText.text = qsTr("An effect with this name already exists.\nSuffix was added to make the name unique.")
- infoTimer.restart()
- infoText.visible = enable
infoText.color = StudioTheme.Values.themeWarning
+ infoText.visible = enable
+ if (infoText.visible)
+ infoTimer.restart()
}
function showNodeAddedToLibraryInfo(message)
@@ -95,15 +96,17 @@ HelperWidgets.Section {
infoText.text = message
infoText.color = StudioTheme.Values.themeInteraction
}
- infoTimer.restart()
infoText.visible = message !== ""
+ if (infoText.visible)
+ infoTimer.restart()
}
function showNeedRenameInfo()
{
+ infoTimer.stop()
infoText.text = qsTr("A built-in effect with this name already exists in the library.\nPlease rename the effect before adding it to the library.")
- infoText.visible = true
infoText.color = StudioTheme.Values.themeWarning
+ infoText.visible = true
}
onVisibleChanged: {
@@ -120,7 +123,7 @@ HelperWidgets.Section {
onTriggered: {
infoText.visible = false
- infoTimer.running = false
+ infoTimer.stop()
}
}
}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-icon.png
new file mode 100644
index 00000000000..590aaaa2847
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-polar-icon.png
new file mode 100644
index 00000000000..af72238d692
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/areaseries-polar-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon.png
new file mode 100644
index 00000000000..342c587117e
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon16.png
new file mode 100644
index 00000000000..ce5d75ad4f3
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/bars3d-icon16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/barseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/barseries-icon.png
new file mode 100644
index 00000000000..1bf023f385c
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/barseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxplotseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxplotseries-icon.png
new file mode 100644
index 00000000000..25e9fe692ec
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxplotseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png
new file mode 100644
index 00000000000..23775571c50
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png
new file mode 100644
index 00000000000..18707ce2434
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/boxshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape@2x.png
new file mode 100644
index 00000000000..596be65ae0f
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/boxshape@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape.png
new file mode 100644
index 00000000000..f3d29fd57ff
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape16.png
new file mode 100644
index 00000000000..74e2ea9efd5
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape@2x.png
new file mode 100644
index 00000000000..048883c8571
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/capsuleshape@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png
new file mode 100644
index 00000000000..ce18058d3aa
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller16.png b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller16.png
new file mode 100644
index 00000000000..5998fd41a03
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller@2x.png
new file mode 100644
index 00000000000..faa94098d7a
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/charactercontroller@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/chartview-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/chartview-icon16.png
new file mode 100644
index 00000000000..b135c25908c
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/chartview-icon16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png
new file mode 100644
index 00000000000..0837829fb5a
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png
new file mode 100644
index 00000000000..9a411ed9fa7
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape@2x.png
new file mode 100644
index 00000000000..384d6969c4a
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/convexmeshshape@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png
new file mode 100644
index 00000000000..4cde7a3a27c
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody16.png
new file mode 100644
index 00000000000..ac26b26b4f4
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody@2x.png
new file mode 100644
index 00000000000..2a8579e4b04
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/dynamicrigidbody@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape.png
new file mode 100644
index 00000000000..5d8873750f0
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape16.png
new file mode 100644
index 00000000000..3cc0eeacb1f
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape@2x.png
new file mode 100644
index 00000000000..8c169613bdb
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/heightfieldshape@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/horizontalbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalbarseries-icon.png
new file mode 100644
index 00000000000..7d3ec403451
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalbarseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/horizontalpercentbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalpercentbarseries-icon.png
new file mode 100644
index 00000000000..16783f7daf4
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalpercentbarseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/horizontalstackedbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalstackedbarseries-icon.png
new file mode 100644
index 00000000000..b6fae651112
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/horizontalstackedbarseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-icon.png
new file mode 100644
index 00000000000..de42f50d7fd
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-polar-icon.png
new file mode 100644
index 00000000000..611b09f9fe7
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/lineseries-polar-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/percentbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/percentbarseries-icon.png
new file mode 100644
index 00000000000..ef6221f6ef1
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/percentbarseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png
new file mode 100644
index 00000000000..9675b1dfde7
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png
new file mode 100644
index 00000000000..951221e57a4
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial@2x.png
new file mode 100644
index 00000000000..e50ca8edaaa
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsmaterial@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png
new file mode 100644
index 00000000000..5d0c15e4354
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png
new file mode 100644
index 00000000000..6ac979abf7b
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld@2x.png
new file mode 100644
index 00000000000..77652a5358d
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/physicsworld@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/pieseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/pieseries-icon.png
new file mode 100644
index 00000000000..51a61551e74
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/pieseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png
new file mode 100644
index 00000000000..4d8f3b4136d
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/planeshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape16.png
new file mode 100644
index 00000000000..9388bfc37d5
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/planeshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape@2x.png
new file mode 100644
index 00000000000..f5fb2615927
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/planeshape@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon.png
new file mode 100644
index 00000000000..cef13081606
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon16.png
new file mode 100644
index 00000000000..2c456788ca0
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatter3d-icon16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-icon.png
new file mode 100644
index 00000000000..8be289d6dea
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-polar-icon.png
new file mode 100644
index 00000000000..44cd8d72a66
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/scatterseries-polar-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape.png
new file mode 100644
index 00000000000..d6f847ccbe2
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape16.png
new file mode 100644
index 00000000000..94c9430ca71
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape@2x.png
new file mode 100644
index 00000000000..0a1c289827b
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/sphereshape@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-icon.png
new file mode 100644
index 00000000000..e1df42068a1
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-polar-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-polar-icon.png
new file mode 100644
index 00000000000..293266df140
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/splineseries-polar-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/stackedbarseries-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/stackedbarseries-icon.png
new file mode 100644
index 00000000000..03516997e9e
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/stackedbarseries-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png
new file mode 100644
index 00000000000..f64beb8ec5c
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png
new file mode 100644
index 00000000000..a89997cbc26
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody@2x.png
new file mode 100644
index 00000000000..fac847f153b
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/staticrigidbody@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon.png b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon.png
new file mode 100644
index 00000000000..a2cdba06317
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon16.png b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon16.png
new file mode 100644
index 00000000000..f8f8a3ee787
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/surface3d-icon16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png
new file mode 100644
index 00000000000..2fb4a7bc69f
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png
new file mode 100644
index 00000000000..d60b67f0f2e
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape@2x.png
new file mode 100644
index 00000000000..64b0bc2c840
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/trianglemeshshape@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png
new file mode 100644
index 00000000000..e1abdeac434
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png
new file mode 100644
index 00000000000..29a47afdc3b
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody16.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody@2x.png b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody@2x.png
new file mode 100644
index 00000000000..7b942d959b3
Binary files /dev/null and b/share/qtcreator/qmldesigner/itemLibrary/images/triggerbody@2x.png differ
diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtcharts.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtcharts.metainfo
new file mode 100644
index 00000000000..42eea67b4e5
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/qtcharts.metainfo
@@ -0,0 +1,166 @@
+MetaInfo {
+ Type {
+ name: "QtCharts.ChartView"
+ icon: "images/chartview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Area"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/areaseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/AreaSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Bar"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/barseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/BarSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "BoxPlot"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/boxplotseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/BoxPlotSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "H.Bar"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/horizontalbarseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/HorizontalBarSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "H.PercentBar"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/horizontalpercentbarseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/HorizontalPercentBarSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "H.StackedBar"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/horizontalstackedbarseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/HorizontalStackedBarSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Line"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/lineseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/LineSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Percent"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/percentbarseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/PercentBarSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Pie"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/pieseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/PieSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Scatter"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/scatterseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/ScatterSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Spline"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/splineseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/SplineSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "StackedBar"
+ category: "Qt Charts - ChartView"
+ libraryIcon: "images/stackedbarseries-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/StackedBarSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Area"
+ category: "Qt Charts - PolarChartView"
+ libraryIcon: "images/areaseries-polar-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/PolarAreaSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Line"
+ category: "Qt Charts - PolarChartView"
+ libraryIcon: "images/lineseries-polar-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/PolarLineSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Scatter"
+ category: "Qt Charts - PolarChartView"
+ libraryIcon: "images/scatterseries-polar-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/PolarScatterSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Spline"
+ category: "Qt Charts - PolarChartView"
+ libraryIcon: "images/splineseries-polar-icon.png"
+ version: "2.0"
+ requiredImport: "QtCharts"
+
+ QmlSource { source: "source/PolarSplineSeries.qml" }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtgraphs.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtgraphs.metainfo
new file mode 100644
index 00000000000..6eb8754d9ee
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/qtgraphs.metainfo
@@ -0,0 +1,111 @@
+MetaInfo {
+ Type {
+ name: "QtGraphs.Bars3D"
+ icon: "images/bars3d-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Bars3D"
+ category: "3D Graphs"
+ libraryIcon: "images/bars3d-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Bars3D.qml" }
+ }
+ }
+
+ Type {
+ name: "QtGraphs.Scatter3D"
+ icon: "images/scatter3d-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Scatter3D"
+ category: "3D Graphs"
+ libraryIcon: "images/scatter3d-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Scatter3D.qml" }
+ }
+ }
+
+ Type {
+ name: "QtGraphs.Surface3D"
+ icon: "images/surface3d-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Surface3D"
+ category: "3D Graphs"
+ libraryIcon: "images/surface3d-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Surface3D.qml" }
+ }
+ }
+
+ Type {
+ name: "QtGraphs.GraphsView"
+ icon: "images/chartview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Area"
+ category: "2D Graphs"
+ libraryIcon: "images/areaseries-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Graphs2DAreaSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Bar"
+ category: "2D Graphs"
+ libraryIcon: "images/barseries-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Graphs2DBarSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Line"
+ category: "2D Graphs"
+ libraryIcon: "images/lineseries-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Graphs2DLineSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Pie"
+ category: "2D Graphs"
+ libraryIcon: "images/pieseries-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Graphs2DPieSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Scatter"
+ category: "2D Graphs"
+ libraryIcon: "images/scatterseries-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Graphs2DScatterSeries.qml" }
+ }
+
+ ItemLibraryEntry {
+ name: "Spline"
+ category: "2D Graphs"
+ libraryIcon: "images/splineseries-icon.png"
+ version: "1.0"
+ requiredImport: "QtGraphs"
+
+ QmlSource { source: "source/Graphs2DSplineSeries.qml" }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtsaferenderer.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtsaferenderer.metainfo
new file mode 100644
index 00000000000..6fae3638a54
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/qtsaferenderer.metainfo
@@ -0,0 +1,47 @@
+MetaInfo {
+ Type {
+ name: "Qt.SafeRenderer.SafePicture"
+ icon: "images/picture-icon16.png"
+
+ ItemLibraryEntry {
+ name: "SafePicture"
+ category: "Qt Safe Renderer"
+ libraryIcon: "images/picture-icon.png"
+ version: "2.0"
+ requiredImport: "Qt.SafeRenderer"
+
+ Property { name: "width"; type: "int"; value: 64; }
+ Property { name: "height"; type: "int"; value: 64; }
+ }
+ }
+ Type {
+ name: "Qt.SafeRenderer.SafeText"
+ icon: "images/text-16px.png"
+
+ ItemLibraryEntry {
+ name: "SafeText"
+ category: "Qt Safe Renderer"
+ libraryIcon: "images/text-24px.png"
+ version: "2.0"
+ requiredImport: "Qt.SafeRenderer"
+
+ Property { name: "width"; type: "int"; value: 128; }
+ Property { name: "height"; type: "int"; value: 64; }
+ }
+ }
+ Type {
+ name: "Qt.SafeRenderer.SafeImage"
+ icon: "images/image-icon16.png"
+
+ ItemLibraryEntry {
+ name: "SafeImage"
+ category: "Qt Safe Renderer"
+ libraryIcon: "images/image-icon.png"
+ version: "2.0"
+ requiredImport: "Qt.SafeRenderer"
+
+ Property { name: "width"; type: "int"; value: 64; }
+ Property { name: "height"; type: "int"; value: 64; }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/qtvirtualkeyboard.metainfo b/share/qtcreator/qmldesigner/itemLibrary/qtvirtualkeyboard.metainfo
new file mode 100644
index 00000000000..0aea30b869e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/qtvirtualkeyboard.metainfo
@@ -0,0 +1,35 @@
+MetaInfo {
+Type {
+ name: "QtQuick.VirtualKeyboard.InputPanel"
+ icon: "images/text-input-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Input Panel"
+ category: "Virtual Keyboard"
+ libraryIcon: "images/text-input-icon.png"
+ version: "6.0"
+ requiredImport: "QtQuick.VirtualKeyboard"
+
+ Property { name: "width"; type: "int"; value: 200; }
+ Property { name: "height"; type: "int"; value: 200; }
+ toolTip: qsTr("Provides the virtual keyboard UI.")
+ }
+}
+
+Type {
+ name: "QtQuick.VirtualKeyboard.HandwritingInputPanel"
+ icon: "images/text-input-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Handwriting Input Panel"
+ category: "Virtual Keyboard"
+ libraryIcon: "images/text-input-icon.png"
+ version: "6.0"
+ requiredImport: "QtQuick.VirtualKeyboard"
+
+ Property { name: "width"; type: "int"; value: 200; }
+ Property { name: "height"; type: "int"; value: 200; }
+ toolTip: qsTr("Provides a handwriting panel add-on for the virtual keyboard UI.")
+ }
+}
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/quick3d_physics.metainfo b/share/qtcreator/qmldesigner/itemLibrary/quick3d_physics.metainfo
new file mode 100644
index 00000000000..874e209dc52
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/quick3d_physics.metainfo
@@ -0,0 +1,261 @@
+MetaInfo {
+ Type {
+ name: "QtQuick3D.Physics.PhysicsWorld"
+ icon: "images/physicsworld16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: false
+ }
+
+ ItemLibraryEntry {
+ name: "Physics World"
+ category: "Components"
+ libraryIcon: "images/physicsworld.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.TriggerBody"
+ icon: "images/triggerbody16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Trigger Body"
+ category: "Collision Bodies"
+ libraryIcon: "images/triggerbody.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.StaticRigidBody"
+ icon: "images/staticrigidbody16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Static Rigid Body"
+ category: "Collision Bodies"
+ libraryIcon: "images/staticrigidbody.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.DynamicRigidBody"
+ icon: "images/dynamicrigidbody16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Dynamic Rigid Body"
+ category: "Collision Bodies"
+ libraryIcon: "images/dynamicrigidbody.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.PhysicsMaterial"
+ icon: "images/physicsmaterial16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: false
+ }
+
+ ItemLibraryEntry {
+ name: "Physics Material"
+ category: "Components"
+ libraryIcon: "images/physicsmaterial.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.BoxShape"
+ icon: "images/boxshape16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Box Shape"
+ category: "Collision Shapes"
+ libraryIcon: "images/boxshape.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.CapsuleShape"
+ icon: "images/capsuleshape16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Capsule Shape"
+ category: "Collision Shapes"
+ libraryIcon: "images/capsuleshape.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.ConvexMeshShape"
+ icon: "images/convexmeshshape16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Convex Mesh Shape"
+ category: "Collision Shapes"
+ libraryIcon: "images/convexmeshshape.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.HeightFieldShape"
+ icon: "images/heightfieldshape16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Height Field Shape"
+ category: "Collision Shapes"
+ libraryIcon: "images/heightfieldshape.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.PlaneShape"
+ icon: "images/planeshape16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Plane Shape"
+ category: "Collision Shapes"
+ libraryIcon: "images/planeshape.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.SphereShape"
+ icon: "images/sphereshape16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Sphere Shape"
+ category: "Collision Shapes"
+ libraryIcon: "images/sphereshape.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.TriangleMeshShape"
+ icon: "images/trianglemeshshape16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Triangle Mesh Shape"
+ category: "Collision Shapes"
+ libraryIcon: "images/trianglemeshshape.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+
+ Type {
+ name: "QtQuick3D.Physics.CharacterController"
+ icon: "images/charactercontroller16.png"
+
+ Hints {
+ visibleInNavigator: true
+ canBeDroppedInNavigator: true
+ canBeDroppedInFormEditor: false
+ canBeDroppedInView3D: true
+ }
+
+ ItemLibraryEntry {
+ name: "Character Controller"
+ category: "Collision Bodies"
+ libraryIcon: "images/charactercontroller.png"
+ version: "6.5"
+ requiredImport: "QtQuick3D.Physics"
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/AreaSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/AreaSeries.qml
new file mode 100644
index 00000000000..6aa9fae78ac
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/AreaSeries.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ AreaSeries {
+ name: "AreaSeries"
+ upperSeries: LineSeries {
+ XYPoint { x: 0; y: 1.5 }
+ XYPoint { x: 1; y: 3 }
+ XYPoint { x: 3; y: 4.3 }
+ XYPoint { x: 6; y: 1.1 }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/BarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/BarSeries.qml
new file mode 100644
index 00000000000..07e5838ef9d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/BarSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ BarSeries {
+ name: "BarSeries"
+ BarSet { label: "Set1"; values: [2, 2, 3] }
+ BarSet { label: "Set2"; values: [5, 1, 2] }
+ BarSet { label: "Set3"; values: [3, 5, 8] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Bars3D.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Bars3D.qml
new file mode 100644
index 00000000000..e823c16ae7f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Bars3D.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick3D
+import QtGraphs
+
+Bars3D {
+ id: bars3d
+ width: 300
+ height: 300
+ Bar3DSeries {
+ id: bars3dSeries
+ ItemModelBarDataProxy {
+ id: barsDataProxy
+ itemModel: ListModel {
+ ListElement{ row: "row 1"; column: "column 1"; value: "1"; }
+ ListElement{ row: "row 1"; column: "column 2"; value: "2"; }
+ ListElement{ row: "row 1"; column: "column 3"; value: "3"; }
+ }
+
+ rowRole: "row"
+ columnRole: "column"
+ valueRole: "value"
+ }
+ }
+}
+
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/BoxPlotSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/BoxPlotSeries.qml
new file mode 100644
index 00000000000..44d7041b358
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/BoxPlotSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ BoxPlotSeries {
+ name: "BoxPlotSeries"
+ BoxSet { label: "Set1"; values: [3, 4, 5.1, 6.2, 8.5] }
+ BoxSet { label: "Set2"; values: [5, 6, 7.5, 8.6, 11.8] }
+ BoxSet { label: "Set3"; values: [3.2, 5, 5.7, 8, 9.2] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DAreaSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DAreaSeries.qml
new file mode 100644
index 00000000000..22c5835104b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DAreaSeries.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtGraphs
+
+GraphsView {
+ width: 300
+ height: 300
+
+ axisX: valueAxisX
+ axisY: valueAxisY
+
+ ValueAxis {
+ id: valueAxisX
+ min: 0
+ max: 10
+ }
+ ValueAxis {
+ id: valueAxisY
+ min: 0
+ max: 10
+ }
+
+ AreaSeries {
+ name: "AreaSeries"
+ upperSeries: lineSeries
+
+ LineSeries {
+ id: lineSeries
+ XYPoint {
+ x: 0
+ y: 1.5
+ }
+
+ XYPoint {
+ x: 1
+ y: 3
+ }
+
+ XYPoint {
+ x: 6
+ y: 6.3
+ }
+
+ XYPoint {
+ x: 10
+ y: 3.1
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DBarSeries.qml
new file mode 100644
index 00000000000..ece1718ab83
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DBarSeries.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtGraphs
+
+GraphsView {
+ width: 300
+ height: 300
+
+ axisX: barCategoryAxis
+ axisY: valueAxis
+
+ BarCategoryAxis {
+ id: barCategoryAxis
+ categories: ["2023", "2024", "2025"]
+ }
+
+ ValueAxis {
+ id: valueAxis
+ min: 0
+ max: 10
+ }
+
+ BarSeries {
+ id: barSeries
+ BarSet { id: set1; label: "Set1"; values: [2, 2, 3] }
+ BarSet { id: set2; label: "Set2"; values: [5, 1, 2] }
+ BarSet { id: set3; label: "Set3"; values: [3, 5, 8] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DLineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DLineSeries.qml
new file mode 100644
index 00000000000..1f7d9595e47
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DLineSeries.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtGraphs
+
+GraphsView {
+ width: 300
+ height: 300
+
+ axisX: valueAxisX
+ axisY: valueAxisY
+
+ ValueAxis {
+ id: valueAxisX
+ min: 0
+ max: 10
+ }
+ ValueAxis {
+ id: valueAxisY
+ min: 0
+ max: 10
+ }
+
+ LineSeries {
+ id: lineSeries
+ XYPoint {
+ x: 0
+ y: 2
+ }
+
+ XYPoint {
+ x: 3
+ y: 1.2
+ }
+
+ XYPoint {
+ x: 7
+ y: 3.3
+ }
+
+ XYPoint {
+ x: 10
+ y: 2.1
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DPieSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DPieSeries.qml
new file mode 100644
index 00000000000..a8b8bcd806b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DPieSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtGraphs
+
+GraphsView {
+ width: 300
+ height: 300
+
+ PieSeries {
+ id: pieSeries
+ PieSlice { label: "Slice1"; value: 13.5 }
+ PieSlice { label: "Slice2"; value: 10.9 }
+ PieSlice { label: "Slice3"; value: 8.6 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DScatterSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DScatterSeries.qml
new file mode 100644
index 00000000000..4d86d504117
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DScatterSeries.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtGraphs
+
+GraphsView {
+ width: 300
+ height: 300
+
+ axisX: valueAxisX
+ axisY: valueAxisY
+
+ ValueAxis {
+ id: valueAxisX
+ min: 0
+ max: 10
+ }
+ ValueAxis {
+ id: valueAxisY
+ min: 0
+ max: 10
+ }
+
+ ScatterSeries {
+ id: lineSeries
+ XYPoint {
+ x: 0
+ y: 2
+ }
+
+ XYPoint {
+ x: 3
+ y: 1.2
+ }
+
+ XYPoint {
+ x: 7
+ y: 3.3
+ }
+
+ XYPoint {
+ x: 10
+ y: 2.1
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DSplineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DSplineSeries.qml
new file mode 100644
index 00000000000..baab8f14e72
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Graphs2DSplineSeries.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtGraphs
+
+GraphsView {
+ width: 300
+ height: 300
+
+ axisX: valueAxisX
+ axisY: valueAxisY
+
+ ValueAxis {
+ id: valueAxisX
+ min: 0
+ max: 10
+ }
+ ValueAxis {
+ id: valueAxisY
+ min: 0
+ max: 10
+ }
+
+ SplineSeries {
+ id: lineSeries
+ XYPoint {
+ x: 0
+ y: 2
+ }
+
+ XYPoint {
+ x: 3
+ y: 1.2
+ }
+
+ XYPoint {
+ x: 7
+ y: 3.3
+ }
+
+ XYPoint {
+ x: 10
+ y: 2.1
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalBarSeries.qml
new file mode 100644
index 00000000000..559cf2b7898
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalBarSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ HorizontalBarSeries {
+ name: "HorizontalBarSeries"
+ BarSet { label: "Set1"; values: [2, 2, 3] }
+ BarSet { label: "Set2"; values: [5, 1, 2] }
+ BarSet { label: "Set3"; values: [3, 5, 8] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalPercentBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalPercentBarSeries.qml
new file mode 100644
index 00000000000..68f7a0f532b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalPercentBarSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ HorizontalPercentBarSeries {
+ name: "HorizontalPercentBarSeries"
+ BarSet { label: "Set1"; values: [2, 2, 3] }
+ BarSet { label: "Set2"; values: [5, 1, 2] }
+ BarSet { label: "Set3"; values: [3, 5, 8] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalStackedBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalStackedBarSeries.qml
new file mode 100644
index 00000000000..c80cd3cba8d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/HorizontalStackedBarSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ HorizontalStackedBarSeries {
+ name: "HorizontalStackedBarSeries"
+ BarSet { label: "Set1"; values: [2, 2, 3] }
+ BarSet { label: "Set2"; values: [5, 1, 2] }
+ BarSet { label: "Set3"; values: [3, 5, 8] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/LineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/LineSeries.qml
new file mode 100644
index 00000000000..c0ce034505b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/LineSeries.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ LineSeries {
+ name: "LineSeries"
+ XYPoint { x: 0; y: 2 }
+ XYPoint { x: 1; y: 1.2 }
+ XYPoint { x: 2; y: 3.3 }
+ XYPoint { x: 5; y: 2.1 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PercentBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PercentBarSeries.qml
new file mode 100644
index 00000000000..71e039f2d95
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/PercentBarSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ PercentBarSeries {
+ name: "PercentBarSeries"
+ BarSet { label: "Set1"; values: [2, 2, 3] }
+ BarSet { label: "Set2"; values: [5, 1, 2] }
+ BarSet { label: "Set3"; values: [3, 5, 8] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PieSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PieSeries.qml
new file mode 100644
index 00000000000..eb803e68c64
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/PieSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ PieSeries {
+ name: "PieSeries"
+ PieSlice { label: "Slice1"; value: 13.5 }
+ PieSlice { label: "Slice2"; value: 10.9 }
+ PieSlice { label: "Slice3"; value: 8.6 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarAreaSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarAreaSeries.qml
new file mode 100644
index 00000000000..581b7b20aa6
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarAreaSeries.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+PolarChartView {
+ width: 300
+ height: 300
+ legend.visible: false
+
+ ValueAxis {
+ id: axis1
+ tickCount: 9
+ }
+ ValueAxis {
+ id: axis2
+ }
+ LineSeries {
+ id: lowerLine
+ axisAngular: axis1
+ axisRadial: axis2
+
+ XYPoint { x: 1; y: 5 }
+ XYPoint { x: 2; y: 10 }
+ XYPoint { x: 3; y: 12 }
+ XYPoint { x: 4; y: 17 }
+ XYPoint { x: 5; y: 20 }
+ }
+ LineSeries {
+ id: upperLine
+ axisAngular: axis1
+ axisRadial: axis2
+
+ XYPoint { x: 1; y: 5 }
+ XYPoint { x: 2; y: 14 }
+ XYPoint { x: 3; y: 20 }
+ XYPoint { x: 4; y: 32 }
+ XYPoint { x: 5; y: 35 }
+ }
+ AreaSeries {
+ name: "AreaSeries"
+ axisAngular: axis1
+ axisRadial: axis2
+ lowerSeries: lowerLine
+ upperSeries: upperLine
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarLineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarLineSeries.qml
new file mode 100644
index 00000000000..a1d43c4554e
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarLineSeries.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+PolarChartView {
+ width: 300
+ height: 300
+
+ LineSeries {
+ name: "LineSeries"
+ axisRadial: CategoryAxis {
+ min: 0
+ max: 20
+ }
+ axisAngular: ValueAxis {
+ tickCount: 9
+ }
+ XYPoint { x: 0; y: 4.3 }
+ XYPoint { x: 2; y: 4.7 }
+ XYPoint { x: 4; y: 5.2 }
+ XYPoint { x: 6; y: 6.1 }
+ XYPoint { x: 8; y: 12.9 }
+ XYPoint { x: 9; y: 19.2 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarScatterSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarScatterSeries.qml
new file mode 100644
index 00000000000..26dd577b5ea
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarScatterSeries.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+PolarChartView {
+ width: 300
+ height: 300
+
+ ScatterSeries {
+ name: "ScatterSeries"
+ axisRadial: CategoryAxis {
+ min: 0
+ max: 20
+ }
+ axisAngular: ValueAxis {
+ tickCount: 9
+ }
+ XYPoint { x: 0; y: 4.3 }
+ XYPoint { x: 2; y: 4.7 }
+ XYPoint { x: 4; y: 5.2 }
+ XYPoint { x: 8; y: 12.9 }
+ XYPoint { x: 9; y: 19.2 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/PolarSplineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/PolarSplineSeries.qml
new file mode 100644
index 00000000000..5f05ca9c622
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/PolarSplineSeries.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+PolarChartView {
+ width: 300
+ height: 300
+
+ SplineSeries {
+ name: "SplineSeries"
+ axisRadial: CategoryAxis {
+ min: 0
+ max: 20
+ }
+ axisAngular: ValueAxis {
+ tickCount: 9
+ }
+ XYPoint { x: 0; y: 4.3 }
+ XYPoint { x: 2; y: 4.7 }
+ XYPoint { x: 4; y: 5.2 }
+ XYPoint { x: 6; y: 6.1 }
+ XYPoint { x: 8; y: 12.9 }
+ XYPoint { x: 9; y: 19.2 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Scatter3D.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Scatter3D.qml
new file mode 100644
index 00000000000..24c199ab406
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Scatter3D.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick3D
+import QtGraphs
+
+Scatter3D {
+ id: scatter3d
+ width: 300
+ height: 300
+ Scatter3DSeries {
+ id: scatter3dSeries
+ ItemModelScatterDataProxy {
+ id: scatterDataProxy
+ itemModel: ListModel {
+ ListElement{ x: "1"; y: "2"; z: "3"; }
+ ListElement{ x: "2"; y: "3"; z: "4"; }
+ ListElement{ x: "3"; y: "4"; z: "1"; }
+ }
+
+ xPosRole: "x"
+ yPosRole: "y"
+ zPosRole: "z"
+ }
+ }
+}
+
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/ScatterSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/ScatterSeries.qml
new file mode 100644
index 00000000000..3b73402e41b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/ScatterSeries.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ ScatterSeries {
+ name: "ScatterSeries"
+ XYPoint { x: 1; y: 1 }
+ XYPoint { x: 2; y: 4 }
+ XYPoint { x: 4; y: 2 }
+ XYPoint { x: 5; y: 5 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/SplineSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/SplineSeries.qml
new file mode 100644
index 00000000000..b400a99e535
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/SplineSeries.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ SplineSeries {
+ name: "SplineSeries"
+ XYPoint { x: 0; y: 1 }
+ XYPoint { x: 3; y: 4.3 }
+ XYPoint { x: 5; y: 3.1 }
+ XYPoint { x: 8; y: 5.8 }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/StackedBarSeries.qml b/share/qtcreator/qmldesigner/itemLibrary/source/StackedBarSeries.qml
new file mode 100644
index 00000000000..45431cd8580
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/StackedBarSeries.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtCharts
+
+ChartView {
+ width: 300
+ height: 300
+
+ StackedBarSeries {
+ name: "StackedBarSeries"
+ BarSet { label: "Set1"; values: [2, 2, 3] }
+ BarSet { label: "Set2"; values: [5, 1, 2] }
+ BarSet { label: "Set3"; values: [3, 5, 8] }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/itemLibrary/source/Surface3D.qml b/share/qtcreator/qmldesigner/itemLibrary/source/Surface3D.qml
new file mode 100644
index 00000000000..d5c0a56fff6
--- /dev/null
+++ b/share/qtcreator/qmldesigner/itemLibrary/source/Surface3D.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick3D
+import QtGraphs
+
+Surface3D {
+ id: surface3d
+ width: 300
+ height: 300
+ Surface3DSeries {
+ id: surface3dSeries
+ ItemModelSurfaceDataProxy {
+ id: surfaceDataProxy
+ itemModel: ListModel {
+ ListElement{ row: "1"; column: "1"; y: "1"; }
+ ListElement{ row: "1"; column: "2"; y: "2"; }
+ ListElement{ row: "2"; column: "1"; y: "3"; }
+ ListElement{ row: "2"; column: "2"; y: "4"; }
+ }
+
+ rowRole: "row"
+ columnRole: "column"
+ yPosRole: "y"
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml
index 6e1467dd2f7..87c9f623536 100644
--- a/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml
+++ b/share/qtcreator/qmldesigner/newprojectdialog/imports/NewProjectDialog/Styles.qml
@@ -132,7 +132,7 @@ Item {
delegate: ItemDelegate {
id: delegateId
- readonly property string styleName: model.display
+ readonly property string styleName: model?.display ?? ""
width: stylesList.width
height: DialogValues.styleListItemHeight
hoverEnabled: true
@@ -180,7 +180,7 @@ Item {
width: DialogValues.styleImageWidth
height: DialogValues.styleImageHeight
asynchronous: false
- source: "image://newprojectdialog_library/" + model.iconName
+ source: model?.iconName ? "image://newprojectdialog_library/" + model.iconName : ""
}
} // Rectangle
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeImagePane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeImagePane.qml
new file mode 100644
index 00000000000..5f06bd79d89
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeImagePane.qml
@@ -0,0 +1,156 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuickDesignerTheme
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Rectangle {
+ id: itemPane
+ width: 320
+ height: 400
+ color: Theme.qmlDesignerBackgroundColorDarkAlternate()
+
+ Component.onCompleted: Controller.mainScrollView = mainScrollView
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: forceActiveFocus()
+ }
+
+ ScrollView {
+ id: mainScrollView
+ clip: true
+ anchors.fill: parent
+
+ Column {
+ id: mainColumn
+ y: -1
+ width: itemPane.width
+
+ onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width)
+ Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width)
+
+ ComponentSection {}
+
+ Section {
+ caption: qsTr("Safe Image")
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ SectionLayout {
+ PropertyLabel { text: qsTr("Position") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.x
+ maximumValue: 0xffff
+ minimumValue: -0xffff
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel { text: "X" }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlGap }
+
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.y
+ maximumValue: 0xffff
+ minimumValue: -0xffff
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel { text: "Y" }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Size") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.width
+ maximumValue: 0xffff
+ minimumValue: 1
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ //: The width of the object
+ text: qsTr("W", "width")
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlGap }
+
+ SpinBox {
+ id: heightSpinBox
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.height
+ maximumValue: 0xffff
+ minimumValue: 1
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ //: The height of the object
+ text: qsTr("H", "height")
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Source") }
+
+ SecondColumnLayout {
+ UrlChooser {
+ backendValue: backendValues.source
+ }
+
+ ExpandingSpacer {}
+ }
+ PropertyLabel { text: qsTr("fillColor") }
+
+ ColorEditor {
+ backendValue: backendValues.fillColor
+ supportGradient: false
+ }
+
+ PropertyLabel { text: qsTr("Opacity") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ sliderIndicatorVisible: true
+ backendValue: backendValues.opacity
+ decimals: 2
+ minimumValue: 0
+ maximumValue: 1
+ hasSlider: true
+ stepSize: 0.1
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafePicturePane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafePicturePane.qml
new file mode 100644
index 00000000000..89aaccba29c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafePicturePane.qml
@@ -0,0 +1,163 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuickDesignerTheme
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Rectangle {
+ id: itemPane
+ width: 320
+ height: 400
+ color: Theme.qmlDesignerBackgroundColorDarkAlternate()
+
+ Component.onCompleted: Controller.mainScrollView = mainScrollView
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: forceActiveFocus()
+ }
+
+ ScrollView {
+ id: mainScrollView
+ clip: true
+ anchors.fill: parent
+
+ Column {
+ id: mainColumn
+ y: -1
+ width: itemPane.width
+
+ onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width)
+ Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width)
+
+ ComponentSection {}
+
+ Section {
+ caption: qsTr("Safe Picture")
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ SectionLayout {
+ PropertyLabel { text: qsTr("Position") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.x
+ maximumValue: 0xffff
+ minimumValue: -0xffff
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel { text: "X" }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlGap }
+
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.y
+ maximumValue: 0xffff
+ minimumValue: -0xffff
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel { text: "Y" }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Size") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.width
+ maximumValue: 0xffff
+ minimumValue: 1
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ //: The width of the object
+ text: qsTr("W", "width")
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlGap }
+
+ SpinBox {
+ id: heightSpinBox
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.height
+ maximumValue: 0xffff
+ minimumValue: 1
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ //: The height of the object
+ text: qsTr("H", "height")
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Source") }
+
+ SecondColumnLayout {
+ UrlChooser {
+ backendValue: backendValues.source
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Color") }
+
+ ColorEditor {
+ backendValue: backendValues.color
+ supportGradient: false
+ }
+
+ PropertyLabel { text: qsTr("fillColor") }
+
+ ColorEditor {
+ backendValue: backendValues.fillColor
+ supportGradient: false
+ }
+ PropertyLabel { text: qsTr("Opacity") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ sliderIndicatorVisible: true
+ backendValue: backendValues.opacity
+ decimals: 2
+ minimumValue: 0
+ maximumValue: 1
+ hasSlider: true
+ stepSize: 0.1
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeTextPane.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeTextPane.qml
new file mode 100644
index 00000000000..be097ee2738
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/Qt/SafeRenderer/SafeTextPane.qml
@@ -0,0 +1,269 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuickDesignerTheme
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Rectangle {
+ id: itemPane
+ width: 320
+ height: 400
+ color: Theme.qmlDesignerBackgroundColorDarkAlternate()
+
+ Component.onCompleted: Controller.mainScrollView = mainScrollView
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: forceActiveFocus()
+ }
+
+ ScrollView {
+ id: mainScrollView
+ clip: true
+ anchors.fill: parent
+
+ Column {
+ id: mainColumn
+ y: -1
+ width: itemPane.width
+
+ onWidthChanged: StudioTheme.Values.responsiveResize(itemPane.width)
+ Component.onCompleted: StudioTheme.Values.responsiveResize(itemPane.width)
+
+ ComponentSection {}
+
+ Section {
+ caption: qsTr("Safe Text")
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ SectionLayout {
+ PropertyLabel { text: qsTr("Position") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.x
+ maximumValue: 0xffff
+ minimumValue: -0xffff
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel { text: "X" }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlGap }
+
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.y
+ maximumValue: 0xffff
+ minimumValue: -0xffff
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel { text: "Y" }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Size") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.width
+ maximumValue: 0xffff
+ minimumValue: 1
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ //: The width of the object
+ text: qsTr("W", "width")
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlGap }
+
+ SpinBox {
+ id: heightSpinBox
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.height
+ maximumValue: 0xffff
+ minimumValue: 1
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ //: The height of the object
+ text: qsTr("H", "height")
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Text") }
+
+ SecondColumnLayout {
+ LineEdit {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ width: implicitWidth
+ backendValue: backendValues.text
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Color") }
+
+ ColorEditor {
+ backendValue: backendValues.color
+ supportGradient: false
+ }
+ PropertyLabel { text: qsTr("fillColor") }
+
+ ColorEditor {
+ backendValue: backendValues.fillColor
+ supportGradient: false
+ }
+ PropertyLabel { text: qsTr("Opacity") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ sliderIndicatorVisible: true
+ backendValue: backendValues.opacity
+ decimals: 2
+ minimumValue: 0
+ maximumValue: 1
+ hasSlider: true
+ stepSize: 0.1
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Font") }
+
+ SecondColumnLayout {
+ FontComboBox {
+ id: fontComboBox
+ property string familyName: backendValue.value
+ backendValue: backendValues.font_family
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ width: implicitWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Size") }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.font_pixelSize
+ minimumValue: 0
+ maximumValue: 400
+ decimals: 0
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel { text: "px" }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Emphasis") }
+
+ SecondColumnLayout {
+ BoolButtonRowButton {
+ id: boldButton
+ buttonIcon: StudioTheme.Constants.fontStyleBold
+ backendValue: backendValues.font_bold
+ }
+
+ Spacer {
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ - (boldButton.implicitWidth + italicButton.implicitWidth)
+ }
+
+ BoolButtonRowButton {
+ id: italicButton
+ buttonIcon: StudioTheme.Constants.fontStyleItalic
+ backendValue: backendValues.font_italic
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Alignment H") }
+
+ SecondColumnLayout {
+ AlignmentHorizontalButtons {
+ scope: "SafeText"
+ }
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Alignment V") }
+
+ SecondColumnLayout {
+ AlignmentVerticalButtons {
+ scope: "SafeText"
+ }
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Wrap mode") }
+
+ SecondColumnLayout {
+ ComboBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ width: implicitWidth
+ backendValue: backendValues.wrapMode
+ scope: "SafeText"
+ model: ["NoWrap", "WordWrap", "WrapAnywhere", "Wrap"]
+ enabled: backendValue.isAvailable
+ }
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel { text: qsTr("Dynamic") }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValue.valueToString
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ backendValue: backendValues.runtimeEditable
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtCharts/ChartViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtCharts/ChartViewSpecifics.qml
new file mode 100644
index 00000000000..1397249460a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtCharts/ChartViewSpecifics.qml
@@ -0,0 +1,123 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ caption: qsTr("Title")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Title")
+ }
+
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.title
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Color")
+ }
+
+ ColorEditor {
+ backendValue: backendValues.titleColor
+ supportGradient: false
+ }
+ }
+ }
+
+ Section {
+ width: parent.width
+ caption: qsTr("Background")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Color")
+ }
+
+ ColorEditor {
+ backendValue: backendValues.backgroundColor
+ supportGradient: false
+ }
+
+ PropertyLabel {
+ text: qsTr("Roundness")
+ tooltip: qsTr("Diameter of the rounding circle at the corners")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.backgroundRoundness
+ minimumValue: 0.1
+ maximumValue: 100.0
+ stepSize: 0.1
+ decimals: 1
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+
+ PropertyLabel {
+ text: qsTr("Drop Shadow")
+ tooltip: qsTr("Enable border drop shadow")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.dropShadowEnabled.valueToString
+ backendValue: backendValues.dropShadowEnabled
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ }
+ }
+
+ Section {
+ width: parent.width
+ caption: qsTr("Plot Area")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Color")
+ }
+
+ ColorEditor {
+ backendValue: backendValues.plotAreaColor
+ supportGradient: false
+ }
+ }
+ }
+
+ Section {
+ width: parent.width
+ caption: qsTr("Localization")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Localize Numbers")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.localizeNumbers.valueToString
+ backendValue: backendValues.localizeNumbers
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Bars3DSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Bars3DSpecifics.qml
new file mode 100644
index 00000000000..9c822a726f9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Bars3DSpecifics.qml
@@ -0,0 +1,276 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+import StudioTheme as StudioTheme
+import QtQuick.Controls as Controls
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Bars")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Uniform Scaling")
+ tooltip: qsTr("Proportionally scale multiple series")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ backendValue: backendValues.multiSeriesUniform
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Thickness")
+ tooltip: qsTr("Thickness ratio between X and Z dimension")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.barThickness
+ minimumValue: 0.01
+ maximumValue: 100.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+
+ PropertyLabel {
+ text: qsTr("Spacing")
+ tooltip: qsTr("Bar spacing in the X and Z dimensions")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.barSpacing_width
+ minimumValue: 0.0
+ maximumValue: 10.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ - StudioTheme.Values.actionIndicatorWidth
+ }
+ ControlLabel {
+ text: qsTr("Col")
+ width: StudioTheme.Values.actionIndicatorWidth * 2
+ }
+ }
+
+ PropertyLabel {}
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.barSpacing_height
+ minimumValue: 0.0
+ maximumValue: 10.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ - StudioTheme.Values.actionIndicatorWidth
+ }
+ ControlLabel {
+ text: qsTr("Row")
+ width: StudioTheme.Values.actionIndicatorWidth * 2
+ }
+
+ }
+ PropertyLabel {
+ text: qsTr("Relative Spacing")
+ tooltip: qsTr("Set bar spacing relative to thickness")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ backendValue: backendValues.barSpacingRelative
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Series Margin")
+ tooltip: qsTr("Margin between series columns in X and Z dimensions")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.barSeriesMargin_width
+ minimumValue: 0.0
+ maximumValue: 1.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ - StudioTheme.Values.actionIndicatorWidth
+ }
+ ControlLabel {
+ text: qsTr("Col")
+ width: StudioTheme.Values.actionIndicatorWidth * 2
+ }
+ }
+ PropertyLabel {}
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.barSeriesMargin_height
+ minimumValue: 0.0
+ maximumValue: 1.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ - StudioTheme.Values.actionIndicatorWidth
+ }
+ ControlLabel {
+ text: qsTr("Row")
+ width: StudioTheme.Values.actionIndicatorWidth * 2
+ }
+
+ }
+ PropertyLabel {
+ text: qsTr("Floor Level")
+ tooltip: qsTr("Floor level in Y-axis data coordinates")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.floorLevel
+ minimumValue: 0.0
+ maximumValue: 999999
+ stepSize: 0.1
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ - StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Selection Mode")
+ tooltip: qsTr("Bar selection mode")
+ }
+ SecondColumnLayout {
+ id: selectionLayout
+ property bool isInModel: backendValue.isInModel;
+ property bool isInSubState: backendValue.isInSubState;
+ property bool selectionChangedFlag: selectionChanged
+ property variant backendValue: backendValues.selectionMode
+ property variant valueFromBackend: backendValue.value
+ property string enumScope: "Graphs3D.SelectionFlag"
+ property string enumSeparator: " | "
+ property int checkedCount: 0
+ property bool item: false
+ property bool row: false
+ property bool column: false
+ property bool slice: false
+ property bool multi: false
+
+ function checkValue(checkedVariable, variableText, expressionBase) {
+ var expressionStr = expressionBase
+ if (checkedVariable) {
+ if (expressionStr !== "") {
+ expressionStr += enumSeparator
+ }
+ expressionStr += enumScope
+ expressionStr += "."
+ expressionStr += variableText
+ checkedCount++
+ }
+ return expressionStr
+ }
+
+ function composeSelectionMode() {
+ var expressionStr = ""
+ checkedCount = 0
+ expressionStr = checkValue(item, "Item", expressionStr)
+ expressionStr = checkValue(row, "Row", expressionStr)
+ expressionStr = checkValue(column, "Column", expressionStr)
+ expressionStr = checkValue(slice, "Slice", expressionStr)
+ expressionStr = checkValue(multi, "MultiSeries", expressionStr)
+
+ if (checkedCount === 0)
+ backendValue.expression = enumScope + ".None"
+ else
+ backendValue.expression = expressionStr
+ }
+
+ function evaluate() {
+ if (backendValue.value === undefined)
+ return
+
+ item = (backendValue.expression.indexOf("Item") !== -1)
+ row = (backendValue.expression.indexOf("Row") !== -1)
+ column = (backendValue.expression.indexOf("Column") !== -1)
+ slice = (backendValue.expression.indexOf("Slice") !== -1)
+ multi = (backendValue.expression.indexOf("MultiSeries") !== -1)
+
+ itemBox.checked = item
+ rowBox.checked = row
+ columnBox.checked = column
+ sliceBox.checked = slice
+ multiSeriesBox.checked = multi
+ }
+
+ onSelectionChangedFlagChanged: evaluate()
+
+ onIsInModelChanged: evaluate()
+
+ onIsInSubStateChanged: evaluate()
+
+ onBackendValueChanged: evaluate()
+
+ onValueFromBackendChanged: evaluate()
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ Controls.CheckBox {
+ id: itemBox
+ text: "Item"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.item = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: rowBox
+ text: "Row"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.row = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: columnBox
+ text: "Column"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.column = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: sliceBox
+ text: "Slice"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.slice = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: multiSeriesBox
+ text: "MultiSeries"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.multi = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ }
+ }
+ }
+ }
+
+ GraphsSection {}
+
+ GraphsCameraSection {}
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsCameraSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsCameraSection.qml
new file mode 100644
index 00000000000..dd7d64ee911
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsCameraSection.qml
@@ -0,0 +1,189 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+import StudioTheme as StudioTheme
+
+Section {
+ width: parent.width
+ caption: qsTr("Camera")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Preset")
+ tooltip: qsTr("Camera preset")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.cameraPreset
+ model: ["NoPreset", "FrontLow", "Front", "FrontHigh", "LeftLow",
+ "Left", "LeftHigh", "RightLow", "Right", "RightHigh", "BehindLow",
+ "Behind", "BehindHigh", "IsometricLeft", "IsometricLeftHigh",
+ "IsometricRight", "IsometricRightHigh", "DirectlyAbove",
+ "DirectlyAboveCW45", "DirectlyAboveCCW45", "FrontBelow",
+ "LeftBelow", "RightBelow", "BehindBelow", "DirectlyBelow"]
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ scope: "Graphs3D"
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Target")
+ tooltip: qsTr("Camera target position")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.cameraTargetPosition_x
+ minimumValue: -1.0
+ maximumValue: 1.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ }
+ ControlLabel {
+ text: "X"
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {}
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.cameraTargetPosition_y
+ minimumValue: -1.0
+ maximumValue: 1.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ }
+ ControlLabel {
+ text:"Y"
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {}
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.cameraTargetPosition_z
+ minimumValue: -1.0
+ maximumValue: 1.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ }
+ ControlLabel {
+ text: "Z"
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Zoom")
+ tooltip: qsTr("Camera zoom level")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.cameraZoomLevel
+ minimumValue: 0
+ maximumValue: 500
+ stepSize: 1
+ decimals: 0
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Min Zoom")
+ tooltip: qsTr("Camera minimum zoom")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.minCameraZoomLevel
+ minimumValue: 0
+ maximumValue: 500
+ stepSize: 1
+ decimals: 0
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Max Zoom")
+ tooltip: qsTr("Camera maximum zoom")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.maxCameraZoomLevel
+ minimumValue: 0
+ maximumValue: 500
+ stepSize: 1
+ decimals: 0
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("X Rotation")
+ tooltip: qsTr("Camera X rotation")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.cameraXRotation
+ minimumValue: -180
+ maximumValue: 180
+ stepSize: 1
+ decimals: 0
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Wrap X")
+ tooltip: qsTr("Wrap camera X rotation")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ backendValue: backendValues.wrapCameraXRotation
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Y Rotation")
+ tooltip: qsTr("Camera Y rotation")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.cameraYRotation
+ minimumValue: 0
+ maximumValue: 90
+ stepSize: 1
+ decimals: 0
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Wrap Y")
+ tooltip: qsTr("Wrap camera Y rotation")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ backendValue: backendValues.wrapCameraYRotation
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Orthographic")
+ tooltip: qsTr("Use orthographic camera")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ backendValue: backendValues.orthoProjection
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsSection.qml
new file mode 100644
index 00000000000..ee97514b6b1
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsSection.qml
@@ -0,0 +1,124 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+import StudioTheme as StudioTheme
+
+Section {
+ width: parent.width
+ caption: qsTr("Graph")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Render Mode")
+ tooltip: qsTr("Rendering mode")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.renderingMode
+ model: ["Indirect", "DirectToBackground"]
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ scope: "Graphs3D"
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Shadow Quality")
+ tooltip: qsTr("Quality and style of the shadows")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.shadowQuality
+ model: ["None", "Low", "Medium",
+ "High", "SoftLow", "SoftMedium",
+ "SoftHigh"]
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ scope: "Graphs3D"
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Optimization")
+ tooltip: qsTr("Optimization hint")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.optimizationHint
+ model: ["Default", "Legacy"]
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ scope: "Graphs3D"
+ }
+ }
+ PropertyLabel {
+ text: qsTr("MSAA")
+ tooltip: qsTr("Multisample anti-aliasing sample count")
+ }
+ SpinBox {
+ backendValue: backendValues.msaaSamples
+ minimumValue: 0
+ maximumValue: 8
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ PropertyLabel {
+ text: qsTr("Aspect Ratio")
+ tooltip: qsTr("Horizontal to vertical aspect ratio")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.aspectRatio
+ minimumValue: 0.1
+ maximumValue: 10.0
+ stepSize: 0.1
+ decimals: 1
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Horizontal AR")
+ tooltip: qsTr("Horizontal aspect ratio")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.horizontalAspectRatio
+ minimumValue: 0.1
+ maximumValue: 10.0
+ stepSize: 0.1
+ decimals: 1
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Margin")
+ tooltip: qsTr("Graph background margin")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.margin
+ minimumValue: -1.0
+ maximumValue: 100.0
+ stepSize: 0.1
+ decimals: 1
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Measure FPS")
+ tooltip: qsTr("Measure rendering speed as Frames Per Second")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ backendValue: backendValues.measureFps
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ }
+}
+
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsViewSpecifics.qml
new file mode 100644
index 00000000000..cb23b168ec4
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/GraphsViewSpecifics.qml
@@ -0,0 +1,103 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Background")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Color")
+ }
+
+ ColorEditor {
+ backendValue: backendValues.backgroundColor
+ supportGradient: false
+ }
+ }
+ }
+
+ Section {
+ width: parent.width
+ caption: qsTr("Margins")
+
+ SectionLayout {
+ rows: 4
+ PropertyLabel {
+ text: qsTr("Top")
+ tooltip: qsTr("The amount of empty space on the top of the graph.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.marginTop
+ minimumValue: 0.0
+ maximumValue: 9999.0
+ stepSize: 1.0
+ decimals: 1
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+
+ PropertyLabel {
+ text: qsTr("Bottom")
+ tooltip: qsTr("The amount of empty space on the bottom of the graph.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.marginBottom
+ minimumValue: 0.0
+ maximumValue: 9999.0
+ stepSize: 1.0
+ decimals: 1
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+
+ PropertyLabel {
+ text: qsTr("Left")
+ tooltip: qsTr("The amount of empty space on the left of the graph.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.marginLeft
+ minimumValue: 0.0
+ maximumValue: 9999.0
+ stepSize: 1.0
+ decimals: 1
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+
+ PropertyLabel {
+ text: qsTr("Right")
+ tooltip: qsTr("The amount of empty space on the right of the graph.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ backendValue: backendValues.marginRight
+ minimumValue: 0.0
+ maximumValue: 9999.0
+ stepSize: 1.0
+ decimals: 1
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Scatter3DSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Scatter3DSpecifics.qml
new file mode 100644
index 00000000000..03e3ca6debc
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Scatter3DSpecifics.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Scatter")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Polar Coordinates")
+ tooltip: qsTr("Use polar coordinates")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ id: polarCheckbox
+ backendValue: backendValues.polar
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Label Offset")
+ tooltip: qsTr("Normalized horizontal radial label offset")
+ visible: polarCheckbox.checked
+ }
+ SecondColumnLayout {
+ visible: polarCheckbox.checked
+ SpinBox {
+ backendValue: backendValues.radialLabelOffset
+ minimumValue: 0.0
+ maximumValue: 1.0
+ stepSize: 0.01
+ decimals: 2
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Selection Mode")
+ tooltip: qsTr("Scatter item selection mode")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.selectionMode
+ model: ["None", "Item"]
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ scope: "Graphs3D"
+ }
+ }
+ }
+ }
+
+ GraphsSection {}
+
+ GraphsCameraSection {}
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Surface3DSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Surface3DSpecifics.qml
new file mode 100644
index 00000000000..66a1d65f87c
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtGraphs/Surface3DSpecifics.qml
@@ -0,0 +1,192 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+import QtQuick.Controls as Controls
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("Surface")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Flip Grid")
+ tooltip: qsTr("Flip horizontal grid")
+ Layout.fillWidth: true
+ }
+ SecondColumnLayout {
+ CheckBox {
+ backendValue: backendValues.flipHorizontalGrid
+ Layout.fillWidth: true
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Polar Coordinates")
+ tooltip: qsTr("Use polar coordinates")
+ Layout.fillWidth: true
+ }
+ SecondColumnLayout {
+ CheckBox {
+ id: polarCheckbox
+ backendValue: backendValues.polar
+ Layout.fillWidth: true
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Label Offset")
+ tooltip: qsTr("Normalized horizontal radial label offset")
+ Layout.fillWidth: true
+ visible: polarCheckbox.checked
+ }
+ SecondColumnLayout {
+ visible: polarCheckbox.checked
+ SpinBox {
+ backendValue: backendValues.radialLabelOffset
+ minimumValue: 0.0
+ maximumValue: 1.0
+ stepSize: 0.01
+ decimals: 2
+ Layout.fillWidth: true
+ }
+ }
+ PropertyLabel {
+ text: qsTr("Selection Mode")
+ tooltip: qsTr("Surface point selection mode")
+ Layout.fillWidth: true
+ }
+ SecondColumnLayout {
+ id: selectionLayout
+ property bool isInModel: backendValue.isInModel;
+ property bool isInSubState: backendValue.isInSubState;
+ property bool selectionChangedFlag: selectionChanged
+ property variant backendValue: backendValues.selectionMode
+ property variant valueFromBackend: backendValue.value
+ property string enumScope: "Graphs3D.SelectionFlag"
+ property string enumSeparator: " | "
+ property int checkedCount: 0
+ property bool item: false
+ property bool row: false
+ property bool column: false
+ property bool slice: false
+ property bool multi: false
+
+ function checkValue(checkedVariable, variableText, expressionBase) {
+ var expressionStr = expressionBase
+ if (checkedVariable) {
+ if (expressionStr !== "") {
+ expressionStr += enumSeparator
+ }
+ expressionStr += enumScope
+ expressionStr += "."
+ expressionStr += variableText
+ checkedCount++
+ }
+ return expressionStr
+ }
+
+ function composeSelectionMode() {
+ var expressionStr = ""
+ checkedCount = 0
+ expressionStr = checkValue(item, "Item", expressionStr)
+ expressionStr = checkValue(row, "Row", expressionStr)
+ expressionStr = checkValue(column, "Column", expressionStr)
+ expressionStr = checkValue(slice, "Slice", expressionStr)
+ expressionStr = checkValue(multi, "MultiSeries", expressionStr)
+
+ if (checkedCount === 0)
+ backendValue.expression = enumScope + ".None"
+ else
+ backendValue.expression = expressionStr
+ }
+
+ function evaluate() {
+ if (backendValue.value === undefined)
+ return
+
+ item = (backendValue.expression.indexOf("Item") !== -1)
+ row = (backendValue.expression.indexOf("Row") !== -1)
+ column = (backendValue.expression.indexOf("Column") !== -1)
+ slice = (backendValue.expression.indexOf("Slice") !== -1)
+ multi = (backendValue.expression.indexOf("MultiSeries") !== -1)
+
+ itemBox.checked = item
+ rowBox.checked = row
+ columnBox.checked = column
+ sliceBox.checked = slice
+ multiSeriesBox.checked = multi
+ }
+
+ onSelectionChangedFlagChanged: evaluate()
+
+ onIsInModelChanged: evaluate()
+
+ onIsInSubStateChanged: evaluate()
+
+ onBackendValueChanged: evaluate()
+
+ onValueFromBackendChanged: evaluate()
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ Controls.CheckBox {
+ id: itemBox
+ text: "Item"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.item = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: rowBox
+ text: "Row"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.row = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: columnBox
+ text: "Column"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.column = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: sliceBox
+ text: "Slice"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.slice = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ Controls.CheckBox {
+ id: multiSeriesBox
+ text: "MultiSeries"
+ Layout.fillWidth: true
+ onClicked: {
+ selectionLayout.multi = checked
+ selectionLayout.composeSelectionMode()
+ }
+ }
+ }
+ }
+ }
+ }
+
+ GraphsSection {}
+
+ GraphsCameraSection {}
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/RectangleSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/RectangleSpecifics.qml
index cdcea69e066..f5d0b6ec017 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/RectangleSpecifics.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/RectangleSpecifics.qml
@@ -1,10 +1,10 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-import QtQuick 2.15
-import QtQuick.Layouts 1.15
-import HelperWidgets 2.0
-import StudioTheme 1.0 as StudioTheme
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
Column {
anchors.left: parent.left
@@ -68,11 +68,21 @@ Column {
width: implicitWidth
backendValue: backendValues.radius
minimumValue: 0
- maximumValue: Math.min(backendValues.height.value, backendValues.width.value) / 2
+ maximumValue: 0xffff
}
ExpandingSpacer {}
}
}
}
+
+ CornerRadiusSection {
+ id: cornerRadiusSection
+ property bool radiiAvailable: backendValues.topLeftRadius.isAvailable
+ // && backendValues.topRightRadius.isAvailable
+ // && backendValues.bottomLeftRadius.isAvailable
+ // && backendValues.bottomRightRadius.isAvailable
+
+ visible: majorQtQuickVersion >= 6 && minorQtQuickVersion >= 7 && cornerRadiusSection.radiiAvailable
+ }
}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSection.qml
new file mode 100644
index 00000000000..6dfe93f83ee
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSection.qml
@@ -0,0 +1,85 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Box Shape")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Extents")
+ tooltip: qsTr("The extents of the box shape in the X, Y and Z directions.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.extents_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.extents_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.extents_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSpecifics.qml
new file mode 100644
index 00000000000..c6ac4e6964f
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/BoxShapeSpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ BoxShapeSection {
+ width: parent.width
+ }
+
+ CollisionShapeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSection.qml
new file mode 100644
index 00000000000..2283f934489
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSection.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Capsule Shape")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Diameter")
+ tooltip: qsTr("Sets the diameter of the capsule.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.diameter
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Height")
+ tooltip: qsTr("Sets the height of the capsule.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.height
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSpecifics.qml
new file mode 100644
index 00000000000..eedfbb37e33
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CapsuleShapeSpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ CapsuleShapeSection {
+ width: parent.width
+ }
+
+ CollisionShapeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSection.qml
new file mode 100644
index 00000000000..b7c1d82baa7
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSection.qml
@@ -0,0 +1,188 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Character Controller")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: "Gravity"
+ tooltip: "The gravitational acceleration that applies to the character."
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.gravity_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.gravity_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.gravity_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Movement"
+ tooltip: "The controlled motion of the character."
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.movement_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.movement_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.movement_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Mid Air Control"
+ tooltip: "Enables movement property to have an effect when the character is in free fall."
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.midAirControl.valueToString
+ backendValue: backendValues.midAirControl
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Enable ShapeHit Callback"
+ tooltip: "Enables the shapeHit callback for this character controller."
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.midAirControl.valueToString
+ backendValue: backendValues.enableShapeHitCallback
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSpecifics.qml
new file mode 100644
index 00000000000..bc65d7ca752
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CharacterControllerSpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ CharacterControllerSection {
+ width: parent.width
+ }
+
+ PhysicsBodySection {
+ width: parent.width
+ }
+
+ PhysicsNodeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CollisionShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CollisionShapeSection.qml
new file mode 100644
index 00000000000..8ab32582cea
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/CollisionShapeSection.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Collision Shape")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Debug Draw")
+ tooltip: qsTr("Draws the collision shape in the scene view.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.enableDebugDraw.valueToString
+ backendValue: backendValues.enableDebugDraw
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSection.qml
new file mode 100644
index 00000000000..cc7fb9cc04a
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSection.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Section {
+ caption: qsTr("Convex Mesh Shape")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Source")
+ tooltip: qsTr("Defines the location of the mesh file used to define the shape.")
+ }
+
+ SecondColumnLayout {
+ UrlChooser {
+ id: sourceUrlChooser
+ backendValue: backendValues.source
+ filter: "*.mesh"
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSpecifics.qml
new file mode 100644
index 00000000000..c4f4e325f7d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/ConvexMeshShapeSpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ ConvexMeshShapeSection {
+ width: parent.width
+ }
+
+ CollisionShapeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySection.qml
new file mode 100644
index 00000000000..8574a37a5de
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySection.qml
@@ -0,0 +1,658 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Dynamic Rigid Body")
+
+ SectionLayout {
+ id: baseSectionLayout
+
+ property bool isDefaultDensityMode: massModeComboBox.currentIndex === 0
+ property bool isCustomDensityMode: massModeComboBox.currentIndex === 1
+ property bool isMassMode: massModeComboBox.currentIndex === 2
+ property bool isMassAndInertiaTensorMode: massModeComboBox.currentIndex === 3
+ property bool isMassAndInertiaMatrixMode: massModeComboBox.currentIndex === 4
+
+ PropertyLabel {
+ text: "Mass Mode"
+ tooltip: "Describes how mass and inertia are calculated for this body."
+ }
+
+ SecondColumnLayout {
+ ComboBox {
+ id: massModeComboBox
+ scope: "DynamicRigidBody"
+ model: ["DefaultDensity", "CustomDensity", "Mass", "MassAndInertiaTensor", "MassAndInertiaMatrix"]
+ backendValue: backendValues.massMode
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: baseSectionLayout.isMassAndInertiaMatrixMode || baseSectionLayout.isMassAndInertiaTensorMode
+ }
+
+ SecondColumnLayout {
+ visible: baseSectionLayout.isMassAndInertiaMatrixMode || baseSectionLayout.isMassAndInertiaTensorMode
+
+ Item {
+ // spacer for the always hiden action indicator
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+
+ Label {
+ text: qsTr("Tensor and Matrix modes require QML code.")
+ Layout.fillWidth: true
+ Layout.preferredWidth: StudioTheme.Values.singleControlColumnWidth
+ Layout.minimumWidth: StudioTheme.Values.singleControlColumnWidth
+ Layout.maximumWidth: StudioTheme.Values.singleControlColumnWidth
+ }
+ }
+
+ PropertyLabel {
+ visible: !baseSectionLayout.isDefaultDensityMode && !baseSectionLayout.isCustomDensityMode
+ text: "Mass"
+ tooltip: "The mass of the body."
+ }
+
+ SecondColumnLayout {
+ visible: !baseSectionLayout.isDefaultDensityMode && !baseSectionLayout.isCustomDensityMode
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 2
+ stepSize: 0.01
+ backendValue: backendValues.mass
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: baseSectionLayout.isCustomDensityMode
+ text: "Density"
+ tooltip: "The density of the body."
+ }
+
+ SecondColumnLayout {
+ visible: baseSectionLayout.isCustomDensityMode
+ SpinBox {
+ minimumValue: -1
+ maximumValue: 9999999
+ decimals: 2
+ stepSize: 0.01
+ backendValue: backendValues.density
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Enable Gravity"
+ tooltip: "Sets if the body affected by gravity."
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.gravityEnabled.valueToString
+ backendValue: backendValues.gravityEnabled
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Linear Axis Lock"
+ tooltip: "Lock the linear axis of the body."
+ }
+
+ SecondColumnLayout {
+ ActionIndicator {
+ id: linearAxisLockController
+ icon.color: extFuncLogic.color
+ icon.text: extFuncLogic.glyph
+ onClicked: extFuncLogic.show()
+ forceVisible: extFuncLogic.menuVisible
+ visible: true
+
+ property var enableLockX: { "value": false, "isInModel": false}
+ property var enableLockY: { "value": false, "isInModel": false}
+ property var enableLockZ: { "value": false, "isInModel": false}
+
+ property variant backendValue: backendValues.linearAxisLock
+ property variant valueFromBackend: backendValue === undefined ? 0 : backendValue.value
+ property bool blockLocks: false
+
+ onBackendValueChanged: evaluateLocks()
+ onValueFromBackendChanged: evaluateLocks()
+
+ Connections {
+ target: modelNodeBackend
+ function onSelectionChanged() {
+ evaluateLevels()
+ }
+ }
+
+ Component.onCompleted: evaluateLocks()
+
+ function evaluateLocks() {
+ blockLocks = true
+ enableLockX = { "value": valueFromBackend & 1, "isInModel": false}
+ enableLockY = { "value": valueFromBackend & 2, "isInModel": false}
+ enableLockZ = { "value": valueFromBackend & 4, "isInModel": false}
+ blockLocks = false
+ }
+
+ function composeExpressionString() {
+ if (blockLocks)
+ return
+
+ let expressionStr = "";
+
+ if (enableLockX.value || enableLockY.value || enableLockY.value) {
+ if (enableLockX.value)
+ expressionStr += " | DynamicRigidBody.LockX";
+ if (enableLockY.value)
+ expressionStr += " | DynamicRigidBody.LockY";
+ if (enableLockZ.value)
+ expressionStr += " | DynamicRigidBody.LockZ";
+
+ expressionStr = expressionStr.substring(3);
+
+ backendValue.expression = expressionStr
+ } else {
+ expressionStr = "DynamicRigidBody.None";
+ backendValue.expression = expressionStr
+ }
+ }
+ ExtendedFunctionLogic {
+ id: extFuncLogic
+ backendValue: backendValues.linearAxisLock
+ onReseted: {
+ linearAxisLockController.enableLockX = { "value": false, "isInModel": false}
+ linearAxisLockController.enableLockY = { "value": false, "isInModel": false}
+ linearAxisLockController.enableLockZ = { "value": false, "isInModel": false}
+ linearAxisLockController.evaluateLocks()
+ }
+ }
+ }
+ }
+ PropertyLabel {
+ // spacer
+ }
+
+ SecondColumnLayout {
+
+ Item {
+ // spacer for the always hiden action indicator
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+
+ CheckBox {
+ text: qsTr("Lock X")
+ backendValue: linearAxisLockController.enableLockX
+ actionIndicatorVisible: false
+ onCheckedChanged: linearAxisLockController.composeExpressionString()
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ PropertyLabel {
+ // spacer
+ }
+
+ SecondColumnLayout {
+
+ Item {
+ // spacer for the always hiden action indicator
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+
+ CheckBox {
+ text: qsTr("Lock Y")
+ backendValue: linearAxisLockController.enableLockY
+ actionIndicatorVisible: false
+ onCheckedChanged: linearAxisLockController.composeExpressionString()
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ PropertyLabel {
+ // spacer
+ }
+
+ SecondColumnLayout {
+
+ Item {
+ // spacer for the always hiden action indicator
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+
+ CheckBox {
+ text: qsTr("Lock Z")
+ backendValue: linearAxisLockController.enableLockZ
+ actionIndicatorVisible: false
+ onCheckedChanged: linearAxisLockController.composeExpressionString()
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Angular Axis Lock"
+ tooltip: "Lock the angular axis of the body."
+ }
+
+ SecondColumnLayout {
+ ActionIndicator {
+ id: angularAxisLockController
+ icon.color: extFuncLogicAngular.color
+ icon.text: extFuncLogicAngular.glyph
+ onClicked: extFuncLogicAngular.show()
+ forceVisible: extFuncLogic.menuVisible
+ visible: true
+
+ property var enableLockX: { "value": false, "isInModel": false}
+ property var enableLockY: { "value": false, "isInModel": false}
+ property var enableLockZ: { "value": false, "isInModel": false}
+
+ property variant backendValue: backendValues.angularAxisLock
+ property variant valueFromBackend: backendValue === undefined ? 0 : backendValue.value
+ property bool blockLocks: false
+
+ onBackendValueChanged: evaluateLocks()
+ onValueFromBackendChanged: evaluateLocks()
+
+ Connections {
+ target: modelNodeBackend
+ function onSelectionChanged() {
+ evaluateLevels()
+ }
+ }
+
+ Component.onCompleted: evaluateLocks()
+
+ function evaluateLocks() {
+ blockLocks = true
+ enableLockX = { "value": valueFromBackend & 1, "isInModel": false}
+ enableLockY = { "value": valueFromBackend & 2, "isInModel": false}
+ enableLockZ = { "value": valueFromBackend & 4, "isInModel": false}
+ blockLocks = false
+ }
+
+ function composeExpressionString() {
+ if (blockLocks)
+ return
+
+ let expressionStr = "";
+
+ if (enableLockX.value || enableLockY.value || enableLockY.value) {
+ if (enableLockX.value)
+ expressionStr += " | DynamicRigidBody.LockX";
+ if (enableLockY.value)
+ expressionStr += " | DynamicRigidBody.LockY";
+ if (enableLockZ.value)
+ expressionStr += " | DynamicRigidBody.LockZ";
+
+ expressionStr = expressionStr.substring(3);
+
+ backendValue.expression = expressionStr
+ } else {
+ expressionStr = "DynamicRigidBody.None";
+ backendValue.expression = expressionStr
+ }
+ }
+ ExtendedFunctionLogic {
+ id: extFuncLogicAngular
+ backendValue: backendValues.angularAxisLock
+ onReseted: {
+ angularAxisLockController.enableLockX = { "value": false, "isInModel": false}
+ angularAxisLockController.enableLockY = { "value": false, "isInModel": false}
+ angularAxisLockController.enableLockZ = { "value": false, "isInModel": false}
+ angularAxisLockController.evaluateLocks()
+ }
+ }
+ }
+ }
+ PropertyLabel {
+ // spacer
+ }
+
+ SecondColumnLayout {
+
+ Item {
+ // spacer for the always hiden action indicator
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+
+ CheckBox {
+ text: qsTr("Lock X")
+ backendValue: angularAxisLockController.enableLockX
+ actionIndicatorVisible: false
+ onCheckedChanged: angularAxisLockController.composeExpressionString()
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ PropertyLabel {
+ // spacer
+ }
+
+ SecondColumnLayout {
+
+ Item {
+ // spacer for the always hiden action indicator
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+
+ CheckBox {
+ text: qsTr("Lock Y")
+ backendValue: angularAxisLockController.enableLockY
+ actionIndicatorVisible: false
+ onCheckedChanged: angularAxisLockController.composeExpressionString()
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ PropertyLabel {
+ // spacer
+ }
+
+ SecondColumnLayout {
+
+ Item {
+ // spacer for the always hiden action indicator
+ width: StudioTheme.Values.actionIndicatorWidth
+ }
+
+ CheckBox {
+ text: qsTr("Lock Z")
+ backendValue: angularAxisLockController.enableLockZ
+ actionIndicatorVisible: false
+ onCheckedChanged: angularAxisLockController.composeExpressionString()
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Is Kinematic"
+ tooltip: "Kinematic objects are not influenced by external forces and can be seen as an object of infinite mass."
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ id: isKinematicCheckBox
+ text: backendValues.isKinematic.valueToString
+ backendValue: backendValues.isKinematic
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ text: "Kinematic Position"
+ tooltip: "The position of the kinematic object."
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicPosition_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicPosition_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicPosition_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ text: "Kinematic Rotation"
+ tooltip: "The rotation of the kinematic object."
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicEulerRotation_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicEulerRotation_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicEulerRotation_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ text: "Kinematic Pivot"
+ tooltip: "The pivot point of the kinematic object."
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicPivot_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicPivot_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ visible: isKinematicCheckBox.checked
+ }
+
+ SecondColumnLayout {
+ visible: isKinematicCheckBox.checked
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.kinematicPivot_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+}
+
+ // Other Properties Not covered by the UI
+ // QVector3D inertiaTensor
+ // QVector3D centerOfMassPosition
+ // QQuaternion centerOfMassRotation
+ // List inertiaMatrix (9 floats for a Mat3x3)
+
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySpecifics.qml
new file mode 100644
index 00000000000..7322d3339be
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/DynamicRigidBodySpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ DynamicRigidBodySection {
+ width: parent.width
+ }
+
+ PhysicsBodySection {
+ width: parent.width
+ }
+
+ PhysicsNodeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSection.qml
new file mode 100644
index 00000000000..80c6f428e97
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSection.qml
@@ -0,0 +1,98 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Height Field Shape")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Source")
+ tooltip: qsTr("Sets the location of an image file containing the heightmap data.")
+ }
+
+ SecondColumnLayout {
+ UrlChooser {
+ backendValue: backendValues.source
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Extents")
+ tooltip: qsTr("The extents of the height field shape in the X, Y and Z directions.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.extents_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.extents_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.extents_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSpecifics.qml
new file mode 100644
index 00000000000..22aa0348b71
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/HeightFieldShapeSpecifics.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ HeightFieldShapeSection {
+ width: parent.width
+ }
+
+ CollisionShapeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/NodeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/NodeSection.qml
new file mode 100644
index 00000000000..45dfe72a77d
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/NodeSection.qml
@@ -0,0 +1,350 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Node")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Opacity")
+ tooltip: qsTr("Sets the local opacity value of the node.")
+ }
+
+ SecondColumnLayout {
+ // ### should be a slider
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 1
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.opacity
+ sliderIndicatorVisible: true
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Visibility")
+ tooltip: qsTr("Sets the local visibility of the node.")
+ }
+
+ SecondColumnLayout {
+ // ### should be a slider
+ CheckBox {
+ text: qsTr("Is Visible")
+ backendValue: backendValues.visible
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+
+ Section {
+ id: transformSection
+ width: parent.width
+ caption: qsTr("Transform")
+
+ ColumnLayout {
+ spacing: StudioTheme.Values.transform3DSectionSpacing
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Translation")
+ tooltip: qsTr("Sets the translation of the node.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Rotation")
+ tooltip: qsTr("Sets the rotation of the node in degrees.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.eulerRotation_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.eulerRotation_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.eulerRotation_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Scale")
+ tooltip: qsTr("Sets the scale of the node.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.scale_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.scale_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.scale_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Pivot")
+ tooltip: qsTr("Sets the pivot of the node.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.pivot_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.pivot_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {}
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.pivot_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsBodySection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsBodySection.qml
new file mode 100644
index 00000000000..8f5d67f4a42
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsBodySection.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ caption: qsTr("Physics Body")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Physics Material")
+ tooltip: qsTr("The physics material of the body.")
+ }
+
+ SecondColumnLayout {
+ ItemFilterComboBox {
+ typeFilter: "QtQuick3D.Physics.PhysicsMaterial"
+ backendValue: backendValues.physicsMaterial
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSection.qml
new file mode 100644
index 00000000000..3e0c08655ea
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSection.qml
@@ -0,0 +1,69 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Physics Material")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: "Static Friction"
+ tooltip: "The friction coefficient of the material when it is not moving."
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 2
+ stepSize: 0.01
+ backendValue: backendValues.staticFriction
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Dynamic Friction"
+ tooltip: "The friction coefficient of the material when it is moving."
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 2
+ stepSize: 0.01
+ backendValue: backendValues.dynamicFriction
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: "Restitution"
+ tooltip: "The coefficient of restitution of the material."
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 1
+ decimals: 2
+ stepSize: 0.01
+ sliderIndicatorVisible: true
+ backendValue: backendValues.restitution
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSpecifics.qml
new file mode 100644
index 00000000000..95ebaf70127
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsMaterialSpecifics.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+ PhysicsMaterialSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsNodeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsNodeSection.qml
new file mode 100644
index 00000000000..26fdf0e4d87
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsNodeSection.qml
@@ -0,0 +1,103 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Physics Node")
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Collision Shapes")
+ Layout.alignment: Qt.AlignTop
+ Layout.topMargin: 5
+ }
+
+ SecondColumnLayout {
+ EditableListView {
+ backendValue: backendValues.collisionShapes
+ model: backendValues.collisionShapes.expressionAsList
+ Layout.fillWidth: true
+ typeFilter: "QtQuick3D.Physics.CollisionShape"
+
+ onAdd: function(value) { backendValues.collisionShapes.idListAdd(value) }
+ onRemove: function(idx) { backendValues.collisionShapes.idListRemove(idx) }
+ onReplace: function (idx, value) { backendValues.collisionShapes.idListReplace(idx, value) }
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Receive Contact Reports")
+ tooltip: qsTr("Determines whether this body will receive contact reports when colliding with other bodies.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.receiveContactReports.valueToString
+ backendValue: backendValues.receiveContactReports
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Send Contact Reports")
+ tooltip: qsTr("Determines whether this body will send contact reports when colliding with other bodies.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.sendContactReports.valueToString
+ backendValue: backendValues.sendContactReports
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Receive Trigger Reports")
+ tooltip: qsTr("Determines whether this body will receive reports when entering or leaving a trigger body.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.receiveTriggerReports.valueToString
+ backendValue: backendValues.receiveTriggerReports
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ text: qsTr("Send Trigger Reports")
+ tooltip: qsTr("Determines whether this body will send contact reports when colliding with other bodies.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.sendTriggerReports.valueToString
+ backendValue: backendValues.sendTriggerReports
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSection.qml
new file mode 100644
index 00000000000..3299e984bec
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSection.qml
@@ -0,0 +1,266 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Physics World")
+ width: parent.width
+
+ SectionLayout {
+ // Q_PROPERTY(QQuick3DNode *scene
+ PropertyLabel {
+ text: qsTr("Scene")
+ tooltip: qsTr("The scene node to which the physics world is attached.")
+ }
+
+ SecondColumnLayout {
+ ItemFilterComboBox {
+ typeFilter: "QtQuick3D.Node"
+ backendValue: backendValues.scene
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(QQuick3DNode *viewport
+ PropertyLabel {
+ text: qsTr("Viewport")
+ tooltip: qsTr("The node to which the debug geometry of the physics world is added.")
+ }
+
+ SecondColumnLayout {
+ ItemFilterComboBox {
+ typeFilter: "QtQuick3D.Node"
+ backendValue: backendValues.viewport
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(bool running)
+ PropertyLabel {
+ text: qsTr("Running")
+ tooltip: qsTr("Whether the physics world is running.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.running.valueToString
+ backendValue: backendValues.running
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(bool forceDebugDraw
+ PropertyLabel {
+ text: qsTr("Force Debug Draw")
+ tooltip: qsTr("Whether to force debug drawing of the physics world.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.forceDebugDraw.valueToString
+ backendValue: backendValues.forceDebugDraw
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(bool enableCCD
+ PropertyLabel {
+ text: qsTr("CCD")
+ tooltip: qsTr("Whether to enable continuous collision detection.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.enableCCD.valueToString
+ backendValue: backendValues.enableCCD
+ implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(QVector3D gravity)
+ PropertyLabel {
+ text: qsTr("Gravity")
+ tooltip: qsTr("The gravity vector.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.gravity_x
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "X"
+ color: StudioTheme.Values.theme3DAxisXColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.gravity_y
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Y"
+ color: StudioTheme.Values.theme3DAxisYColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ PropertyLabel {
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ minimumValue: -9999999
+ maximumValue: 9999999
+ decimals: 2
+ backendValue: backendValues.gravity_z
+ }
+
+ Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
+
+ ControlLabel {
+ text: "Z"
+ color: StudioTheme.Values.theme3DAxisZColor
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(float typicalLength)
+ PropertyLabel {
+ text: qsTr("Typical Length")
+ tooltip: qsTr("The typical length of objects in the scene.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0.00001
+ maximumValue: 9999999
+ decimals: 5
+ backendValue: backendValues.typicalLength
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(float typicalSpeed
+ PropertyLabel {
+ text: qsTr("Typical Speed")
+ tooltip: qsTr("The typical speed of objects in the scene.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0.00001
+ maximumValue: 9999999
+ decimals: 5
+ backendValue: backendValues.typicalSpeed
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(float defaultDensity)
+ PropertyLabel {
+ text: qsTr("Default Density")
+ tooltip: qsTr("The default density of objects in the scene.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0.00001
+ maximumValue: 9999999
+ decimals: 5
+ backendValue: backendValues.defaultDensity
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(float minimumTimestep)
+ PropertyLabel {
+ text: qsTr("Min Timestep")
+ tooltip: qsTr("Defines the minimum simulation timestep in milliseconds.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0.001
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.minimumTimestep
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+
+ // Q_PROPERTY(float maximumTimestep)
+ PropertyLabel {
+ text: qsTr("Max Timestep")
+ tooltip: qsTr("Defines the maximum simulation timestep in milliseconds.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0.001
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.maximumTimestep
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSpecifics.qml
new file mode 100644
index 00000000000..2c29985fd94
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PhysicsWorldSpecifics.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ PhysicsWorldSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PlaneShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PlaneShapeSpecifics.qml
new file mode 100644
index 00000000000..0410b5fbf98
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/PlaneShapeSpecifics.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ CollisionShapeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSection.qml
new file mode 100644
index 00000000000..44db7cb322b
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSection.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Sphere Shape")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Diameter")
+ tooltip: qsTr("Sets the diameter of the capsule.")
+ }
+
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 3
+ backendValue: backendValues.diameter
+ implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ + StudioTheme.Values.actionIndicatorWidth
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSpecifics.qml
new file mode 100644
index 00000000000..abee2e31069
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/SphereShapeSpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ SphereShapeSection {
+ width: parent.width
+ }
+
+ CollisionShapeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/StaticRigidBodySpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/StaticRigidBodySpecifics.qml
new file mode 100644
index 00000000000..1dc7c4806b0
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/StaticRigidBodySpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ PhysicsBodySection {
+ width: parent.width
+ }
+
+ PhysicsNodeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSection.qml
new file mode 100644
index 00000000000..53959a3aa25
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSection.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+import StudioTheme as StudioTheme
+
+Section {
+ caption: qsTr("Triangle Mesh Shape")
+ width: parent.width
+
+ SectionLayout {
+ PropertyLabel {
+ text: qsTr("Source")
+ tooltip: qsTr("Defines the location of the mesh file used to define the shape.")
+ }
+
+ SecondColumnLayout {
+ UrlChooser {
+ id: sourceUrlChooser
+ backendValue: backendValues.source
+ filter: "*.mesh"
+ }
+
+ ExpandingSpacer {}
+ }
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSpecifics.qml
new file mode 100644
index 00000000000..a428872f294
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriangleMeshShapeSpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ TriangleMeshShapeSection {
+ width: parent.width
+ }
+
+ CollisionShapeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriggerBodySpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriggerBodySpecifics.qml
new file mode 100644
index 00000000000..f341e48b691
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick3D/Physics/TriggerBodySpecifics.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+import QtQuick
+import QtQuick.Layouts
+import HelperWidgets
+
+Column {
+ width: parent.width
+
+ PhysicsNodeSection {
+ width: parent.width
+ }
+
+ NodeSection {
+ width: parent.width
+ }
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Studio/Components/CornerRadiusSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CornerRadiusSection.qml
similarity index 96%
rename from share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Studio/Components/CornerRadiusSection.qml
rename to share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CornerRadiusSection.qml
index b51c7b2dcdf..824881ce2b6 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/Studio/Components/CornerRadiusSection.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CornerRadiusSection.qml
@@ -21,7 +21,7 @@ Section {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
backendValue: backendValues.topLeftRadius
- decimals: 1
+ decimals: 0
minimumValue: 0
maximumValue: 0xffff
stepSize: 1
@@ -40,7 +40,7 @@ Section {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
backendValue: backendValues.topRightRadius
- decimals: 1
+ decimals: 0
minimumValue: 0
maximumValue: 0xffff
stepSize: 1
@@ -67,7 +67,7 @@ Section {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
backendValue: backendValues.bottomLeftRadius
- decimals: 1
+ decimals: 0
minimumValue: 0
maximumValue: 0xffff
stepSize: 1
@@ -87,7 +87,7 @@ Section {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
backendValue: backendValues.bottomRightRadius
- decimals: 1
+ decimals: 0
minimumValue: 0
maximumValue: 0xffff
stepSize: 1
@@ -114,7 +114,7 @@ Section {
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
backendValue: backendValues.radius
- decimals: 1
+ decimals: 0
minimumValue: 0
maximumValue: 0xffff
stepSize: 1
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml
index 0f192f8875f..4cc0c747f73 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/Section.qml
@@ -13,6 +13,7 @@ Item {
readonly property bool __isSection: true // used by property search logic
property string caption: "Title"
+ property string captionTooltip: ""
property color labelColor: StudioTheme.Values.themeTextColor
property int labelCapitalization: Font.AllUppercase
property alias sectionHeight: header.height
@@ -40,6 +41,20 @@ Item {
font.capitalization: section.labelCapitalization
anchors.verticalCenter: parent?.verticalCenter
textFormat: Text.RichText
+
+ MouseArea {
+ id: labelMouseArea
+
+ anchors.fill: parent
+ acceptedButtons: Qt.NoButton
+ hoverEnabled: true
+ enabled: section.captionTooltip !== ""
+ }
+
+ StudioControls.ToolTip {
+ visible: labelMouseArea.containsMouse
+ text: section.captionTooltip
+ }
}
property Item icons
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/qmldir b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/qmldir
index 29675dfde5b..3b0c5424448 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/qmldir
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/qmldir
@@ -18,6 +18,7 @@ ComponentButton 2.0 ComponentButton.qml
ComponentSection 2.0 ComponentSection.qml
ControlLabel 2.0 ControlLabel.qml
singleton Controller 2.0 Controller.qml
+CornerRadiusSection 2.0 CornerRadiusSection.qml
DoubleSpinBox 2.0 DoubleSpinBox.qml
DynamicPropertiesSection 2.0 DynamicPropertiesSection.qml
EditableListView 2.0 EditableListView.qml
diff --git a/src/libs/qmlpuppetcommunication/commands/captureddatacommand.h b/src/libs/qmlpuppetcommunication/commands/captureddatacommand.h
index 9246317365b..12caf32ebd0 100644
--- a/src/libs/qmlpuppetcommunication/commands/captureddatacommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/captureddatacommand.h
@@ -131,7 +131,7 @@ public:
CapturedDataCommand() = default;
- CapturedDataCommand(QVector &&stateData)
+ CapturedDataCommand(QList &&stateData)
: stateData{std::move(stateData)}
{}
@@ -157,7 +157,7 @@ public:
public:
QImage image;
- QVector stateData;
+ QList stateData;
};
} // namespace QmlDesigner
diff --git a/src/libs/qmlpuppetcommunication/commands/changeauxiliarycommand.h b/src/libs/qmlpuppetcommunication/commands/changeauxiliarycommand.h
index d36b9e90c23..c74ad7f4eca 100644
--- a/src/libs/qmlpuppetcommunication/commands/changeauxiliarycommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/changeauxiliarycommand.h
@@ -5,8 +5,8 @@
#include
#include
+#include
#include
-#include
#include "propertyvaluecontainer.h"
@@ -29,7 +29,7 @@ public:
friend QDebug operator <<(QDebug debug, const ChangeAuxiliaryCommand &command);
- QVector auxiliaryChanges;
+ QList auxiliaryChanges;
};
} // namespace QmlDesigner
diff --git a/src/libs/qmlpuppetcommunication/commands/changebindingscommand.h b/src/libs/qmlpuppetcommunication/commands/changebindingscommand.h
index 5e9464bbc54..bbab2987c8b 100644
--- a/src/libs/qmlpuppetcommunication/commands/changebindingscommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/changebindingscommand.h
@@ -3,8 +3,8 @@
#pragma once
+#include
#include
-#include
#include "propertybindingcontainer.h"
@@ -25,7 +25,7 @@ public:
friend QDebug operator <<(QDebug debug, const ChangeBindingsCommand &command);
- QVector bindingChanges;
+ QList bindingChanges;
};
} // namespace QmlDesigner
diff --git a/src/libs/qmlpuppetcommunication/commands/changeidscommand.h b/src/libs/qmlpuppetcommunication/commands/changeidscommand.h
index b0325d96521..6e337012312 100644
--- a/src/libs/qmlpuppetcommunication/commands/changeidscommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/changeidscommand.h
@@ -4,7 +4,7 @@
#pragma once
#include
-#include
+#include
#include
#include "idcontainer.h"
@@ -27,7 +27,7 @@ public:
}
friend QDebug operator <<(QDebug debug, const ChangeIdsCommand &command);
- QVector ids;
+ QList ids;
};
} // namespace QmlDesigner
diff --git a/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.cpp b/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.cpp
index e12172da9dc..5ca9c89e4b7 100644
--- a/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.cpp
@@ -10,12 +10,12 @@ namespace QmlDesigner {
ChangeSelectionCommand::ChangeSelectionCommand() = default;
-ChangeSelectionCommand::ChangeSelectionCommand(const QVector &idVector)
+ChangeSelectionCommand::ChangeSelectionCommand(const QList &idVector)
: m_instanceIdVector(idVector)
{
}
-QVector ChangeSelectionCommand::instanceIds() const
+QList ChangeSelectionCommand::instanceIds() const
{
return m_instanceIdVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.h b/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.h
index 56e2cb38ccd..5b245c6cc6c 100644
--- a/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/changeselectioncommand.h
@@ -3,12 +3,10 @@
#pragma once
+#include
#include
-#include
#include
-#include "instancecontainer.h"
-
namespace QmlDesigner {
class ChangeSelectionCommand
@@ -20,12 +18,12 @@ class ChangeSelectionCommand
public:
ChangeSelectionCommand();
- explicit ChangeSelectionCommand(const QVector &idVector);
+ explicit ChangeSelectionCommand(const QList &idVector);
- QVector instanceIds() const;
+ QList instanceIds() const;
private:
- QVector m_instanceIdVector;
+ QList m_instanceIdVector;
};
QDataStream &operator<<(QDataStream &out, const ChangeSelectionCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/changestatecommand.h b/src/libs/qmlpuppetcommunication/commands/changestatecommand.h
index 62cc39afc6d..fc6ce0dcaa2 100644
--- a/src/libs/qmlpuppetcommunication/commands/changestatecommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/changestatecommand.h
@@ -3,10 +3,8 @@
#pragma once
+#include
#include
-#include
-
-#include "propertyvaluecontainer.h"
namespace QmlDesigner {
diff --git a/src/libs/qmlpuppetcommunication/commands/changevaluescommand.cpp b/src/libs/qmlpuppetcommunication/commands/changevaluescommand.cpp
index 0fb819d93c1..3a7765031f3 100644
--- a/src/libs/qmlpuppetcommunication/commands/changevaluescommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/changevaluescommand.cpp
@@ -9,12 +9,12 @@ namespace QmlDesigner {
ChangeValuesCommand::ChangeValuesCommand() = default;
-ChangeValuesCommand::ChangeValuesCommand(const QVector &valueChangeVector)
+ChangeValuesCommand::ChangeValuesCommand(const QList &valueChangeVector)
: m_valueChangeVector (valueChangeVector)
{
}
-const QVector ChangeValuesCommand::valueChanges() const
+const QList ChangeValuesCommand::valueChanges() const
{
return m_valueChangeVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/changevaluescommand.h b/src/libs/qmlpuppetcommunication/commands/changevaluescommand.h
index 6dcea149056..3608dde7ffd 100644
--- a/src/libs/qmlpuppetcommunication/commands/changevaluescommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/changevaluescommand.h
@@ -3,8 +3,8 @@
#pragma once
+#include
#include
-#include
#include "propertyvaluecontainer.h"
@@ -17,12 +17,12 @@ class ChangeValuesCommand
public:
ChangeValuesCommand();
- explicit ChangeValuesCommand(const QVector &valueChangeVector);
+ explicit ChangeValuesCommand(const QList &valueChangeVector);
- const QVector valueChanges() const;
+ const QList valueChanges() const;
private:
- QVector m_valueChangeVector;
+ QList m_valueChangeVector;
};
QDataStream &operator<<(QDataStream &out, const ChangeValuesCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.cpp b/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.cpp
index bd805a56aa3..51421d1637a 100644
--- a/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.cpp
@@ -14,14 +14,14 @@ ChildrenChangedCommand::ChildrenChangedCommand()
{
}
-ChildrenChangedCommand::ChildrenChangedCommand(qint32 parentInstanceId, const QVector &children, const QVector &informationVector)
+ChildrenChangedCommand::ChildrenChangedCommand(qint32 parentInstanceId, const QList &children, const QList &informationVector)
: m_parentInstanceId(parentInstanceId),
m_childrenVector(children),
m_informationVector(informationVector)
{
}
-QVector ChildrenChangedCommand::childrenInstances() const
+QList ChildrenChangedCommand::childrenInstances() const
{
return m_childrenVector;
}
@@ -31,7 +31,7 @@ qint32 ChildrenChangedCommand::parentInstanceId() const
return m_parentInstanceId;
}
-QVector ChildrenChangedCommand::informations() const
+QList ChildrenChangedCommand::informations() const
{
return m_informationVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.h b/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.h
index f90383ef385..500593a435c 100644
--- a/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/childrenchangedcommand.h
@@ -3,8 +3,9 @@
#pragma once
+#include
#include
-#include
+
#include "informationcontainer.h"
namespace QmlDesigner {
@@ -16,18 +17,18 @@ class ChildrenChangedCommand
public:
ChildrenChangedCommand();
- explicit ChildrenChangedCommand(qint32 parentInstanceId, const QVector &childrenInstancesconst, const QVector &informationVector);
+ explicit ChildrenChangedCommand(qint32 parentInstanceId, const QList &childrenInstancesconst, const QList &informationVector);
- QVector childrenInstances() const;
+ QList childrenInstances() const;
qint32 parentInstanceId() const;
- QVector informations() const;
+ QList informations() const;
void sort();
private:
qint32 m_parentInstanceId;
- QVector m_childrenVector;
- QVector m_informationVector;
+ QList m_childrenVector;
+ QList m_informationVector;
};
QDataStream &operator<<(QDataStream &out, const ChildrenChangedCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.cpp b/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.cpp
index 9eda245dbfb..b3832866ffc 100644
--- a/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.cpp
@@ -10,12 +10,12 @@ namespace QmlDesigner {
CompleteComponentCommand::CompleteComponentCommand() = default;
-CompleteComponentCommand::CompleteComponentCommand(const QVector &container)
+CompleteComponentCommand::CompleteComponentCommand(const QList &container)
: m_instanceVector(container)
{
}
-const QVector CompleteComponentCommand::instances() const
+const QList CompleteComponentCommand::instances() const
{
return m_instanceVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.h b/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.h
index 82955e8ca84..aaa5814844e 100644
--- a/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/completecomponentcommand.h
@@ -3,8 +3,8 @@
#pragma once
+#include
#include
-#include
#include
namespace QmlDesigner {
@@ -16,12 +16,12 @@ class CompleteComponentCommand
public:
CompleteComponentCommand();
- explicit CompleteComponentCommand(const QVector &container);
+ explicit CompleteComponentCommand(const QList &container);
- const QVector instances() const;
+ const QList instances() const;
private:
- QVector m_instanceVector;
+ QList m_instanceVector;
};
QDataStream &operator<<(QDataStream &out, const CompleteComponentCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.cpp b/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.cpp
index 725e6d72f82..313ece9cf4a 100644
--- a/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.cpp
@@ -12,12 +12,12 @@ namespace QmlDesigner {
ComponentCompletedCommand::ComponentCompletedCommand() = default;
-ComponentCompletedCommand::ComponentCompletedCommand(const QVector &container)
+ComponentCompletedCommand::ComponentCompletedCommand(const QList &container)
: m_instanceVector(container)
{
}
-QVector ComponentCompletedCommand::instances() const
+QList ComponentCompletedCommand::instances() const
{
return m_instanceVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.h b/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.h
index a0baee93a67..e612e6c2cb3 100644
--- a/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/componentcompletedcommand.h
@@ -2,8 +2,9 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#pragma once
+
+#include
#include
-#include
#include
namespace QmlDesigner {
@@ -15,14 +16,14 @@ class ComponentCompletedCommand
public:
ComponentCompletedCommand();
- explicit ComponentCompletedCommand(const QVector &container);
+ explicit ComponentCompletedCommand(const QList &container);
- QVector instances() const;
+ QList instances() const;
void sort();
private:
- QVector m_instanceVector;
+ QList m_instanceVector;
};
QDataStream &operator<<(QDataStream &out, const ComponentCompletedCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/createinstancescommand.cpp b/src/libs/qmlpuppetcommunication/commands/createinstancescommand.cpp
index af18a2df00f..043b493489d 100644
--- a/src/libs/qmlpuppetcommunication/commands/createinstancescommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/createinstancescommand.cpp
@@ -10,12 +10,12 @@ namespace QmlDesigner {
CreateInstancesCommand::CreateInstancesCommand() = default;
-CreateInstancesCommand::CreateInstancesCommand(const QVector &container)
+CreateInstancesCommand::CreateInstancesCommand(const QList &container)
: m_instanceVector(container)
{
}
-QVector CreateInstancesCommand::instances() const
+QList CreateInstancesCommand::instances() const
{
return m_instanceVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/createinstancescommand.h b/src/libs/qmlpuppetcommunication/commands/createinstancescommand.h
index de056244452..110bdc9eb28 100644
--- a/src/libs/qmlpuppetcommunication/commands/createinstancescommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/createinstancescommand.h
@@ -3,8 +3,8 @@
#pragma once
+#include
#include
-#include
#include "instancecontainer.h"
@@ -16,12 +16,12 @@ class CreateInstancesCommand
public:
CreateInstancesCommand();
- explicit CreateInstancesCommand(const QVector &container);
+ explicit CreateInstancesCommand(const QList &container);
- QVector instances() const;
+ QList instances() const;
private:
- QVector m_instanceVector;
+ QList m_instanceVector;
};
QDataStream &operator<<(QDataStream &out, const CreateInstancesCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/createscenecommand.h b/src/libs/qmlpuppetcommunication/commands/createscenecommand.h
index 80456169db5..5f6b7836b49 100644
--- a/src/libs/qmlpuppetcommunication/commands/createscenecommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/createscenecommand.h
@@ -3,12 +3,11 @@
#pragma once
+#include
+#include
+#include
#include
#include
-#include
-#include
-#include
-#include
#include "instancecontainer.h"
#include "reparentcontainer.h"
@@ -24,14 +23,14 @@ class CreateSceneCommand
{
public:
CreateSceneCommand() = default;
- explicit CreateSceneCommand(const QVector &instanceContainer,
- const QVector &reparentContainer,
- const QVector &idVector,
- const QVector &valueChangeVector,
- const QVector &bindingChangeVector,
- const QVector &auxiliaryChangeVector,
- const QVector &importVector,
- const QVector &mockupTypeVector,
+ explicit CreateSceneCommand(const QList &instanceContainer,
+ const QList &reparentContainer,
+ const QList &idVector,
+ const QList &valueChangeVector,
+ const QList &bindingChangeVector,
+ const QList &auxiliaryChangeVector,
+ const QList &importVector,
+ const QList &mockupTypeVector,
const QUrl &fileUrl,
const QUrl &resourceUrl,
const QHash &edit3dToolStates,
@@ -91,14 +90,14 @@ public:
}
public:
- QVector instances;
- QVector reparentInstances;
- QVector ids;
- QVector valueChanges;
- QVector bindingChanges;
- QVector auxiliaryChanges;
- QVector imports;
- QVector mockupTypes;
+ QList instances;
+ QList reparentInstances;
+ QList ids;
+ QList valueChanges;
+ QList bindingChanges;
+ QList auxiliaryChanges;
+ QList imports;
+ QList mockupTypes;
QUrl fileUrl;
QUrl resourceUrl;
QHash edit3dToolStates;
diff --git a/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.cpp b/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.cpp
index e10bce7cff7..b4124088373 100644
--- a/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.cpp
@@ -9,7 +9,7 @@ namespace QmlDesigner {
DebugOutputCommand::DebugOutputCommand() = default;
-DebugOutputCommand::DebugOutputCommand(const QString &text, DebugOutputCommand::Type type, const QVector &instanceIds)
+DebugOutputCommand::DebugOutputCommand(const QString &text, DebugOutputCommand::Type type, const QList &instanceIds)
: m_instanceIds(instanceIds)
, m_text(text)
, m_type(type)
@@ -26,7 +26,7 @@ QString DebugOutputCommand::text() const
return m_text;
}
-QVector DebugOutputCommand::instanceIds() const
+QList DebugOutputCommand::instanceIds() const
{
return m_instanceIds;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.h b/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.h
index 7818ce629be..05e0d240995 100644
--- a/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/debugoutputcommand.h
@@ -3,10 +3,10 @@
#pragma once
+#include
+#include
#include
#include
-#include
-#include
namespace QmlDesigner {
@@ -24,14 +24,14 @@ public:
};
DebugOutputCommand();
- explicit DebugOutputCommand(const QString &text, Type type, const QVector &instanceIds);
+ explicit DebugOutputCommand(const QString &text, Type type, const QList &instanceIds);
qint32 type() const;
QString text() const;
- QVector instanceIds() const;
+ QList instanceIds() const;
private:
- QVector m_instanceIds;
+ QList m_instanceIds;
QString m_text;
quint32 m_type;
};
diff --git a/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.cpp b/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.cpp
index 80dda76b23b..5cf4f9fc52b 100644
--- a/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.cpp
@@ -6,20 +6,18 @@
#include
#include
-#include "propertyvaluecontainer.h"
-
#include
namespace QmlDesigner {
InformationChangedCommand::InformationChangedCommand() = default;
-InformationChangedCommand::InformationChangedCommand(const QVector &informationVector)
+InformationChangedCommand::InformationChangedCommand(const QList &informationVector)
: m_informationVector(informationVector)
{
}
-QVector InformationChangedCommand::informations() const
+QList InformationChangedCommand::informations() const
{
return m_informationVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.h b/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.h
index 3181f185f34..c2dfcaa6381 100644
--- a/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/informationchangedcommand.h
@@ -3,8 +3,8 @@
#pragma once
+#include
#include
-#include
#include "informationcontainer.h"
@@ -17,14 +17,14 @@ class InformationChangedCommand
public:
InformationChangedCommand();
- explicit InformationChangedCommand(const QVector &informationVector);
+ explicit InformationChangedCommand(const QList &informationVector);
- QVector informations() const;
+ QList informations() const;
void sort();
private:
- QVector m_informationVector;
+ QList m_informationVector;
};
QDataStream &operator<<(QDataStream &out, const InformationChangedCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.cpp b/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.cpp
index 18f35043c11..57073722160 100644
--- a/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.cpp
@@ -13,12 +13,12 @@ namespace QmlDesigner {
PixmapChangedCommand::PixmapChangedCommand() = default;
-PixmapChangedCommand::PixmapChangedCommand(const QVector &imageVector)
+PixmapChangedCommand::PixmapChangedCommand(const QList &imageVector)
: m_imageVector(imageVector)
{
}
-QVector PixmapChangedCommand::images() const
+QList PixmapChangedCommand::images() const
{
return m_imageVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.h b/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.h
index 72247f0c57c..d66289f1394 100644
--- a/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/pixmapchangedcommand.h
@@ -15,14 +15,14 @@ class PixmapChangedCommand
public:
PixmapChangedCommand();
- explicit PixmapChangedCommand(const QVector &imageVector);
+ explicit PixmapChangedCommand(const QList &imageVector);
- QVector images() const;
+ QList images() const;
void sort();
private:
- QVector m_imageVector;
+ QList m_imageVector;
};
QDataStream &operator<<(QDataStream &out, const PixmapChangedCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/puppettocreatorcommand.h b/src/libs/qmlpuppetcommunication/commands/puppettocreatorcommand.h
index a8f37a81e53..44d68f9ed29 100644
--- a/src/libs/qmlpuppetcommunication/commands/puppettocreatorcommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/puppettocreatorcommand.h
@@ -16,7 +16,7 @@ public:
Edit3DToolState,
Render3DView,
ActiveSceneChanged,
- ActiveSplitChanged,
+ ActiveViewportChanged,
RenderModelNodePreviewImage,
Import3DPreviewIcon,
Import3DPreviewImage,
diff --git a/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.cpp b/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.cpp
index f2289a3b543..7d89261096f 100644
--- a/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.cpp
@@ -10,12 +10,12 @@ namespace QmlDesigner {
RemoveInstancesCommand::RemoveInstancesCommand() = default;
-RemoveInstancesCommand::RemoveInstancesCommand(const QVector &idVector)
+RemoveInstancesCommand::RemoveInstancesCommand(const QList &idVector)
: m_instanceIdVector(idVector)
{
}
-const QVector RemoveInstancesCommand::instanceIds() const
+const QList RemoveInstancesCommand::instanceIds() const
{
return m_instanceIdVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.h b/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.h
index 7c03a8970df..54766ba8d97 100644
--- a/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/removeinstancescommand.h
@@ -3,11 +3,9 @@
#pragma once
-#include
-#include
#include
-
-#include "instancecontainer.h"
+#include
+#include
namespace QmlDesigner {
@@ -18,12 +16,12 @@ class RemoveInstancesCommand
public:
RemoveInstancesCommand();
- explicit RemoveInstancesCommand(const QVector &idVector);
+ explicit RemoveInstancesCommand(const QList &idVector);
- const QVector instanceIds() const;
+ const QList instanceIds() const;
private:
- QVector m_instanceIdVector;
+ QList m_instanceIdVector;
};
QDataStream &operator<<(QDataStream &out, const RemoveInstancesCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.cpp b/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.cpp
index b15e441c298..a19ee12c9f0 100644
--- a/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.cpp
@@ -9,12 +9,12 @@ namespace QmlDesigner {
RemovePropertiesCommand::RemovePropertiesCommand() = default;
-RemovePropertiesCommand::RemovePropertiesCommand(const QVector &properties)
+RemovePropertiesCommand::RemovePropertiesCommand(const QList &properties)
: m_properties(properties)
{
}
-const QVector RemovePropertiesCommand::properties() const
+const QList RemovePropertiesCommand::properties() const
{
return m_properties;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.h b/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.h
index c5f32b4a5dd..f25e0947a58 100644
--- a/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/removepropertiescommand.h
@@ -3,8 +3,8 @@
#pragma once
+#include
#include
-#include
#include "propertyabstractcontainer.h"
@@ -17,12 +17,12 @@ class RemovePropertiesCommand
public:
RemovePropertiesCommand();
- explicit RemovePropertiesCommand(const QVector &properties);
+ explicit RemovePropertiesCommand(const QList &properties);
- const QVector properties() const;
+ const QList properties() const;
private:
- QVector m_properties;
+ QList m_properties;
};
QDataStream &operator<<(QDataStream &out, const RemovePropertiesCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.cpp b/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.cpp
index 65e16b4752f..d7dd1eba26c 100644
--- a/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.cpp
@@ -10,7 +10,7 @@ namespace QmlDesigner {
RemoveSharedMemoryCommand::RemoveSharedMemoryCommand() = default;
-RemoveSharedMemoryCommand::RemoveSharedMemoryCommand(const QString &typeName, const QVector &keyNumberVector)
+RemoveSharedMemoryCommand::RemoveSharedMemoryCommand(const QString &typeName, const QList &keyNumberVector)
: m_typeName(typeName),
m_keyNumberVector(keyNumberVector)
{
@@ -21,7 +21,7 @@ QString RemoveSharedMemoryCommand::typeName() const
return m_typeName;
}
-QVector RemoveSharedMemoryCommand::keyNumbers() const
+QList RemoveSharedMemoryCommand::keyNumbers() const
{
return m_keyNumberVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.h b/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.h
index 60081608b3b..4d601234706 100644
--- a/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/removesharedmemorycommand.h
@@ -3,9 +3,9 @@
#pragma once
+#include
#include
#include
-#include
namespace QmlDesigner {
@@ -16,14 +16,14 @@ class RemoveSharedMemoryCommand
public:
RemoveSharedMemoryCommand();
- explicit RemoveSharedMemoryCommand(const QString &typeName, const QVector &keyNumberVector);
+ explicit RemoveSharedMemoryCommand(const QString &typeName, const QList &keyNumberVector);
QString typeName() const;
- QVector keyNumbers() const;
+ QList keyNumbers() const;
private:
QString m_typeName;
- QVector m_keyNumberVector;
+ QList m_keyNumberVector;
};
QDataStream &operator<<(QDataStream &out, const RemoveSharedMemoryCommand &command);
diff --git a/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.cpp b/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.cpp
index 3de6b4f90c5..b260cd4e711 100644
--- a/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.cpp
+++ b/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.cpp
@@ -10,12 +10,12 @@ namespace QmlDesigner {
ReparentInstancesCommand::ReparentInstancesCommand() = default;
-ReparentInstancesCommand::ReparentInstancesCommand(const QVector &container)
+ReparentInstancesCommand::ReparentInstancesCommand(const QList &container)
: m_reparentInstanceVector(container)
{
}
-const QVector ReparentInstancesCommand::reparentInstances() const
+const QList ReparentInstancesCommand::reparentInstances() const
{
return m_reparentInstanceVector;
}
diff --git a/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.h b/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.h
index 4a5e55c4839..46c74e20917 100644
--- a/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.h
+++ b/src/libs/qmlpuppetcommunication/commands/reparentinstancescommand.h
@@ -3,8 +3,8 @@
#pragma once
+#include
#include
-#include
#include "reparentcontainer.h"
@@ -17,12 +17,12 @@ class ReparentInstancesCommand
public:
ReparentInstancesCommand();
- explicit ReparentInstancesCommand(const QVector &container);
+ explicit ReparentInstancesCommand(const QList &container);
- const QVector reparentInstances() const;
+ const QList