Merge remote-tracking branch 'origin/qds/dev'
Change-Id: I91d9877ef6637d21e1106d6d363275295e6b55a3
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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")
|
|
||||||
@@ -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.
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 6.0 KiB |
BIN
doc/qtcreator/images/qtcreator-application-output.webp
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 9.9 KiB |
BIN
doc/qtcreator/images/qtcreator-compile-output.webp
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
BIN
doc/qtcreator/images/qtcreator-general-messages.webp
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 44 KiB |
BIN
doc/qtcreator/images/qtcreator-installed-plugins.webp
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 2.0 KiB |
BIN
doc/qtcreator/images/qtcreator-search-results-matches.webp
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 13 KiB |
BIN
doc/qtcreator/images/qtcreator-search-results.webp
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 19 KiB |
BIN
doc/qtcreator/images/qtcreator-to-do-entries.webp
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 32 KiB |
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
*/
|
||||||
|
|||||||
@@ -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}
|
||||||
|
*/
|
||||||
@@ -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}
|
||||||
|
*/
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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} >
|
||||||
|
\uicontrol {Install 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}.
|
|
||||||
\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
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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.
|
||||||
|
*/
|
||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
120
doc/qtdesignstudio/examples/doc/3DsceneTutorial.qdoc
Normal 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
|
||||||
|
|
||||||
|
*/
|
||||||
|
After Width: | Height: | Size: 53 KiB |
BIN
doc/qtdesignstudio/examples/doc/images/3d-scene-add-texture.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
doc/qtdesignstudio/examples/doc/images/3d-scene-bread-crumb.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 12 KiB |
BIN
doc/qtdesignstudio/examples/doc/images/3d-scene-fill-parent.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
BIN
doc/qtdesignstudio/examples/doc/images/3d-scene-tutorial.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
doc/qtdesignstudio/examples/doc/images/robot-arm-components.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
doc/qtdesignstudio/examples/doc/images/robotarm-3d-view.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
BIN
doc/qtdesignstudio/examples/doc/images/robotarm-example.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
@@ -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.
|
||||||
|
|||||||
97
doc/qtdesignstudio/examples/doc/robotarm.qdoc
Normal 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
|
||||||
|
|
||||||
|
*/
|
||||||
BIN
doc/qtdesignstudio/images/bake-lights-dialog.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
doc/qtdesignstudio/images/qds-front-advanced.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
doc/qtdesignstudio/images/qds-front-gs.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
doc/qtdesignstudio/images/qds-front-help.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
doc/qtdesignstudio/images/qds-front-preview.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
doc/qtdesignstudio/images/qds-front-projects.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
doc/qtdesignstudio/images/qds-front-ui.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
doc/qtdesignstudio/images/qds-studio-3d-scenes.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
doc/qtdesignstudio/images/qds-studio-animation.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
|
After Width: | Height: | Size: 149 B |
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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()
|
delayedFinish.restart()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDownloadCanceled: {
|
||||||
|
root.progressText = ""
|
||||||
|
root.progressValue = 0
|
||||||
|
|
||||||
|
root.downloadState = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
onDownloadFailed: {
|
||||||
|
root.downloadState = "failed"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
myRepeater.dirty = false
|
let idx = delegateComboBox.indexOfString(delegateComboBox.editText)
|
||||||
root.add(curValue)
|
if (idx === -1) {
|
||||||
|
delegateComboBox.editText = delegateComboBox.preFocusText
|
||||||
|
} else {
|
||||||
|
delegateComboBox.currentIndex = idx
|
||||||
|
if (delegateComboBox.empty && delegateComboBox.currentValue !== "") {
|
||||||
|
myRepeater.dirty = false
|
||||||
|
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
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||