Merge remote-tracking branch 'origin/qds/dev'

Change-Id: I91d9877ef6637d21e1106d6d363275295e6b55a3
This commit is contained in:
Tim Jenssen
2023-07-04 20:35:24 +02:00
883 changed files with 13063 additions and 10301 deletions

View File

@@ -79,6 +79,7 @@ IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false IndentCaseLabels: false
IndentWidth: 4 IndentWidth: 4
IndentWrappedFunctionNames: false IndentWrappedFunctionNames: false
InsertBraces: false
JavaScriptQuotes: Leave JavaScriptQuotes: Leave
JavaScriptWrapImports: true JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false KeepEmptyLinesAtTheStartOfBlocks: false

1
.gitignore vendored
View File

@@ -280,7 +280,6 @@ tmp/
/tests/manual/ssh/shell/shell /tests/manual/ssh/shell/shell
/tests/tools/qml-ast2dot/qml-ast2dot /tests/tools/qml-ast2dot/qml-ast2dot
/tests/unit/echoserver/echo /tests/unit/echoserver/echo
/tests/unit/unittest/unittest
# qbs builds # qbs builds
/*-debug/ /*-debug/

6
.gitmodules vendored
View File

@@ -6,9 +6,9 @@
path = src/tools/perfparser path = src/tools/perfparser
url = ../perfparser.git url = ../perfparser.git
ignore = dirty ignore = dirty
[submodule "googletest"]
path = tests/unit/unittest/3rdparty/googletest
url = https://github.com/google/googletest.git
[submodule "src/libs/qlitehtml"] [submodule "src/libs/qlitehtml"]
path = src/libs/qlitehtml path = src/libs/qlitehtml
url = https://code.qt.io/playground/qlitehtml.git url = https://code.qt.io/playground/qlitehtml.git
[submodule "googletest"]
path = src/libs/3rdparty/googletest
url = https://github.com/google/googletest.git

View File

@@ -1,116 +0,0 @@
#.rst:
# FindGoogletest
# -----------------
#
# Try to locate the Googletest source files, and then build them as a
# static library.
#
# The ``GOOGLETEST_DIR`` (CMake or Environment) variable should be used
# to pinpoint the Googletest source files.
#
# If found, this will define the following variables:
#
# ``Googletest_FOUND``
# True if the Googletest source package has been found.
#
# ``Googletest``
# Target compiled as static library.
#
find_path(GOOGLE_TEST_INCLUDE_DIR
NAMES gtest/gtest.h
PATH_SUFFIXES googletest/include
HINTS
"${GOOGLETEST_DIR}" ENV GOOGLETEST_DIR
"${PROJECT_SOURCE_DIR}/googletest"
"${PROJECT_SOURCE_DIR}/../googletest"
"${PROJECT_SOURCE_DIR}/../../googletest"
"${PROJECT_SOURCE_DIR}/tests/unit/unittest/3rdparty/googletest"
)
find_path(GOOGLE_TEST_SRC_ALL
NAMES gtest-all.cc
PATH_SUFFIXES googletest/src
HINTS
"${GOOGLETEST_DIR}" ENV GOOGLETEST_DIR
"${PROJECT_SOURCE_DIR}/googletest"
"${PROJECT_SOURCE_DIR}/../googletest"
"${PROJECT_SOURCE_DIR}/../../googletest"
"${PROJECT_SOURCE_DIR}/tests/unit/unittest/3rdparty/googletest"
)
find_path(GOOGLE_MOCK_INCLUDE_DIR
NAMES gmock/gmock.h
PATH_SUFFIXES googlemock/include
HINTS
"${GOOGLETEST_DIR}" ENV GOOGLETEST_DIR
"${PROJECT_SOURCE_DIR}/googletest"
"${PROJECT_SOURCE_DIR}/../googletest"
"${PROJECT_SOURCE_DIR}/../../googletest"
"${PROJECT_SOURCE_DIR}/tests/unit/unittest/3rdparty/googletest"
)
find_path(GOOGLE_MOCK_SRC_ALL
NAMES gmock-all.cc
PATH_SUFFIXES googlemock/src
HINTS
"${GOOGLETEST_DIR}" ENV GOOGLETEST_DIR
"${PROJECT_SOURCE_DIR}/googletest"
"${PROJECT_SOURCE_DIR}/../googletest"
"${PROJECT_SOURCE_DIR}/../../googletest"
"${PROJECT_SOURCE_DIR}/tests/unit/unittest/3rdparty/googletest"
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Googletest
DEFAULT_MSG
GOOGLE_TEST_INCLUDE_DIR GOOGLE_MOCK_INCLUDE_DIR
GOOGLE_TEST_SRC_ALL GOOGLE_MOCK_SRC_ALL
)
find_package(Threads REQUIRED)
if(Googletest_FOUND AND NOT TARGET Googletest)
add_library(Googletest STATIC
"${GOOGLE_TEST_SRC_ALL}/gtest-all.cc"
"${GOOGLE_MOCK_SRC_ALL}/gmock-all.cc"
)
target_include_directories(Googletest
PUBLIC
"${GOOGLE_TEST_INCLUDE_DIR}"
"${GOOGLE_MOCK_INCLUDE_DIR}"
PRIVATE
"${GOOGLE_TEST_SRC_ALL}/.."
"${GOOGLE_MOCK_SRC_ALL}/.."
)
target_compile_definitions(Googletest
PRIVATE
GTEST_HAS_STD_INITIALIZER_LIST_
GTEST_LANG_CXX11
GTEST_HAS_STD_TUPLE_
GTEST_HAS_STD_TYPE_TRAITS_
GTEST_HAS_STD_FUNCTION_
GTEST_HAS_RTTI
GTEST_HAS_STD_BEGIN_AND_END_
GTEST_HAS_STD_UNIQUE_PTR_
GTEST_HAS_EXCEPTIONS
GTEST_HAS_STREAM_REDIRECTION
GTEST_HAS_TYPED_TEST
GTEST_HAS_TYPED_TEST_P
GTEST_HAS_PARAM_TEST
GTEST_HAS_DEATH_TEST
)
set_target_properties(Googletest PROPERTIES AUTOMOC OFF AUTOUIC OFF QT_COMPILE_OPTIONS_DISABLE_WARNINGS ON)
set_property(TARGET Googletest PROPERTY POSITION_INDEPENDENT_CODE ON)
target_compile_definitions(Googletest PUBLIC GOOGLE_TEST_IS_FOUND)
target_link_libraries(Googletest Threads::Threads)
endif()
mark_as_advanced(GOOGLE_TEST_INCLUDE_DIR GOOGLE_MOCK_INCLUDE_DIR
GOOGLE_TEST_SRC_ALL GOOGLE_MOCK_SRC_ALL)
include(FeatureSummary)
set_package_properties(Googletest PROPERTIES
URL "https://github.com/google/googletest"
DESCRIPTION "Google Testing and Mocking Framework")

View File

@@ -1,6 +1,6 @@
set(IDE_VERSION "4.2.0") # The IDE version. set(IDE_VERSION "4.3.0") # The IDE version.
set(IDE_VERSION_COMPAT "4.2.0") # The IDE Compatibility version. set(IDE_VERSION_COMPAT "4.3.0") # The IDE Compatibility version.
set(IDE_VERSION_DISPLAY "4.2.0") # The IDE display version. set(IDE_VERSION_DISPLAY "4.3.0") # The IDE display version.
set(IDE_COPYRIGHT_YEAR "2023") # The IDE current copyright year. set(IDE_COPYRIGHT_YEAR "2023") # The IDE current copyright year.
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// ********************************************************************** // **********************************************************************
@@ -11,7 +11,7 @@
\previouspage creator-editor-functions.html \previouspage creator-editor-functions.html
\page creator-coding-navigating.html \page creator-coding-navigating.html
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
\nextpage creator-sidebars.html \nextpage creator-views.html
\else \else
\nextpage creator-highlighting.html \nextpage creator-highlighting.html
\endif \endif
@@ -246,7 +246,12 @@
\endlist \endlist
To view the note, move the mouse pointer over the bookmark or open the To view the note, move the mouse pointer over the bookmark or open the
\uicontrol Bookmarks view in the \l{Working with Sidebars}{sidebar}. \uicontrol Bookmarks view
\if defined(qtcreator)
in the \l{Show and hide sidebars}{sidebar}.
\else
in the \l{Managing Workspaces}{workspace}.
\endif
\section2 Navigating Bookmarks \section2 Navigating Bookmarks
@@ -358,13 +363,11 @@
\QC underlines semantic errors in olive in the C++ code editor. To check the \QC underlines semantic errors in olive in the C++ code editor. To check the
correct paths for includes that are not resolved or that are resolved to the correct paths for includes that are not resolved or that are resolved to the
wrong file, select \uicontrol {Project Parts} > \uicontrol {Header Paths}. wrong file, select \uicontrol {Project Parts} > \uicontrol {Header Paths}.
\endif
\if defined(qtdesignstudio) \else
\section1 Related Topics \section1 Related Topics
\list \list
\li \l{Working with Sidebars}
\li \l{Browsing Project Contents} \li \l{Browsing Project Contents}
\li \l{Viewing Output} \li \l{Viewing Output}
\endlist \endlist

View File

@@ -176,7 +176,7 @@
\li Enter the text you are looking for and click \uicontrol Search. \li Enter the text you are looking for and click \uicontrol Search.
\image qtcreator-searchresults.png \image qtcreator-search-results-matches.webp {Found matches in Search Results}
\l {Search Results} shows a list of files that have the searched text. \l {Search Results} shows a list of files that have the searched text.

View File

@@ -57,3 +57,7 @@
\externalpage https://doc.qt.io/QtForMCUs/qtul-renesas-rh850-qsg.html \externalpage https://doc.qt.io/QtForMCUs/qtul-renesas-rh850-qsg.html
\title Renesas RH850-D1M1A quick start guide \title Renesas RH850-D1M1A quick start guide
*/ */
/*!
\externalpage https://doc.qt.io/QtForMCUs/qtul-known-issues.html
\title \QMCU Known Issues or Limitations
*/

View File

@@ -0,0 +1,35 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page creator-how-to-enable-plugins.html
\previouspage creator-how-tos.html
\nextpage creator-known-issues.html
\ingroup creator-how-to-use
\title Enable and disable plugins
New \QC plugins are often introduced as \e {experimental plugins} to let you
try them out before they are fully supported. Experimental plugins are
disabled by default and you must enable them for them to become visible
after you restart \QC. By default, all the plugins that the plugin depends
on are also enabled.
You can also disable plugins that you do not use, to streamline \QC.
By default, all the plugins that depend on the plugin are also disabled.
To enable and disable plugins:
\list 1
\li Select \uicontrol Help > \uicontrol {About Plugins}.
\li Start typing in the \uicontrol Filter field to find a plugin.
\image qtcreator-installed-plugins.webp {Installed Plugins dialog}
\li Select the \uicontrol Load check box to enable a plugin, or deselect
it to disable a plugin.
\li Select \uicontrol OK.
\li Select \uicontrol {Restart Now} to restart \QC and have the changes
take effect.
\endlist
\sa {Install plugins}{How-to: Install plugins}
*/

View File

@@ -0,0 +1,43 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page creator-how-to-install-plugins.html
\previouspage creator-how-tos.html
\nextpage creator-known-issues.html
\ingroup creator-how-to-use
\title Install plugins
\l{https://marketplace.qt.io/}{Qt Marketplace} has links to \QC plugins that
you can download and install either for free or for a price set by their
publisher. Browse the available plugins in the \uicontrol Marketplace tab
in the \uicontrol Welcome mode.
You can also install plugins from other sources, such as
\l{https://github.com/}{GitHub}.
\note You can install only plugins that your \QC version supports.
To install plugins:
\list 1
\li Select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Install Plugins}.
\li In the \uicontrol Source dialog, enter the path to the archive
or library that has the plugin.
\image qtcreator-install-plugin-source.png
\li In the \uicontrol {Install Location} dialog, select
\uicontrol {User plugins} to make the plugin available for the
current user in all compatible \QC instances or
\uicontrol {\QC installation} to make the plugin available for
all users of a particular \QC instance.
\image qtcreator-install-plugin-location.png
\li In the \uicontrol Summary dialog, select \uicontrol Finish to
install the plugin.
\image qtcreator-install-plugin-summary.png
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\endlist
\sa {Enable and disable plugins}{How-to: Enable and disable plugins}
*/

View File

@@ -64,36 +64,13 @@
\section1 Use \QC \section1 Use \QC
\list \list
\li \l {Enable and disable plugins}
\li \l {Find settings files} \li \l {Find settings files}
\li \l {Install plugins}
\li \l {Run \QC from the command line} \li \l {Run \QC from the command line}
\endlist \endlist
*/ */
/*!
\page creator-how-to-switch-between-modes.html
\previouspage creator-how-tos.html
\nextpage creator-known-issues.html
\ingroup creator-how-to-ui
\title Switch between modes
\QC uses different modes for different purposes. You can quickly
switch between these modes with the following keyboard shortcuts:
\list
\li \uicontrol Welcome mode \key Ctrl+1
\li \uicontrol Edit mode \key Ctrl+2
\li \uicontrol Design mode \key Ctrl+3
\li \uicontrol Debug mode \key Ctrl+4
\li \uicontrol Projects mode \key Ctrl+5
\li \uicontrol Help mode \key Ctrl+6
\endlist
For more information about \QC modes, see \l {Selecting Modes}.
*/
/*! /*!
\page creator-how-to-move-between-open-files.html \page creator-how-to-move-between-open-files.html
\previouspage creator-how-tos.html \previouspage creator-how-tos.html
@@ -216,28 +193,6 @@
For more information, see \l{Using Command Line Options}. For more information, see \l{Using Command Line Options}.
*/ */
/*!
\page creator-how-to-show-and-hide-sidebars.html
\previouspage creator-how-tos.html
\nextpage creator-known-issues.html
\ingroup creator-how-to-ui
\title Show and hide sidebars
You can toggle the left and right sidebar in some \QC modes.
To toggle the left sidebar, click \inlineimage icons/leftsidebaricon.png
(\uicontrol {Hide Left Sidebar/Show Left Sidebar}) or press \key Alt+0
(\key Cmd+0 on \macos).
To toggle the right sidebar, click \inlineimage icons/rightsidebaricon.png
(\uicontrol {Hide Right Sidebar/Show Right Sidebar}) or press
\key Alt+Shift+0 (\key Cmd+Shift+0 on \macos).
For more information on using the sidebars, see
\l {Browsing Project Contents}.
*/
/*! /*!
\page creator-how-to-move-to-symbols.html \page creator-how-to-move-to-symbols.html
\previouspage creator-how-tos.html \previouspage creator-how-tos.html

View File

@@ -130,7 +130,7 @@
\section1 Managing Test Suites and Cases \section1 Managing Test Suites and Cases
You can manage Squish test suites and cases in the \uicontrol Squish You can manage Squish test suites and cases in the \uicontrol Squish
\l {Working with Sidebars}{view}. \l {Show and hide sidebars}{view}.
\image qtcreator-squish-view.png "Squish sidebar view" \image qtcreator-squish-view.png "Squish sidebar view"

View File

@@ -22,7 +22,7 @@
in different build and run \l{glossary-buildandrun-kit}{kits}. in different build and run \l{glossary-buildandrun-kit}{kits}.
\note Meson build plugin is disabled by default, see \note Meson build plugin is disabled by default, see
\l{Enabling and Disabling Plugins}. \l{Enable and disable plugins}{How-to: Enable and disable plugins}.
\section1 Adding Meson Tools \section1 Adding Meson Tools

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2021 The Qt Company Ltd. // Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// ********************************************************************** // **********************************************************************
@@ -142,55 +142,16 @@
\section1 Managing Plugins \section1 Managing Plugins
\QC comes with a set of plugins, some of which are disabled by default. \QC comes with a set of plugins, some of which are disabled by default.
You can enable disabled plugins if you need them and disable plugins you You can \l{Enable and disable plugins}{enable} disabled plugins if you
don't need. need them and disable plugins you don't need.
You can download and install additional plugins from You can \l{Install plugins}{download and install} more plugins from
\l{https://marketplace.qt.io/}{Qt Marketplace} or some \l{https://marketplace.qt.io/}{Qt Marketplace} or some
other source, such as \l{https://github.com/}{GitHub}. other source, such as \l{https://github.com/}{GitHub}.
\section2 Enabling and Disabling Plugins
New \QC plugins are often introduced as \e {experimental plugins} to let you
try them out before they are fully supported. Experimental plugins are
disabled by default and you must enable them for them to become visible
after you restart \QC. By default, all the plugins that the plugin depends
on are also enabled.
You can also disable plugins that you do not use, to streamline \QC.
By default, all the plugins that depend on the plugin are also disabled.
To enable and disable plugins, select \uicontrol Help > To enable and disable plugins, select \uicontrol Help >
\uicontrol {About Plugins}. \uicontrol {About Plugins}.
\image qtcreator-installed-plugins.png "Installed Plugins dialog" To install plugins, select \uicontrol Help > \uicontrol {About Plugins} >
\section2 Installing Plugins
Qt Marketplace has links to \QC plugins that you can download and
install either for free or for a price set by their publisher. You can
browse the available plugins in the \uicontrol Marketplace tab in the
Welcome mode.
\note You can install only plugins that your \QC version supports.
To install plugins:
\list 1
\li Select \uicontrol Help > \uicontrol {About Plugins} >
\uicontrol {Install Plugins}. \uicontrol {Install Plugins}.
\li In the \uicontrol Source dialog, enter the path to the archive
or library that has the plugin.
\image qtcreator-install-plugin-source.png
\li In the \uicontrol {Install Location} dialog, select
\uicontrol {User plugins} to make the plugin available for the
current user in all compatible \QC instances or
\uicontrol {\QC installation} to make the plugin available for
all users of a particular \QC instance.
\image qtcreator-install-plugin-location.png
\li In the \uicontrol Summary dialog, select \uicontrol Finish to
install the plugin.
\image qtcreator-install-plugin-summary.png
\li Select \uicontrol {Restart Now} to restart \QC and load the plugin.
\endlist
*/ */

View File

@@ -64,7 +64,7 @@
the application has large image files that would need to be bundled the application has large image files that would need to be bundled
into the resource file before running the application. into the resource file before running the application.
\image qtcreator-application-output.png \image qtcreator-application-output.webp {Application Output view}
\if defined(qtcreator) \if defined(qtcreator)
For more information on the options you have, see For more information on the options you have, see

View File

@@ -19,8 +19,6 @@
\li \l{IDE Overview} \li \l{IDE Overview}
\li \l{User Interface} \li \l{User Interface}
\list \list
\li \l{Selecting Modes}
\li \l{Working with Sidebars}
\li \l{Browsing Project Contents} \li \l{Browsing Project Contents}
\list \list
\li \l{Projects} \li \l{Projects}

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*! /*!
@@ -8,8 +8,7 @@
\title File System \title File System
If you cannot see a file in the \l Projects view, switch to the The \uicontrol {File System} view shows all the files in the file system.
\uicontrol {File System} view, which shows all the files in the file system.
\note Usually, \l{Searching with the Locator}{searching with the locator} \note Usually, \l{Searching with the Locator}{searching with the locator}
is the fastest way to find a particular project, file, class, or function, is the fastest way to find a particular project, file, class, or function,
@@ -17,12 +16,9 @@
to open files from anywhere in the file system. to open files from anywhere in the file system.
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
The following image displays the \uicontrol {File System} view in the \image qtcreator-filesystem-view-design.png {File System view}
\uicontrol Design mode:
\image qtcreator-filesystem-view-design.png "File System view in the Design mode"
\else \else
\image qtcreator-filesystem-view.webp "File System view in the sidebar" \image qtcreator-filesystem-view.webp {File System view in the sidebar}
\endif \endif
To move to the root directory of the file system, select \uicontrol Computer To move to the root directory of the file system, select \uicontrol Computer
@@ -87,19 +83,11 @@
\li Collapse all open folders. \li Collapse all open folders.
\endlist \endlist
\if defined(qtcreator)
\section1 File System View Toolbar \section1 File System View Toolbar
\if defined(qtdesignstudio)
In the \uicontrol Edit and \uicontrol Debug mode, the
\uicontrol {File System} view is displayed in the \l{Working with Sidebars}
{sidebar}. It has a toolbar with additional options.
\image qtcreator-filesystem-view.webp "File System view in the sidebar"
\else
The toolbar in the \uicontrol {File System} view has additional The toolbar in the \uicontrol {File System} view has additional
options. options.
\endif
To manage view contents, select \inlineimage icons/filtericon.png To manage view contents, select \inlineimage icons/filtericon.png
(\uicontrol Options): (\uicontrol Options):
@@ -116,4 +104,5 @@
To stop the synchronization with the file currently open in the To stop the synchronization with the file currently open in the
editor, deselect \inlineimage icons/linkicon.png editor, deselect \inlineimage icons/linkicon.png
(\uicontrol {Synchronize with Editor}). (\uicontrol {Synchronize with Editor}).
\endif
*/ */

View File

@@ -1,24 +1,19 @@
// Copyright (C) 2020 The Qt Company Ltd. // Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*! /*!
\page creator-sidebars.html \page creator-how-to-show-and-hide-sidebars.html
\if defined(qtdesignstudio) \previouspage creator-how-tos.html
\previouspage creator-coding-navigating.html \nextpage creator-known-issues.html
\else \ingroup creator-how-to-ui
\previouspage creator-modes.html
\endif
\nextpage creator-views.html
\title Show and hide sidebars
\title Working with Sidebars In some \l{Switch between modes}{modes}, you can use a left and right
sidebar to organize different views into project contents. Only views
that are relevant to the mode you are working in are available in it.
In the \uicontrol Edit mode, you can use a left and right sidebar to Select views in the sidebar menu (1):
organize different views into project contents. Only views that are
relevant to the \l{Selecting Modes}{mode} you are working in are
available in it.
You can select views in the sidebar menu (1):
\image qtcreator-sidebar.png \image qtcreator-sidebar.png
@@ -27,8 +22,8 @@
\list \list
\li To toggle the left sidebar, click \inlineimage icons/leftsidebaricon.png \li To toggle the left sidebar, click \inlineimage icons/leftsidebaricon.png
(\uicontrol {Hide Left Sidebar/Show Left Sidebar}) or press (\uicontrol {Hide Left Sidebar/Show Left Sidebar}) or press
\key Alt+0 (\key Cmd+0 on \macos). To toggle the right \key Alt+0 (\key Cmd+0 on \macos).
sidebar, click \inlineimage icons/rightsidebaricon.png \li To toggle the right sidebar, click \inlineimage icons/rightsidebaricon.png
(\uicontrol {Hide Right Sidebar/Show Right Sidebar}) or press (\uicontrol {Hide Right Sidebar/Show Right Sidebar}) or press
\key Alt+Shift+0 (\key Cmd+Shift+0 on \macos). \key Alt+Shift+0 (\key Cmd+Shift+0 on \macos).
\li To split a sidebar, click \inlineimage icons/splitbutton_horizontal.png \li To split a sidebar, click \inlineimage icons/splitbutton_horizontal.png

View File

@@ -0,0 +1,75 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page creator-how-to-switch-between-modes.html
\previouspage creator-how-tos.html
\nextpage creator-known-issues.html
\ingroup creator-how-to-ui
\title Switch between modes
\e Modes let you quickly switch between tasks such as editing
project and source files, designing application UIs, configuring projects
for building and running, and debugging or analyzing source code.
To switch between modes:
\list
\li Click the icons on the mode selector.
\li Use the \l{keyboard-shortcuts}{corresponding keyboard shortcut}.
\endlist
\table
\header
\li {2,1} Mode
\li Keyboard Shortcut
\li Purpose
\li Read More
\row
\li {1,7} \inlineimage qtcreator-mode-selector.png
\row
\li \uicontrol Welcome
\li \key Ctrl+1
\li Open projects, tutorials, and examples.
\li \l{User Interface}
\row
\li \uicontrol Edit
\li \key Ctrl+2
\li Edit project and source files.
\li \l{Working in Edit Mode}
\row
\li \uicontrol Design
\li \key Ctrl+3
\li Design and develop application user interfaces.
This mode is available for UI files.
\li \l{Designing User Interfaces}
\row
\li \uicontrol Debug
\li \key Ctrl+4
\li Inspect the state of your application while debugging or use code
analysis tools to detect memory leaks and profile code.
\li \l{Debugging}
\row
\li \uicontrol Projects
\li \key Ctrl+5
\li Configure how to build and run projects.
This mode is available when a project is open.
\li \l{Specifying Build Settings}
\row
\li \uicontrol Help
\li \key Ctrl+6
\li Read documentation.
\li \l{Using the Help Mode}
\endtable
Some actions in \QC trigger a mode change. For example,
selecting \uicontrol {Debug} > \uicontrol {Start Debugging} >
\uicontrol {Start Debugging of Startup Project} automatically
switches to \uicontrol {Debug} mode.
To hide the mode selector and to save space on the display, select
\uicontrol View > \uicontrol {Mode Selector Style} > \uicontrol Hidden.
To only show icons on the mode selector, select the \uicontrol {Icons Only}
style.
*/

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2022 The Qt Company Ltd. // Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*! /*!
@@ -13,6 +13,7 @@
\title Projects \title Projects
The \uicontrol Projects view displays projects in a project tree. The \uicontrol Projects view displays projects in a project tree.
The project tree has a list of all projects open in the current The project tree has a list of all projects open in the current
\l{Managing Sessions}{session}. For each project, the tree visualizes \l{Managing Sessions}{session}. For each project, the tree visualizes
the build system structure of the project and lists all files that the build system structure of the project and lists all files that
@@ -23,12 +24,9 @@
or almost anything else in your project. or almost anything else in your project.
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
The following image displays the \uicontrol Projects view in the \image qtcreator-projects-view-design.png {Projects view}
\uicontrol Design mode:
\image qtcreator-projects-view-design.png "Projects view in the Design mode"
\else \else
\image qtcreator-projects-view-edit.png "Projects view in the sidebar" \image qtcreator-projects-view-edit.png {Projects view in the sidebar}
\endif \endif
You can use the project tree in the following ways: You can use the project tree in the following ways:
@@ -37,8 +35,11 @@
\li To open files that belong to a \l{Creating Projects}{project}, \li To open files that belong to a \l{Creating Projects}{project},
double-click them in the project tree. Files open in the double-click them in the project tree. Files open in the
appropriate editor, according to the file type. For example, code appropriate editor, according to the file type. For example, code
source files open in the code editor. Use the \l{Selecting Modes} source files open in the code editor.
{mode selector} to open the current file in another editor. \if defined(qtcreator)
Use the \l{Switch between modes} {mode selector} to open the current
file in another editor.
\endif
\li To bring up a \l{Projects View Context Menu}{context menu} \li To bring up a \l{Projects View Context Menu}{context menu}
that has the actions most commonly needed, right-click an that has the actions most commonly needed, right-click an
item in the project tree. For example, through the menu of item in the project tree. For example, through the menu of
@@ -51,6 +52,9 @@
configuration files. configuration files.
\endlist \endlist
\note If you cannot see a file in the \l Projects view, switch to the
\uicontrol {File System} view, which shows all the files in the file system.
\section1 Projects View Context Menu \section1 Projects View Context Menu
The \uicontrol Projects view has context menus for managing projects, The \uicontrol Projects view has context menus for managing projects,
@@ -58,8 +62,10 @@
projects and subprojects: projects and subprojects:
\list \list
\if defined(qtcreator)
\li Set a project as the active project. \li Set a project as the active project.
\li Execute the \uicontrol Build menu commands. \endif
\li Execute \uicontrol Build menu commands.
\li Create new files. For more information, see \li Create new files. For more information, see
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
\l{Adding Files to Projects}. \l{Adding Files to Projects}.
@@ -106,18 +112,10 @@
the \l {File System} view. To view a project in it, select the \l {File System} view. To view a project in it, select
\uicontrol {Show in File System View}. \uicontrol {Show in File System View}.
\if defined(qtcreator)
\section1 Projects View Toolbar \section1 Projects View Toolbar
\if defined(qtdesignstudio)
In the \uicontrol Edit and \uicontrol Debug mode, the
\l{Working with Sidebars}{sidebar} has the \uicontrol Projects
view. It has a toolbar with additional options.
\image qtcreator-projects-view-edit.png "Projects view in the sidebar"
\else
The toolbar in the \uicontrol Projects view has additional options. The toolbar in the \uicontrol Projects view has additional options.
\endif
To filter view contents, select \inlineimage icons/filtericon.png To filter view contents, select \inlineimage icons/filtericon.png
(\uicontrol {Filter Tree}): (\uicontrol {Filter Tree}):
@@ -140,7 +138,6 @@
currently opened in the editor, deselect \inlineimage icons/linkicon.png currently opened in the editor, deselect \inlineimage icons/linkicon.png
(\uicontrol {Synchronize with Editor}). (\uicontrol {Synchronize with Editor}).
\if defined(qtcreator)
Some build systems support adding and removing files to a project in \QC Some build systems support adding and removing files to a project in \QC
(currently qmake and Qbs). The faithful display of the project structure (currently qmake and Qbs). The faithful display of the project structure
enables you to specify exactly where to place a new file in the build system. enables you to specify exactly where to place a new file in the build system.
@@ -152,8 +149,5 @@
from the version control system in brackets after the project name. from the version control system in brackets after the project name.
\QC currently implements this for Git (the view displays the branch name \QC currently implements this for Git (the view displays the branch name
or a tag) and ClearCase (the view displays the branch name). or a tag) and ClearCase (the view displays the branch name).
\else
If the project is under Git version control, you can see the currently
checked out branch or tag in brackets after the project name.
\endif \endif
*/ */

View File

@@ -11,10 +11,11 @@
\page creator-quick-tour.html \page creator-quick-tour.html
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
\previouspage {Tutorials} \previouspage {Tutorials}
\nextpage creator-using-qt-quick-designer.html
\else \else
\previouspage creator-overview.html \previouspage creator-overview.html
\nextpage creator-views.html
\endif \endif
\nextpage creator-modes.html
\title User Interface \title User Interface
@@ -34,7 +35,7 @@
\li Mode selector \li Mode selector
\li Perform a particular task, such as designing the UI, writing code, or \li Perform a particular task, such as designing the UI, writing code, or
debugging the application. debugging the application.
\li \l{Selecting Modes} \li \l{Switch between modes}
\row \row
\li \inlineimage numbers/02.png \li \inlineimage numbers/02.png
\li Kit selector \li Kit selector
@@ -81,9 +82,11 @@
For information about new features and bug fixes in each \QC release, For information about new features and bug fixes in each \QC release,
select \uicontrol Help > \uicontrol {Change Log}. select \uicontrol Help > \uicontrol {Change Log}.
\sa {Working with Sidebars}, {Browsing Project Contents} \sa {Show and hide sidebars}, {Browsing Project Contents}
\sa {Use the UI}{How-to: Use the UI} \sa {Use the UI}{How-to: Use the UI}
\else \else
When you start \QC, it opens to the \uicontrol Welcome mode, where you can: When you start \QC, it opens to the \uicontrol Welcome mode, where you can:
\list \list
@@ -139,91 +142,6 @@
\endif \endif
*/ */
/*!
\page creator-modes.html
\previouspage creator-quick-tour.html
\if defined(qtdesignstudio)
\nextpage creator-using-qt-quick-designer.html
\else
\nextpage creator-sidebars.html
\endif
\title Selecting Modes
\image qtcreator-mode-selector.png
\if defined(qtcreator)
The mode selector allows you to quickly switch between tasks such as editing
project and source files, designing application UIs, configuring projects for
building and running, and debugging your applications. To change
modes, click the icons, or use the \l{keyboard-shortcuts}
{corresponding keyboard shortcut}.
To hide the mode selector and to save space on the display, select
\uicontrol View > \uicontrol {Mode Selector Style} > \uicontrol Hidden.
To only show icons on the mode selector, select the \uicontrol {Icons Only}
style.
\endif
\if defined(qtdesignstudio)
The mode selector is hidden by default.
To show the mode selector, go to \uicontrol Views >
\uicontrol {Mode Selector Style} and select \uicontrol {Icons and Text}
or \uicontrol {Icons Only}.
\endif
You can use \QC in the following modes:
\list
\li \uicontrol {\l{User Interface}{Welcome}} mode for opening projects,
tutorials, and examples.
\li \uicontrol{\l{Coding}{Edit}} mode for editing project and source
files.
\if defined(qtcreator)
\li \uicontrol{\l{Designing User Interfaces}{Design}}
mode for designing and developing application user interfaces.
This mode is available for UI files.
\else
\li \uicontrol{\l{Design Views}{Design}}
mode for designing and developing application user interfaces.
As a designer, you'll do most of your work in this mode.
\endif
\if defined(qtcreator)
\li \uicontrol{\l{Debugging}{Debug}}
\else
\li \uicontrol {\l{Debugging and Profiling}{Debug}}
\endif
mode for inspecting the state of your
application while debugging and for using code analysis tools
to detect memory leaks and profile code.
\if defined(qtcreator)
\li \uicontrol{\l{Specifying Build Settings}{Projects}} mode
for configuring project building and execution.
\else
\li \uicontrol{\l{Selecting the Preview Tool}{Projects}} mode
for selecting the tool to use for live preview.
\endif
This mode is available when a project is open.
\li \uicontrol{\l{Using the Help Mode}{Help}} mode for viewing
documentation.
\endlist
\if defined(qtcreator)
Certain actions in \QC trigger a mode change. Clicking on \uicontrol {Debug} >
\uicontrol {Start Debugging} > \uicontrol {Start Debugging} automatically switches to
\uicontrol {Debug} mode.
\endif
*/
/*! /*!
\page creator-output-panes.html \page creator-output-panes.html
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
@@ -236,9 +154,9 @@
\title Viewing Output \title Viewing Output
\image qtcreator-general-messages.png "General Messages" \image qtcreator-general-messages.webp {General Messages}
The taskbar in \QC can display following types of output: You can view the following types of output:
\list \list
@@ -276,7 +194,12 @@
\endlist \endlist
Output is available on the taskbar in all \l{Selecting Modes}{modes}. Output is available on the taskbar in all
\if defined(qtcreator)
\l{Switch between modes}{modes}.
\else
\l{Mode}{modes}.
\endif
\image qtcreator-output-panes-taskbar.webp "Output on the taskbar" \image qtcreator-output-panes-taskbar.webp "Output on the taskbar"
@@ -441,7 +364,7 @@
In \uicontrol{Search Results}, you can search through projects, files on In \uicontrol{Search Results}, you can search through projects, files on
a file system or the currently open files: a file system or the currently open files:
\image qtcreator-search-results.png "Search Results" \image qtcreator-search-results.webp {Search Results - criteria}
The search history (1) stores the search results. You can select earlier The search history (1) stores the search results. You can select earlier
searches from the history. searches from the history.
@@ -449,7 +372,7 @@
The figure below shows an example search result for all The figure below shows an example search result for all
occurrences of the search string in the specified directory. occurrences of the search string in the specified directory.
\image qtcreator-searchresults.png \image qtcreator-search-results-matches.webp {Search Results - matches found}
For more information about the different search options, see For more information about the different search options, see
\l {Finding and Replacing}. \l {Finding and Replacing}.
@@ -459,7 +382,7 @@
\uicontrol{Application Output} displays the status of a program when \uicontrol{Application Output} displays the status of a program when
you execute it, and the debug output. you execute it, and the debug output.
\image qtcreator-application-output.png \image qtcreator-application-output.webp {Application Output}
\if defined(qtcreator) \if defined(qtcreator)
If you specify command line arguments in the run settings that are passed If you specify command line arguments in the run settings that are passed
@@ -485,7 +408,7 @@
The \uicontrol{Compile Output} is a more detailed version of information The \uicontrol{Compile Output} is a more detailed version of information
displayed in \l Issues. displayed in \l Issues.
\image qtcreator-compile-output.png "Compile Output" \image qtcreator-compile-output.webp {Compile Output}
Double-click on a file name in an error message to open the file in the Double-click on a file name in an error message to open the file in the
code editor. code editor.
@@ -636,13 +559,13 @@
subproject. Click the icons on the toolbar to show only the selected subproject. Click the icons on the toolbar to show only the selected
keywords. keywords.
\image qtcreator-todo-pane.png \image qtcreator-to-do-entries.webp {To-Do Entries}
To add keywords, select \uicontrol Edit > \uicontrol Preferences > To add keywords, select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {To-Do} > \uicontrol Add. Set an icon and a line background color \uicontrol {To-Do} > \uicontrol Add. Set an icon and a line background color
for the keyword. for the keyword.
\image qtcreator-todo-options.png "To-Do preferences" \image qtcreator-todo-options.png {To-Do preferences}
To change the icon and line background color of the selected keyword, select To change the icon and line background color of the selected keyword, select
\uicontrol Edit. \uicontrol Edit.
@@ -659,7 +582,7 @@
To exclude files from scanning, select \uicontrol {Project Settings} > To exclude files from scanning, select \uicontrol {Project Settings} >
\uicontrol {To-Do} in the \uicontrol Projects mode. \uicontrol {To-Do} in the \uicontrol Projects mode.
\image qtcreator-todo-excluded-files.png "Excluded Files in To-Do preferences" \image qtcreator-todo-excluded-files.png {Excluded Files in To-Do preferences}
Select \uicontrol Add and double-click the placeholder text in Select \uicontrol Add and double-click the placeholder text in
\uicontrol {Exclude Files} to enter a regular expression that \uicontrol {Exclude Files} to enter a regular expression that

View File

@@ -1,26 +1,25 @@
// Copyright (C) 2021 The Qt Company Ltd. // Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*! /*!
\page creator-views.html \page creator-views.html
\previouspage creator-sidebars.html
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
\previouspage creator-coding-navigating.html
\nextpage creator-output-panes.html \nextpage creator-output-panes.html
\else \else
\previouspage creator-quick-tour.html
\nextpage creator-projects-view.html \nextpage creator-projects-view.html
\endif \endif
\title Browsing Project Contents \title Browsing Project Contents
You can organize \QC views in \l {Working with Sidebars}{sidebars} or as
\if defined(qtdesignstudio) \if defined(qtdesignstudio)
\l {Managing Workspaces}{workspaces}, You can organize \QDS views as \l {Managing Workspaces}{workspaces}.
\else \else
workspaces You can organize \QC views in \l {Show and hide sidebars}{sidebars} or as
workspaces, depending on the \l{Switch between modes}{mode} you are working
in. Only views that are relevant to a mode are available in it.
\endif \endif
depending on the \l{Selecting Modes}
{mode} you are working in. Only views that are relevant to a mode are
available in it.
\note Usually, \l{Searching with the Locator}{searching with the locator} \note Usually, \l{Searching with the Locator}{searching with the locator}
is the fastest way to find a particular project, file, class, or function, is the fastest way to find a particular project, file, class, or function,

View File

@@ -54,6 +54,7 @@ excludedirs += ../../qtcreator/examples/accelbubble \
../../qtcreator/src/python \ ../../qtcreator/src/python \
../../qtcreator/src/qnx \ ../../qtcreator/src/qnx \
../../qtcreator/src/qtquick/creator-only \ ../../qtcreator/src/qtquick/creator-only \
../../qtcreator/src/user-interface/creator-only \
../../qtcreator/src/vcs/creator-only \ ../../qtcreator/src/vcs/creator-only \
../../qtcreator/src/widgets \ ../../qtcreator/src/widgets \
../../qtcreator/src/webassembly ../../qtcreator/src/webassembly

View File

@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv); QGuiApplication app(argc, argv);
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
const QUrl url(u"qrc:Main/main.qml"_qs); const QUrl url(u"qrc:/qt/qml/Main/main.qml"_qs);
QObject::connect( QObject::connect(
&engine, &QQmlApplicationEngine::objectCreated, &app, &engine, &QQmlApplicationEngine::objectCreated, &app,
[url](QObject *obj, const QUrl &objUrl) { [url](QObject *obj, const QUrl &objUrl) {

View File

@@ -0,0 +1,120 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page 3d-scene-tutorial.html
\ingroup gstutorials
\title Setting up a 3D Scene
\sa {Content Library}
\brief Illustrates how to set up a 3D scene with, for example, lights, models, and materials in
\QDS.
\image 3d-scene-tutorial.webp
The \e {Setting up a 3D Scene} tutorial illustrates how you can set up and improve a 3D
scene with the following:
\list
\li 3D models
\li Materials
\li Lights
\li Environmental lights
\li Background images
\endlist
The assets you use in this tutorial are available in \uicontrol {Content Library}.
To follow this tutorial, you need to first download the starting project from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/3Dscene%20tutorial/Start}{here}.
Download the completed project from
\l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/3Dscene%20tutorial/Completed/}{here}.
This tutorial requires that you know the basics of \QDS, see
\l{Getting Started}.
\section1 The Starting Project
The starting project consists of an animated 3D model of a ball bearing. Control the animations
with a slider and a switch in the user interface.
Besides the 3D model, the 3D scene also has the default camera and the default directional
light.
\section1 Adding Materials to the 3D Models
First, use materials from \uicontrol {Content Library} on the ball bearing.
\list 1
\li In the \uicontrol 3D view, right-click the ball bearing and select
\uicontrol {Edit Component}.
\image 3d-scene-edit-component-menu.png
\li From \uicontrol {Content Library}, drag materials to the different parts of the ball
bearing in the \uicontrol Navigator view.
Drag the following materials to the following parts:
\list
\li Chrome to \e inner_race and \e outer_race.
\li Copper to \e balls.
\li Gold to \e retainer.
\li Carbon Fiber to \e shield_left and \e shield_right.
\endlist
\note The first time you use an asset from \uicontrol {Content Library}, you need to
download it.
\image 3d-scene-drag-material.png
\li Select \e {Screen01.ui.qml} in the breadcrumb in the top menu bar to return to the 3D
scene.
\image 3d-scene-bread-crumb.png
\endlist
When you run the application or live preview, notice that you don't see much of the materials.
The next step is to set up the environmental light.
\section1 Adding Environmental Lighting to the Scene
Environmental lighting is a good way to create a realistic light for your scene.
\list 1
\li In \uicontrol {Content Library}, go to the \uicontrol Environments tab.
\li Right-click the image \e BasicLights3_4k.hdr and select \uicontrol {Add Light Probe}.
\image 3d-scene-add-light-probe.webp
Setting an image as a light probe for a scene adds the image as the source for the image-based
lighting and also sets it as a skybox, meaning that the same image is used as the background
in the scene.
\endlist
When you run the application, notice an improvement in the scene lighting.
Next, adjust the environmental light. As you will add a background image to the scene later,
you don't want to use the skybox.
\list 1
\li In the \uicontrol Navigator view, select \e sceneEnvironment.
\li In the \uicontrol Properties view, set \uicontrol {Background Mode} to
\uicontrol Transparent.
\endlist
You also want to increase the brightness of the light a bit. In the \uicontrol Properties view,
set \uicontrol Exposure to 10.
\section2 Adding a Background Image to the Scene
In the final step of this tutorial, you add a background image to your scene.
\list 1
\li Go to the \uicontrol Textures tab in \uicontrol {Content Library}.
\li Right-click the image \e 4kScratchySurface.png and select \uicontrol {Add Texture}
\image 3d-scene-add-texture.webp
This adds the image as a texture to the project. It is now available in the \uicontrol Assets
view.
\li From the \uicontrol Assets view, drag \e 4KScratchySurface.png to \e Rectangle in the
\uicontrol Navigator view.
\li Go to the \uicontrol Layout tab in \uicontrol Properties and set \uicontrol Anchors to
\uicontrol FillParentComponent.
\image 3d-scene-fill-parent.png
\li Go to the \uicontrol Image tab and set \uicontrol {Fill Mode} to \uicontrol Stretch.
\li The background is rendered on top of the 3D scene as it is located at the bottom of the
\uicontrol Navigator view.
With the background image selected, select the down arrow to move it to the top of the
hierarchy.
\image 3d-scene-navigator-background.png
\endlist
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -275,8 +275,7 @@
\li In \uicontrol Component > \uicontrol ID, enter \e username. \li In \uicontrol Component > \uicontrol ID, enter \e username.
\li In \uicontrol {Button Content} > \uicontrol Text, enter \li In \uicontrol {Button Content} > \uicontrol Text, enter
\e {Username or Email} and select \uicontrol tr to mark the text \e {Username or Email} and select \uicontrol tr to mark the text
\l {Internationalization and Localization with Qt Quick} \l {Mark Strings for Translation}{translatable}.
{translatable}.
\li Select the second EntryField instance, and change its ID to \li Select the second EntryField instance, and change its ID to
\e password and text to \e Password. Again, mark the text \e password and text to \e Password. Again, mark the text
translatable. translatable.

View File

@@ -0,0 +1,97 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\page robotarm-example.html
\ingroup gstutorials
\title Creating a C++ Backend for a \QDS Application
\brief Illustrates how to create an application in \QDS and add a backend
in Qt Creator.
\image robotarm-example.webp
The \e Robotarm example demonstrates adding a C++ backend to a 3D project created in \QDS.
The example itself consists of an interactive industrial robot arm in a Qt Quick 3D scene.
The 2D UI to control the robot arm is implemented using Qt Quick Controls.
You can open the example from the \uicontrol Examples tab on the \uicontrol Welcome page
in \QDS.
To complete this tutorial, you need experience in using \QDS and Qt Creator as well as knowledge
in C++ programming.
\section1 The Designer-Developer Workflow
This section describes the high-level steps for creating the robot arm example.
\section2 Creating the User Interface
First, the designer creates the user interface in \QDS.
\list 1
\li Create a new 3D project.
\li Import the 3D asset (RoboticArm).
\li Create the following custom components:
\list
\li NodeIndicator: This component consists of a rounded rectangle and a label. It is used
to indicate which joint in the robotic arm is currently active. Located in the 3D
scene, it follows the movement of the 3D model.
\li LabeledSlider: This component is a slider with a label. It is connected to the
rotation of the different robot arm parts so that you can use it to control the rotation
of those parts.
\li Toggle: This component consists of a switch and a label. It is used in two places; to
toggle dark mode and to toggle the claw of the robotic arm.
\li Backend: This serves as a mock backend for the \QDS application. Once you open,
compile, and run the application in Qt Creator, it uses the C++ backend.
\endlist
\li Add the 3D model and lights to the \uicontrol View3D scene.
\image robotarm-3d-view.png
\li Create the 2D UI controls:
\list
\li Four buttons for preset positions. As you can see from the \uicontrol Connections tab
in the \uicontrol Connections view, each button changes the rotation of the robot arm
parts.
\image robotarm-button-connections.png
\li Four sliders for controlling the robot arm parts individually. The \uicontrol Backend
component uses these sliders to control the robot arm position.
\li A switch to control the robot arm claw. This is also done through the
\uicontrol Backend component.
\li A switch to toggle dark mode of the application.
\li A label to display the status of the robot arm through the \uicontrol Backend
component.
\endlist
\endlist
\section2 Creating the C++ Backend
With the frontend and user interface created, it is time to create the C++ backend.
To open the project in Qt Creator:
\list 1
\li Open \c CMakeLists.txt located in the root folder of the robot arm example. This is the
CMake project file.
\li In Qt Creator, add the empty C++ backend classes in the \c backend folder.
\li Ensure that the \c CMakeLists.txt file in the \c backend folder has the classes in it. It
should look something like this:
\code
find_package(Qt6 REQUIRED COMPONENTS Gui)
qt_add_qml_module(backend
URI Backend
VERSION 1.0
SOURCES
animatedparam.cpp
animatedparam.h
backend.cpp
backend.h
)
target_link_libraries(backend PRIVATE Qt6::Gui)
\endcode
\li Add the backend logic to the created backend classes.
\endlist
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -69,15 +69,13 @@
\c qsTrId(). Select \uicontrol Edit > \uicontrol Preferences > \c qsTrId(). Select \uicontrol Edit > \uicontrol Preferences >
\uicontrol {Qt Quick} > \uicontrol {Qt Quick Designer}, and then select the \uicontrol {Qt Quick} > \uicontrol {Qt Quick Designer}, and then select the
\uicontrol {qsTrId()} radio button in the \uicontrol Internationalization \uicontrol {qsTrId()} radio button in the \uicontrol Internationalization
group. For more information about text ID based translations, see group. For more information, see \l {Text ID based translations}.
\l {Qt Linguist Manual: Text ID Based Translations}.
To preserve the context when editing the text or to change the context To preserve the context when editing the text or to change the context
by setting a binding on the text property, change the default call to by setting a binding on the text property, change the default call to
\c qsTranslate() by selecting the \uicontrol {qsTranslate()} radio button. \c qsTranslate() by selecting the \uicontrol {qsTranslate()} radio button.
For more information, see For more information, see \l {Mark Strings for Translation}.
\l {Internationalization and Localization with Qt Quick}.
\section1 Character Properties \section1 Character Properties

View File

@@ -4,7 +4,7 @@
/*! /*!
\previouspage studio-on-mcus.html \previouspage studio-on-mcus.html
\page studio-compatibility-with-mcu-sdks.html \page studio-compatibility-with-mcu-sdks.html
\nextpage studio-help.html \nextpage studio-features-on-mcu-projects.html
\title \QDS Version Compatibility with \QMCU SDKs \title \QDS Version Compatibility with \QMCU SDKs

View File

@@ -0,0 +1,129 @@
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\previouspage studio-compatibility-with-mcu-sdks.html
\page studio-features-on-mcu-projects.html
\nextpage studio-help.html
\title \QDS Features on MCU Projects
The table below provides a summary of how the key \QDS features are supported
for developing MCU projects.
\table
\header
\li View
\li Fully Supported
\li Partially Supported
\li Not Supported
\li Comments
\row
\li \l 2D
\li \b X
\li \b -
\li \b -
\li A scene in the \uicontrol 2D view is rendered by the regular Qt Quick
and QML, and not as \QUL and \QMCU, so some imperfections or inaccuracies
can occur.
\row
\li \l 3D
\li \b -
\li \b -
\li \b X
\li The \uicontrol 3D view is not a part of \QUL or \QMCU.
\row
\li \l {Material Editor and Browser}
\li \b -
\li \b -
\li \b X
\li The \uicontrol {Material Editor} and \uicontrol {Material Browser} views
are not a part of \QUL or \QMCU.
\row
\li \l {Components}
\li \b X
\li \b -
\li \b -
\li Shows only the components and modules available for MCU projects.
\row
\li \l {Assets}
\li \b X
\li \b -
\li \b -
\li Shows all the listed assets in the \c QmlProject file.
\row
\li \l {Navigator}
\li \b X
\li \b -
\li \b -
\li Displays the composition of the current component file as a tree
structure.
\row
\li \l {Properties}
\li \b X
\li \b -
\li \b -
\li Shows only the preset properties available for MCU projects (such as
by Qt Quick and its modules).
\row
\li \l {Connections}
\li \b X
\li \b -
\li \b -
\li The \uicontrol Connections view displays all signal handlers in the
current file but it doesn't filter available signals, so you can still
see and select signals that are available in Qt Quick, but not in \QUL.
\row
\li \l {States}
\li \b X
\li \b -
\li \b -
\li The feature is fully supported as such, but there are some
limitations listed in \l {\QMCU Known Issues or Limitations}.
\row
\li \l {Transitions}
\li \b X
\li \b -
\li \b -
\li \b -
\row
\li \l {Translations}
\li \b -
\li \b -
\li \b X
\li \b -
\row
\li \l {Timeline}
\li \b X
\li \b -
\li \b -
\li \b -
\row
\li \l {Curves}
\li \b -
\li \b X
\li \b -
\li Linear interpolation works, but \QMCU does not support the
\c easing.bezierCurve property of a keyframe.
\row
\li \l Code
\li \b X
\li \b -
\li \b -
\li The \uicontrol Code view uses regular Qt Quick instead of \QUL, so it may
not show an error if you are using or assigning an unsupported property.
\row
\li \l {Content Library}
\li \b -
\li \b -
\li \b X
\li The \uicontrol {Content Library} view is not a part of \QUL or \QMCU.
\row
\li \l {Texture Editor}
\li \b -
\li \b -
\li \b X
\li The \uicontrol {Texture Editor} view is not a part of \QUL or \QMCU.
\endtable
*/

View File

@@ -10,7 +10,7 @@
\table \table
\row \row
\li \image studio-animation.png \li \image qds-studio-animation.png
\li You can use different animation techniques for different \li You can use different animation techniques for different
purposes. \QDS supports common motion design techniques, purposes. \QDS supports common motion design techniques,
such as timeline and keyframe based animation and easing such as timeline and keyframe based animation and easing

View File

@@ -10,7 +10,7 @@
\table \table
\row \row
\li \image studio-3d-scenes.png \li \image qds-studio-3d-scenes.png
\li After your UI wireframe has been approved, you can turn it \li After your UI wireframe has been approved, you can turn it
into an interactive prototype to ensure that you and the into an interactive prototype to ensure that you and the
developers share a common vision about the UI appearance developers share a common vision about the UI appearance

View File

@@ -10,7 +10,7 @@
\table \table
\row \row
\li \image front-ui.png \li \image qds-front-ui.png
\li Plan your UI properly. Know what elements, such as screens, \li Plan your UI properly. Know what elements, such as screens,
components, and states, you need. Create a descriptive wireframe components, and states, you need. Create a descriptive wireframe
and acquire a detailed UI specification before you start to make and acquire a detailed UI specification before you start to make

View File

@@ -10,7 +10,7 @@
\table \table
\row \row
\li \image front-advanced.png \li \image qds-front-advanced.png
\li Learn more about the UI files (.ui.qml), collecting data about \li Learn more about the UI files (.ui.qml), collecting data about
using \QDS, and about packaging applications for delivering using \QDS, and about packaging applications for delivering
them to users or uploading them to app stores. them to users or uploading them to app stores.

View File

@@ -10,7 +10,7 @@
\table \table
\row \row
\li \image front-projects.png \li \image qds-front-projects.png
\li Learn more about using the Git version control system, \li Learn more about using the Git version control system,
converting UI projects into applications, and using converting UI projects into applications, and using
external tools directly from \QDS. external tools directly from \QDS.

View File

@@ -10,7 +10,7 @@
\table \table
\row \row
\li \image front-gs.png \li \image qds-front-gs.png
\li When you install \QDS, everything you need to start wireframing \li When you install \QDS, everything you need to start wireframing
and prototyping UIs is installed and set up for you. You can and prototyping UIs is installed and set up for you. You can
move directly to learning about how to use the different \QDS move directly to learning about how to use the different \QDS

View File

@@ -3,14 +3,14 @@
/*! /*!
\page studio-help.html \page studio-help.html
\previouspage studio-compatibility-with-mcu-sdks.html \previouspage studio-features-on-mcu-projects.html
\nextpage creator-help.html \nextpage creator-help.html
\title Help \title Help
\table \table
\row \row
\li \image front-help.png \li \image qds-front-help.png
\li Learn more about using the \uicontrol Help mode, frequently \li Learn more about using the \uicontrol Help mode, frequently
asked questions, and supported platforms. asked questions, and supported platforms.
\endtable \endtable

View File

@@ -10,7 +10,7 @@
\table \table
\row \row
\li \image front-preview.png \li \image qds-front-preview.png
\li \QDS attempts to meet your needs, whether you have previous \li \QDS attempts to meet your needs, whether you have previous
experience with QML and coding or not. When you install \QDS, experience with QML and coding or not. When you install \QDS,
the default configuration allows you to start wireframing, the default configuration allows you to start wireframing,

View File

@@ -151,12 +151,11 @@
\image studio-design-mode.webp "Design mode" \image studio-design-mode.webp "Design mode"
Read more about modes: The mode selector is hidden by default.
\list To show the mode selector, go to \uicontrol Views >
\li \l{Selecting Modes} \uicontrol {Mode Selector Style} and select \uicontrol {Icons and Text}
\li \l{Design Views} or \uicontrol {Icons Only}.
\endlist
\section1 Project \section1 Project
\target glossary-project \target glossary-project

View File

@@ -12,7 +12,6 @@
\li \l{Tutorials} \li \l{Tutorials}
\li \l{User Interface} \li \l{User Interface}
\list \list
\li \l{Selecting Modes}
\li \l{Design Views} \li \l{Design Views}
\list \list
\li \l{2D} \li \l{2D}
@@ -203,7 +202,6 @@
\list \list
\li \l{Working in Edit Mode} \li \l{Working in Edit Mode}
\list \list
\li \l{Working with Sidebars}
\li \l{Browsing Project Contents} \li \l{Browsing Project Contents}
\li \l{Viewing Output} \li \l{Viewing Output}
\endlist \endlist
@@ -262,6 +260,7 @@
\li \l{\QDS on MCUs} \li \l{\QDS on MCUs}
\list \list
\li \l {\QDS Version Compatibility with \QMCU SDKs} \li \l {\QDS Version Compatibility with \QMCU SDKs}
\li \l {\QDS Features on MCU Projects}
\endlist \endlist
\endlist \endlist
\li \l Help \li \l Help

View File

@@ -13,10 +13,10 @@
\table \table
\row \row
\li \inlineimage front-ui.png \li \inlineimage qds-front-ui.png
\li \inlineimage studio-flow.png \li \inlineimage studio-flow.png
\li \inlineimage studio-3d-scenes.png \li \inlineimage qds-studio-3d-scenes.png
\li \inlineimage front-projects.png \li \inlineimage qds-front-projects.png
\row \row
\li \b {Creating UI wireframes} \li \b {Creating UI wireframes}
\li \b {Creating UI prototypes} \li \b {Creating UI prototypes}

View File

@@ -18,10 +18,10 @@
\table \table
\row \row
\li \inlineimage front-gs.png \li \inlineimage qds-front-gs.png
\li \inlineimage front-ui.png \li \inlineimage qds-front-ui.png
\li \inlineimage studio-3d-scenes.png \li \inlineimage qds-studio-3d-scenes.png
\li \inlineimage studio-animation.png \li \inlineimage qds-studio-animation.png
\row \row
\li \b {\l{Getting Started}} \li \b {\l{Getting Started}}
\list \list
@@ -58,10 +58,10 @@
\li \l{Optimizing Designs} \li \l{Optimizing Designs}
\endlist \endlist
\row \row
\li \inlineimage front-preview.png \li \inlineimage qds-front-preview.png
\li \inlineimage front-advanced.png \li \inlineimage qds-front-advanced.png
\li \inlineimage front-projects.png \li \inlineimage qds-front-projects.png
\li \inlineimage front-help.png \li \inlineimage qds-front-help.png
\row \row
\li \b {\l{Implementing Applications}} \li \b {\l{Implementing Applications}}
\list \list

View File

@@ -313,7 +313,7 @@
\endlist \endlist
You can pause the particle animation by selecting You can pause the particle animation by selecting
\inlineimage icons/particle-animation-on.png \inlineimage icons/particle-pause.png
. When the animation is paused, you can use . When the animation is paused, you can use
\inlineimage icons/particles-seek.png \inlineimage icons/particles-seek.png
to manually seek forward or backward in the particle animation. to manually seek forward or backward in the particle animation.

View File

@@ -209,11 +209,38 @@
\uicontrol {Shadow map far} property value. Using smaller values \uicontrol {Shadow map far} property value. Using smaller values
may improve the precision and effects of the map. may improve the precision and effects of the map.
\section1 Baking Lightmaps \section1 Baked Lightmaps
\note Lightmaps baking is released as technical preview in \QDS 4.1. \note Lightmaps baking is released as technical preview in \QDS 4.1.
\section2 Baking Lightmaps for a 3D Model Baked lightmaps allow pre-generating the direct lighting from lights such as DirectionalLight,
PointLight, and SpotLight, including the shadows cast by the lights. At run time, instead of
performing the appropriate calculations in the fragment shader, and, in case of shadows,
generating the potentially costly shadow maps in real time, the pre-generated light map is
sampled instead.
\section2 Baking Lightmaps
To bake lightmaps for models in your 3D scene:
\list 1
\li Right-click anywhere in the \uicontrol 3D view and select \uicontrol {Bake Lights}.
\li In the \uicontrol {Lights Baking Setup} dialog:
\list
\li For every light you want to use to bake lightmaps, set \uicontrol {Bake Mode} to BakeModeAll.
\li For every 3D model you want to bake lightmaps, select \uicontrol {In Use} and
\uicontrol {Enabled}, and set the desired \uicontrol {Resolution}.
\endlist
\li Optional. If you have components with unexposed models or lights (for example, imported
3D models created in other software), select \uicontrol {Expose models and lights} to add the
models and light of that component to the \uicontrol Models and \uicontrol Lights sections of
the dialog.
\li Select \uicontrol Bake.
\endlist
\image bake-lights-dialog.png
\section2 Manually Baking Lightmaps for a 3D Model
Baked lightmap components are not visible in the \uicontrol Navigator view by default. To make Baked lightmap components are not visible in the \uicontrol Navigator view by default. To make
them visible, select \inlineimage icons/visibilityon.png them visible, select \inlineimage icons/visibilityon.png
in the \uicontrol Navigator view. in the \uicontrol Navigator view.
@@ -239,9 +266,10 @@
\li In the \uicontrol Navigator view, select the light component that you want to bake \li In the \uicontrol Navigator view, select the light component that you want to bake
lightmaps for, and in the \uicontrol Properties view, set \uicontrol {Bake Mode} to BakeModeAll. lightmaps for, and in the \uicontrol Properties view, set \uicontrol {Bake Mode} to BakeModeAll.
\li Right-click anywhere in the \uicontrol 3D view and select \uicontrol {Bake Lights}. \li Right-click anywhere in the \uicontrol 3D view and select \uicontrol {Bake Lights}.
\li Select \uicontrol {Setup baking manually}, and then select \uicontrol Bake.
\endlist \endlist
\section2 Baking Lightmaps for a 3D Model Inside a Sub Component \section2 Manually Baking Lightmaps for a 3D Model Inside a Sub Component
To bake lightmaps for a 3D model inside a sub component, first add a local custom property to To bake lightmaps for a 3D model inside a sub component, first add a local custom property to
expose the model: expose the model:
@@ -299,6 +327,7 @@
a unique name. a unique name.
\endlist \endlist
\li Right-click anywhere in the \uicontrol 3D view and select \uicontrol {Bake Lights}. \li Right-click anywhere in the \uicontrol 3D view and select \uicontrol {Bake Lights}.
\li Select \uicontrol {Setup baking manually}, and then select \uicontrol Bake.
\endlist \endlist
*/ */

View File

@@ -10,7 +10,7 @@
/*! /*!
\page creator-using-qt-quick-designer.html \page creator-using-qt-quick-designer.html
\previouspage creator-modes.html \previouspage creator-quick-tour.html
\nextpage qtquick-form-editor.html \nextpage qtquick-form-editor.html
\title Design Views \title Design Views
@@ -31,52 +31,65 @@
\section1 Summary of Design Views \section1 Summary of Design Views
In addition to the summary of design views, the table below includes an MCU
column that indicates the views which are fully supported on MCU projects.
For more information, see \l {\QDS Features on MCU Projects}.
\table \table
\header \header
\li View \li View
\li Purpose \li Purpose
\li MCU
\li Read More \li Read More
\row \row
\li \l {2D} \li \l {2D}
\li Provides a working area for designing 2D UIs. \li Provides a working area for designing 2D UIs.
When you are editing 3D scenes, the \uicontrol {2D} view is When you are editing 3D scenes, the \uicontrol {2D} view is
used as a canvas for the 3D scene projected by the camera. used as a canvas for the 3D scene projected by the camera.
\li \image ok.png
\li \l {2D} \li \l {2D}
\row \row
\li \l {3D} \li \l {3D}
\li Provides an editor for files you created using 3D graphics \li Provides an editor for files you created using 3D graphics
applications and stored in one of the supported formats. applications and stored in one of the supported formats.
\li
\li \l {3D} \li \l {3D}
\row \row
\li \l {Material Editor and Browser} \li \l {Material Editor and Browser}
\li In the \uicontrol {Material Editor} and \li In the \uicontrol {Material Editor} and
\uicontrol {Material Browser} views, you create and manage materials and \uicontrol {Material Browser} views, you create and manage materials and
textures. textures.
\li
\li \l {Material Editor and Browser} \li \l {Material Editor and Browser}
\row \row
\li \l Components \li \l Components
\li Contains preset components and your own components, that you can use \li Contains preset components and your own components, that you can use
to design you application. to design you application.
\li \image ok.png
\li \l{Using Components} \li \l{Using Components}
\row \row
\li \l Assets \li \l Assets
\li Contains assets such as images and fonts that you can use in your \li Contains assets such as images and fonts that you can use in your
application. application.
\li \image ok.png
\li \l Assets \li \l Assets
\row \row
\li \l Navigator \li \l Navigator
\li Displays the composition of the current component file as \li Displays the composition of the current component file as
a tree structure. A component file can contain references a tree structure. A component file can contain references
to other components and assets. to other components and assets.
\li \image ok.png
\li \l Navigator \li \l Navigator
\row \row
\li \l Properties \li \l Properties
\li Enables you to modify the properties of the selected component. \li Enables you to modify the properties of the selected component.
\li \image ok.png
\li \l {Specifying Component Properties} \li \l {Specifying Component Properties}
\row \row
\li \l{Connections} \li \l{Connections}
\li Enables you to add functionality to the UI by creating \li Enables you to add functionality to the UI by creating
connections between components, signals, and component properties. connections between components, signals, and component properties.
\li \image ok.png
\li \l{Working with Connections} \li \l{Working with Connections}
\row \row
\li \l States \li \l States
@@ -84,54 +97,65 @@
Typically, states describe UI configurations, such as the Typically, states describe UI configurations, such as the
visibility and behavior of components and the available user visibility and behavior of components and the available user
actions. actions.
\li \image ok.png
\li \l{Working with States} \li \l{Working with States}
\row \row
\li \l{Transitions} \li \l{Transitions}
\li Enables you to make movement between states smooth by animating \li Enables you to make movement between states smooth by animating
the changes between states. the changes between states.
\li \image ok.png
\li \l{Animating Transitions Between States} \li \l{Animating Transitions Between States}
\row \row
\li \l Translations \li \l Translations
\li Provides functionality to add multi-language support to your \li Provides functionality to add multi-language support to your
project. project.
\li
\li \l{Translations} \li \l{Translations}
\row \row
\li \l Timeline \li \l Timeline
\li Provides a timeline and keyframe based editor for animating \li Provides a timeline and keyframe based editor for animating
the properties of components. the properties of components.
\li \image ok.png
\li \l{Creating Timeline Animations} \li \l{Creating Timeline Animations}
\row \row
\li \l{Curves} \li \l{Curves}
\li Enables you to view and modify the whole animation curve by \li Enables you to view and modify the whole animation curve by
inserting keyframes to the curve and dragging them and the point inserting keyframes to the curve and dragging them and the point
handlers to modify the curve. handlers to modify the curve.
\li
\li \l {Editing Animation Curves} \li \l {Editing Animation Curves}
\row \row
\li \l{Code} \li \l{Code}
\li Provides a code editor for viewing and modifying the code \li Provides a code editor for viewing and modifying the code
generated by the visual editors. generated by the visual editors.
\li \image ok.png
\li \l {Working in Edit Mode} \li \l {Working in Edit Mode}
\row \row
\li \l Projects \li \l Projects
\li Shows a list of open projects and the files they contain. \li Shows a list of open projects and the files they contain.
\li \image ok.png
\li \l Projects \li \l Projects
\row \row
\li \l{File System} \li \l{File System}
\li Shows all files in the currently selected directory. \li Shows all files in the currently selected directory.
\li \image ok.png
\li \l{File System} \li \l{File System}
\row \row
\li \l{Open Documents} \li \l{Open Documents}
\li Shows currently open files. \li Shows currently open files.
\li \image ok.png
\li \l{Open Documents} \li \l{Open Documents}
\row \row
\li \l{Content Library} \li \l{Content Library}
\li The \uicontrol {Content Library} view contains material, texture, \li The \uicontrol {Content Library} view contains material, texture,
and environment bundles with assets that you can use in your project. and environment bundles with assets that you can use in your project.
\li
\li \l{Content Library} \li \l{Content Library}
\row \row
\li \l{Texture Editor} \li \l{Texture Editor}
\li In the \uicontrol {Texture Editor} view, you create and manage \li In the \uicontrol {Texture Editor} view, you create and manage
textures. textures.
\li
\li \l{Texture Editor} \li \l{Texture Editor}
\endtable \endtable

View File

@@ -19,7 +19,7 @@ Module {
property bool hasRepo property bool hasRepo
configure: { configure: {
repoDir = FileInfo.cleanPath(path + "/../../../tests/unit/unittest/3rdparty/googletest"); repoDir = FileInfo.cleanPath(path + "/../../../tests/unit/3rdparty/googletest");
gtestDir = FileInfo.joinPaths(repoDir, "googletest"); gtestDir = FileInfo.joinPaths(repoDir, "googletest");
gmockDir = FileInfo.joinPaths(repoDir, "googlemock"); gmockDir = FileInfo.joinPaths(repoDir, "googlemock");
hasRepo = File.exists(gtestDir); hasRepo = File.exists(gtestDir);

View File

@@ -9,6 +9,8 @@ import AssetsLibraryBackend
TreeViewDelegate { TreeViewDelegate {
id: root id: root
property StudioTheme.ControlStyle style: StudioTheme.Values.controlStyle
required property Item assetsView required property Item assetsView
required property Item assetsRoot required property Item assetsRoot
@@ -68,6 +70,21 @@ TreeViewDelegate {
root.depth = root.initialDepth root.depth = root.initialDepth
} }
indicator: Item {
implicitWidth: 20
implicitHeight: root.implicitHeight
anchors.left: bg.left
Image {
id: arrow
width: 8
height: 4
source: "image://icons/down-arrow"
anchors.centerIn: parent
rotation: root.expanded ? 0 : -90
}
}
background: Rectangle { background: Rectangle {
id: bg id: bg
@@ -109,7 +126,7 @@ TreeViewDelegate {
id: assetLabel id: assetLabel
text: assetLabel.__computeText() text: assetLabel.__computeText()
color: StudioTheme.Values.themeTextColor color: StudioTheme.Values.themeTextColor
font.pixelSize: StudioTheme.Values.mediumFont font.pixelSize: StudioTheme.Values.baseFontSize
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
verticalAlignment: Qt.AlignVCenter verticalAlignment: Qt.AlignVCenter

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B

View File

@@ -19,6 +19,7 @@ Item {
materialsView.closeContextMenu() materialsView.closeContextMenu()
texturesView.closeContextMenu() texturesView.closeContextMenu()
environmentsView.closeContextMenu() environmentsView.closeContextMenu()
effectsView.closeContextMenu()
HelperWidgets.Controller.closeContextMenu() HelperWidgets.Controller.closeContextMenu()
} }
@@ -67,6 +68,7 @@ Item {
materialsView.expandVisibleSections() materialsView.expandVisibleSections()
texturesView.expandVisibleSections() texturesView.expandVisibleSections()
environmentsView.expandVisibleSections() environmentsView.expandVisibleSections()
effectsView.expandVisibleSections()
} }
} }
@@ -76,7 +78,8 @@ Item {
height: StudioTheme.Values.toolbarHeight height: StudioTheme.Values.toolbarHeight
tabsModel: [{name: qsTr("Materials"), icon: StudioTheme.Constants.material_medium}, tabsModel: [{name: qsTr("Materials"), icon: StudioTheme.Constants.material_medium},
{name: qsTr("Textures"), icon: StudioTheme.Constants.textures_medium}, {name: qsTr("Textures"), icon: StudioTheme.Constants.textures_medium},
{name: qsTr("Environments"), icon: StudioTheme.Constants.languageList_medium}] {name: qsTr("Environments"), icon: StudioTheme.Constants.languageList_medium},
{name: qsTr("Effects"), icon: StudioTheme.Constants.effects}]
} }
} }
} }
@@ -98,7 +101,8 @@ Item {
searchBox: searchBox searchBox: searchBox
onUnimport: (bundleMat) => { onUnimport: (bundleMat) => {
confirmUnimportDialog.targetBundleMaterial = bundleMat confirmUnimportDialog.targetBundleItem = bundleMat
confirmUnimportDialog.targetBundleType = "material"
confirmUnimportDialog.open() confirmUnimportDialog.open()
} }
} }
@@ -122,6 +126,20 @@ Item {
searchBox: searchBox searchBox: searchBox
} }
ContentLibraryEffectsView {
id: effectsView
width: root.width
searchBox: searchBox
onUnimport: (bundleItem) => {
confirmUnimportDialog.targetBundleItem = bundleItem
confirmUnimportDialog.targetBundleType = "effect"
confirmUnimportDialog.open()
}
}
} }
} }
} }

View File

@@ -0,0 +1,90 @@
// Copyright (C) 2023 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 QtQuick.Controls
import StudioTheme as StudioTheme
import ContentLibraryBackend
Item {
id: root
signal showContextMenu()
visible: modelData.bundleItemVisible
MouseArea {
id: mouseArea
hoverEnabled: true
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
onPressed: (mouse) => {
if (mouse.button === Qt.LeftButton && !ContentLibraryBackend.effectsModel.importerRunning)
ContentLibraryBackend.rootView.startDragEffect(modelData, mapToGlobal(mouse.x, mouse.y))
else if (mouse.button === Qt.RightButton)
root.showContextMenu()
}
}
Column {
anchors.fill: parent
spacing: 1
Item { width: 1; height: 5 } // spacer
Image {
id: img
width: root.width - 10
height: img.width
anchors.horizontalCenter: parent.horizontalCenter
source: modelData.bundleItemIcon
cache: false
Rectangle { // circular indicator for imported bundle effect
width: 10
height: 10
radius: 5
anchors.right: img.right
anchors.top: img.top
anchors.margins: 5
color: "#00ff00"
border.color: "#555555"
border.width: 1
visible: modelData.bundleItemImported
ToolTip {
visible: indicatorMouseArea.containsMouse
text: qsTr("Effect is imported to project")
delay: 1000
}
MouseArea {
id: indicatorMouseArea
anchors.fill: parent
hoverEnabled: true
}
}
}
Text {
text: modelData.bundleItemName
width: img.width
clip: true
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: TextInput.AlignHCenter
font.pixelSize: StudioTheme.Values.myFontSize
color: StudioTheme.Values.themeTextColor
}
} // Column
}

View File

@@ -0,0 +1,39 @@
// Copyright (C) 2023 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 StudioControls as StudioControls
import StudioTheme as StudioTheme
import ContentLibraryBackend
StudioControls.Menu {
id: root
property var targetItem: null
readonly property bool targetAvailable: targetItem && !ContentLibraryBackend.effectsModel.importerRunning
signal unimport(var bundleEff);
function popupMenu(targetItem = null)
{
this.targetItem = targetItem
popup()
}
closePolicy: StudioControls.Menu.CloseOnEscape | StudioControls.Menu.CloseOnPressOutside
StudioControls.MenuItem {
text: qsTr("Add an instance")
enabled: root.targetAvailable
onTriggered: ContentLibraryBackend.effectsModel.addInstance(root.targetItem)
}
StudioControls.MenuItem {
enabled: root.targetAvailable && root.targetItem.bundleItemImported
text: qsTr("Remove from project")
onTriggered: root.unimport(root.targetItem)
}
}

View File

@@ -0,0 +1,112 @@
// Copyright (C) 2023 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 as HelperWidgets
import StudioControls as StudioControls
import StudioTheme as StudioTheme
import ContentLibraryBackend
HelperWidgets.ScrollView {
id: root
clip: true
interactive: !ctxMenu.opened && !ContentLibraryBackend.rootView.isDragging
&& !HelperWidgets.Controller.contextMenuOpened
readonly property int cellWidth: 100
readonly property int cellHeight: 120
required property var searchBox
signal unimport(var bundleItem);
function closeContextMenu()
{
ctxMenu.close()
}
function expandVisibleSections()
{
for (let i = 0; i < categoryRepeater.count; ++i) {
let cat = categoryRepeater.itemAt(i)
if (cat.visible && !cat.expanded)
cat.expandSection()
}
}
Column {
ContentLibraryEffectContextMenu {
id: ctxMenu
onUnimport: (bundleEff) => root.unimport(bundleEff)
}
Repeater {
id: categoryRepeater
model: ContentLibraryBackend.effectsModel
delegate: HelperWidgets.Section {
width: root.width
caption: bundleCategoryName
addTopPadding: false
sectionBackgroundColor: "transparent"
visible: bundleCategoryVisible && !ContentLibraryBackend.effectsModel.isEmpty
expanded: bundleCategoryExpanded
expandOnClick: false
category: "ContentLib_Effect"
onToggleExpand: bundleCategoryExpanded = !bundleCategoryExpanded
onExpand: bundleCategoryExpanded = true
onCollapse: bundleCategoryExpanded = false
function expandSection() {
bundleCategoryExpanded = true
}
Grid {
width: root.width
leftPadding: 5
rightPadding: 5
bottomPadding: 5
columns: root.width / root.cellWidth
Repeater {
model: bundleCategoryItems
delegate: ContentLibraryEffect {
width: root.cellWidth
height: root.cellHeight
onShowContextMenu: ctxMenu.popupMenu(modelData)
}
}
}
}
}
Text {
id: infoText
text: {
if (!ContentLibraryBackend.effectsModel.bundleExists)
qsTr("No effects available.")
else if (!ContentLibraryBackend.rootView.hasQuick3DImport)
qsTr("To use <b>Content Library</b>, first add the QtQuick3D module in the <b>Components</b> view.")
else if (!ContentLibraryBackend.effectsModel.hasRequiredQuick3DImport)
qsTr("To use <b>Content Library</b>, version 6.4 or later of the QtQuick3D module is required.")
else if (!ContentLibraryBackend.rootView.hasMaterialLibrary)
qsTr("<b>Content Library</b> is disabled inside a non-visual component.")
else if (!searchBox.isEmpty())
qsTr("No match found.")
else
""
}
color: StudioTheme.Values.themeTextColor
font.pixelSize: StudioTheme.Values.baseFontSize
topPadding: 10
leftPadding: 10
visible: ContentLibraryBackend.effectsModel.isEmpty
}
}
}

View File

@@ -95,7 +95,7 @@ Item {
icon: StudioTheme.Constants.plus icon: StudioTheme.Constants.plus
tooltip: qsTr("Add an instance to project") tooltip: qsTr("Add an instance to project")
buttonSize: 22 buttonSize: 22
property color c: StudioTheme.Values.themeIconColor property color c: "white"
normalColor: Qt.hsla(c.hslHue, c.hslSaturation, c.hslLightness, .2) normalColor: Qt.hsla(c.hslHue, c.hslSaturation, c.hslLightness, .2)
hoverColor: Qt.hsla(c.hslHue, c.hslSaturation, c.hslLightness, .3) hoverColor: Qt.hsla(c.hslHue, c.hslSaturation, c.hslLightness, .3)
pressColor: Qt.hsla(c.hslHue, c.hslSaturation, c.hslLightness, .4) pressColor: Qt.hsla(c.hslHue, c.hslSaturation, c.hslLightness, .4)
@@ -118,7 +118,7 @@ Item {
iconColor: root.downloadState === "unavailable" || root.downloadState === "failed" iconColor: root.downloadState === "unavailable" || root.downloadState === "failed"
? StudioTheme.Values.themeRedLight ? StudioTheme.Values.themeRedLight
: StudioTheme.Values.themeTextColor : "white"
iconSize: 22 iconSize: 22
iconScale: downloadIcon.containsMouse ? 1.2 : 1 iconScale: downloadIcon.containsMouse ? 1.2 : 1

View File

@@ -20,6 +20,8 @@ Item {
property string downloadState: modelData.isDownloaded() ? "downloaded" : "" property string downloadState: modelData.isDownloaded() ? "downloaded" : ""
property bool delegateVisible: modelData.textureVisible property bool delegateVisible: modelData.textureVisible
property bool _isUpdating: false
property alias allowCancel: progressBar.closeButtonVisible property alias allowCancel: progressBar.closeButtonVisible
property alias progressValue: progressBar.value property alias progressValue: progressBar.value
property alias progressText: progressLabel.text property alias progressText: progressLabel.text
@@ -40,6 +42,55 @@ Item {
return qsTr("Click to download the texture.") return qsTr("Click to download the texture.")
} }
function startDownload(message)
{
if (root.downloadState !== "" && root.downloadState !== "failed")
return
root._startDownload(textureDownloader, message)
}
function updateTexture()
{
if (root.downloadState !== "downloaded")
return
root._isUpdating = true
root._startDownload(textureDownloader, qsTr("Updating..."))
}
function _startDownload(downloader, message)
{
progressBar.visible = true
tooltip.visible = false
root.progressText = message
root.allowCancel = true
root.progressValue = Qt.binding(function() { return downloader.progress })
root.downloadState = ""
downloader.start()
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: !downloadIcon.visible
acceptedButtons: Qt.LeftButton | Qt.RightButton
onEntered: tooltip.visible = image.visible
onExited: tooltip.visible = false
onPressed: (mouse) => {
if (mouse.button === Qt.LeftButton) {
if (root.downloadState === "downloaded")
ContentLibraryBackend.rootView.startDragTexture(modelData, mapToGlobal(mouse.x, mouse.y))
} else if (mouse.button === Qt.RightButton && root.downloadState === "downloaded") {
root.showContextMenu()
}
}
}
Rectangle { Rectangle {
id: downloadPane id: downloadPane
anchors.fill: parent anchors.fill: parent
@@ -60,7 +111,7 @@ Item {
visible: false visible: false
onCancelRequested: { onCancelRequested: {
downloader.cancel() textureDownloader.cancel()
} }
Text { Text {
@@ -114,7 +165,7 @@ Item {
iconColor: root.downloadState === "unavailable" || root.downloadState === "failed" iconColor: root.downloadState === "unavailable" || root.downloadState === "failed"
? StudioTheme.Values.themeRedLight ? StudioTheme.Values.themeRedLight
: StudioTheme.Values.themeTextColor : "white"
iconSize: 22 iconSize: 22
iconScale: downloadIcon.containsMouse ? 1.2 : 1 iconScale: downloadIcon.containsMouse ? 1.2 : 1
@@ -144,20 +195,76 @@ Item {
} }
onClicked: { onClicked: {
if (root.downloadState !== "" && root.downloadState !== "failed") root.startDownload(qsTr("Downloading..."))
return
progressBar.visible = true
tooltip.visible = false
root.progressText = qsTr("Downloading...")
root.allowCancel = true
root.progressValue = Qt.binding(function() { return downloader.progress })
root.downloadState = ""
downloader.start()
} }
} // IconButton } // IconButton
IconButton {
id: updateButton
icon: StudioTheme.Constants.updateAvailable_medium
iconColor: "white"
tooltip: qsTr("Update texture")
buttonSize: 22
iconSize: 22
iconScale: updateButton.containsMouse ? 1.2 : 1
iconStyle: Text.Outline
iconStyleColor: "black"
anchors.left: parent.left
anchors.bottom: parent.bottom
visible: root.downloadState === "downloaded" && modelData.textureHasUpdate
transparentBg: true
onClicked: root.updateTexture()
Text {
text: StudioTheme.Constants.updateContent_medium
font.family: StudioTheme.Constants.iconFont.family
color: "black"
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: 5
font.pixelSize: 10
font.bold: true
scale: updateButton.containsMouse ? 1.2 : 1
}
} // Update IconButton
Rectangle {
id: isNewFlag
width: 32
height: 32
visible: downloadIcon.visible && modelData.textureIsNew
color: "transparent"
anchors.top: parent.top
anchors.right: parent.right
Image {
source: "image://contentlibrary/new_flag_triangle.png"
width: 32
height: 32
}
Text {
color: "white"
font.family: StudioTheme.Constants.iconFont.family
text: StudioTheme.Constants.favorite
font.pixelSize: StudioTheme.Values.baseIconFontSize
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: 2
anchors.rightMargin: 4
} // New texture flag
}
ToolTip { ToolTip {
id: tooltip id: tooltip
// contentWidth is not calculated correctly by the toolTip (resulting in a wider tooltip than // contentWidth is not calculated correctly by the toolTip (resulting in a wider tooltip than
@@ -177,29 +284,8 @@ Item {
} }
} // Image } // Image
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: !downloadIcon.visible
propagateComposedEvents: downloadIcon.visible
acceptedButtons: Qt.LeftButton | Qt.RightButton
onEntered: tooltip.visible = image.visible
onExited: tooltip.visible = false
onPressed: (mouse) => {
if (mouse.button === Qt.LeftButton) {
if (root.downloadState === "downloaded")
ContentLibraryBackend.rootView.startDragTexture(modelData, mapToGlobal(mouse.x, mouse.y))
} else if (mouse.button === Qt.RightButton && root.downloadState === "downloaded") {
root.showContextMenu()
}
}
}
FileDownloader { FileDownloader {
id: downloader id: textureDownloader
url: image.webUrl url: image.webUrl
probeUrl: false probeUrl: false
downloadEnabled: true downloadEnabled: true
@@ -210,9 +296,9 @@ Item {
onFinishedChanged: { onFinishedChanged: {
root.progressText = qsTr("Extracting...") root.progressText = qsTr("Extracting...")
root.allowCancel = false root.allowCancel = false
root.progressValue = Qt.binding(function() { return extractor.progress }) root.progressValue = Qt.binding(function() { return textureExtractor.progress })
extractor.extract() textureExtractor.extract()
} }
onDownloadCanceled: { onDownloadCanceled: {
@@ -238,14 +324,50 @@ Item {
} }
FileExtractor { FileExtractor {
id: extractor id: textureExtractor
archiveName: downloader.completeBaseName archiveName: textureDownloader.completeBaseName
sourceFile: downloader.outputFile sourceFile: textureDownloader.outputFile
targetPath: modelData.textureParentPath targetPath: modelData.textureParentPath
alwaysCreateDir: false alwaysCreateDir: false
clearTargetPathContents: false clearTargetPathContents: false
onFinishedChanged: { onFinishedChanged: {
if (root._isUpdating)
root._startDownload(iconDownloader, qsTr("Updating..."))
else
delayedFinish.restart() delayedFinish.restart()
} }
} }
FileDownloader {
id: iconDownloader
url: modelData.textureWebIconUrl
probeUrl: false
downloadEnabled: true
targetFilePath: modelData.textureIconPath
overwriteTarget: true
onDownloadStarting: {
root.downloadState = "downloading"
}
onFinishedChanged: {
image.source = ""
image.source = modelData.textureIcon
ContentLibraryBackend.rootView.markTextureUpdated(modelData.textureKey)
delayedFinish.restart()
}
onDownloadCanceled: {
root.progressText = ""
root.progressValue = 0
root.downloadState = ""
}
onDownloadFailed: {
root.downloadState = "failed"
}
}
} }

View File

@@ -10,7 +10,7 @@ import StudioControls as StudioControls
import StudioTheme as StudioTheme import StudioTheme as StudioTheme
import ContentLibraryBackend import ContentLibraryBackend
Dialog { StudioControls.Dialog {
id: root id: root
title: qsTr("Bundle material might be in use") title: qsTr("Bundle material might be in use")
@@ -19,7 +19,8 @@ Dialog {
implicitWidth: 300 implicitWidth: 300
modal: true modal: true
property var targetBundleMaterial property var targetBundleType // "effect" or "material"
property var targetBundleItem
contentItem: Column { contentItem: Column {
spacing: 20 spacing: 20
@@ -28,7 +29,8 @@ Dialog {
Text { Text {
id: folderNotEmpty id: folderNotEmpty
text: qsTr("If the material you are removing is in use, it might cause the project to malfunction.\n\nAre you sure you want to remove the material?") text: qsTr("If the %1 you are removing is in use, it might cause the project to malfunction.\n\nAre you sure you want to remove the %1?")
.arg(root.targetBundleType)
color: StudioTheme.Values.themeTextColor color: StudioTheme.Values.themeTextColor
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
anchors.right: parent.right anchors.right: parent.right
@@ -48,7 +50,11 @@ Dialog {
text: qsTr("Remove") text: qsTr("Remove")
onClicked: { onClicked: {
ContentLibraryBackend.materialsModel.removeFromProject(root.targetBundleMaterial) if (root.targetBundleType === "material")
ContentLibraryBackend.materialsModel.removeFromProject(root.targetBundleItem)
else if (root.targetBundleType === "effect")
ContentLibraryBackend.effectsModel.removeFromProject(root.targetBundleItem)
root.accept() root.accept()
} }
} }

View File

@@ -63,11 +63,14 @@ Rectangle {
} }
} }
Text { TextEdit {
id: progressText id: progressText
width: scrollView.width width: scrollView.width
font.pixelSize: StudioTheme.Values.myFontSize font.pixelSize: StudioTheme.Values.myFontSize
color: StudioTheme.Values.themeTextColor color: StudioTheme.Values.themeTextColor
readOnly: true
selectByMouse: true
selectByKeyboard: true
} }
function ensureVisible() function ensureVisible()

View File

@@ -12,6 +12,8 @@ import StudioTheme as StudioTheme
Rectangle { Rectangle {
id: root id: root
property int toolTipDelay: 1000
color: StudioTheme.Values.themePanelBackground color: StudioTheme.Values.themePanelBackground
Column { Column {
@@ -99,6 +101,7 @@ Rectangle {
hoverEnabled: true hoverEnabled: true
ToolTip.visible: hovered ToolTip.visible: hovered
ToolTip.text: qsTr("The baking mode applied to this light.") ToolTip.text: qsTr("The baking mode applied to this light.")
ToolTip.delay: root.toolTipDelay
onActivated: bakeMode = currentValue onActivated: bakeMode = currentValue
} }
@@ -112,6 +115,7 @@ Rectangle {
hoverEnabled: true hoverEnabled: true
ToolTip.visible: hovered ToolTip.visible: hovered
ToolTip.text: qsTr("If checked, this model contributes to baked lighting,\nfor example in form of casting shadows or indirect light.") ToolTip.text: qsTr("If checked, this model contributes to baked lighting,\nfor example in form of casting shadows or indirect light.")
ToolTip.delay: root.toolTipDelay
onToggled: inUse = checked onToggled: inUse = checked
} }
@@ -125,6 +129,7 @@ Rectangle {
hoverEnabled: true hoverEnabled: true
ToolTip.visible: hovered ToolTip.visible: hovered
ToolTip.text: qsTr("If checked, baked lightmap texture is generated and rendered for this model.") ToolTip.text: qsTr("If checked, baked lightmap texture is generated and rendered for this model.")
ToolTip.delay: root.toolTipDelay
onToggled: isEnabled = checked onToggled: isEnabled = checked
} }
@@ -155,6 +160,7 @@ Rectangle {
hoverEnabled: true hoverEnabled: true
ToolTip.visible: hovered ToolTip.visible: hovered
ToolTip.text: qsTr("Generated lightmap resolution for this model.") ToolTip.text: qsTr("Generated lightmap resolution for this model.")
ToolTip.delay: root.toolTipDelay
onRealValueChanged: resolution = realValue onRealValueChanged: resolution = realValue
} }
@@ -176,6 +182,7 @@ Rectangle {
hoverEnabled: true hoverEnabled: true
ToolTip.visible: hovered ToolTip.visible: hovered
ToolTip.text: qsTr("If checked, baking settings above are not applied on close or bake.\nInstead, user is expected to set baking properties manually.") ToolTip.text: qsTr("If checked, baking settings above are not applied on close or bake.\nInstead, user is expected to set baking properties manually.")
ToolTip.delay: root.toolTipDelay
onToggled: rootView.manualMode = checked onToggled: rootView.manualMode = checked
} }

View File

@@ -24,6 +24,11 @@ Rectangle {
matName.commitRename() matName.commitRename()
} }
function startRename()
{
matName.startRename()
}
border.width: MaterialBrowserBackend.materialBrowserModel.selectedIndex === index ? MaterialBrowserBackend.rootView.materialSectionFocused ? 3 : 1 : 0 border.width: MaterialBrowserBackend.materialBrowserModel.selectedIndex === index ? MaterialBrowserBackend.rootView.materialSectionFocused ? 3 : 1 : 0
border.color: MaterialBrowserBackend.materialBrowserModel.selectedIndex === index border.color: MaterialBrowserBackend.materialBrowserModel.selectedIndex === index
? StudioTheme.Values.themeControlOutlineInteraction ? StudioTheme.Values.themeControlOutlineInteraction

View File

@@ -24,7 +24,9 @@ Item {
property real __actionIndicatorWidth: StudioTheme.Values.squareComponentWidth property real __actionIndicatorWidth: StudioTheme.Values.squareComponentWidth
property real __actionIndicatorHeight: StudioTheme.Values.height property real __actionIndicatorHeight: StudioTheme.Values.height
property string typeFilter: "QtQuick3D.Material" property string typeFilter: "QtQuick3D.Material"
property string textRole: "idAndName" // This binding is a workaround to overcome the rather long adaption to new Qt versions. This
// should actually be fixed in the ModelSection.qml by setting the textRole: "idAndName".
property string textRole: (root.typeFilter === "QtQuick3D.Material") ? "idAndName" : "id"
property string valueRole: "id" property string valueRole: "id"
property int activatedReason: ComboBox.ActivatedReason.Other property int activatedReason: ComboBox.ActivatedReason.Other
@@ -42,60 +44,78 @@ Item {
Layout.preferredWidth: StudioTheme.Values.height * 10 Layout.preferredWidth: StudioTheme.Values.height * 10
Layout.preferredHeight: myColumn.height Layout.preferredHeight: myColumn.height
HelperWidgets.ListValidator {
id: listValidator
filterList: itemFilterModel.validationItems
}
HelperWidgets.ItemFilterModel { HelperWidgets.ItemFilterModel {
id: itemFilterModel id: itemFilterModel
typeFilter: root.typeFilter typeFilter: root.typeFilter
modelNodeBackendProperty: modelNodeBackend modelNodeBackendProperty: modelNodeBackend
selectedItems: root.allowDuplicates ? [] : root.model selectedItems: root.allowDuplicates ? [] : root.model
validationRoles: [root.textRole, root.valueRole]
} }
Component { Component {
id: myDelegate id: myDelegate
Row { Row {
property alias comboBox: itemFilterComboBox property alias comboBox: delegateComboBox
ListViewComboBox { ListViewComboBox {
id: itemFilterComboBox id: delegateComboBox
property int myIndex: index property int myIndex: index
property bool empty: itemFilterComboBox.initialModelData === "" property bool empty: delegateComboBox.initialModelData === ""
validator: RegExpValidator { regExp: /(^[a-z_]\w*|^[A-Z]\w*\.{1}([a-z_]\w*\.?)+)/ }
validator: listValidator
actionIndicatorVisible: false actionIndicatorVisible: false
model: itemFilterModel model: itemFilterModel
initialModelData: modelData initialModelData: modelData
textRole: root.textRole textRole: root.textRole
valueRole: root.valueRole valueRole: root.valueRole
implicitWidth: StudioTheme.Values.singleControlColumnWidth implicitWidth: StudioTheme.Values.singleControlColumnWidth
width: implicitWidth width: delegateComboBox.implicitWidth
textElidable: true textElidable: true
onFocusChanged: { onFocusChanged: {
if (itemFilterComboBox.focus) if (delegateComboBox.focus) {
myColumn.currentIndex = index myColumn.currentIndex = index
} else {
if (!delegateComboBox.dirty)
return
var curValue = itemFilterComboBox.availableValue() // If focus is lost check if text was changed and try to search for it in
if (itemFilterComboBox.empty && curValue !== "") { // the text as well as in the value role.
let idx = delegateComboBox.indexOfString(delegateComboBox.editText)
if (idx === -1) {
delegateComboBox.editText = delegateComboBox.preFocusText
} else {
delegateComboBox.currentIndex = idx
if (delegateComboBox.empty && delegateComboBox.currentValue !== "") {
myRepeater.dirty = false myRepeater.dirty = false
root.add(curValue) root.add(delegateComboBox.currentValue)
} else {
root.replace(delegateComboBox.myIndex, delegateComboBox.currentValue)
}
}
} }
} }
onCompressedActivated: function(index, reason) { onCompressedActivated: function(index, reason) {
root.activatedReason = reason root.activatedReason = reason
var curValue = itemFilterComboBox.availableValue() var curValue = delegateComboBox.availableValue()
if (itemFilterComboBox.empty && curValue) { if (delegateComboBox.empty && curValue) {
myRepeater.dirty = false myRepeater.dirty = false
root.add(curValue) root.add(curValue)
} else { } else {
root.replace(itemFilterComboBox.myIndex, curValue) root.replace(delegateComboBox.myIndex, curValue)
} }
} }
onHoverChanged: root.delegateHover = itemFilterComboBox.hover onHoverChanged: root.delegateHover = delegateComboBox.hover
} }
Spacer { implicitWidth: extraButton.visible ? 5 : StudioTheme.Values.twoControlColumnGap } Spacer { implicitWidth: extraButton.visible ? 5 : StudioTheme.Values.twoControlColumnGap }
@@ -114,15 +134,17 @@ Item {
icon: StudioTheme.Constants.closeCross icon: StudioTheme.Constants.closeCross
onClicked: { onClicked: {
var lastItem = index === myRepeater.localModel.length - 1 var lastItem = index === myRepeater.localModel.length - 1
if (myColumn.currentItem.initialModelData === "") { var tmp = myRepeater.itemAt(index)
myColumn.currentIndex = index - 1
if (tmp.comboBox.initialModelData === "") {
myRepeater.localModel.pop() myRepeater.localModel.pop()
myRepeater.dirty = false myRepeater.dirty = false
myRepeater.model = myRepeater.localModel // trigger on change handler myRepeater.model = myRepeater.localModel // trigger on change handler
} else { } else {
root.remove(index) root.remove(index)
} }
if (!lastItem)
myColumn.currentIndex = index - 1
} }
onHoveredChanged: root.delegateHover = closeIndicator.hovered onHoveredChanged: root.delegateHover = closeIndicator.hovered
} }
@@ -152,6 +174,11 @@ Item {
myColumn.currentItem = tmp.comboBox myColumn.currentItem = tmp.comboBox
} }
onCurrentItemChanged: {
if (myColumn.currentItem !== null)
myColumn.currentItem.forceActiveFocus()
}
Repeater { Repeater {
id: myRepeater id: myRepeater
@@ -162,7 +189,7 @@ Item {
onItemAdded: function(index, item) { onItemAdded: function(index, item) {
if (index === myColumn.currentIndex) if (index === myColumn.currentIndex)
myColumn.currentItem = item myColumn.currentItem = item.comboBox
} }
function updateModel() { function updateModel() {
@@ -180,9 +207,7 @@ Item {
myRepeater.model = myRepeater.localModel // trigger on change handler myRepeater.model = myRepeater.localModel // trigger on change handler
if (lastIndex < 0 && myRepeater.localModel.length > 0) if (myRepeater.localModel.length > lastIndex)
myColumn.currentIndex = 0
else if (myRepeater.localModel.length > lastIndex)
myColumn.currentIndex = lastIndex myColumn.currentIndex = lastIndex
else else
myColumn.currentIndex = myRepeater.localModel.length - 1 myColumn.currentIndex = myRepeater.localModel.length - 1
@@ -196,28 +221,41 @@ Item {
ListViewComboBox { ListViewComboBox {
id: dummyComboBox id: dummyComboBox
visible: myRepeater.count === 0 visible: myRepeater.count === 0
validator: RegExpValidator { regExp: /(^[a-z_]\w*|^[A-Z]\w*\.{1}([a-z_]\w*\.?)+)/ } validator: listValidator
actionIndicatorVisible: false actionIndicatorVisible: false
model: itemFilterModel model: itemFilterModel
textRole: root.textRole textRole: root.textRole
valueRole: root.valueRole valueRole: root.valueRole
implicitWidth: StudioTheme.Values.singleControlColumnWidth implicitWidth: StudioTheme.Values.singleControlColumnWidth
width: implicitWidth width: dummyComboBox.implicitWidth
onVisibleChanged: dummyComboBox.currentIndex = -1
onFocusChanged: { onFocusChanged: {
var curValue = dummyComboBox.availableValue() if (dummyComboBox.focus)
if (curValue !== "") return
root.add(curValue)
if (!dummyComboBox.dirty)
return
// If focus is lost check if text was changed and try to search for it in
// the text as well as in the value role.
let idx = dummyComboBox.indexOfString(dummyComboBox.editText)
if (idx === -1) {
dummyComboBox.editText = dummyComboBox.preFocusText
} else {
dummyComboBox.currentIndex = idx
if (dummyComboBox.currentValue !== "")
root.add(dummyComboBox.currentValue)
}
} }
onCompressedActivated: { onCompressedActivated: function(index, reason) {
root.activatedReason = reason root.activatedReason = reason
var curValue = dummyComboBox.availableValue() var curValue = dummyComboBox.availableValue()
if (curValue !== "") if (curValue !== "")
root.add(curValue) root.add(curValue)
else
root.replace(dummyComboBox.myIndex, curValue)
} }
onHoverChanged: root.delegateHover = dummyComboBox.hover onHoverChanged: root.delegateHover = dummyComboBox.hover

View File

@@ -40,7 +40,7 @@ StudioControls.TextField {
function escapeString(string) { function escapeString(string) {
var str = string var str = string
str = str.replace(/\\/g, "\\\\") str = str.replace(/\\/g, "\\\\")
str.replace(/\"/g, "\\\"") str = str.replace(/\"/g, "\\\"")
str = str.replace(/\t/g, "\\t") str = str.replace(/\t/g, "\\t")
str = str.replace(/\r/g, "\\r") str = str.replace(/\r/g, "\\r")
str = str.replace(/\n/g, '\\n') str = str.replace(/\n/g, '\\n')

View File

@@ -51,4 +51,21 @@ StudioControls.ComboBox {
return root.editText return root.editText
} }
// Checks if the given parameter can be found as a value or text (valueRole vs. textRole). If
// both searches result an index !== -1 the text is preferred, otherwise index will be returned
// or -1 if not found.
// Text is preferred due to the fact that usually the users use the autocomplete functionality
// of an editable ComboBox hence there will be more hits on text search then on value.
function indexOfString(text) {
let textIndex = root.find(text)
if (textIndex !== -1)
return textIndex
let valueIndex = root.indexOfValue(text)
if (valueIndex !== -1)
return valueIndex
return -1
}
} }

View File

@@ -17,6 +17,11 @@ Row {
root.backendValue.setEnumeration("Item", value) root.backendValue.setEnumeration("Item", value)
} }
Connections {
target: modelNodeBackend
function onSelectionChanged() { originPopup.close() }
}
ExtendedFunctionLogic { ExtendedFunctionLogic {
id: extFuncLogic id: extFuncLogic
backendValue: root.backendValue backendValue: root.backendValue

View File

@@ -34,6 +34,8 @@ T.ComboBox {
property int maximumPopupHeight: control.style.maxComboBoxPopupHeight property int maximumPopupHeight: control.style.maxComboBoxPopupHeight
property string preFocusText: ""
signal compressedActivated(int index, int reason) signal compressedActivated(int index, int reason)
enum ActivatedReason { EditingFinished, Other } enum ActivatedReason { EditingFinished, Other }
@@ -53,7 +55,7 @@ T.ComboBox {
onActiveFocusChanged: { onActiveFocusChanged: {
if (control.activeFocus) if (control.activeFocus)
comboBoxInput.preFocusText = control.editText control.preFocusText = control.editText
} }
ActionIndicator { ActionIndicator {
@@ -69,8 +71,6 @@ T.ComboBox {
contentItem: ComboBoxInput { contentItem: ComboBoxInput {
id: comboBoxInput id: comboBoxInput
property string preFocusText: ""
style: control.style style: control.style
__parentControl: control __parentControl: control
text: control.editText text: control.editText
@@ -332,8 +332,8 @@ T.ComboBox {
Keys.onPressed: function(event) { Keys.onPressed: function(event) {
if (event.key === Qt.Key_Escape) { if (event.key === Qt.Key_Escape) {
control.editText = comboBoxInput.preFocusText control.editText = control.preFocusText
control.dirty = true control.dirty = false
control.focus = false control.focus = false
} }
} }

View File

@@ -133,209 +133,212 @@ QtObject {
readonly property string editLightOn_medium: "\u0096" readonly property string editLightOn_medium: "\u0096"
readonly property string edit_medium: "\u0097" readonly property string edit_medium: "\u0097"
readonly property string edit_small: "\u0098" readonly property string edit_small: "\u0098"
readonly property string events_small: "\u0099" readonly property string effects: "\u0099"
readonly property string export_medium: "\u009A" readonly property string events_small: "\u009A"
readonly property string eyeDropper: "\u009B" readonly property string export_medium: "\u009B"
readonly property string favorite: "\u009D" readonly property string eyeDropper: "\u009D"
readonly property string fitAll_medium: "\u009E" readonly property string favorite: "\u009E"
readonly property string fitSelected_small: "\u009F" readonly property string fitAll_medium: "\u009F"
readonly property string fitSelection_medium: "\u00A0" readonly property string fitSelected_small: "\u00A0"
readonly property string fitToView_medium: "\u00A1" readonly property string fitSelection_medium: "\u00A1"
readonly property string flowAction: "\u00A2" readonly property string fitToView_medium: "\u00A2"
readonly property string flowTransition: "\u00A3" readonly property string flowAction: "\u00A3"
readonly property string fontStyleBold: "\u00A4" readonly property string flowTransition: "\u00A4"
readonly property string fontStyleItalic: "\u00A5" readonly property string fontStyleBold: "\u00A5"
readonly property string fontStyleStrikethrough: "\u00A6" readonly property string fontStyleItalic: "\u00A6"
readonly property string fontStyleUnderline: "\u00A7" readonly property string fontStyleStrikethrough: "\u00A7"
readonly property string forward_medium: "\u00A8" readonly property string fontStyleUnderline: "\u00A8"
readonly property string globalOrient_medium: "\u00A9" readonly property string forward_medium: "\u00A9"
readonly property string gradient: "\u00AA" readonly property string globalOrient_medium: "\u00AA"
readonly property string gridView: "\u00AB" readonly property string gradient: "\u00AB"
readonly property string grid_medium: "\u00AC" readonly property string gridView: "\u00AC"
readonly property string group_small: "\u00AE" readonly property string grid_medium: "\u00AE"
readonly property string home_large: "\u00AF" readonly property string group_small: "\u00AF"
readonly property string idAliasOff: "\u00B0" readonly property string home_large: "\u00B0"
readonly property string idAliasOn: "\u00B1" readonly property string idAliasOff: "\u00B1"
readonly property string import_medium: "\u00B2" readonly property string idAliasOn: "\u00B2"
readonly property string imported: "\u00B3" readonly property string import_medium: "\u00B3"
readonly property string importedModels_small: "\u00B4" readonly property string imported: "\u00B4"
readonly property string infinity: "\u00B5" readonly property string importedModels_small: "\u00B5"
readonly property string invisible_medium: "\u00B6" readonly property string infinity: "\u00B6"
readonly property string keyframe: "\u00B7" readonly property string invisible_medium: "\u00B7"
readonly property string languageList_medium: "\u00B8" readonly property string keyframe: "\u00B8"
readonly property string layouts_small: "\u00B9" readonly property string languageList_medium: "\u00B9"
readonly property string lights_small: "\u00BA" readonly property string layouts_small: "\u00BA"
readonly property string linear_medium: "\u00BB" readonly property string lights_small: "\u00BB"
readonly property string linkTriangle: "\u00BC" readonly property string linear_medium: "\u00BC"
readonly property string linked: "\u00BD" readonly property string linkTriangle: "\u00BD"
readonly property string listView: "\u00BE" readonly property string linked: "\u00BE"
readonly property string list_medium: "\u00BF" readonly property string listView: "\u00BF"
readonly property string localOrient_medium: "\u00C0" readonly property string list_medium: "\u00C0"
readonly property string lockOff: "\u00C1" readonly property string localOrient_medium: "\u00C1"
readonly property string lockOn: "\u00C2" readonly property string lockOff: "\u00C2"
readonly property string loopPlayback_medium: "\u00C3" readonly property string lockOn: "\u00C3"
readonly property string materialBrowser_medium: "\u00C4" readonly property string loopPlayback_medium: "\u00C4"
readonly property string materialPreviewEnvironment: "\u00C5" readonly property string materialBrowser_medium: "\u00C5"
readonly property string materialPreviewModel: "\u00C6" readonly property string materialPreviewEnvironment: "\u00C6"
readonly property string material_medium: "\u00C7" readonly property string materialPreviewModel: "\u00C7"
readonly property string mergeCells: "\u00C8" readonly property string material_medium: "\u00C8"
readonly property string merge_small: "\u00C9" readonly property string mergeCells: "\u00C9"
readonly property string minus: "\u00CA" readonly property string merge_small: "\u00CA"
readonly property string mirror: "\u00CB" readonly property string minus: "\u00CB"
readonly property string more_medium: "\u00CC" readonly property string mirror: "\u00CC"
readonly property string mouseArea_small: "\u00CD" readonly property string more_medium: "\u00CD"
readonly property string moveDown_medium: "\u00CE" readonly property string mouseArea_small: "\u00CE"
readonly property string moveInwards_medium: "\u00CF" readonly property string moveDown_medium: "\u00CF"
readonly property string moveUp_medium: "\u00D0" readonly property string moveInwards_medium: "\u00D0"
readonly property string moveUpwards_medium: "\u00D1" readonly property string moveUp_medium: "\u00D1"
readonly property string move_medium: "\u00D2" readonly property string moveUpwards_medium: "\u00D2"
readonly property string newMaterial: "\u00D3" readonly property string move_medium: "\u00D3"
readonly property string nextFile_large: "\u00D4" readonly property string newMaterial: "\u00D4"
readonly property string openLink: "\u00D5" readonly property string nextFile_large: "\u00D5"
readonly property string openMaterialBrowser: "\u00D6" readonly property string openLink: "\u00D6"
readonly property string orientation: "\u00D7" readonly property string openMaterialBrowser: "\u00D7"
readonly property string orthCam_medium: "\u00D8" readonly property string orientation: "\u00D8"
readonly property string orthCam_small: "\u00D9" readonly property string orthCam_medium: "\u00D9"
readonly property string paddingEdge: "\u00DA" readonly property string orthCam_small: "\u00DA"
readonly property string paddingFrame: "\u00DB" readonly property string paddingEdge: "\u00DB"
readonly property string particleAnimation_medium: "\u00DC" readonly property string paddingFrame: "\u00DC"
readonly property string pasteStyle: "\u00DD" readonly property string particleAnimation_medium: "\u00DD"
readonly property string paste_small: "\u00DE" readonly property string pasteStyle: "\u00DE"
readonly property string pause: "\u00DF" readonly property string paste_small: "\u00DF"
readonly property string perspectiveCam_medium: "\u00E0" readonly property string pause: "\u00E0"
readonly property string perspectiveCam_small: "\u00E1" readonly property string perspectiveCam_medium: "\u00E1"
readonly property string pin: "\u00E2" readonly property string perspectiveCam_small: "\u00E2"
readonly property string plane_medium: "\u00E3" readonly property string pin: "\u00E3"
readonly property string plane_small: "\u00E4" readonly property string plane_medium: "\u00E4"
readonly property string play: "\u00E5" readonly property string plane_small: "\u00E5"
readonly property string playFill_medium: "\u00E6" readonly property string play: "\u00E6"
readonly property string playOutline_medium: "\u00E7" readonly property string playFill_medium: "\u00E7"
readonly property string plus: "\u00E8" readonly property string playOutline_medium: "\u00E8"
readonly property string pointLight_small: "\u00E9" readonly property string plus: "\u00E9"
readonly property string positioners_small: "\u00EA" readonly property string pointLight_small: "\u00EA"
readonly property string previewEnv_medium: "\u00EB" readonly property string positioners_small: "\u00EB"
readonly property string previousFile_large: "\u00EC" readonly property string previewEnv_medium: "\u00EC"
readonly property string promote: "\u00ED" readonly property string previousFile_large: "\u00ED"
readonly property string properties_medium: "\u00EE" readonly property string promote: "\u00EE"
readonly property string readOnly: "\u00EF" readonly property string properties_medium: "\u00EF"
readonly property string recordFill_medium: "\u00F0" readonly property string readOnly: "\u00F0"
readonly property string recordOutline_medium: "\u00F1" readonly property string recordFill_medium: "\u00F1"
readonly property string redo: "\u00F2" readonly property string recordOutline_medium: "\u00F2"
readonly property string reload_medium: "\u00F3" readonly property string redo: "\u00F3"
readonly property string remove_medium: "\u00F4" readonly property string reload_medium: "\u00F4"
readonly property string remove_small: "\u00F5" readonly property string remove_medium: "\u00F5"
readonly property string rename_small: "\u00F6" readonly property string remove_small: "\u00F6"
readonly property string replace_small: "\u00F7" readonly property string rename_small: "\u00F7"
readonly property string resetView_small: "\u00F8" readonly property string replace_small: "\u00F8"
readonly property string restartParticles_medium: "\u00F9" readonly property string resetView_small: "\u00F9"
readonly property string reverseOrder_medium: "\u00FA" readonly property string restartParticles_medium: "\u00FA"
readonly property string roatate_medium: "\u00FB" readonly property string reverseOrder_medium: "\u00FB"
readonly property string rotationFill: "\u00FC" readonly property string roatate_medium: "\u00FC"
readonly property string rotationOutline: "\u00FD" readonly property string rotationFill: "\u00FD"
readonly property string runProjFill_large: "\u00FE" readonly property string rotationOutline: "\u00FE"
readonly property string runProjOutline_large: "\u00FF" readonly property string runProjFill_large: "\u00FF"
readonly property string s_anchors: "\u0100" readonly property string runProjOutline_large: "\u0100"
readonly property string s_annotations: "\u0101" readonly property string s_anchors: "\u0101"
readonly property string s_arrange: "\u0102" readonly property string s_annotations: "\u0102"
readonly property string s_boundingBox: "\u0103" readonly property string s_arrange: "\u0103"
readonly property string s_component: "\u0104" readonly property string s_boundingBox: "\u0104"
readonly property string s_connections: "\u0105" readonly property string s_component: "\u0105"
readonly property string s_edit: "\u0106" readonly property string s_connections: "\u0106"
readonly property string s_enterComponent: "\u0107" readonly property string s_edit: "\u0107"
readonly property string s_eventList: "\u0108" readonly property string s_enterComponent: "\u0108"
readonly property string s_group: "\u0109" readonly property string s_eventList: "\u0109"
readonly property string s_layouts: "\u010A" readonly property string s_group: "\u010A"
readonly property string s_merging: "\u010B" readonly property string s_layouts: "\u010B"
readonly property string s_mouseArea: "\u010C" readonly property string s_merging: "\u010C"
readonly property string s_positioners: "\u010D" readonly property string s_mouseArea: "\u010D"
readonly property string s_selection: "\u010E" readonly property string s_positioners: "\u010E"
readonly property string s_snapping: "\u010F" readonly property string s_selection: "\u010F"
readonly property string s_timeline: "\u0110" readonly property string s_snapping: "\u0110"
readonly property string s_visibility: "\u0111" readonly property string s_timeline: "\u0111"
readonly property string saveLogs_medium: "\u0112" readonly property string s_visibility: "\u0112"
readonly property string scale_medium: "\u0113" readonly property string saveLogs_medium: "\u0113"
readonly property string search: "\u0114" readonly property string scale_medium: "\u0114"
readonly property string search_small: "\u0115" readonly property string search: "\u0115"
readonly property string sectionToggle: "\u0116" readonly property string search_small: "\u0116"
readonly property string selectFill_medium: "\u0117" readonly property string sectionToggle: "\u0117"
readonly property string selectOutline_medium: "\u0118" readonly property string selectFill_medium: "\u0118"
readonly property string selectParent_small: "\u0119" readonly property string selectOutline_medium: "\u0119"
readonly property string selection_small: "\u011A" readonly property string selectParent_small: "\u011A"
readonly property string settings_medium: "\u011B" readonly property string selection_small: "\u011B"
readonly property string signal_small: "\u011C" readonly property string settings_medium: "\u011C"
readonly property string snapping_small: "\u011D" readonly property string signal_small: "\u011D"
readonly property string sphere_medium: "\u011E" readonly property string snapping_small: "\u011E"
readonly property string sphere_small: "\u011F" readonly property string sphere_medium: "\u011F"
readonly property string splitColumns: "\u0120" readonly property string sphere_small: "\u0120"
readonly property string splitRows: "\u0121" readonly property string splitColumns: "\u0121"
readonly property string spotLight_small: "\u0122" readonly property string splitRows: "\u0122"
readonly property string stackedContainer_small: "\u0123" readonly property string spotLight_small: "\u0123"
readonly property string startNode: "\u0124" readonly property string stackedContainer_small: "\u0124"
readonly property string step_medium: "\u0125" readonly property string startNode: "\u0125"
readonly property string stop_medium: "\u0126" readonly property string step_medium: "\u0126"
readonly property string testIcon: "\u0127" readonly property string stop_medium: "\u0127"
readonly property string textAlignBottom: "\u0128" readonly property string testIcon: "\u0128"
readonly property string textAlignCenter: "\u0129" readonly property string textAlignBottom: "\u0129"
readonly property string textAlignJustified: "\u012A" readonly property string textAlignCenter: "\u012A"
readonly property string textAlignLeft: "\u012B" readonly property string textAlignJustified: "\u012B"
readonly property string textAlignMiddle: "\u012C" readonly property string textAlignLeft: "\u012C"
readonly property string textAlignRight: "\u012D" readonly property string textAlignMiddle: "\u012D"
readonly property string textAlignTop: "\u012E" readonly property string textAlignRight: "\u012E"
readonly property string textBulletList: "\u012F" readonly property string textAlignTop: "\u012F"
readonly property string textFullJustification: "\u0130" readonly property string textBulletList: "\u0130"
readonly property string textNumberedList: "\u0131" readonly property string textFullJustification: "\u0131"
readonly property string textures_medium: "\u0132" readonly property string textNumberedList: "\u0132"
readonly property string tickIcon: "\u0133" readonly property string textures_medium: "\u0133"
readonly property string tickMark_small: "\u0134" readonly property string tickIcon: "\u0134"
readonly property string timeline_small: "\u0135" readonly property string tickMark_small: "\u0135"
readonly property string toEndFrame_medium: "\u0136" readonly property string timeline_small: "\u0136"
readonly property string toNextFrame_medium: "\u0137" readonly property string toEndFrame_medium: "\u0137"
readonly property string toPrevFrame_medium: "\u0138" readonly property string toNextFrame_medium: "\u0138"
readonly property string toStartFrame_medium: "\u0139" readonly property string toPrevFrame_medium: "\u0139"
readonly property string topToolbar_annotations: "\u013A" readonly property string toStartFrame_medium: "\u013A"
readonly property string topToolbar_closeFile: "\u013B" readonly property string topToolbar_annotations: "\u013B"
readonly property string topToolbar_designMode: "\u013C" readonly property string topToolbar_closeFile: "\u013C"
readonly property string topToolbar_enterComponent: "\u013D" readonly property string topToolbar_designMode: "\u013D"
readonly property string topToolbar_home: "\u013E" readonly property string topToolbar_enterComponent: "\u013E"
readonly property string topToolbar_makeComponent: "\u013F" readonly property string topToolbar_home: "\u013F"
readonly property string topToolbar_navFile: "\u0140" readonly property string topToolbar_makeComponent: "\u0140"
readonly property string topToolbar_runProject: "\u0141" readonly property string topToolbar_navFile: "\u0141"
readonly property string translationCreateFiles: "\u0142" readonly property string topToolbar_runProject: "\u0142"
readonly property string translationCreateReport: "\u0143" readonly property string translationCreateFiles: "\u0143"
readonly property string translationExport: "\u0144" readonly property string translationCreateReport: "\u0144"
readonly property string translationImport: "\u0145" readonly property string translationExport: "\u0145"
readonly property string translationSelectLanguages: "\u0146" readonly property string translationImport: "\u0146"
readonly property string translationTest: "\u0147" readonly property string translationSelectLanguages: "\u0147"
readonly property string transparent: "\u0148" readonly property string translationTest: "\u0148"
readonly property string triState: "\u0149" readonly property string transparent: "\u0149"
readonly property string triangleArcA: "\u014A" readonly property string triState: "\u014A"
readonly property string triangleArcB: "\u014B" readonly property string triangleArcA: "\u014B"
readonly property string triangleCornerA: "\u014C" readonly property string triangleArcB: "\u014C"
readonly property string triangleCornerB: "\u014D" readonly property string triangleCornerA: "\u014D"
readonly property string unLinked: "\u014E" readonly property string triangleCornerB: "\u014E"
readonly property string undo: "\u014F" readonly property string unLinked: "\u014F"
readonly property string unify_medium: "\u0150" readonly property string undo: "\u0150"
readonly property string unpin: "\u0151" readonly property string unify_medium: "\u0151"
readonly property string upDownIcon: "\u0152" readonly property string unpin: "\u0152"
readonly property string upDownSquare2: "\u0153" readonly property string upDownIcon: "\u0153"
readonly property string visibilityOff: "\u0154" readonly property string upDownSquare2: "\u0154"
readonly property string visibilityOn: "\u0155" readonly property string updateAvailable_medium: "\u0155"
readonly property string visible_medium: "\u0156" readonly property string updateContent_medium: "\u0156"
readonly property string visible_small: "\u0157" readonly property string visibilityOff: "\u0157"
readonly property string wildcard: "\u0158" readonly property string visibilityOn: "\u0158"
readonly property string wizardsAutomotive: "\u0159" readonly property string visible_medium: "\u0159"
readonly property string wizardsDesktop: "\u015A" readonly property string visible_small: "\u015A"
readonly property string wizardsGeneric: "\u015B" readonly property string wildcard: "\u015B"
readonly property string wizardsMcuEmpty: "\u015C" readonly property string wizardsAutomotive: "\u015C"
readonly property string wizardsMcuGraph: "\u015D" readonly property string wizardsDesktop: "\u015D"
readonly property string wizardsMobile: "\u015E" readonly property string wizardsGeneric: "\u015E"
readonly property string wizardsUnknown: "\u015F" readonly property string wizardsMcuEmpty: "\u015F"
readonly property string zoomAll: "\u0160" readonly property string wizardsMcuGraph: "\u0160"
readonly property string zoomIn: "\u0161" readonly property string wizardsMobile: "\u0161"
readonly property string zoomIn_medium: "\u0162" readonly property string wizardsUnknown: "\u0162"
readonly property string zoomOut: "\u0163" readonly property string zoomAll: "\u0163"
readonly property string zoomOut_medium: "\u0164" readonly property string zoomIn: "\u0164"
readonly property string zoomSelection: "\u0165" readonly property string zoomIn_medium: "\u0165"
readonly property string zoomOut: "\u0166"
readonly property string zoomOut_medium: "\u0167"
readonly property string zoomSelection: "\u0168"
readonly property font iconFont: Qt.font({ readonly property font iconFont: Qt.font({
"family": controlIcons.name, "family": controlIcons.name,

Some files were not shown because too many files have changed in this diff Show More