Merge remote-tracking branch 'origin/4.15'
Conflicts: cmake/QtCreatorIDEBranding.cmake qbs/modules/qtc/qtc.qbs qtcreator_ide_branding.pri src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp Change-Id: I403b236c40d73a61ae22304e289e9d4374366395
15
.github/workflows/build_cmake.yml
vendored
@@ -9,7 +9,7 @@ env:
|
|||||||
CMAKE_VERSION: 3.18.3
|
CMAKE_VERSION: 3.18.3
|
||||||
NINJA_VERSION: 1.10.1
|
NINJA_VERSION: 1.10.1
|
||||||
BUILD_TYPE: Release
|
BUILD_TYPE: Release
|
||||||
CCACHE_VERSION: 3.7.7
|
CCACHE_VERSION: 4.2.1
|
||||||
QT_MIRRORS: download.qt.io;mirrors.ocf.berkeley.edu/qt;ftp.fau.de/qtproject;mirror.bit.edu.cn/qtproject
|
QT_MIRRORS: download.qt.io;mirrors.ocf.berkeley.edu/qt;ftp.fau.de/qtproject;mirror.bit.edu.cn/qtproject
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -485,6 +485,19 @@ jobs:
|
|||||||
message(FATAL_ERROR "Build failed")
|
message(FATAL_ERROR "Build failed")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
- name: ccache statistics
|
||||||
|
shell: cmake -P {0}
|
||||||
|
run: |
|
||||||
|
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir)
|
||||||
|
set(ENV{CCACHE_BASEDIR} "${ccache_basedir}")
|
||||||
|
set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache")
|
||||||
|
set(ENV{CCACHE_SLOPPINESS} "pch_defines,time_macros")
|
||||||
|
set(ENV{CCACHE_COMPRESS} "true")
|
||||||
|
set(ENV{CCACHE_COMPRESSLEVEL} "6")
|
||||||
|
set(ENV{CCACHE_MAXSIZE} "800M")
|
||||||
|
if ("${{ matrix.config.cxx }}" STREQUAL "cl")
|
||||||
|
set(ENV{CCACHE_MAXSIZE} "1200M")
|
||||||
|
endif()
|
||||||
execute_process(COMMAND ccache -s)
|
execute_process(COMMAND ccache -s)
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ install(
|
|||||||
qtcreator.pri
|
qtcreator.pri
|
||||||
qtcreatordata.pri
|
qtcreatordata.pri
|
||||||
qtcreator_ide_branding.pri
|
qtcreator_ide_branding.pri
|
||||||
DESTINATION include
|
DESTINATION ${IDE_HEADER_INSTALL_PATH}
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
install(
|
install(
|
||||||
@@ -171,7 +171,7 @@ install(
|
|||||||
src/qtcreatorplugin.pri
|
src/qtcreatorplugin.pri
|
||||||
src/qtcreatortool.pri
|
src/qtcreatortool.pri
|
||||||
src/rpath.pri
|
src/rpath.pri
|
||||||
DESTINATION include/src
|
DESTINATION ${IDE_HEADER_INSTALL_PATH}/src
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,14 @@ find_path(CRASHPAD_LIB_DIR
|
|||||||
"${CMAKE_PREFIX_PATH}"
|
"${CMAKE_PREFIX_PATH}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
find_path(CRASHPAD_GEN_DIR
|
||||||
|
NAMES build/chromeos_buildflags.h
|
||||||
|
PATH_SUFFIXES gen
|
||||||
|
HINTS
|
||||||
|
"${CRASHPAD_BIN_DIR}"
|
||||||
|
"${CMAKE_PREFIX_PATH}"
|
||||||
|
)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
find_path(CRASHPAD_OBJ_DIR
|
find_path(CRASHPAD_OBJ_DIR
|
||||||
NAMES mig_output.child_portServer.o
|
NAMES mig_output.child_portServer.o
|
||||||
@@ -58,13 +66,6 @@ if(APPLE)
|
|||||||
"${CRASHPAD_LIB_DIR}/out/Default"
|
"${CRASHPAD_LIB_DIR}/out/Default"
|
||||||
"${CMAKE_PREFIX_PATH}"
|
"${CMAKE_PREFIX_PATH}"
|
||||||
)
|
)
|
||||||
find_path(CRASHPAD_GEN_DIR
|
|
||||||
NAMES build/chromeos_buildflags.h
|
|
||||||
PATH_SUFFIXES gen
|
|
||||||
HINTS
|
|
||||||
"${CRASHPAD_BIN_DIR}"
|
|
||||||
"${CMAKE_PREFIX_PATH}"
|
|
||||||
)
|
|
||||||
set(CRASHPAD_APPLE_VARS CRASHPAD_OBJ_DIR CRASHPAD_GEN_DIR)
|
set(CRASHPAD_APPLE_VARS CRASHPAD_OBJ_DIR CRASHPAD_GEN_DIR)
|
||||||
find_library(FWbsm bsm)
|
find_library(FWbsm bsm)
|
||||||
find_library(FWAppKit AppKit)
|
find_library(FWAppKit AppKit)
|
||||||
@@ -81,7 +82,8 @@ if(Crashpad_FOUND)
|
|||||||
add_library(Crashpad::Crashpad UNKNOWN IMPORTED)
|
add_library(Crashpad::Crashpad UNKNOWN IMPORTED)
|
||||||
target_include_directories(Crashpad::Crashpad INTERFACE
|
target_include_directories(Crashpad::Crashpad INTERFACE
|
||||||
"${CRASHPAD_INCLUDE_DIR}"
|
"${CRASHPAD_INCLUDE_DIR}"
|
||||||
"${CRASHPAD_INCLUDE_DIR}/third_party/mini_chromium/mini_chromium")
|
"${CRASHPAD_INCLUDE_DIR}/third_party/mini_chromium/mini_chromium"
|
||||||
|
"${CRASHPAD_GEN_DIR}")
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
target_link_libraries(Crashpad::Crashpad INTERFACE
|
target_link_libraries(Crashpad::Crashpad INTERFACE
|
||||||
"${CRASHPAD_LIB_DIR}/third_party/mini_chromium/mini_chromium/base/base.lib"
|
"${CRASHPAD_LIB_DIR}/third_party/mini_chromium/mini_chromium/base/base.lib"
|
||||||
@@ -106,7 +108,6 @@ if(Crashpad_FOUND)
|
|||||||
${FWbsm} ${FWAppKit} ${FWIOKit} ${FWSecurity})
|
${FWbsm} ${FWAppKit} ${FWIOKit} ${FWSecurity})
|
||||||
set_target_properties(Crashpad::Crashpad PROPERTIES
|
set_target_properties(Crashpad::Crashpad PROPERTIES
|
||||||
IMPORTED_LOCATION "${CRASHPAD_LIB_DIR}/client/libclient.a")
|
IMPORTED_LOCATION "${CRASHPAD_LIB_DIR}/client/libclient.a")
|
||||||
target_include_directories(Crashpad::Crashpad INTERFACE "${CRASHPAD_GEN_DIR}")
|
|
||||||
elseif(UNIX)
|
elseif(UNIX)
|
||||||
# TODO: Crashpad is not well supported on linux currently
|
# TODO: Crashpad is not well supported on linux currently
|
||||||
target_link_libraries(Crashpad::Crashpad INTERFACE
|
target_link_libraries(Crashpad::Crashpad INTERFACE
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ set(IDE_DATA_PATH "${_IDE_DATA_PATH}") # The IDE data path (rel
|
|||||||
set(IDE_DOC_PATH "${_IDE_DOC_PATH}") # The IDE documentation path (relative to CMAKE_INSTALL_PREFIX).
|
set(IDE_DOC_PATH "${_IDE_DOC_PATH}") # The IDE documentation path (relative to CMAKE_INSTALL_PREFIX).
|
||||||
set(IDE_BIN_PATH "${_IDE_BIN_PATH}") # The IDE bin path (relative to CMAKE_INSTALL_PREFIX).
|
set(IDE_BIN_PATH "${_IDE_BIN_PATH}") # The IDE bin path (relative to CMAKE_INSTALL_PREFIX).
|
||||||
|
|
||||||
|
set(IDE_HEADER_INSTALL_PATH "${_IDE_HEADER_INSTALL_PATH}")
|
||||||
|
set(IDE_CMAKE_INSTALL_PATH "${_IDE_CMAKE_INSTALL_PATH}")
|
||||||
|
|
||||||
file(RELATIVE_PATH RELATIVE_PLUGIN_PATH "/${IDE_BIN_PATH}" "/${IDE_PLUGIN_PATH}")
|
file(RELATIVE_PATH RELATIVE_PLUGIN_PATH "/${IDE_BIN_PATH}" "/${IDE_PLUGIN_PATH}")
|
||||||
file(RELATIVE_PATH RELATIVE_LIBEXEC_PATH "/${IDE_BIN_PATH}" "/${IDE_LIBEXEC_PATH}")
|
file(RELATIVE_PATH RELATIVE_LIBEXEC_PATH "/${IDE_BIN_PATH}" "/${IDE_LIBEXEC_PATH}")
|
||||||
file(RELATIVE_PATH RELATIVE_DATA_PATH "/${IDE_BIN_PATH}" "/${IDE_DATA_PATH}")
|
file(RELATIVE_PATH RELATIVE_DATA_PATH "/${IDE_BIN_PATH}" "/${IDE_DATA_PATH}")
|
||||||
@@ -93,6 +96,14 @@ function(qtc_output_binary_dir varName)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(qtc_source_dir varName)
|
||||||
|
if (QTC_MERGE_BINARY_DIR)
|
||||||
|
set(${varName} ${QtCreator_SOURCE_DIR} PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set(${varName} ${PROJECT_SOURCE_DIR} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
function(add_qtc_library name)
|
function(add_qtc_library name)
|
||||||
cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;ALLOW_ASCII_CASTS;UNVERSIONED;FEATURE_INFO"
|
cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;ALLOW_ASCII_CASTS;UNVERSIONED;FEATURE_INFO"
|
||||||
"DESTINATION;COMPONENT;SOURCES_PREFIX;BUILD_DEFAULT"
|
"DESTINATION;COMPONENT;SOURCES_PREFIX;BUILD_DEFAULT"
|
||||||
@@ -208,7 +219,7 @@ function(add_qtc_library name)
|
|||||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||||
PUBLIC
|
PUBLIC
|
||||||
"$<BUILD_INTERFACE:${public_build_interface_dir}>"
|
"$<BUILD_INTERFACE:${public_build_interface_dir}>"
|
||||||
"$<INSTALL_INTERFACE:include/${include_dir_relative_path}>"
|
"$<INSTALL_INTERFACE:${IDE_HEADER_INSTALL_PATH}/${include_dir_relative_path}>"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -463,7 +474,7 @@ function(add_qtc_plugin target_name)
|
|||||||
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||||
PUBLIC
|
PUBLIC
|
||||||
"$<BUILD_INTERFACE:${public_build_interface_dir}>"
|
"$<BUILD_INTERFACE:${public_build_interface_dir}>"
|
||||||
"$<INSTALL_INTERFACE:include/${include_dir_relative_path}>"
|
"$<INSTALL_INTERFACE:${IDE_HEADER_INSTALL_PATH}/${include_dir_relative_path}>"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(plugin_dir "${IDE_PLUGIN_PATH}")
|
set(plugin_dir "${IDE_PLUGIN_PATH}")
|
||||||
@@ -531,18 +542,18 @@ function(add_qtc_plugin target_name)
|
|||||||
# export of external plugins
|
# export of external plugins
|
||||||
install(EXPORT ${export}
|
install(EXPORT ${export}
|
||||||
FILE ${export}Targets.cmake
|
FILE ${export}Targets.cmake
|
||||||
DESTINATION lib/cmake/${export}
|
DESTINATION ${IDE_CMAKE_INSTALL_PATH}/${export}
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
NAMESPACE QtCreator::
|
NAMESPACE QtCreator::
|
||||||
)
|
)
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
configure_package_config_file(${_THIS_MODULE_BASE_DIR}/Config.cmake.in
|
configure_package_config_file(${_THIS_MODULE_BASE_DIR}/Config.cmake.in
|
||||||
"${CMAKE_BINARY_DIR}/cmake/${export}Config.cmake"
|
"${CMAKE_BINARY_DIR}/cmake/${export}Config.cmake"
|
||||||
INSTALL_DESTINATION lib/cmake/${export}
|
INSTALL_DESTINATION ${IDE_CMAKE_INSTALL_PATH}/${export}
|
||||||
)
|
)
|
||||||
install(
|
install(
|
||||||
FILES ${CMAKE_BINARY_DIR}/cmake/${export}Config.cmake
|
FILES ${CMAKE_BINARY_DIR}/cmake/${export}Config.cmake
|
||||||
DESTINATION lib/cmake/${export}
|
DESTINATION ${IDE_CMAKE_INSTALL_PATH}/${export}
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
export(EXPORT ${export}
|
export(EXPORT ${export}
|
||||||
@@ -971,12 +982,13 @@ function(qtc_add_public_header header)
|
|||||||
set(header "${CMAKE_CURRENT_SOURCE_DIR}/${header}")
|
set(header "${CMAKE_CURRENT_SOURCE_DIR}/${header}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
qtc_source_dir(qtcreator_source_dir)
|
||||||
get_filename_component(source_dir ${header} DIRECTORY)
|
get_filename_component(source_dir ${header} DIRECTORY)
|
||||||
file(RELATIVE_PATH include_dir_relative_path ${PROJECT_SOURCE_DIR} ${source_dir})
|
file(RELATIVE_PATH include_dir_relative_path ${qtcreator_source_dir} ${source_dir})
|
||||||
|
|
||||||
install(
|
install(
|
||||||
FILES ${header}
|
FILES ${header}
|
||||||
DESTINATION "include/${include_dir_relative_path}"
|
DESTINATION "${IDE_HEADER_INSTALL_PATH}/${include_dir_relative_path}"
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
if (CMAKE_VERSION VERSION_LESS 3.16)
|
if (CMAKE_VERSION VERSION_LESS 3.18)
|
||||||
set(BUILD_WITH_PCH OFF)
|
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_VERSION VERSION_LESS 3.16)
|
||||||
|
set(BUILD_WITH_PCH OFF)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(FeatureSummary)
|
include(FeatureSummary)
|
||||||
@@ -35,7 +37,7 @@ if (APPLE)
|
|||||||
set(_IDE_APP_PATH ".")
|
set(_IDE_APP_PATH ".")
|
||||||
set(_IDE_APP_TARGET "${IDE_DISPLAY_NAME}")
|
set(_IDE_APP_TARGET "${IDE_DISPLAY_NAME}")
|
||||||
|
|
||||||
set(_IDE_OUTPUT_PATH "${_IDE_APP_PATH}/${_IDE_APP_TARGET}.app/Contents")
|
set(_IDE_OUTPUT_PATH "${_IDE_APP_TARGET}.app/Contents")
|
||||||
|
|
||||||
set(_IDE_LIBRARY_BASE_PATH "Frameworks")
|
set(_IDE_LIBRARY_BASE_PATH "Frameworks")
|
||||||
set(_IDE_LIBRARY_PATH "${_IDE_OUTPUT_PATH}/${_IDE_LIBRARY_BASE_PATH}")
|
set(_IDE_LIBRARY_PATH "${_IDE_OUTPUT_PATH}/${_IDE_LIBRARY_BASE_PATH}")
|
||||||
@@ -44,6 +46,9 @@ if (APPLE)
|
|||||||
set(_IDE_DATA_PATH "${_IDE_OUTPUT_PATH}/Resources")
|
set(_IDE_DATA_PATH "${_IDE_OUTPUT_PATH}/Resources")
|
||||||
set(_IDE_DOC_PATH "${_IDE_OUTPUT_PATH}/Resources/doc")
|
set(_IDE_DOC_PATH "${_IDE_OUTPUT_PATH}/Resources/doc")
|
||||||
set(_IDE_BIN_PATH "${_IDE_OUTPUT_PATH}/MacOS")
|
set(_IDE_BIN_PATH "${_IDE_OUTPUT_PATH}/MacOS")
|
||||||
|
|
||||||
|
set(_IDE_HEADER_INSTALL_PATH "${_IDE_DATA_PATH}/Headers/qtcreator")
|
||||||
|
set(_IDE_CMAKE_INSTALL_PATH "${_IDE_DATA_PATH}/lib/cmake")
|
||||||
elseif(WIN32)
|
elseif(WIN32)
|
||||||
set(_IDE_APP_PATH "bin")
|
set(_IDE_APP_PATH "bin")
|
||||||
set(_IDE_APP_TARGET "${IDE_ID}")
|
set(_IDE_APP_TARGET "${IDE_ID}")
|
||||||
@@ -55,6 +60,9 @@ elseif(WIN32)
|
|||||||
set(_IDE_DATA_PATH "share/qtcreator")
|
set(_IDE_DATA_PATH "share/qtcreator")
|
||||||
set(_IDE_DOC_PATH "share/doc/qtcreator")
|
set(_IDE_DOC_PATH "share/doc/qtcreator")
|
||||||
set(_IDE_BIN_PATH "bin")
|
set(_IDE_BIN_PATH "bin")
|
||||||
|
|
||||||
|
set(_IDE_HEADER_INSTALL_PATH "include/qtcreator")
|
||||||
|
set(_IDE_CMAKE_INSTALL_PATH "lib/cmake")
|
||||||
else ()
|
else ()
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
set(_IDE_APP_PATH "${CMAKE_INSTALL_BINDIR}")
|
set(_IDE_APP_PATH "${CMAKE_INSTALL_BINDIR}")
|
||||||
@@ -67,6 +75,9 @@ else ()
|
|||||||
set(_IDE_DATA_PATH "${CMAKE_INSTALL_DATAROOTDIR}/qtcreator")
|
set(_IDE_DATA_PATH "${CMAKE_INSTALL_DATAROOTDIR}/qtcreator")
|
||||||
set(_IDE_DOC_PATH "${CMAKE_INSTALL_DATAROOTDIR}/doc/qtcreator")
|
set(_IDE_DOC_PATH "${CMAKE_INSTALL_DATAROOTDIR}/doc/qtcreator")
|
||||||
set(_IDE_BIN_PATH "${CMAKE_INSTALL_BINDIR}")
|
set(_IDE_BIN_PATH "${CMAKE_INSTALL_BINDIR}")
|
||||||
|
|
||||||
|
set(_IDE_HEADER_INSTALL_PATH "include/qtcreator")
|
||||||
|
set(_IDE_CMAKE_INSTALL_PATH "lib/cmake")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
file(RELATIVE_PATH _PLUGIN_TO_LIB "/${_IDE_PLUGIN_PATH}" "/${_IDE_LIBRARY_PATH}")
|
file(RELATIVE_PATH _PLUGIN_TO_LIB "/${_IDE_PLUGIN_PATH}" "/${_IDE_LIBRARY_PATH}")
|
||||||
@@ -190,7 +201,7 @@ function(set_public_includes target includes)
|
|||||||
file(RELATIVE_PATH include_dir_relative_path ${PROJECT_SOURCE_DIR} ${inc_dir})
|
file(RELATIVE_PATH include_dir_relative_path ${PROJECT_SOURCE_DIR} ${inc_dir})
|
||||||
target_include_directories(${target} PUBLIC
|
target_include_directories(${target} PUBLIC
|
||||||
$<BUILD_INTERFACE:${inc_dir}>
|
$<BUILD_INTERFACE:${inc_dir}>
|
||||||
$<INSTALL_INTERFACE:include/${include_dir_relative_path}>
|
$<INSTALL_INTERFACE:${_IDE_HEADER_INSTALL_PATH}/${include_dir_relative_path}>
|
||||||
)
|
)
|
||||||
endforeach()
|
endforeach()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|||||||
@@ -219,7 +219,10 @@ function(qtc_docs_dir varName)
|
|||||||
set(${varName} "${QtCreator_SOURCE_DIR}/doc" PARENT_SCOPE)
|
set(${varName} "${QtCreator_SOURCE_DIR}/doc" PARENT_SCOPE)
|
||||||
elseif(QtCreatorDocumentation_LIST_DIR MATCHES /lib/cmake/QtCreator$)
|
elseif(QtCreatorDocumentation_LIST_DIR MATCHES /lib/cmake/QtCreator$)
|
||||||
# Dev package
|
# Dev package
|
||||||
set(${varName} "${QtCreatorDocumentation_LIST_DIR}/../../../doc" PARENT_SCOPE)
|
file(RELATIVE_PATH relative_header_path "/${IDE_CMAKE_INSTALL_PATH}/QtCreator" "/${IDE_HEADER_INSTALL_PATH}")
|
||||||
|
set(${varName}
|
||||||
|
"${QtCreatorDocumentation_LIST_DIR}/${relative_header_path}/doc"
|
||||||
|
PARENT_SCOPE)
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Could not find qtc_docs_dir")
|
message(FATAL_ERROR "Could not find qtc_docs_dir")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ if(WITH_ONLINE_DOCS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(DIRECTORY config
|
install(DIRECTORY config
|
||||||
DESTINATION doc
|
DESTINATION ${IDE_HEADER_INSTALL_PATH}/doc
|
||||||
COMPONENT Devel
|
COMPONENT Devel
|
||||||
EXCLUDE_FROM_ALL
|
EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 7.6 KiB |
BIN
doc/qtcreator/images/qtcreator-build-configurations.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/qtcreator/images/qtcreator-build-run-options-cmake.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
doc/qtcreator/images/qtcreator-build-settings-default.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
doc/qtcreator/images/qtcreator-build-settings-qbs.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
doc/qtcreator/images/qtcreator-build-settings-qmake.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
doc/qtcreator/images/qtcreator-cmake-build-settings-initial.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.2 KiB |
BIN
doc/qtcreator/images/qtcreator-language-client-options-java.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 9.5 KiB |
BIN
doc/qtcreator/images/qtcreator-projects-view-cmake.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -51,6 +51,10 @@
|
|||||||
for such a Qt version, the minimum required Android version on devices
|
for such a Qt version, the minimum required Android version on devices
|
||||||
is 5.0 (API level 21). For more information, see \l{Qt for Android}.
|
is 5.0 (API level 21). For more information, see \l{Qt for Android}.
|
||||||
|
|
||||||
|
To enable helpful code editing features for Java, such as code completion,
|
||||||
|
highlighting, function tooltips, and navigating in code, specify settings
|
||||||
|
for a \l{Specifying Java Language Server Settings}{Java language server}.
|
||||||
|
|
||||||
The Android Debug Bridge (adb) command line tool is integrated to \QC to
|
The Android Debug Bridge (adb) command line tool is integrated to \QC to
|
||||||
enable you to deploy applications to connected Android devices, to run
|
enable you to deploy applications to connected Android devices, to run
|
||||||
them, and to read their logs. It includes a client and server that run on
|
them, and to read their logs. It includes a client and server that run on
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -23,30 +23,34 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
// **********************************************************************
|
|
||||||
// NOTE: the sections are not ordered by their logical order to avoid
|
|
||||||
// reshuffling the file each time the index order changes (i.e., often).
|
|
||||||
// Run the fixnavi.pl script to adjust the links to the index order.
|
|
||||||
// **********************************************************************
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
//! [cmake build configuration]
|
\previouspage creator-build-settings.html
|
||||||
|
\page creator-build-settings-cmake.html
|
||||||
|
\nextpage creator-build-settings-qmake.html
|
||||||
|
|
||||||
\section2 CMake Build Configuration
|
\title CMake Build Configuration
|
||||||
|
|
||||||
Configuring medium-sized to large CMake projects in \QC can be a
|
Configuring medium-sized to large CMake projects in \QC can be a
|
||||||
challenge due to the number of options that you need to pass to
|
challenge due to the number of options that you need to pass to
|
||||||
CMake to configure the project correctly. \QC creates an initial
|
CMake to configure the project correctly. To make this easier,
|
||||||
configuration for you based on the kit settings and displays it in
|
\QC creates an initial configuration for you based on the kit
|
||||||
the \uicontrol {Initial CMake parameters} field.
|
settings and displays it in the \uicontrol {Initial CMake parameters}
|
||||||
|
field and in a table that lists the parameter names and values.
|
||||||
|
|
||||||
\image qtcreator-cmake-build-settings.png
|
\image qtcreator-cmake-build-settings-initial.png "CMake build settings"
|
||||||
|
|
||||||
|
Parameter names are listed in the \uicontrol Key column. Names with a
|
||||||
|
common prefix (up to the first underscore character) are grouped under
|
||||||
|
the prefix.
|
||||||
|
|
||||||
|
\section1 Modifying Initial Parameters
|
||||||
|
|
||||||
In the \uicontrol Value column, you can view and edit the actual values
|
In the \uicontrol Value column, you can view and edit the actual values
|
||||||
of the parameters that are passed to CMake. Parameter names are listed
|
of the parameters that are passed to CMake.
|
||||||
in the \uicontrol Key column. Names with a common prefix (up to the first
|
|
||||||
underscore character) are grouped under the prefix. To view all parameters,
|
\image qtcreator-cmake-build-settings.png "CMake parameters"
|
||||||
select the \uicontrol Advanced check box.
|
|
||||||
|
To view all parameters, select the \uicontrol Advanced check box.
|
||||||
|
|
||||||
To add parameters, select \uicontrol Add, and then select the type of
|
To add parameters, select \uicontrol Add, and then select the type of
|
||||||
the parameter that you are adding: \uicontrol Boolean, \uicontrol String,
|
the parameter that you are adding: \uicontrol Boolean, \uicontrol String,
|
||||||
@@ -58,6 +62,9 @@
|
|||||||
\uicontrol {Force to directory}, or \uicontrol {Force to string}
|
\uicontrol {Force to directory}, or \uicontrol {Force to string}
|
||||||
in the context menu.
|
in the context menu.
|
||||||
|
|
||||||
|
To copy the name or value of the selected parameter to the clipboard,
|
||||||
|
select \uicontrol Copy in the context menu.
|
||||||
|
|
||||||
To modify the value of a parameter, double-click it, or select it,
|
To modify the value of a parameter, double-click it, or select it,
|
||||||
and then select \uicontrol Edit.
|
and then select \uicontrol Edit.
|
||||||
|
|
||||||
@@ -69,6 +76,9 @@
|
|||||||
|
|
||||||
To reset all the changes that you made, select \uicontrol Reset.
|
To reset all the changes that you made, select \uicontrol Reset.
|
||||||
|
|
||||||
|
To modify the environment variable values for the CMake build environment,
|
||||||
|
select \uicontrol {Batch Edit}. For more information, see \l{Batch Editing}.
|
||||||
|
|
||||||
To save the changes, select \uicontrol {Apply Configuration Changes}.
|
To save the changes, select \uicontrol {Apply Configuration Changes}.
|
||||||
Keep in mind that a configuration change might trigger a follow-up
|
Keep in mind that a configuration change might trigger a follow-up
|
||||||
configuration change.
|
configuration change.
|
||||||
@@ -78,37 +88,37 @@
|
|||||||
that if you remove the build directory, all the custom parameters that are
|
that if you remove the build directory, all the custom parameters that are
|
||||||
not part of the initial CMake parameters are also removed.
|
not part of the initial CMake parameters are also removed.
|
||||||
|
|
||||||
To reconfigure a project after making changes to the initial parameters,
|
To reconfigure a project using the modified parameters,
|
||||||
select \uicontrol Build > \uicontrol {Clear CMake Configuration}, which
|
select \uicontrol Build > \uicontrol {Clear CMake Configuration}, which
|
||||||
removes the CMakeCache.txt file. This enables you to do a full rebuild.
|
removes the CMakeCache.txt file. This enables you to do a full rebuild.
|
||||||
|
|
||||||
//! [cmake build configuration]
|
\section1 Re-configuring with Initial Parameters
|
||||||
|
|
||||||
|
To reset CMake parameters to the initial ones, select
|
||||||
|
\uicontrol {Re-configure with Initial Parameters}.
|
||||||
|
|
||||||
//! [cmake build steps]
|
To be asked before \QC resets the changes, select \uicontrol Tools >
|
||||||
|
\uicontrol Options > \uicontrol {Build & Run} > \uicontrol CMake >
|
||||||
|
\uicontrol {Ask before re-configuring with initial parameters}.
|
||||||
|
|
||||||
\section2 CMake Build Steps
|
\image qtcreator-build-run-options-cmake.png "CMake Build & Run options"
|
||||||
|
|
||||||
|
\section1 CMake Build Steps
|
||||||
|
|
||||||
\QC builds CMake projects by running \c {cmake . --build}, which then runs
|
\QC builds CMake projects by running \c {cmake . --build}, which then runs
|
||||||
the CMake generator specified in the project configuration: \c make,
|
the CMake generator specified in the project configuration: \c make,
|
||||||
\c mingw32-make, \c nmake, or \c ninja, for example. The CMake generator
|
\c mingw32-make, \c nmake, or \c ninja, for example. The CMake generator
|
||||||
produces project files for \QC.
|
produces project files for \QC. Multi-config generators are also supported.
|
||||||
|
|
||||||
You can add arguments to pass to CMake and the generator and targets for
|
You can add arguments to pass to CMake and the generator and targets for
|
||||||
the build command in \uicontrol {Build Steps}.
|
the build command in \uicontrol {Build Steps}.
|
||||||
|
|
||||||
\image qtcreator-cmake-build-steps.png
|
\image qtcreator-cmake-build-steps.png "CMake build steps"
|
||||||
|
|
||||||
\note While the other CMake generators are installed together with Qt,
|
\note While the other CMake generators are installed together with Qt,
|
||||||
you usually need to install Ninja yourself. For more information, see
|
you usually need to install Ninja yourself.
|
||||||
\l {Using Ninja as a CMake Generator}.
|
|
||||||
|
|
||||||
//! [cmake build steps]
|
\section1 Using Ninja as a CMake Generator
|
||||||
|
|
||||||
|
|
||||||
//! [cmake ninja]
|
|
||||||
|
|
||||||
\section2 Using Ninja as a CMake Generator
|
|
||||||
|
|
||||||
To use \l {https://ninja-build.org/}{Ninja} with CMake, you must install it
|
To use \l {https://ninja-build.org/}{Ninja} with CMake, you must install it
|
||||||
and select it as the CMake generator in the build and run kit:
|
and select it as the CMake generator in the build and run kit:
|
||||||
@@ -132,12 +142,18 @@
|
|||||||
\uicontrol Build > \uicontrol {Rebuild Project}. This cleans up the
|
\uicontrol Build > \uicontrol {Rebuild Project}. This cleans up the
|
||||||
build directory and performs a new build.
|
build directory and performs a new build.
|
||||||
|
|
||||||
//! [cmake ninja]
|
\section1 Using CMake with Conan
|
||||||
|
|
||||||
|
\QC can automatically set up the \l {Setting Up Conan}
|
||||||
|
{Conan package manager} for use with CMake.
|
||||||
|
|
||||||
//! [cmake clean steps]
|
Select \uicontrol Tools > \uicontrol Options > \uicontrol {Build & Run} >
|
||||||
|
\uicontrol CMake > \uicontrol {Package manager auto setup} to set the
|
||||||
|
value of the \c CMAKE_PROJECT_INCLUDE_BEFORE variable to the path to a
|
||||||
|
CMake script that installs dependencies from a \c conanfile.txt,
|
||||||
|
\c conanfile.py, or \c vcpkg.json file in the project source directory.
|
||||||
|
|
||||||
\section2 CMake Clean Steps
|
\section1 CMake Clean Steps
|
||||||
|
|
||||||
When building with CMake, you can add arguments to pass to CMake and the
|
When building with CMake, you can add arguments to pass to CMake and the
|
||||||
generator and targets for the clean command in \uicontrol {Clean Steps}.
|
generator and targets for the clean command in \uicontrol {Clean Steps}.
|
||||||
@@ -146,6 +162,4 @@
|
|||||||
|
|
||||||
The build errors and warnings are parsed and displayed in the
|
The build errors and warnings are parsed and displayed in the
|
||||||
\uicontrol Issues output pane.
|
\uicontrol Issues output pane.
|
||||||
|
|
||||||
//! [cmake clean steps]
|
|
||||||
*/
|
*/
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -57,6 +57,14 @@
|
|||||||
a \c CMakeLists.txt configuration file in a project. Project information is
|
a \c CMakeLists.txt configuration file in a project. Project information is
|
||||||
also automatically refreshed when you build the project.
|
also automatically refreshed when you build the project.
|
||||||
|
|
||||||
|
The \uicontrol {File System} section in the sidebar \uicontrol Projects view
|
||||||
|
displays information from the file system. \QC cannot determine whether the
|
||||||
|
files are part of the project. For example, header files that \QC finds in
|
||||||
|
the project directories but that are not mentioned in the CMakeLists.txt
|
||||||
|
files are listed here.
|
||||||
|
|
||||||
|
\image qtcreator-projects-view-cmake.png "File System section in Projects view"
|
||||||
|
|
||||||
\section1 Adding CMake Tools
|
\section1 Adding CMake Tools
|
||||||
|
|
||||||
\QC requires CMake's \l{https://cmake.org/cmake/help/latest/manual/cmake-file-api.7.html}
|
\QC requires CMake's \l{https://cmake.org/cmake/help/latest/manual/cmake-file-api.7.html}
|
||||||
@@ -160,7 +168,7 @@
|
|||||||
|
|
||||||
\list
|
\list
|
||||||
\li \l {Opening Projects}
|
\li \l {Opening Projects}
|
||||||
\li \l {Specifying Build Settings}
|
\li \l {CMake Build Configuration}
|
||||||
\li \l {Specifying Run Settings}
|
\li \l {Specifying Run Settings}
|
||||||
\li \l {Deploying CMake Projects to Generic Remote Linux Devices}
|
\li \l {Deploying CMake Projects to Generic Remote Linux Devices}
|
||||||
\endlist
|
\endlist
|
||||||
|
|||||||
@@ -24,8 +24,17 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
//! [conan build steps]
|
\previouspage creator-build-settings-incredibuild.html
|
||||||
\section1 Specifying Build Settings for Conan
|
\page creator-build-settings-conan.html
|
||||||
|
\nextpage creator-run-settings.html
|
||||||
|
|
||||||
|
\title Conan Build Configuration
|
||||||
|
|
||||||
|
You can specify build steps for Conan.
|
||||||
|
|
||||||
|
For more information about configuring Conan, see \l{Setting Up Conan}.
|
||||||
|
|
||||||
|
\section1 Conan Build Steps
|
||||||
|
|
||||||
To configure a project to be built using the Conan package manager, select
|
To configure a project to be built using the Conan package manager, select
|
||||||
\uicontrol {Add Build Step} > \uicontrol {Run Conan Install}.
|
\uicontrol {Add Build Step} > \uicontrol {Run Conan Install}.
|
||||||
@@ -38,7 +47,4 @@
|
|||||||
The \uicontrol {Conan install} field displays the effective
|
The \uicontrol {Conan install} field displays the effective
|
||||||
build command. You can add arguments for the command in the
|
build command. You can add arguments for the command in the
|
||||||
\uicontrol {Additional arguments} field.
|
\uicontrol {Additional arguments} field.
|
||||||
|
|
||||||
For more information about configuring Conan, see \l{Setting Up Conan}.
|
|
||||||
//! [conan build steps]
|
|
||||||
*/
|
*/
|
||||||
@@ -62,5 +62,5 @@
|
|||||||
{conanfile.txt} file that specifies the needed libraries and packages.
|
{conanfile.txt} file that specifies the needed libraries and packages.
|
||||||
Then, you must edit the build settings of the project to specify the
|
Then, you must edit the build settings of the project to specify the
|
||||||
location of the file and the contents of the Conan install command.
|
location of the file and the contents of the Conan install command.
|
||||||
For more information, see \l {Specifying Build Settings for Conan}.
|
For more information, see \l {Conan Build Steps}.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -64,7 +64,10 @@
|
|||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
|
||||||
\li Debugging is enabled by default for Qt 5.0, or later.
|
\li If you use qmake as the build system, make sure that
|
||||||
|
debugging is enabled in the \uicontrol {Build Settings},
|
||||||
|
\uicontrol {QML debugging and profiling} field, either
|
||||||
|
explicitly for the project or globally by default.
|
||||||
|
|
||||||
\image qtcreator-projectpane.png "qmake general build settings pane"
|
\image qtcreator-projectpane.png "qmake general build settings pane"
|
||||||
|
|
||||||
|
|||||||
@@ -55,9 +55,9 @@
|
|||||||
|
|
||||||
\note You can also select \uicontrol Edit > \uicontrol {Find/Replace} >
|
\note You can also select \uicontrol Edit > \uicontrol {Find/Replace} >
|
||||||
\uicontrol {Advanced Find} > \uicontrol {C++ Symbols} to search for
|
\uicontrol {Advanced Find} > \uicontrol {C++ Symbols} to search for
|
||||||
classes, functions, enums, and declarations either from files listed as
|
classes, functions, enums, and declarations (including type aliases) either
|
||||||
part of the project or from all files that are used by the code, such as
|
from files listed as part of the project or from all files that are used by
|
||||||
include files.
|
the code, such as include files.
|
||||||
\image qtcreator-search-cpp-symbols.png
|
\image qtcreator-search-cpp-symbols.png
|
||||||
\endif
|
\endif
|
||||||
|
|
||||||
|
|||||||
@@ -113,8 +113,9 @@
|
|||||||
\li Locating bookmarks (\c {b}).
|
\li Locating bookmarks (\c {b}).
|
||||||
For more information, see \l{Using Bookmarks}.
|
For more information, see \l{Using Bookmarks}.
|
||||||
|
|
||||||
\li Locating class (\c {c}), enum, and function (\c {m}) definitions in
|
\li Locating class (\c {c}), enum, function (\c {m}), and type alias
|
||||||
your project or anywhere referenced from your project (\c {:})
|
definitions in your project or anywhere referenced from your
|
||||||
|
project (\c {:})
|
||||||
\endif
|
\endif
|
||||||
|
|
||||||
\li Locating QML methods (\c {m})
|
\li Locating QML methods (\c {m})
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -78,17 +78,33 @@
|
|||||||
|
|
||||||
\section1 Specifying Settings for Language Clients
|
\section1 Specifying Settings for Language Clients
|
||||||
|
|
||||||
To use a language server:
|
You can add a generic generic stdIO language server for Python, for example.
|
||||||
|
For \l{Connecting Android Devices}{Android development}, you can add a Java
|
||||||
|
language server.
|
||||||
|
|
||||||
|
\section2 Adding Language Servers
|
||||||
|
|
||||||
|
To view a list of language servers, select \uicontrol Tools >
|
||||||
|
\uicontrol Options > \uicontrol {Language Client} (or
|
||||||
|
\uicontrol {Qt Creator} > \uicontrol Preferences >
|
||||||
|
\uicontrol {Language Client} > on \macos).
|
||||||
|
|
||||||
|
\image qtcreator-language-client-options.png "Language client options page"
|
||||||
|
|
||||||
|
To enable a language server, select the check box next to the language
|
||||||
|
server name and specify settings for the server.
|
||||||
|
|
||||||
|
To remove language servers from the list, select \uicontrol Delete.
|
||||||
|
|
||||||
|
\section2 Specifying Generic Settings
|
||||||
|
|
||||||
|
To add a generic language server:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Select \uicontrol Tools > \uicontrol Options >
|
\li Select \uicontrol Tools > \uicontrol Options >
|
||||||
\uicontrol {Language Client} (or \uicontrol {Qt Creator} >
|
\uicontrol {Language Client} > \uicontrol Add >
|
||||||
\uicontrol Preferences > \uicontrol {Language Client} > on
|
\uicontrol {New Generic StdIO Language Server}
|
||||||
\macos) to view a list of language servers.
|
to add a generic language server.
|
||||||
\image qtcreator-language-client-options.png "Language client options page"
|
|
||||||
\li Select the check box next to the language server name to enable the
|
|
||||||
language server.
|
|
||||||
\li Select \uicontrol Add to add language servers.
|
|
||||||
\li In the \uicontrol Name field, enter a name for the language server.
|
\li In the \uicontrol Name field, enter a name for the language server.
|
||||||
Select the \inlineimage replace.png
|
Select the \inlineimage replace.png
|
||||||
(\uicontrol {Variables}) button to use a variable for the server
|
(\uicontrol {Variables}) button to use a variable for the server
|
||||||
@@ -102,9 +118,8 @@
|
|||||||
with a matching MIME type is opened. The
|
with a matching MIME type is opened. The
|
||||||
\uicontrol {General Messages} \l{Viewing Output}{output pane}
|
\uicontrol {General Messages} \l{Viewing Output}{output pane}
|
||||||
displays information about the connection to the language server.
|
displays information about the connection to the language server.
|
||||||
\li In the \uicontrol Capabilities field, you can see the features
|
\li In the \uicontrol Initialization field, you can add language server
|
||||||
that are supported by the language server. Only some of them are
|
specific JSON attributes to pass to an \c initialize request.
|
||||||
implemented by \QC.
|
|
||||||
\li In the \uicontrol Executable field, enter the path to the language
|
\li In the \uicontrol Executable field, enter the path to the language
|
||||||
server executable.
|
server executable.
|
||||||
\li In the \uicontrol Arguments field, enter any required command line
|
\li In the \uicontrol Arguments field, enter any required command line
|
||||||
@@ -112,7 +127,23 @@
|
|||||||
arguments.
|
arguments.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
To remove language servers from the list, select \uicontrol Delete.
|
\section2 Specifying Java Language Server Settings
|
||||||
|
|
||||||
|
To add a Java language server:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
\li Select \uicontrol Tools > \uicontrol Options >
|
||||||
|
\uicontrol {Language Client} > \uicontrol Add >
|
||||||
|
\uicontrol {New Java Language Server} to add a Java language server.
|
||||||
|
\image qtcreator-language-client-options-java.png "Java language server options"
|
||||||
|
\li In the \uicontrol Name field, enter a name for the language server.
|
||||||
|
Select the \inlineimage replace.png
|
||||||
|
(\uicontrol {Variables}) button to use a variable for the server
|
||||||
|
name. For more information, see \l{Using Qt Creator Variables}.
|
||||||
|
\li In the \uicontrol Java field, enter the path to the Java executable.
|
||||||
|
\li In the \uicontrol {Java Language Server} field, enter the path to
|
||||||
|
the Java language server \c .jar file.
|
||||||
|
\endlist
|
||||||
|
|
||||||
\section1 Supported Locator Filters
|
\section1 Supported Locator Filters
|
||||||
|
|
||||||
@@ -129,8 +160,8 @@
|
|||||||
|
|
||||||
\section1 Reporting Issues
|
\section1 Reporting Issues
|
||||||
|
|
||||||
The language service client has been mostly tested with Python.
|
The language service client has been mostly tested with Python and Java.
|
||||||
If problems arise when you try it or some other language, please select
|
If problems arise when you try them or some other language, please select
|
||||||
\uicontrol Help > \uicontrol {Report Bug} to report them in the
|
\uicontrol Help > \uicontrol {Report Bug} to report them in the
|
||||||
\l{https://bugreports.qt.io/}{Qt Project Bug Tracker}. The reports
|
\l{https://bugreports.qt.io/}{Qt Project Bug Tracker}. The reports
|
||||||
should include \QC console output with the environment
|
should include \QC console output with the environment
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -23,9 +23,18 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/*!
|
/*!
|
||||||
//! [incredibuild build steps]
|
\previouspage creator-build-settings-meson.html
|
||||||
|
\page creator-build-settings-incredibuild.html
|
||||||
|
\nextpage creator-build-settings-conan.html
|
||||||
|
|
||||||
\section2 IncrediBuild Build Steps
|
\title IncrediBuild Build Configuration
|
||||||
|
|
||||||
|
You can specify build steps and clean steps for IncrediBuild.
|
||||||
|
|
||||||
|
For more information about configuring IncrediBuild, see
|
||||||
|
\l{Setting Up IncrediBuild}.
|
||||||
|
|
||||||
|
\section1 IncrediBuild Build Steps
|
||||||
|
|
||||||
To use IncrediBuild, select \uicontrol {Add Build Step} >
|
To use IncrediBuild, select \uicontrol {Add Build Step} >
|
||||||
\uicontrol {IncrediBuild for Linux} or
|
\uicontrol {IncrediBuild for Linux} or
|
||||||
@@ -53,7 +62,7 @@
|
|||||||
The distribution control settings to specify depend on whether you are using
|
The distribution control settings to specify depend on whether you are using
|
||||||
Linux or Windows.
|
Linux or Windows.
|
||||||
|
|
||||||
\section3 Distribution Control Settings on Linux
|
\section2 Distribution Control Settings on Linux
|
||||||
|
|
||||||
\image qtcreator-incredibuild-build-steps-linux.png
|
\image qtcreator-incredibuild-build-steps-linux.png
|
||||||
|
|
||||||
@@ -66,7 +75,7 @@
|
|||||||
\li \uicontrol {Alternate tasks preference}
|
\li \uicontrol {Alternate tasks preference}
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section3 Distribution Control Settings on Windows
|
\section2 Distribution Control Settings on Windows
|
||||||
|
|
||||||
\image qtcreator-incredibuild-build-steps-windows.png
|
\image qtcreator-incredibuild-build-steps-windows.png
|
||||||
|
|
||||||
@@ -86,8 +95,8 @@
|
|||||||
\li \uicontrol {Maximum CPUs to utilize in the build} specifies the
|
\li \uicontrol {Maximum CPUs to utilize in the build} specifies the
|
||||||
maximum amount of remote cores to use in the build. Overrides the
|
maximum amount of remote cores to use in the build. Overrides the
|
||||||
corresponding global setting.
|
corresponding global setting.
|
||||||
\li \uicontrol {Newest allowed Helper machine OS} and
|
\li \uicontrol {Newest allowed helper machine OS} and
|
||||||
\uicontrol {Oldest allowed Helper machine OS} specify the newest and
|
\uicontrol {Oldest allowed helper machine OS} specify the newest and
|
||||||
oldest operating system installed on a Helper machine to be allowed
|
oldest operating system installed on a Helper machine to be allowed
|
||||||
to participate as a Helper in the build.
|
to participate as a Helper in the build.
|
||||||
\li \uicontrol {Build title} specifies a custom header line which will
|
\li \uicontrol {Build title} specifies a custom header line which will
|
||||||
@@ -100,12 +109,12 @@
|
|||||||
\c{.ib_mon} file is added to the end of the build output.
|
\c{.ib_mon} file is added to the end of the build output.
|
||||||
\li \uicontrol {Suppress STDOUT} does not write anything to the standard
|
\li \uicontrol {Suppress STDOUT} does not write anything to the standard
|
||||||
output.
|
output.
|
||||||
\li \uicontrol {Output log file} writes build output to a file.
|
\li \uicontrol {Output Log file} writes build output to a file.
|
||||||
\li \uicontrol {Show commands in output} shows the command-line used by
|
\li \uicontrol {Show Commands in output} shows the command-line used by
|
||||||
IncrediBuild to build the file.
|
IncrediBuild to build the file.
|
||||||
\li \uicontrol {Show agents in output} shows the Agent used to build
|
\li \uicontrol {Show Agents in output} shows the Agent used to build
|
||||||
each file.
|
each file.
|
||||||
\li \uicontrol {Show time in output} shows the start and finish time for
|
\li \uicontrol {Show Time in output} shows the start and finish time for
|
||||||
each file built.
|
each file built.
|
||||||
\li \uicontrol {Hide IncrediBuild Header in output} suppresses the
|
\li \uicontrol {Hide IncrediBuild Header in output} suppresses the
|
||||||
IncrediBuild header in the build output.
|
IncrediBuild header in the build output.
|
||||||
@@ -113,31 +122,26 @@
|
|||||||
internal Incredibuild logging level for this build. Does not affect
|
internal Incredibuild logging level for this build. Does not affect
|
||||||
output or any user accessible logging. Used mainly to troubleshoot
|
output or any user accessible logging. Used mainly to troubleshoot
|
||||||
issues with the help of IncrediBuild support.
|
issues with the help of IncrediBuild support.
|
||||||
\li \uicontrol {Set an environment variable} sets or overrides
|
\li \uicontrol {Set an Environment Variable} sets or overrides
|
||||||
environment variables for the context of the build.
|
environment variables for the context of the build.
|
||||||
\li \uicontrol {Stop on errors} stops the execution as soon as an error
|
\li \uicontrol {Stop on errors} stops the execution as soon as an error
|
||||||
is encountered. This is the default behavior in Visual Studio
|
is encountered. This is the default behavior in Visual Studio
|
||||||
builds, but not for Make and Build tools or Dev Tools builds.
|
builds, but not for Make and Build tools or Dev Tools builds.
|
||||||
\li \uicontrol {Additional arguments} are concatenated to the final
|
\li \uicontrol {Additional Arguments} are concatenated to the final
|
||||||
buildconsole command line.
|
buildconsole command line.
|
||||||
\li \uicontrol {Open Build Monitor} opens an IncrediBuild Build Monitor
|
\li \uicontrol {Open Build Monitor} opens an IncrediBuild Build Monitor
|
||||||
that graphically displays the build's progress once the build
|
that graphically displays the build's progress once the build
|
||||||
starts.
|
starts.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
//! [incredibuild build steps]
|
\section1 IncrediBuild Clean Steps
|
||||||
|
|
||||||
//! [incredibuild clean steps]
|
|
||||||
|
|
||||||
\section2 IncrediBuild Clean Steps
|
|
||||||
|
|
||||||
When building with IncrediBuild, you can add arguments and targets for the
|
When building with IncrediBuild, you can add arguments and targets for the
|
||||||
clean command in \uicontrol {Clean Steps}.
|
clean command in \uicontrol {Clean Steps}. For more information, see
|
||||||
|
\l{Clean Steps}.
|
||||||
|
|
||||||
For more information about the settings, see \l{IncrediBuild Build Steps}.
|
For more information about the settings, see \l{IncrediBuild Build Steps}.
|
||||||
|
|
||||||
The build errors and warnings are parsed and displayed in the
|
The build errors and warnings are parsed and displayed in the
|
||||||
\uicontrol Issues output pane.
|
\uicontrol Issues output pane.
|
||||||
|
|
||||||
//! [incredibuild clean steps]
|
|
||||||
*/
|
*/
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -23,9 +23,11 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/*!
|
/*!
|
||||||
//! [meson build configuration]
|
\previouspage creator-build-settings-qbs.html
|
||||||
|
\page creator-build-settings-meson.html
|
||||||
|
\nextpage creator-build-settings-incredibuild.html
|
||||||
|
|
||||||
\section2 Meson Build Configuration
|
\title Meson Build Configuration
|
||||||
|
|
||||||
\image qtcreator-meson-build-settings.png
|
\image qtcreator-meson-build-settings.png
|
||||||
|
|
||||||
@@ -43,12 +45,7 @@
|
|||||||
\note Any modified setting will remain in bold until \uicontrol
|
\note Any modified setting will remain in bold until \uicontrol
|
||||||
{Apply configuration changes} is selected.
|
{Apply configuration changes} is selected.
|
||||||
|
|
||||||
//! [meson build configuration]
|
\section1 Meson Build Steps
|
||||||
|
|
||||||
|
|
||||||
//! [meson build steps]
|
|
||||||
|
|
||||||
\section2 Meson Build Steps
|
|
||||||
|
|
||||||
\QC builds Meson projects by running \c {ninja -v target}.
|
\QC builds Meson projects by running \c {ninja -v target}.
|
||||||
|
|
||||||
@@ -60,11 +57,7 @@
|
|||||||
The build errors and warnings are parsed and displayed in the
|
The build errors and warnings are parsed and displayed in the
|
||||||
\uicontrol Issues output pane.
|
\uicontrol Issues output pane.
|
||||||
|
|
||||||
//! [meson build steps]
|
\section1 Meson Clean Steps
|
||||||
|
|
||||||
//! [meson clean steps]
|
|
||||||
|
|
||||||
\section2 Meson Clean Steps
|
|
||||||
|
|
||||||
When building with Meson, you can add arguments and targets for the clean
|
When building with Meson, you can add arguments and targets for the clean
|
||||||
command in \uicontrol {Clean Steps}.
|
command in \uicontrol {Clean Steps}.
|
||||||
@@ -74,5 +67,4 @@
|
|||||||
The build errors and warnings are parsed and displayed in the
|
The build errors and warnings are parsed and displayed in the
|
||||||
\uicontrol Issues output pane.
|
\uicontrol Issues output pane.
|
||||||
|
|
||||||
//! [meson clean steps]
|
|
||||||
*/
|
*/
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
\list
|
\list
|
||||||
\li \l {Opening Projects}
|
\li \l {Opening Projects}
|
||||||
\li \l {Specifying Build Settings}
|
\li \l {Meson Build Configuration}
|
||||||
\li \l {Specifying Run Settings}
|
\li \l {Specifying Run Settings}
|
||||||
\endlist
|
\endlist
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
|
** Contact: https://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Creator documentation.
|
||||||
|
**
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at https://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Free Documentation License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Free
|
||||||
|
** Documentation License version 1.3 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file included in the packaging of
|
||||||
|
** this file. Please review the following information to ensure
|
||||||
|
** the GNU Free Documentation License version 1.3 requirements
|
||||||
|
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\previouspage creator-build-settings-cmake.html
|
||||||
|
\page creator-build-settings-qmake.html
|
||||||
|
\nextpage creator-build-settings-qbs.html
|
||||||
|
|
||||||
|
\title qmake Build Configuration
|
||||||
|
|
||||||
|
\image qtcreator-projectpane.png "qmake build settings"
|
||||||
|
|
||||||
|
By default, \QC builds qmake projects in a separate directory from the
|
||||||
|
source directory, as \l{glossary-shadow-build} {shadow builds}. This
|
||||||
|
keeps the files generated for each \l{glossary-buildandrun-kit}
|
||||||
|
{build and run kit} separate. If you only build and run with a single
|
||||||
|
\l{glossary-buildandrun-kit}{kit}, you can deselect the
|
||||||
|
\uicontrol {Shadow build} checkbox. Select the build directory in the
|
||||||
|
\uicontrol {Build Directory} field.
|
||||||
|
|
||||||
|
To make in-source builds the default option for all projects, select
|
||||||
|
\uicontrol Tools > \uicontrol Options > \uicontrol {Build & Run} >
|
||||||
|
\uicontrol {Default Build Properties}, and enter a period (.) in the
|
||||||
|
\uicontrol {Default build directory} field.
|
||||||
|
|
||||||
|
In the \uicontrol {Tooltip in target selector} field, you can enter text
|
||||||
|
that is displayed as a tooltip when you hover the mouse over the build
|
||||||
|
configuration in the \l{Building for Multiple Platforms}{kit selector}.
|
||||||
|
|
||||||
|
You can create separate versions of project files to keep platform-dependent
|
||||||
|
code separate. You can use qmake \l{Adding Platform Specific Source Files}
|
||||||
|
{scopes} to select the file to process depending on which platform qmake is
|
||||||
|
run on.
|
||||||
|
|
||||||
|
If debug info is being generated, you can have it placed into separate
|
||||||
|
files, rather than embedded into the binary, by selecting
|
||||||
|
\uicontrol Enable in the \uicontrol {Separate debug info} field. For
|
||||||
|
more information, see \l{Using the Performance Analyzer}. To use default
|
||||||
|
settings, select \uicontrol {Leave at Default}.
|
||||||
|
|
||||||
|
In the \uicontrol {qmake system() behavior when parsing} field, you can
|
||||||
|
select whether processes are run via qmake's \c system() function or
|
||||||
|
ignored. Setting this option to \uicontrol Ignore might help if opening
|
||||||
|
or closing projects takes too long, but it might produce inexact parsing
|
||||||
|
results.
|
||||||
|
|
||||||
|
\section1 Global qmake Settings
|
||||||
|
|
||||||
|
To specify settings for all qmake builds, select \uicontrol Tools
|
||||||
|
> \uicontrol Options > \uicontrol {Build & Run} >
|
||||||
|
\uicontrol Qmake.
|
||||||
|
|
||||||
|
\image qtcreator-build-settings-qmake.png "qmake build and run options"
|
||||||
|
|
||||||
|
To set the default build properties, select \uicontrol Tools
|
||||||
|
> \uicontrol Options > \uicontrol {Build & Run} >
|
||||||
|
\uicontrol {Default Build Properties}.
|
||||||
|
|
||||||
|
\image qtcreator-build-settings-default.png "default build options"
|
||||||
|
|
||||||
|
\section1 Compiling QML
|
||||||
|
|
||||||
|
Since Qt 5.11, you can compile QML source code into the final binary. This
|
||||||
|
improves the startup time of the application and eliminates the need to
|
||||||
|
deploy QML files together with the application. For more information, see
|
||||||
|
\l{Ahead-of-Time Compilation}.
|
||||||
|
|
||||||
|
\QC project wizard templates create Qt Quick projects that can be compiled,
|
||||||
|
because they are set up to use the Qt Resource System. To compile QML code,
|
||||||
|
select \uicontrol Enable in the \uicontrol {Qt Quick Compiler} field. To
|
||||||
|
use default settings, select \uicontrol {Leave at Default}.
|
||||||
|
|
||||||
|
\note In earlier Qt versions, this was a commercial feature. For more
|
||||||
|
information, see \l{http://doc.qt.io/QtQuickCompiler/}{Qt Quick Compiler}.
|
||||||
|
|
||||||
|
\section1 qmake Build Steps
|
||||||
|
|
||||||
|
\QC builds qmake projects by running the \c make or \c nmake command from
|
||||||
|
the Qt version defined for the current build configuration.
|
||||||
|
|
||||||
|
\image qtcreator-build-steps.png "Build steps"
|
||||||
|
|
||||||
|
To override the shell command that \QC constructs by default, disable or
|
||||||
|
remove the build step and add a custom build step that specifies another
|
||||||
|
shell command.
|
||||||
|
|
||||||
|
By default, \QC uses all the CPU cores available to achieve maximum build
|
||||||
|
parallelization. On Linux and \macos, you can specify the number of parallel
|
||||||
|
jobs to use for building in the \uicontrol {Parallel jobs} field. Select the
|
||||||
|
\uicontrol {Override MAKEFLAGS} check box to override existing MAKEFLAGS
|
||||||
|
variables.
|
||||||
|
|
||||||
|
Select \uicontrol {Add Build Step} > \uicontrol {IncrediBuild for Linux} or
|
||||||
|
\uicontrol {IncrediBuild for Windows} to accelerate builds by using
|
||||||
|
\l{IncrediBuild Build Configuration}{IncrediBuild}.
|
||||||
|
|
||||||
|
Select \uicontrol {Add Build Step} > \uicontrol {Run Conan Install} to use
|
||||||
|
the \l{Conan Build Configuration}{Conan} package manager with qmake
|
||||||
|
*/
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
|
|
||||||
\list
|
\list
|
||||||
\li \l {Opening Projects}
|
\li \l {Opening Projects}
|
||||||
\li \l {Specifying Build Settings}
|
\li \l {Qbs Build Configuration}
|
||||||
\li \l {Specifying Run Settings}
|
\li \l {Specifying Run Settings}
|
||||||
\endlist
|
\endlist
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -24,11 +24,35 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
//! [qbs build steps]
|
\previouspage creator-build-settings-qmake.html
|
||||||
|
\page creator-build-settings-qbs.html
|
||||||
|
\nextpage creator-build-settings-meson.html
|
||||||
|
|
||||||
\section2 Qbs Build Steps
|
\title Qbs Build Configuration
|
||||||
|
|
||||||
\image creator-qbs-build-app.png
|
\image qtcreator-build-settings-qbs.png "Qbs build settings"
|
||||||
|
|
||||||
|
Qbs builds projects in the directory specified in the
|
||||||
|
\uicontrol {Build Directory} field.
|
||||||
|
|
||||||
|
In the \uicontrol {Tooltip in target selector} field, you can enter text
|
||||||
|
that is displayed as a tooltip when you hover the mouse over the build
|
||||||
|
configuration in the \l{Building for Multiple Platforms}{kit selector}.
|
||||||
|
|
||||||
|
You can enter a name for the build configuration in the
|
||||||
|
\uicontrol {Configuration name} field.
|
||||||
|
|
||||||
|
If debug info is being generated, you can have it placed into separate
|
||||||
|
files, rather than embedded into the binary, by selecting
|
||||||
|
\uicontrol Enable in the \uicontrol {Separate debug info} field. For
|
||||||
|
more information, see \l{Using the Performance Analyzer}. To use default
|
||||||
|
settings, select \uicontrol {Leave at Default}.
|
||||||
|
|
||||||
|
For more information about configuring Qbs, see \l{Setting Up Qbs}.
|
||||||
|
|
||||||
|
\section1 Qbs Build Steps
|
||||||
|
|
||||||
|
\image creator-qbs-build-app.png "Qbs build steps"
|
||||||
|
|
||||||
To specify build steps for Qbs:
|
To specify build steps for Qbs:
|
||||||
|
|
||||||
@@ -95,16 +119,11 @@
|
|||||||
The \uicontrol {Equivalent command line} field displays the build command
|
The \uicontrol {Equivalent command line} field displays the build command
|
||||||
that is constructed based on the selected options.
|
that is constructed based on the selected options.
|
||||||
|
|
||||||
//! [qbs build steps]
|
\section1 Qbs Clean Steps
|
||||||
|
|
||||||
|
|
||||||
//! [qbs clean steps]
|
|
||||||
|
|
||||||
\section2 Qbs Clean Steps
|
|
||||||
|
|
||||||
When building with Qbs, you can specify flags in \uicontrol {Clean Steps}:
|
When building with Qbs, you can specify flags in \uicontrol {Clean Steps}:
|
||||||
|
|
||||||
\image creator-qbs-build-clean.png
|
\image creator-qbs-build-clean.png "Qbs clean steps"
|
||||||
|
|
||||||
\list
|
\list
|
||||||
|
|
||||||
@@ -118,6 +137,4 @@
|
|||||||
|
|
||||||
The \uicontrol {Equivalent command line} field displays the clean command
|
The \uicontrol {Equivalent command line} field displays the clean command
|
||||||
that is constructed based on the selected options.
|
that is constructed based on the selected options.
|
||||||
|
|
||||||
//! [qbs clean steps]
|
|
||||||
*/
|
*/
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
/*!
|
/*!
|
||||||
\previouspage creator-debuggers.html
|
\previouspage creator-debuggers.html
|
||||||
\page creator-build-settings.html
|
\page creator-build-settings.html
|
||||||
\nextpage creator-run-settings.html
|
\nextpage creator-build-settings-cmake.html
|
||||||
|
|
||||||
\title Specifying Build Settings
|
\title Specifying Build Settings
|
||||||
|
|
||||||
@@ -57,6 +57,8 @@
|
|||||||
|
|
||||||
\section1 Managing Build Configurations
|
\section1 Managing Build Configurations
|
||||||
|
|
||||||
|
\image qtcreator-build-configurations.png "Build Settings"
|
||||||
|
|
||||||
You specify build settings in the \uicontrol Projects mode.
|
You specify build settings in the \uicontrol Projects mode.
|
||||||
To add a new build configuration, click \uicontrol Add and select the type of
|
To add a new build configuration, click \uicontrol Add and select the type of
|
||||||
configuration you would like to add. The options you have depend on the
|
configuration you would like to add. The options you have depend on the
|
||||||
@@ -75,55 +77,20 @@
|
|||||||
\uicontrol {Edit build configuration} field.
|
\uicontrol {Edit build configuration} field.
|
||||||
|
|
||||||
The available build settings depend on the build system that you selected
|
The available build settings depend on the build system that you selected
|
||||||
for the project.
|
for the project:
|
||||||
|
|
||||||
\section2 Compiling QML
|
\list
|
||||||
|
\li \l{CMake Build Configuration}{CMake}
|
||||||
|
\li \l{qmake Build Configuration}{qmake}
|
||||||
|
\li \l{Qbs Build Configuration}{Qbs}
|
||||||
|
\li \l{Meson Build Configuration}{Meson}
|
||||||
|
\li \l{IncrediBuild Build Configuration}{IncrediBuild}
|
||||||
|
\endlist
|
||||||
|
|
||||||
Since Qt 5.11, you can compile QML source code into the final binary. This
|
This topic describes the build settings at a general level.
|
||||||
improves the startup time of the application and eliminates the need to
|
|
||||||
deploy QML files together with the application. For more information, see
|
|
||||||
\l{Ahead-of-Time Compilation}.
|
|
||||||
|
|
||||||
\QC project wizard templates create Qt Quick projects that can be compiled,
|
For more information about debugging Qt Quick projects, see
|
||||||
because they are set up to use the Qt Resource System. To compile Qt Quick
|
\l{Setting Up QML Debugging}.
|
||||||
code, select \uicontrol Enable in the \uicontrol {Qt Quick Compiler}
|
|
||||||
field. To use default settings, select \uicontrol {Leave at Default}.
|
|
||||||
|
|
||||||
\note In earlier Qt versions, this was a commercial feature. For more
|
|
||||||
information, see \l{http://doc.qt.io/QtQuickCompiler/}{Qt Quick Compiler}.
|
|
||||||
|
|
||||||
\section2 qmake Build Configuration
|
|
||||||
|
|
||||||
\image qtcreator-projectpane.png "qmake general build settings pane"
|
|
||||||
|
|
||||||
By default, \QC builds projects in a separate directory from the source
|
|
||||||
directory, as \l{glossary-shadow-build} {shadow builds}. This keeps the
|
|
||||||
files generated for each \l{glossary-buildandrun-kit}{build and run kit} separate.
|
|
||||||
If you only build and run with a single \l{glossary-buildandrun-kit}{kit},
|
|
||||||
you can deselect the \uicontrol {Shadow build}
|
|
||||||
checkbox.
|
|
||||||
|
|
||||||
To make in-source builds the default option for all projects, select
|
|
||||||
\uicontrol Tools > \uicontrol Options > \uicontrol {Build & Run} >
|
|
||||||
\uicontrol {Default Build Properties}, and enter a period (.) in the
|
|
||||||
\uicontrol {Default build directory} field.
|
|
||||||
|
|
||||||
You can create separate versions of project files to keep platform-dependent
|
|
||||||
code separate. You can use qmake \l{Adding Platform Specific Source Files}
|
|
||||||
{scopes} to select the file to process depending on which platform qmake is
|
|
||||||
run on.
|
|
||||||
|
|
||||||
To generate debug symbols also for applications compiled in release mode,
|
|
||||||
select \uicontrol Enable in the \uicontrol {Separate debug info} field. For
|
|
||||||
more information, see \l{Using the Performance Analyzer}. To use default
|
|
||||||
settings, select \uicontrol {Leave at Default}.
|
|
||||||
|
|
||||||
To set the default build properties, select \uicontrol Tools
|
|
||||||
> \uicontrol Options > \uicontrol {Build & Run} >
|
|
||||||
\uicontrol {Default Build Properties}.
|
|
||||||
|
|
||||||
\include creator-projects-cmake-building.qdocinc cmake build configuration
|
|
||||||
\include creator-projects-meson-building.qdocinc meson build configuration
|
|
||||||
|
|
||||||
\section1 Starting External Processes
|
\section1 Starting External Processes
|
||||||
|
|
||||||
@@ -133,11 +100,10 @@
|
|||||||
an executable name and optional command line arguments.
|
an executable name and optional command line arguments.
|
||||||
|
|
||||||
The executable name is specified in the executable fields: \uicontrol qmake,
|
The executable name is specified in the executable fields: \uicontrol qmake,
|
||||||
\uicontrol Make, \uicontrol Command, or \uicontrol Executable. It is either derived from the
|
\uicontrol Make, \uicontrol Command, or \uicontrol Executable. It is either
|
||||||
project or specified manually. When you specify executables manually, you
|
derived from the project or specified manually. When you specify executables
|
||||||
can reference environment variables and \QC variables. However, no
|
manually, you can reference environment variables and \QC variables.
|
||||||
quoting rules
|
However, no quoting rules apply.
|
||||||
apply.
|
|
||||||
|
|
||||||
You can specify command-line arguments in the arguments fields:
|
You can specify command-line arguments in the arguments fields:
|
||||||
\uicontrol Arguments, \uicontrol {Additional arguments},
|
\uicontrol Arguments, \uicontrol {Additional arguments},
|
||||||
@@ -157,32 +123,21 @@
|
|||||||
|
|
||||||
\section1 Build Steps
|
\section1 Build Steps
|
||||||
|
|
||||||
In \uicontrol{Build Steps} you can change the settings for the build system
|
\image qtcreator-cmake-build-steps.png "CMake build steps"
|
||||||
selected for building the project: qmake, CMake, Meson, or Qbs. You can use
|
|
||||||
Incredibuild to accelerate the build process when using qmake or CMake.
|
|
||||||
|
|
||||||
\section2 qmake Build Steps
|
In \uicontrol{Build Steps}, you can change the settings for the build system
|
||||||
|
selected for building the project:
|
||||||
|
|
||||||
\QC builds qmake projects by running the \c make or \c nmake command from
|
\list
|
||||||
the Qt version defined for the current build configuration.
|
\li \l{CMake Build Steps}{CMake}
|
||||||
|
\li \l{qmake Build Steps}{qmake}
|
||||||
|
\li \l{Qbs Build Steps}{Qbs}
|
||||||
|
\li \l{Meson Build Steps}{Meson}
|
||||||
|
\li \l{Conan Build Steps}{Conan}
|
||||||
|
\endlist
|
||||||
|
|
||||||
\image qtcreator-build-steps.png "Build steps"
|
You can use \l{IncrediBuild Build Steps}{IncrediBuild} to accelerate the
|
||||||
|
build process when using qmake or CMake.
|
||||||
To override the shell command that \QC constructs by default, disable or remove
|
|
||||||
the build step and add a custom build step that specifies another shell
|
|
||||||
command.
|
|
||||||
|
|
||||||
By default, \QC uses all the CPU cores available to achieve maximum build
|
|
||||||
parallelization. On Linux and \macos, you can specify the number of parallel
|
|
||||||
jobs to use for building in the \uicontrol {Parallel jobs} field. Select the
|
|
||||||
\uicontrol {Override MAKEFLAGS} check box to override existing MAKEFLAGS
|
|
||||||
variables.
|
|
||||||
|
|
||||||
\include creator-projects-cmake-building.qdocinc cmake build steps
|
|
||||||
\include creator-projects-settings-build-qbs.qdocinc qbs build steps
|
|
||||||
\include creator-projects-meson-building.qdocinc meson build steps
|
|
||||||
\include creator-projects-incredibuild-building.qdocinc incredibuild build steps
|
|
||||||
\include creator-projects-conan-building.qdocinc conan build steps
|
|
||||||
|
|
||||||
\section2 Adding Custom Build Steps
|
\section2 Adding Custom Build Steps
|
||||||
|
|
||||||
@@ -203,13 +158,21 @@
|
|||||||
|
|
||||||
\section1 Clean Steps
|
\section1 Clean Steps
|
||||||
|
|
||||||
You can use the cleaning process to remove intermediate files. This process
|
|
||||||
might help you to fix obscure issues during the process of building a
|
|
||||||
project.
|
|
||||||
|
|
||||||
\image qtcreator-clean-steps.png "Clean steps"
|
\image qtcreator-clean-steps.png "Clean steps"
|
||||||
|
|
||||||
You can define the cleaning steps for your builds in the \uicontrol{Clean Steps}.
|
You can use the cleaning process to remove intermediate files. This process
|
||||||
|
might help you to fix obscure issues during the process of building a
|
||||||
|
project using:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li \l{CMake Clean Steps}{CMake}
|
||||||
|
\li qmake
|
||||||
|
\li \l{Qbs Clean Steps}{Qbs}
|
||||||
|
\li \l{Meson Clean Steps}{Meson}
|
||||||
|
\li \l{IncrediBuild Clean Steps}{IncrediBuild}
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
You can define the clean steps for your builds in \uicontrol {Clean Steps}.
|
||||||
|
|
||||||
\list
|
\list
|
||||||
|
|
||||||
@@ -225,10 +188,4 @@
|
|||||||
(\uicontrol {Move Up}) and \inlineimage arrowdown.png
|
(\uicontrol {Move Up}) and \inlineimage arrowdown.png
|
||||||
(\uicontrol {Move Down}).
|
(\uicontrol {Move Down}).
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\include creator-projects-cmake-building.qdocinc cmake clean steps
|
|
||||||
\include creator-projects-settings-build-qbs.qdocinc qbs clean steps
|
|
||||||
\include creator-projects-meson-building.qdocinc meson clean steps
|
|
||||||
\include creator-projects-incredibuild-building.qdocinc incredibuild clean steps
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -175,6 +175,7 @@
|
|||||||
with names beginning with the string \uicontrol CodeBlocks produce
|
with names beginning with the string \uicontrol CodeBlocks produce
|
||||||
all the necessary data for the \QC code model. \QC displays a
|
all the necessary data for the \QC code model. \QC displays a
|
||||||
warning if you select a generator that is not supported.
|
warning if you select a generator that is not supported.
|
||||||
|
For more information, see \l{Using Ninja as a CMake Generator}.
|
||||||
|
|
||||||
\li In the \uicontrol {CMake configuration} field, select
|
\li In the \uicontrol {CMake configuration} field, select
|
||||||
\uicontrol Change to edit the parameters of the CMake configuration
|
\uicontrol Change to edit the parameters of the CMake configuration
|
||||||
@@ -195,8 +196,6 @@
|
|||||||
choose the kit to use. To set the selected kit as the default kit,
|
choose the kit to use. To set the selected kit as the default kit,
|
||||||
select \uicontrol {Make Default}.
|
select \uicontrol {Make Default}.
|
||||||
|
|
||||||
\include creator-projects-cmake-building.qdocinc cmake ninja
|
|
||||||
|
|
||||||
\section1 Editing Qbs Profiles
|
\section1 Editing Qbs Profiles
|
||||||
|
|
||||||
To view the Qbs profile associated with the kit, select \uicontrol Tools >
|
To view the Qbs profile associated with the kit, select \uicontrol Tools >
|
||||||
|
|||||||
@@ -75,6 +75,14 @@
|
|||||||
\li \l{Adding Compilers}
|
\li \l{Adding Compilers}
|
||||||
\li \l{Adding Debuggers}
|
\li \l{Adding Debuggers}
|
||||||
\li \l{Specifying Build Settings}
|
\li \l{Specifying Build Settings}
|
||||||
|
\list
|
||||||
|
\li \l{Cmake Build Configuration}
|
||||||
|
\li \l{qmake Build Configuration}
|
||||||
|
\li \l{Qbs Build Configuration}
|
||||||
|
\li \l{Meson Build Configuration}
|
||||||
|
\li \l{IncrediBuild Build Configuration}
|
||||||
|
\li \l{Conan Build Configuration}
|
||||||
|
\endlist
|
||||||
\li \l{Specifying Run Settings}
|
\li \l{Specifying Run Settings}
|
||||||
\li \l{Specifying Editor Settings}
|
\li \l{Specifying Editor Settings}
|
||||||
\li \l{Specifying Code Style Settings}
|
\li \l{Specifying Code Style Settings}
|
||||||
|
|||||||
@@ -236,7 +236,7 @@
|
|||||||
\if defined(qtdesignstudio)
|
\if defined(qtdesignstudio)
|
||||||
\row
|
\row
|
||||||
\li \inlineimage icons/item-svg-16px.png
|
\li \inlineimage icons/item-svg-16px.png
|
||||||
\li SvgPath
|
\li \l{SVG Path Item}
|
||||||
\li Studio Components
|
\li Studio Components
|
||||||
\li
|
\li
|
||||||
\li An SVG path data string that is used to draw a path as a line.
|
\li An SVG path data string that is used to draw a path as a line.
|
||||||
|
|||||||
@@ -68,17 +68,18 @@
|
|||||||
number of items in the model.
|
number of items in the model.
|
||||||
|
|
||||||
\if defined(qtdesignstudio)
|
\if defined(qtdesignstudio)
|
||||||
\note You can also use the \l SvgPath Studio Component to specify an SVG
|
\note You can also use the \l {SVG Path Item} Studio Component to specify an
|
||||||
path data string that draws a path.
|
SVG path data string that draws a path.
|
||||||
\endif
|
\endif
|
||||||
|
|
||||||
//! [pathview]
|
//! [pathview]
|
||||||
|
|
||||||
//! [svgpath]
|
//! [svgpath]
|
||||||
|
|
||||||
\section1 SvgPath
|
\section1 SVG Path Item
|
||||||
|
|
||||||
The Svg Path component uses an SVG path data string to draw a path as a line.
|
The \uicontrol {SVG Path Item} component uses an SVG path data string to
|
||||||
|
draw a path as a line.
|
||||||
|
|
||||||
The stroke property values that specify the appearance of the path are
|
The stroke property values that specify the appearance of the path are
|
||||||
described in \l{Strokes}.
|
described in \l{Strokes}.
|
||||||
@@ -89,10 +90,5 @@
|
|||||||
string that specifies the path. For more information, see
|
string that specifies the path. For more information, see
|
||||||
\l{https://www.w3.org/TR/SVG/paths.html#PathData}{W3C SVG Path Data}.
|
\l{https://www.w3.org/TR/SVG/paths.html#PathData}{W3C SVG Path Data}.
|
||||||
|
|
||||||
\note Mixing SvgPath with other types of components is not always supported.
|
|
||||||
For example, when \l Shape is backed by \c GL_NV_path_rendering, a
|
|
||||||
\l ShapePath can contain one or more SvgPath elements, or one or more
|
|
||||||
components of other types, but not both.
|
|
||||||
|
|
||||||
//! [svgpath]
|
//! [svgpath]
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
/*!
|
/*!
|
||||||
\page quick-components.html
|
\page quick-components.html
|
||||||
\if defined(qtdesignstudio)
|
\if defined(qtdesignstudio)
|
||||||
\previouspage studio-app-flows.html
|
\previouspage studio-flow-external-events.html
|
||||||
\else
|
\else
|
||||||
\previouspage creator-using-qt-quick-designer.html
|
\previouspage creator-using-qt-quick-designer.html
|
||||||
\endif
|
\endif
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 40 KiB |
@@ -360,10 +360,11 @@
|
|||||||
\li Press \key Enter or select \uicontrol OK to save the new value.
|
\li Press \key Enter or select \uicontrol OK to save the new value.
|
||||||
\li In the \uicontrol Radius field, enter 20 to give the button
|
\li In the \uicontrol Radius field, enter 20 to give the button
|
||||||
rounded corners.
|
rounded corners.
|
||||||
\li In the \uicontrol States view, select the \e down state and modify
|
\li In the \uicontrol States view, select the \e normal state and modify
|
||||||
the background and border color as above.
|
the background color as above.
|
||||||
\li Select the text component in \uicontrol Navigator to display its
|
\li Select the \e base state, and then select the text component
|
||||||
properties in \uicontrol Properties.
|
in \uicontrol Navigator to display its properties in
|
||||||
|
\uicontrol Properties.
|
||||||
\li In the \uicontrol {Text Color} field, select \uicontrol Actions >
|
\li In the \uicontrol {Text Color} field, select \uicontrol Actions >
|
||||||
\uicontrol Reset to reset the text color to the default color,
|
\uicontrol Reset to reset the text color to the default color,
|
||||||
black.
|
black.
|
||||||
|
|||||||
BIN
doc/qtdesignstudio/images/icons/flow-action-icon.png
Normal file
|
After Width: | Height: | Size: 507 B |
BIN
doc/qtdesignstudio/images/icons/flow-decision-icon.png
Normal file
|
After Width: | Height: | Size: 568 B |
BIN
doc/qtdesignstudio/images/icons/flow-wildcard-icon.png
Normal file
|
After Width: | Height: | Size: 616 B |
BIN
doc/qtdesignstudio/images/studio-dial.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-action-area-properties.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-action-area.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-decision-preview.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-decision-properties.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 45 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-effect-properties.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-effect-push-properties.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-event-list-trigger.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 7.8 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-events-assign.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-item-properties.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-item.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-steps.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-transition-properties.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-view-properties.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 286 KiB After Width: | Height: | Size: 65 KiB |
BIN
doc/qtdesignstudio/images/studio-flow-wildcard-properties.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 66 KiB |
@@ -57,6 +57,14 @@
|
|||||||
as assets. If you use functional \QDS components in Figma, you will
|
as assets. If you use functional \QDS components in Figma, you will
|
||||||
find it easier to merge new iterations of the design to \QDS and
|
find it easier to merge new iterations of the design to \QDS and
|
||||||
continue to build the screens there.
|
continue to build the screens there.
|
||||||
|
\li \QBF does not support exporting changes in component instances.
|
||||||
|
If you make changes to component instances in Figma, you must
|
||||||
|
detach the instances before exporting them. Similarly, if your
|
||||||
|
Figma components contain nested components, Figma allows you to
|
||||||
|
hot swap the nested instance inside the component instance.
|
||||||
|
However, \QBF doesn't support this so you get the original
|
||||||
|
component unless you detach the component instance before
|
||||||
|
exporting it.
|
||||||
\li Use descriptive and unique IDs to avoid duplicate IDs after
|
\li Use descriptive and unique IDs to avoid duplicate IDs after
|
||||||
exporting designs and importing them to \QDS.
|
exporting designs and importing them to \QDS.
|
||||||
\endlist
|
\endlist
|
||||||
@@ -112,20 +120,28 @@
|
|||||||
\li Determines how to export the group or layer:
|
\li Determines how to export the group or layer:
|
||||||
\list
|
\list
|
||||||
\li \uicontrol Child exports each asset of the selected group
|
\li \uicontrol Child exports each asset of the selected group
|
||||||
or layer as a separate PNG file, with references
|
or layer as a separate component file. Images are exported
|
||||||
to the images in the component file.
|
as separate files nested in \l{Images}{Image} components.
|
||||||
\li \uicontrol Merged merges the selected groups and layers into
|
You select the image file format in \uicontrol Settings >
|
||||||
the parent frame or group as one component.
|
\uicontrol {Asset settings}.
|
||||||
|
|
||||||
|
Figma rectangles are exported as \l{basic-rectangle}
|
||||||
|
{Rectangle} components. Figma vectors are exported as
|
||||||
|
\l{SVG Path Item} components from the \l{Shapes}
|
||||||
|
{Studio Components} module.
|
||||||
|
\li \uicontrol Merged merges the selected groups and layers
|
||||||
|
into one component.
|
||||||
\li \uicontrol Skipped completely skips the selected layer.
|
\li \uicontrol Skipped completely skips the selected layer.
|
||||||
\endlist
|
\endlist
|
||||||
\row
|
\row
|
||||||
\li \uicontrol {Custom Component Type}
|
\li \uicontrol {Custom Component Type}
|
||||||
\li Determines the \l{Component Types}{component type} to morph this
|
\li Determines the \l{Component Types}{component type} to morph this
|
||||||
layer into. The component that is generated during import will be
|
layer into. The component that is generated during import will be
|
||||||
of this type. For example, if you drew a rectangle, you can export
|
of this type. For example, if you drew a button, you can export
|
||||||
it as a \l Rectangle component. You can provide the
|
it as a \l Button component from the Qt Quick Controls module.
|
||||||
\l{Learn More - Components}{import statement} of the component
|
You can provide the import statement of the
|
||||||
set where the component is defined in the \uicontrol {Imports} field.
|
\l{Adding and Removing Modules}{module} where the component
|
||||||
|
is defined in the \uicontrol {Imports} field.
|
||||||
\row
|
\row
|
||||||
\li \uicontrol Properties
|
\li \uicontrol Properties
|
||||||
\li Sets values of properties for the component. You can add properties
|
\li Sets values of properties for the component. You can add properties
|
||||||
@@ -133,13 +149,14 @@
|
|||||||
\row
|
\row
|
||||||
\li \uicontrol Imports
|
\li \uicontrol Imports
|
||||||
\li If you want to make additional components available in the component
|
\li If you want to make additional components available in the component
|
||||||
file, you can enter the import statements of the component sets in
|
file, you can enter the import statements of the modules that
|
||||||
this field. For example, to use components of the Controls type from
|
contain the components in this field. For example, to use components
|
||||||
version 2.3, you need the import statement \c {QtQuick.Controls 2.3}
|
from version 2.3 of the Qt Quick Controls module, you need the
|
||||||
and to use Studio Components from version 1.0, you need the import
|
import statement \c {QtQuick.Controls 2.3} and to use version 1.0
|
||||||
statement \c {QtQuick.Studio.Components 1.0}. You can add components
|
Studio Components, you need the import statement
|
||||||
from all the available component sets in \QDS later. You can also
|
\c {QtQuick.Studio.Components 1.0}. You can add components from all
|
||||||
import a component set as an \e alias.
|
the available modules in \QDS later. You can also import a module as
|
||||||
|
an \e alias.
|
||||||
\row
|
\row
|
||||||
\li \uicontrol Alias
|
\li \uicontrol Alias
|
||||||
\li Exports the component generated from this layer as an alias in the
|
\li Exports the component generated from this layer as an alias in the
|
||||||
@@ -160,9 +177,13 @@
|
|||||||
|
|
||||||
You can export assets in the selected format (JPG, PNG, or SVG).
|
You can export assets in the selected format (JPG, PNG, or SVG).
|
||||||
|
|
||||||
In addition, you can export shapes as components of the type SvgPathItem.
|
By default, vectors are exported as \l{SVG Path Item} components from the
|
||||||
This might not work for layers that have particular effects applied to them.
|
Studio Components module. This might not work for layers that have
|
||||||
In that case, the layers are exported as images.
|
particular effects applied to them. In that case, the layers are exported
|
||||||
|
as images.
|
||||||
|
|
||||||
|
Because MCUs only support simple images, disable the
|
||||||
|
\uicontrol {Export as shapes} check box when designing for MCUs.
|
||||||
|
|
||||||
\table
|
\table
|
||||||
\header
|
\header
|
||||||
@@ -173,10 +194,8 @@
|
|||||||
\li Exports assets in the selected format (JPG, PNG, or SVG).
|
\li Exports assets in the selected format (JPG, PNG, or SVG).
|
||||||
\row
|
\row
|
||||||
\li \uicontrol {Export as shapes}
|
\li \uicontrol {Export as shapes}
|
||||||
\li Exports shapes as components of the type SvgPathItem.
|
\li Exports vectors as components of the type \l{SVG Path Item} from the
|
||||||
|
Studio Components module.
|
||||||
Because MCUs only support simple images, disable this
|
|
||||||
check box when designing for MCUs.
|
|
||||||
\row
|
\row
|
||||||
\li \uicontrol {Reset plugin data}
|
\li \uicontrol {Reset plugin data}
|
||||||
\li Resets all settings for all layers and groups (also in the
|
\li Resets all settings for all layers and groups (also in the
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2020 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Creator documentation.
|
** This file is part of the Qt Creator documentation.
|
||||||
@@ -26,15 +26,15 @@
|
|||||||
/*!
|
/*!
|
||||||
\page studio-app-flows.html
|
\page studio-app-flows.html
|
||||||
\previouspage quick-uis.html
|
\previouspage quick-uis.html
|
||||||
\nextpage quick-components.html
|
\nextpage studio-flow-view.html
|
||||||
|
|
||||||
\title Designing Application Flows
|
\title Designing Application Flows
|
||||||
|
|
||||||
You can design the application flow in the form of a \e {schematic diagram}
|
You can design an application in the form of a \e {schematic diagram}
|
||||||
that shows all significant components of an application UI and their
|
that shows all significant components of the application UI and their
|
||||||
interconnections by means of symbols. This results in an interactive
|
interconnections by means of symbols. This results in an interactive
|
||||||
prototype that can be clicked through to simulate the user experience of
|
prototype that can be clicked through to simulate the user experience of
|
||||||
the application. The QML code is created in the background and can be used
|
the application. Code is created in the background and can be used
|
||||||
as the base of the production version of the application.
|
as the base of the production version of the application.
|
||||||
|
|
||||||
\image studio-flow-view.png "Application flow in Form Editor"
|
\image studio-flow-view.png "Application flow in Form Editor"
|
||||||
@@ -44,25 +44,63 @@
|
|||||||
lines} that connect them, thus illustrating the possible user pathways
|
lines} that connect them, thus illustrating the possible user pathways
|
||||||
through the UI. You use \e {action areas} as starting points for transition
|
through the UI. You use \e {action areas} as starting points for transition
|
||||||
lines. You can attach effects to transition lines, such as fade or push,
|
lines. You can attach effects to transition lines, such as fade or push,
|
||||||
to determine what users see when one screen changes into another.
|
to determine what users see when one flow item changes into another.
|
||||||
|
|
||||||
You can use \e {flow decisions} to set up alternative pathways between
|
You can use \e {flow decisions} to set up alternative pathways between
|
||||||
screens in the UI. For example, if user input determines which screen
|
flow items in the UI. For example, if user input determines which flow item
|
||||||
should open next, you can test the different scenarios in the prototype
|
should open next, you can test the different scenarios in the prototype
|
||||||
by having a dialog pop up, where you can select which screen to show next.
|
by having a dialog pop up where you can select which flow item to show next.
|
||||||
|
|
||||||
Especially on mobile and embedded platforms, the application might need to
|
Especially on mobile and embedded platforms, the application might need to
|
||||||
react to external events from the platform, such as notifications or other
|
react to external events from the platform, such as notifications or other
|
||||||
applications requiring the users' attention. You can use \e {flow wildcards}
|
applications requiring the users' attention. You can use \e {flow wildcards}
|
||||||
to determine the priority of screens by whitelisting or blacklisting them.
|
to determine the priority of flow items by adding them to positive and
|
||||||
|
negative lists.
|
||||||
|
|
||||||
\section1 Creating Flows
|
To design application flows:
|
||||||
|
|
||||||
|
\image studio-flow-steps.png "Designing application flows"
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
\li Use a project wizard template to add a \uicontrol {Flow View}
|
||||||
|
component, as described in \l{Adding Flow Views}.
|
||||||
|
\li Use a project wizard template to add a \uicontrol {Flow Item}
|
||||||
|
component for each screen in the UI, as described in
|
||||||
|
\l{Adding Flow Items}.
|
||||||
|
\li Use context menu commands to add action areas and transitions,
|
||||||
|
as described in \l{Adding Action Areas and Transitions}.
|
||||||
|
\li Use context menu commands to apply effects to transitions,
|
||||||
|
as described in \l{Applying Effects to Transitions}.
|
||||||
|
\li When you are ready for production, use the event list simulator
|
||||||
|
to replace transition lines with connections to real signals
|
||||||
|
from UI controls, as described in \l{Simulating Events}.
|
||||||
|
\li To set up alternative pathways between flow items, use
|
||||||
|
\uicontrol {Flow Decision} components from \l Library, as
|
||||||
|
described in \l{Simulating Conditions}.
|
||||||
|
\li Use \l{Adding States}{states} in flows to modify the appearance
|
||||||
|
of components on screens in response to user interaction, as
|
||||||
|
described in \l{Applying States in Flows}.
|
||||||
|
\li Use \uicontrol {Flow Wildcard} components from \uicontrol Library
|
||||||
|
to prioritize events from other applications and to stop some
|
||||||
|
screens from appearing on others, as described in
|
||||||
|
\l{Reacting to External Events}.
|
||||||
|
\endlist
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page studio-flow-view.html
|
||||||
|
\previouspage studio-app-flows.html
|
||||||
|
\nextpage studio-flow-item.html
|
||||||
|
|
||||||
|
\title Adding Flow Views
|
||||||
|
|
||||||
You can add a flow view to an existing project or create a new project
|
You can add a flow view to an existing project or create a new project
|
||||||
for it, as described in \l {Creating Projects}. To create the flow
|
for it, as described in \l {Creating Projects}.
|
||||||
view, select \uicontrol File > \uicontrol {New File or Project} >
|
|
||||||
\uicontrol {Files and Classes} > \uicontrol {Qt Quick Files} >
|
To create the flow view, select \uicontrol File >
|
||||||
\uicontrol {Flow View} and follow the instructions of the wizard.
|
\uicontrol {New File or Project} > \uicontrol {Files and Classes} >
|
||||||
|
\uicontrol {Qt Quick Files} > \uicontrol {Flow View}
|
||||||
|
and follow the instructions of the wizard.
|
||||||
|
|
||||||
You only need to select the \uicontrol {Use event simulator} check box if
|
You only need to select the \uicontrol {Use event simulator} check box if
|
||||||
you want to add an event simulator to the flow view.
|
you want to add an event simulator to the flow view.
|
||||||
@@ -71,26 +109,89 @@
|
|||||||
the items in the flow: action areas, transition lines, decisions, and
|
the items in the flow: action areas, transition lines, decisions, and
|
||||||
wildcards. You can change the global settings for all items by editing
|
wildcards. You can change the global settings for all items by editing
|
||||||
flow view properties, or you can select an individual action area or
|
flow view properties, or you can select an individual action area or
|
||||||
transition line and change the appearance of just that item, including
|
transition line and change the appearance of just that component, including
|
||||||
the color, line thickness, dotted or solid lines, and even the curve of
|
the color, line thickness, dotted or solid lines, and even the curve of
|
||||||
the connections. This enables you to add extra semantics to the design
|
the line. This enables you to add extra semantics to the design
|
||||||
of the flow diagram itself.
|
of the flow diagram itself.
|
||||||
|
|
||||||
\section1 Adding Flow Items
|
You can \l{Adding Flow Items}{add flow items} to the flow view to design
|
||||||
|
the UI.
|
||||||
|
|
||||||
If you imported your screen designs from a design tool as individual
|
\section1 Flow View Properties
|
||||||
components (\e {.ui.qml} files), you can use them as content for flow
|
|
||||||
items. If you are building your UI from scratch in \QDS, you must first
|
You can specify basic properties for a \uicontrol {Flow View} component
|
||||||
add components to the flow items to create the screens as you would
|
in the \l {Type}{Component}, \l {2D Geometry}{Geometry}, and
|
||||||
any QML components. For more information, see \l {Creating Components}.
|
\l Visibility groups.
|
||||||
The flow items that you attach the components to are listed under
|
|
||||||
\uicontrol {My QML Components}.
|
\image studio-flow-view-properties.png "Flow View component properties"
|
||||||
|
|
||||||
|
To specify the \uicontrol {Flow Item} that is currently visible in the
|
||||||
|
flow view, set its index in the \uicontrol {Current index} field.
|
||||||
|
|
||||||
|
You can use the \l{Picking Colors}{color picker} to set colors for:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li Transition lines
|
||||||
|
\li Area outlines
|
||||||
|
\li Area fills
|
||||||
|
\li Block items
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
You can set some additional global properties for drawing transition lines:
|
||||||
|
|
||||||
|
\image studio-flow-view-properties-transition.png "Flow View transition properties"
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li In the \uicontrol {Type} field, select \uicontrol Bezier to draw
|
||||||
|
transition lines as bezier curves.
|
||||||
|
\li In the \uicontrol {Radius} field, specify the corner radius for
|
||||||
|
default curves.
|
||||||
|
\li In the \uicontrol {Bezier factor} field, specify the factor that
|
||||||
|
modifies the positions of the control points used for bezier curves.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
For more information about changing the appearance of a particular action
|
||||||
|
area or transition line, see \l{Flow Action Area Properties} and
|
||||||
|
\l{Flow Transition Properties}.
|
||||||
|
|
||||||
|
In the \uicontrol Layout tab, you can use \l{Setting Anchors and Margins}
|
||||||
|
{anchors} to position the component.
|
||||||
|
|
||||||
|
In the \uicontrol Advanced tab, you can manage the more
|
||||||
|
\l{Specifying Developer Properties}{advanced properties}
|
||||||
|
of components.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page studio-flow-item.html
|
||||||
|
\previouspage studio-flow-view.html
|
||||||
|
\nextpage studio-flow-action-area.html
|
||||||
|
|
||||||
|
\title Adding Flow Items
|
||||||
|
|
||||||
|
After you create a \l{Adding Flow Views}{Flow View} component, you can
|
||||||
|
use a project wizard template to add a \uicontrol {Flow Item} component
|
||||||
|
for each screen in the UI.
|
||||||
|
|
||||||
|
If you \l{Importing 2D Assets}{imported} your screen designs from a
|
||||||
|
design tool as individual \l{glossary-component}{components}
|
||||||
|
(\e {.ui.qml} files), you can use them as content for flow items.
|
||||||
|
The imported components are listed in \l Library > \uicontrol Components
|
||||||
|
> \uicontrol {My Components}.
|
||||||
|
|
||||||
|
If you are building your UI from scratch in \QDS, you must first add
|
||||||
|
components to the flow items to create the screens as you would any
|
||||||
|
components. For more information, see \l {Creating Components}. The
|
||||||
|
flow items that you attach the components to are listed under
|
||||||
|
\uicontrol {My Components}.
|
||||||
|
|
||||||
|
\image studio-flow-item.png "Custom Flow Item in Library"
|
||||||
|
|
||||||
\note You must use the wizard to create the flow items. After you create
|
\note You must use the wizard to create the flow items. After you create
|
||||||
a flow view, the \uicontrol {Flow View} section becomes visible in
|
a flow view, the \uicontrol {Flow View} section becomes visible in
|
||||||
\uicontrol Library. It contains a \uicontrol {Flow Item} type that you
|
\uicontrol Library. It contains a \uicontrol {Flow Item} component that
|
||||||
can use to apply states to flow items, and that you should use solely for
|
you can use to \l{Applying States in Flows}{apply states to flow items},
|
||||||
that purpose.
|
and that you should use solely for that purpose.
|
||||||
|
|
||||||
To add flow items:
|
To add flow items:
|
||||||
|
|
||||||
@@ -101,136 +202,329 @@
|
|||||||
to create flow items for each screen in the UI.
|
to create flow items for each screen in the UI.
|
||||||
\li Add content to the flow item in one of the following ways:
|
\li Add content to the flow item in one of the following ways:
|
||||||
\list
|
\list
|
||||||
\li Drag and drop components to a flow item in
|
\li Drag and drop components from \l Library to a flow
|
||||||
\uicontrol {Form Editor} or \uicontrol Navigator and
|
item in \l {Form Editor} or \l Navigator.
|
||||||
edit their properties in \uicontrol Properties.
|
|
||||||
\li Drag a screen from \uicontrol Library >
|
\li Drag a screen from \uicontrol Library >
|
||||||
\uicontrol {My QML Components} to a flow item in
|
\uicontrol {My Components} to a flow item in
|
||||||
\uicontrol {Form Editor} or \uicontrol Navigator.
|
\uicontrol {Form Editor} or \uicontrol Navigator.
|
||||||
\endlist
|
\endlist
|
||||||
\li In \uicontrol Properties, edit the properties globally for all
|
\li In \l Properties, edit the properties of each flow item.
|
||||||
flow items, action areas, or transition lines in the flow view.
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
To include another flow view into a flow view, select the \e {.ui.qml} file
|
|
||||||
that specifies the flow view in the \uicontrol {Loader source} field in
|
|
||||||
\uicontrol Properties.
|
|
||||||
|
|
||||||
You can now drag the flow items from \uicontrol Library >
|
You can now drag the flow items from \uicontrol Library >
|
||||||
\uicontrol {My QML Components} to the flow view in \uicontrol {Form Editor}
|
\uicontrol {My Components} to the flow view in \uicontrol {Form Editor}
|
||||||
or \uicontrol Navigator. When you have all the screens in place, you can
|
or \uicontrol Navigator. When you have all the flow items in place, you can
|
||||||
add action areas to them to create transitions between them.
|
\l{Adding Action Areas and Transitions}{add action areas} to them to create
|
||||||
|
transitions between them.
|
||||||
|
|
||||||
\section1 Adding Action Areas and Transitions
|
\section1 Flow Item Properties
|
||||||
|
|
||||||
|
You can specify basic properties for a \uicontrol {Flow Item} component
|
||||||
|
in the \l {Type}{Component}, \l {2D Geometry}{Geometry}, and
|
||||||
|
\l Visibility groups.
|
||||||
|
|
||||||
|
\image studio-flow-item-properties.png "Flow Item properties"
|
||||||
|
|
||||||
|
The \uicontrol {State change target} and \uicontrol {Target state}
|
||||||
|
properties are used to \l{Applying States in Flows}{apply states}
|
||||||
|
in flows.
|
||||||
|
|
||||||
|
To include another flow view into a flow view, select the UI file (.ui.qml)
|
||||||
|
that specifies the flow view in the \uicontrol {Loader source} field.
|
||||||
|
|
||||||
|
By default, transitions are drawn from action areas to the target flow item.
|
||||||
|
To draw the transitions from the edges of flow items instead, select the
|
||||||
|
\uicontrol {Join lines} check box.
|
||||||
|
|
||||||
|
In the \uicontrol Layout tab, you can use \l{Setting Anchors and Margins}
|
||||||
|
{anchors} to position the component.
|
||||||
|
|
||||||
|
In the \uicontrol Advanced tab, you can manage the more
|
||||||
|
\l{Specifying Developer Properties}{advanced properties} of components.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page studio-flow-action-area.html
|
||||||
|
\previouspage studio-flow-item.html
|
||||||
|
\nextpage studio-flow-effects.html
|
||||||
|
|
||||||
|
\title Adding Action Areas and Transitions
|
||||||
|
|
||||||
\e {Action areas} can act as clickable areas that initiate transitions
|
\e {Action areas} can act as clickable areas that initiate transitions
|
||||||
between screens or they can create connections to any signal from any
|
between flow items or they can \l{Connecting Components to Signals}
|
||||||
component in a flow item. For example, you could connect an action
|
{create connections} to any signal from any component in a
|
||||||
to the \c onPressed signal of a button in your screen.
|
\l{Adding Flow Items}{flow item}. For example, you could connect an
|
||||||
|
action to the \c onPressed signal of a button in your flow item to
|
||||||
|
determine what should happen when users press the button.
|
||||||
|
|
||||||
Typically, a screen can be connected to several other screens in the flow,
|
\image studio-flow-action-area.png "Flow Action Area in Form Editor"
|
||||||
with two-way connections. To avoid clutter, you can set an action area as
|
|
||||||
\e {go back}, instead of adding explicit transition lines to and from
|
You can select the type of the mouse or touch input to use for triggering
|
||||||
every potentially connected screen. When the \uicontrol {Go back} option is
|
events, such as click, double-click, flick, pinch, or press.
|
||||||
enabled, the transition will always take the user back to the previous
|
|
||||||
screen.
|
Typically, a flow item can be connected to several other flow items in the
|
||||||
|
flow with two-way connections. To avoid clutter, you can set an action area
|
||||||
|
as \e {go back} instead of adding explicit transition lines to and from
|
||||||
|
every potentially connected flow item. When the \uicontrol {Go back} option
|
||||||
|
is enabled, the transition will always take the user back to the previous
|
||||||
|
flow item.
|
||||||
|
|
||||||
|
You can specify the appearance of each action area or transition line,
|
||||||
|
including the color, line thickness, dotted or solid lines, and even
|
||||||
|
the curve of the transition lines. You can change some of these properties
|
||||||
|
globally, as instructed in \l{Flow View Properties}.
|
||||||
|
|
||||||
To create action areas:
|
To create action areas:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Right-click the flow item in \uicontrol {Form Editor} and select
|
\li Right-click the flow item in \l {Form Editor} and select
|
||||||
\uicontrol {Flow} > \uicontrol {Create Flow Action} in the context
|
\uicontrol {Flow} > \uicontrol {Create Flow Action} in
|
||||||
menu.
|
the context menu.
|
||||||
\li Drag the action area to the screen control that you want to connect
|
\li Drag the action area to the UI control that you want to connect
|
||||||
to the other screen. For example, to a button that opens another
|
to the other flow item. For example, to a button that opens another
|
||||||
screen when clicked.
|
flow item when clicked.
|
||||||
\li Double-click the action area and drag the transition line to the
|
\li Double-click the action area and drag the transition line to the
|
||||||
flow item you want to connect to.
|
flow item you want to connect to.
|
||||||
\li In \uicontrol Properties, modify the properties of the action area
|
\li In \l Properties, modify the properties of the action area
|
||||||
and transition line.
|
and transition line.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
To preview the flow, select the \inlineimage live_preview.png
|
To preview the flow, select the \inlineimage live_preview.png
|
||||||
(\uicontrol {Show Live Preview}) button on the \uicontrol {Form Editor}
|
(\uicontrol {Show Live Preview}) button on the Design mode
|
||||||
toolbar or press \key {Alt+P}.
|
\l{Summary of Main Toolbar Actions}{toolbar} or press \key {Alt+P}.
|
||||||
|
|
||||||
\section1 Applying Effects to Transitions
|
\section1 Common Properties
|
||||||
|
|
||||||
You can apply effects, such as fade, move, or push to transitions. A fade
|
You can specify basic properties for \uicontrol {Flow Action Area}
|
||||||
effect makes the first screen appear to fade out, while the next screen
|
and \uicontrol {Flow Transition} components in the \l {Type}{Component},
|
||||||
fades in. A move effect makes the second screen appear to move in over the
|
\l {2D Geometry}{Geometry}, and \l Visibility groups.
|
||||||
first screen, while the push effect appears to make a screen push out the
|
|
||||||
previous one. You can also design and use custom effects.
|
|
||||||
|
|
||||||
The transition direction determines the direction the new screen appears
|
You can use the \l{Picking Colors}{color picker} to set line and fill
|
||||||
|
color.
|
||||||
|
|
||||||
|
In the \uicontrol Layout tab, you can use \l{Setting Anchors and Margins}
|
||||||
|
{anchors} to position the component.
|
||||||
|
|
||||||
|
In the \uicontrol Advanced tab, you can manage the more
|
||||||
|
\l{Specifying Developer Properties}{advanced properties} of components.
|
||||||
|
|
||||||
|
\section1 Flow Action Area Properties
|
||||||
|
|
||||||
|
\image studio-flow-action-area-properties.png "Flow Action Area properties"
|
||||||
|
|
||||||
|
You can specify some additional properties for action areas:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li Select the \uicontrol {Go back} check box to specify that the
|
||||||
|
transition will always take the user back to the previous flow item.
|
||||||
|
\li In the \uicontrol {Event IDs} field, specify the IDs of the
|
||||||
|
events to connect to, such as mouse, touch or keyboard events.
|
||||||
|
\li In the \uicontrol {Action type} field, select the type of the
|
||||||
|
mouse or touch input to use for triggering events.
|
||||||
|
\li In the \uicontrol {Line width} field, set the width of the
|
||||||
|
action area outline.
|
||||||
|
\li Select the \uicontrol {Dashed line} check box to draw a dashed
|
||||||
|
action area outline.
|
||||||
|
\li Select the \uicontrol Enabled check box to enable interaction
|
||||||
|
with the action area during preview.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
\section1 Flow Transition Properties
|
||||||
|
|
||||||
|
You can specify some additional properties for transitions between
|
||||||
|
\l{Adding Flow Items}{flow items}:
|
||||||
|
|
||||||
|
\image studio-flow-transition-properties.png "Flow Transition properties"
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li Select the \uicontrol Condition checkbox to activate the
|
||||||
|
transition. You can select \inlineimage icons/action-icon.png
|
||||||
|
to \l{Adding Bindings Between Properties}{bind} a condition
|
||||||
|
to the transition.
|
||||||
|
\li In the \uicontrol Question field, enter the text that will appear
|
||||||
|
next to the transition line. If the transition represents the
|
||||||
|
connection to a \uicontrol {Flow Decision} component, the
|
||||||
|
text will also be visible in the selection dialog that opens when
|
||||||
|
the \l{Simulating Conditions}{condition} is triggered.
|
||||||
|
\li In the \uicontrol {Event IDs} field, specify the IDs of the
|
||||||
|
events to connect to, such as mouse, touch or keyboard events.
|
||||||
|
\li In the \uicontrol From and \uicontrol To fields, select the
|
||||||
|
flow item where the transition starts and the one where it
|
||||||
|
ends.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
You can specify the following properties to change the appearance of
|
||||||
|
transition lines in \l{Form Editor}:
|
||||||
|
|
||||||
|
\image studio-flow-transition-line-properties.png "Flow Transition Line properties"
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li In the \uicontrol {Line width} field, set the width of the
|
||||||
|
transition line.
|
||||||
|
\li In the \uicontrol {In-offset}, \uicontrol {Out-offset}, and
|
||||||
|
\uicontrol {Break-offset} fields, set the start or end point of a
|
||||||
|
transition line or a break to the specified offset. This enables
|
||||||
|
you to move them up and down or left and right.
|
||||||
|
\li Select the \uicontrol {Dashed line} check box to draw a dashed line.
|
||||||
|
\li In the \uicontrol Type field, select \uicontrol Bezier to draw
|
||||||
|
transition lines as bezier curves.
|
||||||
|
\li In the \uicontrol Radius field, specify the corner radius for
|
||||||
|
default curves.
|
||||||
|
\li In the \uicontrol {Bezier factor} field, specify the factor that
|
||||||
|
modifies the positions of the control points used for a bezier
|
||||||
|
curve.
|
||||||
|
\li In the \uicontrol {Label position} field, set the position of
|
||||||
|
the value of the \uicontrol Question field in respect to the
|
||||||
|
transition start point.
|
||||||
|
\li Select the \uicontrol {Label flip side} check box to move the
|
||||||
|
\uicontrol Question value to the opposite side of the transition
|
||||||
|
line.
|
||||||
|
\endlist
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page studio-flow-effects.html
|
||||||
|
\previouspage studio-flow-action-area.html
|
||||||
|
\nextpage studio-flow-events.html
|
||||||
|
|
||||||
|
\title Applying Effects to Transitions
|
||||||
|
|
||||||
|
You can apply effects, such as fade, move, or push to
|
||||||
|
\l{Adding Action Areas and Transitions}{transitions} between
|
||||||
|
\l{Adding Flow Items}{flow items}. A fade effect makes the first
|
||||||
|
flow item appear to fade out, while the next flow item fades in.
|
||||||
|
A move effect makes the second flow item appear to move in over the
|
||||||
|
first flow item, while the push effect appears to make a flow item
|
||||||
|
push out the previous one. You can also design and use custom effects.
|
||||||
|
|
||||||
|
The transition direction determines the direction the new flow item appears
|
||||||
from: left, right, top, bottom. You can set the duration of the effect and
|
from: left, right, top, bottom. You can set the duration of the effect and
|
||||||
\l{Editing Easing Curves}{attach an easing curve} to the effect.
|
\l{Editing Easing Curves}{attach an easing curve} to the effect.
|
||||||
|
|
||||||
To add effects:
|
To add effects:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Select a transition line in \uicontrol {Form Editor}.
|
\li Select a transition line in \l {Form Editor}.
|
||||||
\li In the context menu, select \uicontrol {Flow} >
|
\li In the context menu, select \uicontrol {Flow} >
|
||||||
\uicontrol {Assign Flow Effects}, and then select the effect
|
\uicontrol {Assign Flow Effects}, and then select the effect
|
||||||
to apply.
|
to apply.
|
||||||
\li In \uicontrol Properties, modify the properties of the effect.
|
\li In \l Properties, modify the properties of the effect.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
To edit effect properties, select a transition, and then select
|
To edit effect properties later, select a transition, and then select
|
||||||
\uicontrol {Flow} > \uicontrol {Select Effect} in the context menu.
|
\uicontrol {Flow} > \uicontrol {Select Effect} in the context menu.
|
||||||
|
|
||||||
\section1 Simulating Events
|
\section1 Flow Effect Properties
|
||||||
|
|
||||||
While transition lines are useful for prototyping, in production you need to
|
You can specify basic properties for a \uicontrol {Flow Effect}
|
||||||
use the real signals from UI screens to control the flow of the application.
|
component in the \l Type and \l ID fields.
|
||||||
|
|
||||||
|
\image studio-flow-effect-properties.png "Flow Effect properties"
|
||||||
|
|
||||||
|
You can set the duration and easing curve of all flow effects:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li In the \uicontrol Duration field, specify the duration of the
|
||||||
|
effect.
|
||||||
|
\li Select the \inlineimage curve_editor.png
|
||||||
|
button to open \uicontrol {Easing Curve Editor} for attaching an
|
||||||
|
\l{Editing Easing Curves}{easing curve} to the effect.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
For a move or push effect, you can set some additional properties:
|
||||||
|
|
||||||
|
\image studio-flow-effect-push-properties.png "Flow Push Effect properties"
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li In the \uicontrol Direction field, specify the direction that
|
||||||
|
the target \uicontrol {Flow Item} appears from: left, right, top,
|
||||||
|
or bottom.
|
||||||
|
\li In the \uicontrol Scale field, set scaling for the effect.
|
||||||
|
\li In the \uicontrol {Incoming opacity} and
|
||||||
|
\uicontrol {Outgoing opacity} fields, specify the opacity of
|
||||||
|
the effect as a number between 0 and 1.
|
||||||
|
\li Select the \uicontrol Reveal check box to reveal the
|
||||||
|
\uicontrol {Flow Item} where the transition starts.
|
||||||
|
\endlist
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page studio-flow-events.html
|
||||||
|
\previouspage studio-flow-effects.html
|
||||||
|
\nextpage studio-flow-conditions.html
|
||||||
|
|
||||||
|
\title Simulating Events
|
||||||
|
|
||||||
|
While \l{Adding Action Areas and Transitions}{transition lines}
|
||||||
|
are useful for prototyping, in production you need to use the real
|
||||||
|
\l{Connecting Components to Signals}{signals} from UI
|
||||||
|
\l{glossary-component}{components} to control the flow of the application.
|
||||||
For this purpose, you can use action areas in a more advanced way, by
|
For this purpose, you can use action areas in a more advanced way, by
|
||||||
having them listen to signals from screens or the controls in them and
|
having them listen to signals from flow items or the controls in them and
|
||||||
by connecting these to the flow view. You can use keyboard shortcuts to
|
by connecting these to the \l{Adding Flow Views}{flow view}. You can use
|
||||||
simulate these events when you preview the UI.
|
keyboard shortcuts to simulate these events when you preview the UI.
|
||||||
|
|
||||||
When you use the wizard to create a \uicontrol {Flow View} item, select the
|
When you use the wizard to create a \uicontrol {Flow View} component, select
|
||||||
\uicontrol {Use event simulator} check box to add an event simulator to the
|
the \uicontrol {Use event simulator} check box to add an event simulator to
|
||||||
flow view.
|
the flow view.
|
||||||
|
|
||||||
You can create an event list where you assign keyboard shortcuts to events,
|
You can create an event list where you assign keyboard shortcuts to events,
|
||||||
and then use context-menu commands to attach the events to action areas or
|
and then use context-menu commands to attach the events to action areas or
|
||||||
transition lines.
|
transition lines.
|
||||||
|
|
||||||
|
\section1 Creating Event Lists
|
||||||
|
|
||||||
To create an event list:
|
To create an event list:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li In \uicontrol Navigator, select the \uicontrol EventListSimulator
|
|
||||||
type, and then select the \uicontrol Active check box in
|
|
||||||
\uicontrol Properties to activate the event simulator.
|
|
||||||
\li Select the \inlineimage icons/edit.png
|
\li Select the \inlineimage icons/edit.png
|
||||||
(\uicontrol {Show Event List}) button on the Design mode toolbar,
|
(\uicontrol {Show Event List}) button on the Design mode
|
||||||
or press \key {Alt+E}.
|
\l{Summary of Main Toolbar Actions}{toolbar}, or press \key {Alt+E}.
|
||||||
\image studio-flow-event-list.png "Event List Dialog"
|
\li In the \uicontrol {Event List} dialog, select \inlineimage plus.png
|
||||||
\li Select \inlineimage plus.png
|
|
||||||
to add a keyboard shortcut for triggering an event to the list.
|
to add a keyboard shortcut for triggering an event to the list.
|
||||||
\li In the \uicontrol Id field, enter an identifier for the event.
|
\image studio-flow-event-list.png "Event List dialog"
|
||||||
|
\li In the \uicontrol {Event ID} field, enter an identifier for the
|
||||||
|
event. You can search for existing events by entering search
|
||||||
|
criteria in the \uicontrol Filter field.
|
||||||
|
\li In the \uicontrol Description field, describe the keyboard shortcut.
|
||||||
\li In the \uicontrol Shortcut field, press the keyboard key that will
|
\li In the \uicontrol Shortcut field, press the keyboard key that will
|
||||||
trigger the event, and then select \uicontrol R to record the
|
trigger the event, and then select \uicontrol R to record the
|
||||||
keyboard shortcut. The key identifier appears in the field.
|
keyboard shortcut. The key identifier appears in the field.
|
||||||
\li In the \uicontrol Description field, describe the keyboard shortcut.
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
You can now assign the events to the action areas in the flow to use the
|
You can now assign the events to action areas and transitions.
|
||||||
keyboard shortcuts to trigger events when you preview the UI.
|
|
||||||
|
\section1 Assigning Events to Actions
|
||||||
|
|
||||||
To assign events to actions:
|
To assign events to actions:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li In \uicontrol Navigator, select an action area or transition line.
|
\li In \uicontrol Navigator, select an action area or transition line.
|
||||||
\li In the context menu, select \uicontrol {Flow} >
|
\li In the context menu, select \uicontrol {Event List} >
|
||||||
\uicontrol {Event List} > \uicontrol {Assign Events to Actions}.
|
\uicontrol {Assign Events to Actions}.
|
||||||
\li Select an event in the list, and then select \uicontrol Accept.
|
\image studio-flow-events-assign.png "Assign Events to Actions dialog"
|
||||||
|
\li In the \uicontrol ID field, select a transition or an action area
|
||||||
|
\inlineimage icons/flow-action-icon.png
|
||||||
|
. You can search for events by entering search criteria in the
|
||||||
|
\uicontrol Filter field.
|
||||||
|
\li To connect an event, select \uicontrol Connect next to an event in
|
||||||
|
the list. To release a connected event, select \uicontrol Release.
|
||||||
\li Press \key {Alt+P} to preview the UI.
|
\li Press \key {Alt+P} to preview the UI.
|
||||||
\li Double-click events in the event list or use the keyboard shortcuts
|
\li Select action areas in the preview, double-click events in the
|
||||||
to trigger events.
|
event list, or use the keyboard shortcuts to trigger events.
|
||||||
|
\image studio-flow-decision-preview.png "Event list in preview"
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section1 Simulating Conditions
|
If the event triggers a \l{Simulating Conditions}{flow decision}, you
|
||||||
|
can select the path to take to the next flow item.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page studio-flow-conditions.html
|
||||||
|
\previouspage studio-flow-events.html
|
||||||
|
\nextpage studio-flow-states.html
|
||||||
|
|
||||||
|
\title Simulating Conditions
|
||||||
|
|
||||||
Part of any complex UI is the conditional logic it uses to present its
|
Part of any complex UI is the conditional logic it uses to present its
|
||||||
state to users or to collect and process data from various sources. Data
|
state to users or to collect and process data from various sources. Data
|
||||||
@@ -238,88 +532,165 @@
|
|||||||
buttons and controls, sensor readings from arrays of equipment, or general
|
buttons and controls, sensor readings from arrays of equipment, or general
|
||||||
values received from backend or service APIs.
|
values received from backend or service APIs.
|
||||||
|
|
||||||
The \uicontrol {Flow Decision} type simulates conditions by displaying a
|
The \uicontrol {Flow Decision} component simulates conditions by displaying a
|
||||||
list of options you can choose from when you preview the flow. This enables
|
list of options you can choose from when you preview the flow. This enables
|
||||||
you to prototype complex interactions before you have access to the physical
|
you to prototype complex interactions before you have access to the physical
|
||||||
controls, backend, or sensor data that will be required for the production
|
controls, backend, or sensor data that will be required for the production
|
||||||
version.
|
version.
|
||||||
|
|
||||||
|
\image studio-flow-decision.png "Flow Decision in Form Editor"
|
||||||
|
|
||||||
To simulate conditions:
|
To simulate conditions:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Drag a \uicontrol {Flow Decision} QML type from \uicontrol Library
|
\li Drag a \uicontrol {Flow Decision} component from \l Library
|
||||||
to a flow view in \uicontrol Navigator or \uicontrol {Form Editor}.
|
to a \l{Adding Flow Views}{flow view} in \l Navigator or
|
||||||
\li Select the screen where you want the application to start in
|
\l {Form Editor}.
|
||||||
|
\li Select the flow item where you want the application to start in
|
||||||
\uicontrol Navigator or \uicontrol {Form Editor}, and then select
|
\uicontrol Navigator or \uicontrol {Form Editor}, and then select
|
||||||
\uicontrol {Flow} > \uicontrol {Add Start} in the context menu.
|
\uicontrol {Flow} > \uicontrol {Set Flow Start} in the context menu.
|
||||||
\li Create an action area for the component that will trigger the
|
\li Create an \l{Adding Action Areas and Transitions}{action area} for
|
||||||
condition and connect it to the flow decision.
|
the component that will trigger the condition and connect it to the
|
||||||
\li In \uicontrol Properties, \uicontrol Question field, enter the text
|
flow decision.
|
||||||
that will appear next to the transition line that represents the
|
|
||||||
connection to the flow decision type.
|
|
||||||
\li Select the flow decision, and then select \uicontrol Connect in the
|
\li Select the flow decision, and then select \uicontrol Connect in the
|
||||||
context menu to create connections to the screens that will open
|
context menu to create connections to the flow items that will open
|
||||||
depending on whether the condition is met.
|
depending on whether the condition is met.
|
||||||
\li In \uicontrol Properties, \uicontrol Title field, enter a title for
|
\li In \uicontrol Properties, \uicontrol {Dialog title} field, enter a
|
||||||
the selection dialog that opens when the condition is triggered.
|
title for the selection dialog that opens when the condition is
|
||||||
\li Select a transition line and add a descriptive text in the
|
triggered.
|
||||||
\uicontrol {Question} field to represent a choice in the selection
|
\li Select a transition line in \uicontrol Navigator or
|
||||||
dialog.
|
\uicontrol {Form Editor} and add a descriptive text in the
|
||||||
|
\uicontrol {Question} field in \uicontrol Properties to represent
|
||||||
|
a choice in the selection dialog.
|
||||||
|
\image studio-flow-transition-properties-question.png "Flow Transition properties"
|
||||||
\li Press \key {Alt+P} to preview the UI.
|
\li Press \key {Alt+P} to preview the UI.
|
||||||
|
\li Select action areas in the preview, double-click events in the
|
||||||
|
event list, or use the keyboard shortcuts to trigger events.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
When you preview the UI, you can click the action areas to display a dialog
|
Flow decisions are listed in a dialog where you can select which condition
|
||||||
that you can use to select which condition is met and see the results.
|
is met to see the results.
|
||||||
|
|
||||||
\image studio-flow-decision.png
|
\image studio-flow-decision-preview.png "Selection dialog for flow decision"
|
||||||
|
|
||||||
\section1 Applying States in Flows
|
\section1 Flow Decision Properties
|
||||||
|
|
||||||
You can use \l{Adding States}{states} in flows to modify the appearance of
|
You can specify basic properties for a \uicontrol {Flow Decision}
|
||||||
components on screens in response to user interaction, for example. For
|
component in the \l Type and \l ID fields.
|
||||||
this purpose, you use the \uicontrol {Flow Item} QML types availabe in
|
|
||||||
\uicontrol Library.
|
\image studio-flow-decision-properties.png "Flow Decision properties"
|
||||||
|
|
||||||
|
In the \uicontrol {Dialog title} field, enter a title for the selection
|
||||||
|
dialog that opens when the condition is triggered.
|
||||||
|
|
||||||
|
You can specify the following properties to change the appearance of the
|
||||||
|
flow decision icon \inlineimage icons/flow-decision-icon.png
|
||||||
|
:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li Select the \uicontrol {Show label} check box to display the ID
|
||||||
|
of the \uicontrol {Flow Decision} component in \l {Form Editor}.
|
||||||
|
\li In the \uicontrol {Label position} field, select the corner of
|
||||||
|
the flow decision icon to place the label in.
|
||||||
|
\li In the \uicontrol Size field, specify the size of the flow
|
||||||
|
decision icon.
|
||||||
|
\li In the \uicontrol Radius field, specify the radius of the flow
|
||||||
|
decision icon corners.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
You can use the \l{Picking Colors}{color picker} to set the outline and
|
||||||
|
fill color of the flow decision icon.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\page studio-flow-states.html
|
||||||
|
\previouspage studio-flow-conditions.html
|
||||||
|
\nextpage studio-flow-external-events.html
|
||||||
|
|
||||||
|
\title Applying States in Flows
|
||||||
|
|
||||||
|
You can use \l{Adding States}{states} in flows to modify the appearance
|
||||||
|
of \l{glossary-component}{components} in flow items in response to user
|
||||||
|
interaction, for example. For this purpose, you use the
|
||||||
|
\uicontrol {Flow Item} components available in \l Library.
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Select \uicontrol File > \uicontrol {New File or Project} >
|
\li Select \uicontrol File > \uicontrol {New File or Project} >
|
||||||
\uicontrol {Files and Classes} > \uicontrol {Qt Quick Files} >
|
\uicontrol {Files and Classes} > \uicontrol {Qt Quick Files} >
|
||||||
\uicontrol {Flow Item} to create a flow item.
|
\uicontrol {Flow Item} to create a flow item.
|
||||||
\li In \uicontrol States, add states to the flow item.
|
\li In \l States, add states to the flow item.
|
||||||
\li Open the .ui.qml file that contains the flow view in
|
\li Open the .ui.qml file that contains the \l{Adding Flow Views}
|
||||||
\uicontrol {Form Editor} and drag the flow item to the flow view
|
{flow view} in \l {Form Editor} and drag the flow item to the
|
||||||
in \uicontrol Navigator or \uicontrol {Form Editor}.
|
flow view in \l Navigator or \l {Form Editor}.
|
||||||
\li Drag an empty \uicontrol {Flow Item} QML type from the
|
\li Drag an empty \uicontrol {Flow Item} component from
|
||||||
\uicontrol Library view \uicontrol {Flow View} tab to the
|
\uicontrol Library > \uicontrol Components > \uicontrol {Flow View}
|
||||||
flow for each state that you added.
|
to the flow for each state that you added.
|
||||||
\li In \uicontrol Properties, in the \uicontrol {State change target}
|
\li In \l Properties, in the \uicontrol {State change target}
|
||||||
field, select the flow item that you created using the wizard.
|
field, select the flow item that you created using the wizard.
|
||||||
|
\image studio-flow-item-properties.png "Flow Item properties"
|
||||||
\li In the \uicontrol {Target state} field, select the state to
|
\li In the \uicontrol {Target state} field, select the state to
|
||||||
apply to the flow item.
|
apply to the flow item.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
You can now add action areas and flow decisions to apply the different
|
You can now add \l{Adding Action Areas and Transitions}{action areas} and
|
||||||
states.
|
\l{Simulating Conditions}{flow decisions} to apply the different states.
|
||||||
|
*/
|
||||||
|
|
||||||
\section1 Reacting to External Events
|
/*!
|
||||||
|
\page studio-flow-external-events.html
|
||||||
|
\previouspage studio-flow-states.html
|
||||||
|
\nextpage quick-components.html
|
||||||
|
|
||||||
|
\title Reacting to External Events
|
||||||
|
|
||||||
On mobile and embedded platforms, applications are usually integrated into
|
On mobile and embedded platforms, applications are usually integrated into
|
||||||
the platform, and therefore screens might pop-up from anywhere or at any
|
the platform and therefore screens might pop-up from anywhere or at any
|
||||||
time, based on a conditional event. For example, push notifications
|
time, based on a conditional event. For example, push notifications
|
||||||
appear on mobile devices and incoming call screens on a car's HMI.
|
appear on mobile devices and incoming call screens on a car's HMI.
|
||||||
|
|
||||||
You can use the \uicontrol {Flow Wildcard} type to model this type of
|
You can use the \uicontrol {Flow Wildcard} component to model this type of
|
||||||
screens in your flow, using real or simulated signals and conditions. You
|
screens in your \l{Adding Flow Views}{flow view} using real or simulated
|
||||||
can whitelist or blacklist wildcard events to prioritize them and stop some
|
\l{Connecting Components to Signals}{signals} and \l{Simulating Conditions}
|
||||||
screens from appearing on others. For example, you could block the incoming
|
{conditions}. You can add \l{Adding Flow Items}{flow items} to a positive
|
||||||
call screen from appearing on a warning screen for the engine, if you
|
list to prioritize them or to a negative list to stop some screens from
|
||||||
consider the warning more important.
|
appearing on others. For example, you could block the incoming call screen
|
||||||
|
from appearing on a warning screen for the engine if you consider the
|
||||||
|
warning more important.
|
||||||
|
|
||||||
To use wildcards:
|
To use wildcards:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Drag a \uicontrol {Flow Wildcard} QML type from \uicontrol Library
|
\li Drag a \uicontrol {Flow Wildcard} component from \l Library
|
||||||
to a flow view in \uicontrol Navigator or \uicontrol {Form Editor}.
|
to an \l{Adding Action Areas and Transitions}{action area} in
|
||||||
\li In \uicontrol Properties, add screens to the white and black list
|
\l Navigator or \l {Form Editor}.
|
||||||
for the screen.
|
\li In \l Properties, select flow items to add them to the
|
||||||
|
positive and negative list of the action area.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
\section1 Flow Wildcard Properties
|
||||||
|
|
||||||
|
You can specify basic properties for a \uicontrol {Flow Wildcard}
|
||||||
|
component in the \l Type and \l ID fields.
|
||||||
|
|
||||||
|
\image studio-flow-wildcard-properties.png "Flow Wildcard properties"
|
||||||
|
|
||||||
|
In the \uicontrol {Event IDs} field, specify the IDs of the events to
|
||||||
|
connect to, such as mouse, touch or keyboard events.
|
||||||
|
|
||||||
|
To give flow items high priority, select them in the
|
||||||
|
\uicontrol {Positive list} field. To block flow items,
|
||||||
|
select them in the \uicontrol {Negative list} field.
|
||||||
|
|
||||||
|
You can specify the following properties to change the appearance of the
|
||||||
|
wildcard icon \inlineimage icons/flow-wildcard-icon.png
|
||||||
|
:
|
||||||
|
|
||||||
|
\list
|
||||||
|
\li In the \uicontrol Size field, specify the size of the wildcard icon.
|
||||||
|
\li In the \uicontrol Radius field, specify the radius of the wildcard
|
||||||
|
icon corners.
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
You can use the \l{Picking Colors}{color picker} to set the outline and
|
||||||
|
fill color of the wildcard icon.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -27,27 +27,46 @@
|
|||||||
|
|
||||||
\section2 Creating Custom Controls
|
\section2 Creating Custom Controls
|
||||||
|
|
||||||
You can use project wizard templates to create a starting point for
|
You can use project wizard templates to create stylable UI controls based
|
||||||
a custom \l Button, \l [QtQuickControls2] {Pane}, \l {Stack Layout},
|
on the components in the Qt Quick Controls module:
|
||||||
\l [QtQuickControls2] {SwipeView}{Swipe View}, or \l Switch.
|
|
||||||
|
\list
|
||||||
|
\li \l Button
|
||||||
|
\li \l {Check Box}
|
||||||
|
\li \l {Slider and Dial}{Dial}
|
||||||
|
\li \l {Slider and Dial}{Slider}
|
||||||
|
\li \l {Spin Box}
|
||||||
|
\li \l Switch
|
||||||
|
\li \l [QtQuickControls2] {Pane}
|
||||||
|
\li \l {Stack Layout}
|
||||||
|
\li \l [QtQuickControls2] {SwipeView}{Swipe View}
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
You can edit the properties of the controls in all the preset
|
||||||
|
\l{Adding States}{states} to apply your own style to them.
|
||||||
|
|
||||||
|
\image studio-dial.png "A stylable Dial component"
|
||||||
|
|
||||||
|
To create stylable UI controls:
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Select \uicontrol File > \uicontrol {New File or Project} >
|
\li Select \uicontrol File > \uicontrol {New File or Project} >
|
||||||
\uicontrol {Files and Classes} > \uicontrol {Qt Quick Controls}.
|
\uicontrol {Files and Classes} > \uicontrol {Qt Quick Controls}.
|
||||||
\li Select the control to create, and then select \uicontrol Choose.
|
\li Select the control to create, and then select \uicontrol Choose.
|
||||||
|
|
||||||
\note Components are listed in the \uicontrol {My Components}
|
\note Components are listed in \l Library > \uicontrol Components >
|
||||||
tab of the \uicontrol Library only if the filename begins
|
\uicontrol {My Components} only if the filename begins with a
|
||||||
with a capital letter.
|
capital letter.
|
||||||
\li Edit component properties in the \uicontrol Properties view.
|
\li Edit component properties in the \l Properties view.
|
||||||
|
|
||||||
The available properties depend on the component type. You can
|
The available properties depend on the component type. You can
|
||||||
\l{Specifying Dynamic Properties}{add properties for components} in
|
\l{Specifying Dynamic Properties}{add properties for components} in
|
||||||
the \uicontrol Properties tab of the \uicontrol {Connection View}.
|
the \uicontrol Properties tab of the \uicontrol {Connection View}.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
For an example of using the \uicontrol Button template to create a button,
|
For an example of using the \uicontrol Button template to create a button
|
||||||
see \l{Creating a Push Button} in the \l{Log In UI - Part 1} tutorial.
|
and styling it, see \l{Creating a Push Button} in the \l{Log In UI - Part 1}
|
||||||
|
tutorial.
|
||||||
|
|
||||||
//! [creating studio components]
|
//! [creating studio components]
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -147,10 +147,15 @@
|
|||||||
List View. For more information, see \l{List and Grid Views}.
|
List View. For more information, see \l{List and Grid Views}.
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
\li \uicontrol {Qt Quick Controls}
|
\li \uicontrol {Qt Quick Controls} create stylable versions of the
|
||||||
|
components in the Qt Quick Controls module:
|
||||||
\list
|
\list
|
||||||
\li \l {Button}{Custom Button} creates a push button with a text
|
\li \l {Button}{Custom Button} creates a push button with a text
|
||||||
label.
|
label.
|
||||||
|
\li \l {Check Box}{Custom CheckBox} creates a check box.
|
||||||
|
\li \l {Slider and Dial}{Custom Dial} creates a dial.
|
||||||
|
\li \l {Slider and Dial}{Custom Slider} creates a slider.
|
||||||
|
\li \l {Spin Box}{Custom SpinBox} creates a spin box.
|
||||||
\li \l {Switch}{Custom Switch} creates a switch with on and off
|
\li \l {Switch}{Custom Switch} creates a switch with on and off
|
||||||
states.
|
states.
|
||||||
\li \l [Qt Quick Controls 2] {Pane} provides a background that
|
\li \l [Qt Quick Controls 2] {Pane} provides a background that
|
||||||
@@ -160,6 +165,7 @@
|
|||||||
\li \l [Qt Quick Controls 2] {SwipeView} enables users to
|
\li \l [Qt Quick Controls 2] {SwipeView} enables users to
|
||||||
navigate pages by swiping sideways.
|
navigate pages by swiping sideways.
|
||||||
\endlist
|
\endlist
|
||||||
|
For more information, see \l{Creating Custom Controls}.
|
||||||
\li \uicontrol ListModel adds a \l{Editing List Models}{list model} to
|
\li \uicontrol ListModel adds a \l{Editing List Models}{list model} to
|
||||||
the project.
|
the project.
|
||||||
\li \uicontrol {JavaScript File} generates files that you can use to
|
\li \uicontrol {JavaScript File} generates files that you can use to
|
||||||
|
|||||||
@@ -93,6 +93,16 @@
|
|||||||
\li \l{Creating UIs}
|
\li \l{Creating UIs}
|
||||||
\list
|
\list
|
||||||
\li \l{Designing Application Flows}
|
\li \l{Designing Application Flows}
|
||||||
|
\list
|
||||||
|
\li \l{Adding Flow Views}
|
||||||
|
\li \l{Adding Flow Items}
|
||||||
|
\li \l{Adding Action Areas and Transitions}
|
||||||
|
\li \l{Applying Effects to Transitions}
|
||||||
|
\li \l{Simulating Events}
|
||||||
|
\li \l{Simulating Conditions}
|
||||||
|
\li \l{Applying States in Flows}
|
||||||
|
\li \l{Reacting to External Events}
|
||||||
|
\endlist
|
||||||
\li \l{Creating Components}
|
\li \l{Creating Components}
|
||||||
\list
|
\list
|
||||||
\li \l{Shapes}
|
\li \l{Shapes}
|
||||||
|
|||||||
@@ -220,15 +220,13 @@
|
|||||||
|
|
||||||
\section1 Applying Materials to Models
|
\section1 Applying Materials to Models
|
||||||
|
|
||||||
To apply materials to \l {Adding 3D Models}{models}:
|
To apply materials to models, you should first delete the default material,
|
||||||
|
and then drag-and-drop a new material from \l Library to a model component
|
||||||
|
in \l Navigator.
|
||||||
|
|
||||||
\list 1
|
You can apply the same material to another component as well. Again,
|
||||||
\li Drag and drop a material component from \l Library to a model
|
delete the default material first. You should then select the component and
|
||||||
component in \l Navigator.
|
go to the \uicontrol Properties view. Find the \uicontrol Materials property,
|
||||||
\li Select the Model component.
|
select the \inlineimage plus.png
|
||||||
\li In the \uicontrol Properties view, select the material for the model
|
icon, and choose the new material in the dropdown menu.
|
||||||
in the \uicontrol Materials list.
|
|
||||||
\li Select the material component to edit the properties of the material
|
|
||||||
in the \uicontrol Properties view.
|
|
||||||
\endlist
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -35,6 +35,16 @@
|
|||||||
\QDS provides a set of pregenerated Qt Quick 3D materials that can be used
|
\QDS provides a set of pregenerated Qt Quick 3D materials that can be used
|
||||||
to create good-looking \l {Adding 3D Models}{models} quickly and easily.
|
to create good-looking \l {Adding 3D Models}{models} quickly and easily.
|
||||||
|
|
||||||
|
To apply 3D materials to models, you should first delete the default material,
|
||||||
|
and then drag-and-drop a new material from \l Library to a model component
|
||||||
|
in \l Navigator.
|
||||||
|
|
||||||
|
You can apply the same material to another component as well. Again,
|
||||||
|
delete the default material first. You should then select the component and
|
||||||
|
go to the \uicontrol Properties view. Find the \uicontrol Materials property,
|
||||||
|
select the \inlineimage plus.png
|
||||||
|
icon, and choose the new material in the dropdown menu.
|
||||||
|
|
||||||
To apply a 3D material to a component, drag-and-drop a material from
|
To apply a 3D material to a component, drag-and-drop a material from
|
||||||
\l Library > \uicontrol Components > \uicontrol QtQuick3D >
|
\l Library > \uicontrol Components > \uicontrol QtQuick3D >
|
||||||
\uicontrol {Qt Quick 3D Materials} to a model component in \l Navigator.
|
\uicontrol {Qt Quick 3D Materials} to a model component in \l Navigator.
|
||||||
|
|||||||
@@ -136,6 +136,4 @@
|
|||||||
specify a new image to use in the \uicontrol Source field.
|
specify a new image to use in the \uicontrol Source field.
|
||||||
|
|
||||||
\image studio-qtquick-3d-texture-properties.png "Texture properties"
|
\image studio-qtquick-3d-texture-properties.png "Texture properties"
|
||||||
|
|
||||||
\endlist
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ def get_arguments():
|
|||||||
action='store_true', default=False)
|
action='store_true', default=False)
|
||||||
parser.add_argument('--with-tests', help='Enable building of tests',
|
parser.add_argument('--with-tests', help='Enable building of tests',
|
||||||
action='store_true', default=False)
|
action='store_true', default=False)
|
||||||
|
parser.add_argument('--with-pch', help='Enable building with PCH',
|
||||||
|
action='store_true', default=False)
|
||||||
parser.add_argument('--add-path', help='Prepends a CMAKE_PREFIX_PATH to the build',
|
parser.add_argument('--add-path', help='Prepends a CMAKE_PREFIX_PATH to the build',
|
||||||
action='append', dest='prefix_paths', default=[])
|
action='append', dest='prefix_paths', default=[])
|
||||||
parser.add_argument('--add-module-path', help='Prepends a CMAKE_MODULE_PATH to the build',
|
parser.add_argument('--add-module-path', help='Prepends a CMAKE_MODULE_PATH to the build',
|
||||||
@@ -139,6 +141,10 @@ def common_cmake_arguments(args):
|
|||||||
if python_library:
|
if python_library:
|
||||||
cmake_args += ['-DPYTHON_LIBRARY=' + python_library[0],
|
cmake_args += ['-DPYTHON_LIBRARY=' + python_library[0],
|
||||||
'-DPYTHON_INCLUDE_DIR=' + os.path.join(args.python_path, 'include')]
|
'-DPYTHON_INCLUDE_DIR=' + os.path.join(args.python_path, 'include')]
|
||||||
|
|
||||||
|
pch_option = 'ON' if args.with_pch else 'OFF'
|
||||||
|
cmake_args += ['-DBUILD_WITH_PCH=' + pch_option]
|
||||||
|
|
||||||
return cmake_args
|
return cmake_args
|
||||||
|
|
||||||
def build_qtcreator(args, paths):
|
def build_qtcreator(args, paths):
|
||||||
@@ -170,9 +176,6 @@ def build_qtcreator(args, paths):
|
|||||||
'-DBUILD_EXECUTABLE_WIN64INTERRUPT=OFF',
|
'-DBUILD_EXECUTABLE_WIN64INTERRUPT=OFF',
|
||||||
'-DBUILD_LIBRARY_QTCREATORCDBEXT=OFF']
|
'-DBUILD_LIBRARY_QTCREATORCDBEXT=OFF']
|
||||||
|
|
||||||
# TODO this works around a CMake bug https://gitlab.kitware.com/cmake/cmake/issues/20119
|
|
||||||
cmake_args += ['-DBUILD_WITH_PCH=OFF']
|
|
||||||
|
|
||||||
ide_revision = common.get_commit_SHA(paths.src)
|
ide_revision = common.get_commit_SHA(paths.src)
|
||||||
if ide_revision:
|
if ide_revision:
|
||||||
cmake_args += ['-DIDE_REVISION=ON',
|
cmake_args += ['-DIDE_REVISION=ON',
|
||||||
|
|||||||
@@ -69,6 +69,14 @@ def build(args, paths):
|
|||||||
if not os.path.exists(paths.result):
|
if not os.path.exists(paths.result):
|
||||||
os.makedirs(paths.result)
|
os.makedirs(paths.result)
|
||||||
prefix_paths = [os.path.abspath(fp) for fp in args.prefix_paths] + [paths.qt_creator, paths.qt]
|
prefix_paths = [os.path.abspath(fp) for fp in args.prefix_paths] + [paths.qt_creator, paths.qt]
|
||||||
|
if common.is_mac_platform():
|
||||||
|
# --qtc-path may be
|
||||||
|
# "/path/Qt Creator.app/Contents/Resources",
|
||||||
|
# "/path/Qt Creator.app", or
|
||||||
|
# "/path",
|
||||||
|
# so add some variants to the prefix path
|
||||||
|
prefix_paths += [os.path.join(paths.qt_creator, 'Contents', 'Resources'),
|
||||||
|
os.path.join(paths.qt_creator, 'Qt Creator.app', 'Contents', 'Resources')]
|
||||||
prefix_paths = [common.to_posix_path(fp) for fp in prefix_paths]
|
prefix_paths = [common.to_posix_path(fp) for fp in prefix_paths]
|
||||||
separate_debug_info_option = 'ON' if args.with_debug_info else 'OFF'
|
separate_debug_info_option = 'ON' if args.with_debug_info else 'OFF'
|
||||||
cmake_args = ['cmake',
|
cmake_args = ['cmake',
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
|
||||||
# Remove when sharing with others.
|
# Remove when sharing with others.
|
||||||
|
@if %{JS: Util.isDirectory('%{QtCreatorBuild}/Qt Creator.app/Contents/Resources')}
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "%{QtCreatorBuild}/Qt Creator.app/Contents/Resources")
|
||||||
|
@else
|
||||||
|
@if %{JS: Util.isDirectory('%{QtCreatorBuild}/Contents/Resources')}
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "%{QtCreatorBuild}/Contents/Resources")
|
||||||
|
@else
|
||||||
list(APPEND CMAKE_PREFIX_PATH "%{QtCreatorBuild}")
|
list(APPEND CMAKE_PREFIX_PATH "%{QtCreatorBuild}")
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
|
|
||||||
project(%{PluginName})
|
project(%{PluginName})
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,10 @@ Create a build directory and run
|
|||||||
cmake -DCMAKE_PREFIX_PATH=<path_to_qtcreator> -DCMAKE_BUILD_TYPE=RelWithDebInfo <path_to_plugin_source>
|
cmake -DCMAKE_PREFIX_PATH=<path_to_qtcreator> -DCMAKE_BUILD_TYPE=RelWithDebInfo <path_to_plugin_source>
|
||||||
cmake --build .
|
cmake --build .
|
||||||
|
|
||||||
where `<path_to_qtcreator>` is the relative or absolute path to a Qt Creator build directory, or to
|
where `<path_to_qtcreator>` is the relative or absolute path to a Qt Creator build directory, or to a
|
||||||
a combined binary and development package, and `<path_to_plugin_source>` is the relative or absolute
|
combined binary and development package (Windows / Linux), or to the `Qt Creator.app/Contents/Resources/`
|
||||||
path to this plugin directory.
|
directory of a combined binary and development package (macOS), and `<path_to_plugin_source>` is the
|
||||||
|
relative or absolute path to this plugin directory.
|
||||||
|
|
||||||
## How to Run
|
## How to Run
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ Product {
|
|||||||
qbs.installSourceBase: project.ide_source_tree + "/src/share/3rdparty"
|
qbs.installSourceBase: project.ide_source_tree + "/src/share/3rdparty"
|
||||||
prefix: project.ide_source_tree + "/src/share/3rdparty/"
|
prefix: project.ide_source_tree + "/src/share/3rdparty/"
|
||||||
files: [
|
files: [
|
||||||
"fonts/**/*"
|
"fonts/**/*",
|
||||||
|
"package-manager/**/*",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
add_library(app_version INTERFACE)
|
add_library(app_version INTERFACE)
|
||||||
target_include_directories(app_version
|
target_include_directories(app_version
|
||||||
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
|
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
|
||||||
INTERFACE $<INSTALL_INTERFACE:include/src>)
|
INTERFACE $<INSTALL_INTERFACE:${IDE_HEADER_INSTALL_PATH}/src>)
|
||||||
install(TARGETS app_version EXPORT QtCreator)
|
install(TARGETS app_version EXPORT QtCreator)
|
||||||
|
|
||||||
add_subdirectory(libs)
|
add_subdirectory(libs)
|
||||||
@@ -16,20 +16,20 @@ install(
|
|||||||
${PROJECT_SOURCE_DIR}/HACKING
|
${PROJECT_SOURCE_DIR}/HACKING
|
||||||
${PROJECT_SOURCE_DIR}/LICENSE.GPL3-EXCEPT
|
${PROJECT_SOURCE_DIR}/LICENSE.GPL3-EXCEPT
|
||||||
${PROJECT_SOURCE_DIR}/README.md
|
${PROJECT_SOURCE_DIR}/README.md
|
||||||
DESTINATION ./
|
DESTINATION ${IDE_DATA_PATH}
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
|
|
||||||
install(
|
install(
|
||||||
DIRECTORY
|
DIRECTORY
|
||||||
${PROJECT_SOURCE_DIR}/scripts
|
${PROJECT_SOURCE_DIR}/scripts
|
||||||
DESTINATION ./
|
DESTINATION ${IDE_DATA_PATH}
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
USE_SOURCE_PERMISSIONS
|
USE_SOURCE_PERMISSIONS
|
||||||
)
|
)
|
||||||
|
|
||||||
install(EXPORT QtCreator
|
install(EXPORT QtCreator
|
||||||
DESTINATION "lib/cmake/QtCreator"
|
DESTINATION ${IDE_CMAKE_INSTALL_PATH}/QtCreator
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
NAMESPACE QtCreator::
|
NAMESPACE QtCreator::
|
||||||
FILE QtCreatorTargets.cmake
|
FILE QtCreatorTargets.cmake
|
||||||
@@ -106,6 +106,6 @@ install(
|
|||||||
${PROJECT_SOURCE_DIR}/cmake/QtcSeparateDebugInfo.cmake
|
${PROJECT_SOURCE_DIR}/cmake/QtcSeparateDebugInfo.cmake
|
||||||
${PROJECT_SOURCE_DIR}/cmake/QtcSeparateDebugInfo.Info.plist.in
|
${PROJECT_SOURCE_DIR}/cmake/QtcSeparateDebugInfo.Info.plist.in
|
||||||
${CMAKE_BINARY_DIR}/cmake/QtCreatorConfig.cmake
|
${CMAKE_BINARY_DIR}/cmake/QtCreatorConfig.cmake
|
||||||
DESTINATION lib/cmake/QtCreator
|
DESTINATION ${IDE_CMAKE_INSTALL_PATH}/QtCreator
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ configure_file(app_version.h.cmakein app_version.h ESCAPE_QUOTES)
|
|||||||
|
|
||||||
install(
|
install(
|
||||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/app_version.h
|
FILES ${CMAKE_CURRENT_BINARY_DIR}/app_version.h
|
||||||
DESTINATION include/src/app
|
DESTINATION ${IDE_HEADER_INSTALL_PATH}/src/app
|
||||||
COMPONENT Devel EXCLUDE_FROM_ALL
|
COMPONENT Devel EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -89,5 +89,8 @@ extend_qtc_executable(qtcreator
|
|||||||
DEPENDS Crashpad::Crashpad
|
DEPENDS Crashpad::Crashpad
|
||||||
)
|
)
|
||||||
if(BUILD_WITH_CRASHPAD)
|
if(BUILD_WITH_CRASHPAD)
|
||||||
install(FILES ${CRASHPAD_BIN_DIR}/crashpad_handler${CMAKE_EXECUTABLE_SUFFIX} DESTINATION "${IDE_LIBEXEC_PATH}")
|
install(
|
||||||
|
PROGRAMS ${CRASHPAD_BIN_DIR}/crashpad_handler${CMAKE_EXECUTABLE_SUFFIX}
|
||||||
|
DESTINATION "${IDE_LIBEXEC_PATH}"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/qlitehtml/src/CMakeLists.txt)
|
|||||||
set(QLITEHTML_EXPORT QtCreator)
|
set(QLITEHTML_EXPORT QtCreator)
|
||||||
set(QLITEHTML_DEVEL_COMPONENT Devel)
|
set(QLITEHTML_DEVEL_COMPONENT Devel)
|
||||||
set(QLITEHTML_DEVEL_EXCLUDE_FROM_ALL ON)
|
set(QLITEHTML_DEVEL_EXCLUDE_FROM_ALL ON)
|
||||||
set(QLITEHTML_HEADER_PATH "include/src/lib/qlitehtml")
|
set(QLITEHTML_HEADER_PATH "${IDE_HEADER_INSTALL_PATH}/src/lib/qlitehtml")
|
||||||
add_subdirectory(qlitehtml/src)
|
add_subdirectory(qlitehtml/src)
|
||||||
endif()
|
endif()
|
||||||
if(TARGET qlitehtml)
|
if(TARGET qlitehtml)
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ namespace ClangBackEnd {
|
|||||||
template <typename StatementFactory>
|
template <typename StatementFactory>
|
||||||
class FilePathStorage
|
class FilePathStorage
|
||||||
{
|
{
|
||||||
using ReadStatement = typename StatementFactory::ReadStatement;
|
template<int ResultCount>
|
||||||
|
using ReadStatement = typename StatementFactory::template ReadStatement<ResultCount>;
|
||||||
using WriteStatement = typename StatementFactory::WriteStatement;
|
using WriteStatement = typename StatementFactory::WriteStatement;
|
||||||
using Database = typename StatementFactory::Database;
|
using Database = typename StatementFactory::Database;
|
||||||
|
|
||||||
@@ -84,7 +85,7 @@ public:
|
|||||||
|
|
||||||
Utils::optional<int> readDirectoryId(Utils::SmallStringView directoryPath)
|
Utils::optional<int> readDirectoryId(Utils::SmallStringView directoryPath)
|
||||||
{
|
{
|
||||||
ReadStatement &statement = m_statementFactory.selectDirectoryIdFromDirectoriesByDirectoryPath;
|
auto &statement = m_statementFactory.selectDirectoryIdFromDirectoriesByDirectoryPath;
|
||||||
|
|
||||||
return statement.template value<int>(directoryPath);
|
return statement.template value<int>(directoryPath);
|
||||||
}
|
}
|
||||||
@@ -103,7 +104,7 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
||||||
|
|
||||||
ReadStatement &statement = m_statementFactory.selectDirectoryPathFromDirectoriesByDirectoryId;
|
auto &statement = m_statementFactory.selectDirectoryPathFromDirectoriesByDirectoryId;
|
||||||
|
|
||||||
auto optionalDirectoryPath = statement.template value<Utils::PathString>(directoryPathId);
|
auto optionalDirectoryPath = statement.template value<Utils::PathString>(directoryPathId);
|
||||||
|
|
||||||
@@ -123,9 +124,9 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
||||||
|
|
||||||
ReadStatement &statement = m_statementFactory.selectAllDirectories;
|
auto &statement = m_statementFactory.selectAllDirectories;
|
||||||
|
|
||||||
auto directories = statement.template values<Sources::Directory, 2>(256);
|
auto directories = statement.template values<Sources::Directory>(256);
|
||||||
|
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
||||||
@@ -164,7 +165,7 @@ public:
|
|||||||
|
|
||||||
int writeSourceId(int directoryId, Utils::SmallStringView sourceName)
|
int writeSourceId(int directoryId, Utils::SmallStringView sourceName)
|
||||||
{
|
{
|
||||||
WriteStatement &statement = m_statementFactory.insertIntoSources;
|
auto &statement = m_statementFactory.insertIntoSources;
|
||||||
|
|
||||||
statement.write(directoryId, sourceName);
|
statement.write(directoryId, sourceName);
|
||||||
|
|
||||||
@@ -173,7 +174,7 @@ public:
|
|||||||
|
|
||||||
Utils::optional<int> readSourceId(int directoryId, Utils::SmallStringView sourceName)
|
Utils::optional<int> readSourceId(int directoryId, Utils::SmallStringView sourceName)
|
||||||
{
|
{
|
||||||
ReadStatement &statement = m_statementFactory.selectSourceIdFromSourcesByDirectoryIdAndSourceName;
|
auto &statement = m_statementFactory.selectSourceIdFromSourcesByDirectoryIdAndSourceName;
|
||||||
|
|
||||||
return statement.template value<int>(directoryId, sourceName);
|
return statement.template value<int>(directoryId, sourceName);
|
||||||
}
|
}
|
||||||
@@ -183,9 +184,10 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
||||||
|
|
||||||
ReadStatement &statement = m_statementFactory.selectSourceNameAndDirectoryIdFromSourcesBySourceId;
|
auto &statement = m_statementFactory.selectSourceNameAndDirectoryIdFromSourcesBySourceId;
|
||||||
|
|
||||||
auto optionalSourceName = statement.template value<Sources::SourceNameAndDirectoryId, 2>(sourceId);
|
auto optionalSourceName = statement.template value<Sources::SourceNameAndDirectoryId>(
|
||||||
|
sourceId);
|
||||||
|
|
||||||
if (!optionalSourceName)
|
if (!optionalSourceName)
|
||||||
throw SourceNameIdDoesNotExists();
|
throw SourceNameIdDoesNotExists();
|
||||||
@@ -203,7 +205,7 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
||||||
|
|
||||||
ReadStatement &statement = m_statementFactory.selectDirectoryIdFromSourcesBySourceId;
|
auto &statement = m_statementFactory.selectDirectoryIdFromSourcesBySourceId;
|
||||||
|
|
||||||
auto optionalDirectoryId = statement.template value<int>(sourceId);
|
auto optionalDirectoryId = statement.template value<int>(sourceId);
|
||||||
|
|
||||||
@@ -223,9 +225,9 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
Sqlite::DeferredTransaction transaction{m_statementFactory.database};
|
||||||
|
|
||||||
ReadStatement &statement = m_statementFactory.selectAllSources;
|
auto &statement = m_statementFactory.selectAllSources;
|
||||||
|
|
||||||
auto sources = statement.template values<Sources::Source, 3>(8192);
|
auto sources = statement.template values<Sources::Source>(8192);
|
||||||
|
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,9 @@ class FilePathStorageSqliteStatementFactory
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Database = DatabaseType;
|
using Database = DatabaseType;
|
||||||
using ReadStatement = typename DatabaseType::ReadStatement;
|
template<int ResultCount>
|
||||||
using WriteStatement = typename DatabaseType::WriteStatement;
|
using ReadStatement = typename Database::template ReadStatement<ResultCount>;
|
||||||
|
using WriteStatement = typename Database::WriteStatement;
|
||||||
|
|
||||||
FilePathStorageSqliteStatementFactory(Database &database)
|
FilePathStorageSqliteStatementFactory(Database &database)
|
||||||
: database(database)
|
: database(database)
|
||||||
@@ -45,32 +46,28 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Database &database;
|
Database &database;
|
||||||
ReadStatement selectDirectoryIdFromDirectoriesByDirectoryPath{
|
ReadStatement<1> selectDirectoryIdFromDirectoriesByDirectoryPath{
|
||||||
"SELECT directoryId FROM directories WHERE directoryPath = ?",
|
"SELECT directoryId FROM directories WHERE directoryPath = ?", database};
|
||||||
database
|
ReadStatement<1> selectDirectoryPathFromDirectoriesByDirectoryId{
|
||||||
};
|
|
||||||
ReadStatement selectDirectoryPathFromDirectoriesByDirectoryId{
|
|
||||||
"SELECT directoryPath FROM directories WHERE directoryId = ?", database};
|
"SELECT directoryPath FROM directories WHERE directoryId = ?", database};
|
||||||
ReadStatement selectAllDirectories{"SELECT directoryPath, directoryId FROM directories", database};
|
ReadStatement<2> selectAllDirectories{"SELECT directoryPath, directoryId FROM directories",
|
||||||
|
database};
|
||||||
WriteStatement insertIntoDirectories{
|
WriteStatement insertIntoDirectories{
|
||||||
"INSERT INTO directories(directoryPath) VALUES (?)",
|
"INSERT INTO directories(directoryPath) VALUES (?)",
|
||||||
database
|
database
|
||||||
};
|
};
|
||||||
ReadStatement selectSourceIdFromSourcesByDirectoryIdAndSourceName{
|
ReadStatement<1> selectSourceIdFromSourcesByDirectoryIdAndSourceName{
|
||||||
"SELECT sourceId FROM sources WHERE directoryId = ? AND sourceName = ?",
|
"SELECT sourceId FROM sources WHERE directoryId = ? AND sourceName = ?", database};
|
||||||
database
|
ReadStatement<2> selectSourceNameAndDirectoryIdFromSourcesBySourceId{
|
||||||
};
|
"SELECT sourceName, directoryId FROM sources WHERE sourceId = ?", database};
|
||||||
ReadStatement selectSourceNameAndDirectoryIdFromSourcesBySourceId{
|
ReadStatement<1> selectDirectoryIdFromSourcesBySourceId{
|
||||||
"SELECT sourceName, directoryId FROM sources WHERE sourceId = ?",
|
|
||||||
database
|
|
||||||
};
|
|
||||||
ReadStatement selectDirectoryIdFromSourcesBySourceId{
|
|
||||||
"SELECT directoryId FROM sources WHERE sourceId = ?", database};
|
"SELECT directoryId FROM sources WHERE sourceId = ?", database};
|
||||||
WriteStatement insertIntoSources{
|
WriteStatement insertIntoSources{
|
||||||
"INSERT INTO sources(directoryId, sourceName) VALUES (?,?)",
|
"INSERT INTO sources(directoryId, sourceName) VALUES (?,?)",
|
||||||
database
|
database
|
||||||
};
|
};
|
||||||
ReadStatement selectAllSources{"SELECT sourceName, directoryId, sourceId FROM sources", database};
|
ReadStatement<3> selectAllSources{"SELECT sourceName, directoryId, sourceId FROM sources",
|
||||||
|
database};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ClangBackEnd
|
} // namespace ClangBackEnd
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ namespace ClangBackEnd {
|
|||||||
template<typename Database = Sqlite::Database>
|
template<typename Database = Sqlite::Database>
|
||||||
class ProjectPartsStorage final : public ProjectPartsStorageInterface
|
class ProjectPartsStorage final : public ProjectPartsStorageInterface
|
||||||
{
|
{
|
||||||
using ReadStatement = typename Database::ReadStatement;
|
template<int ResultCount>
|
||||||
|
using ReadStatement = typename Database::template ReadStatement<ResultCount>;
|
||||||
using WriteStatement = typename Database::WriteStatement;
|
using WriteStatement = typename Database::WriteStatement;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -52,7 +53,7 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{database};
|
Sqlite::DeferredTransaction transaction{database};
|
||||||
|
|
||||||
auto values = fetchProjectPartsStatement.template values<ProjectPartContainer, 8>(4096);
|
auto values = fetchProjectPartsStatement.template values<ProjectPartContainer>(4096);
|
||||||
|
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
||||||
@@ -91,7 +92,7 @@ public:
|
|||||||
Sqlite::DeferredTransaction transaction{database};
|
Sqlite::DeferredTransaction transaction{database};
|
||||||
|
|
||||||
for (ProjectPartId projectPartId : projectPartIds) {
|
for (ProjectPartId projectPartId : projectPartIds) {
|
||||||
auto value = fetchProjectPartByIdStatement.template value<ProjectPartContainer, 8>(
|
auto value = fetchProjectPartByIdStatement.template value<ProjectPartContainer>(
|
||||||
projectPartId.projectPathId);
|
projectPartId.projectPathId);
|
||||||
if (value) {
|
if (value) {
|
||||||
value->headerPathIds = fetchHeaders(projectPartId);
|
value->headerPathIds = fetchHeaders(projectPartId);
|
||||||
@@ -243,9 +244,9 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{database};
|
Sqlite::DeferredTransaction transaction{database};
|
||||||
|
|
||||||
ReadStatement &statement = getProjectPartArtefactsBySourceId;
|
auto &statement = getProjectPartArtefactsBySourceId;
|
||||||
|
|
||||||
auto value = statement.template value<ProjectPartArtefact, 8>(sourceId.filePathId);
|
auto value = statement.template value<ProjectPartArtefact>(sourceId.filePathId);
|
||||||
|
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
||||||
@@ -260,9 +261,9 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{database};
|
Sqlite::DeferredTransaction transaction{database};
|
||||||
|
|
||||||
ReadStatement &statement = getProjectPartArtefactsByProjectPartId;
|
auto &statement = getProjectPartArtefactsByProjectPartId;
|
||||||
|
|
||||||
auto value = statement.template value<ProjectPartArtefact, 8>(projectPartId.projectPathId);
|
auto value = statement.template value<ProjectPartArtefact>(projectPartId.projectPathId);
|
||||||
|
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
||||||
@@ -342,9 +343,9 @@ public:
|
|||||||
try {
|
try {
|
||||||
Sqlite::DeferredTransaction transaction{database};
|
Sqlite::DeferredTransaction transaction{database};
|
||||||
|
|
||||||
ReadStatement &statement = fetchAllProjectPartNamesAndIdsStatement;
|
auto &statement = fetchAllProjectPartNamesAndIdsStatement;
|
||||||
|
|
||||||
auto values = statement.template values<Internal::ProjectPartNameId, 2>(256);
|
auto values = statement.template values<Internal::ProjectPartNameId>(256);
|
||||||
|
|
||||||
transaction.commit();
|
transaction.commit();
|
||||||
|
|
||||||
@@ -357,18 +358,18 @@ public:
|
|||||||
public:
|
public:
|
||||||
Sqlite::ImmediateNonThrowingDestructorTransaction transaction;
|
Sqlite::ImmediateNonThrowingDestructorTransaction transaction;
|
||||||
Database &database;
|
Database &database;
|
||||||
mutable ReadStatement fetchProjectPartIdStatement{
|
mutable ReadStatement<1> fetchProjectPartIdStatement{
|
||||||
"SELECT projectPartId FROM projectParts WHERE projectPartName = ?", database};
|
"SELECT projectPartId FROM projectParts WHERE projectPartName = ?", database};
|
||||||
mutable WriteStatement insertProjectPartNameStatement{
|
mutable WriteStatement insertProjectPartNameStatement{
|
||||||
"INSERT INTO projectParts(projectPartName) VALUES (?)", database};
|
"INSERT INTO projectParts(projectPartName) VALUES (?)", database};
|
||||||
mutable ReadStatement fetchProjectPartNameStatement{
|
mutable ReadStatement<1> fetchProjectPartNameStatement{
|
||||||
"SELECT projectPartName FROM projectParts WHERE projectPartId = ?", database};
|
"SELECT projectPartName FROM projectParts WHERE projectPartId = ?", database};
|
||||||
mutable ReadStatement fetchProjectPartsStatement{
|
mutable ReadStatement<8> fetchProjectPartsStatement{
|
||||||
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
||||||
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
||||||
"FROM projectParts",
|
"FROM projectParts",
|
||||||
database};
|
database};
|
||||||
mutable ReadStatement fetchProjectPartByIdStatement{
|
mutable ReadStatement<8> fetchProjectPartByIdStatement{
|
||||||
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
||||||
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
||||||
"FROM projectParts WHERE projectPartId = ?",
|
"FROM projectParts WHERE projectPartId = ?",
|
||||||
@@ -378,13 +379,13 @@ public:
|
|||||||
"systemIncludeSearchPaths=?004, projectIncludeSearchPaths=?005, language=?006, "
|
"systemIncludeSearchPaths=?004, projectIncludeSearchPaths=?005, language=?006, "
|
||||||
"languageVersion=?007, languageExtension=?008 WHERE projectPartId = ?001",
|
"languageVersion=?007, languageExtension=?008 WHERE projectPartId = ?001",
|
||||||
database};
|
database};
|
||||||
mutable ReadStatement getProjectPartArtefactsBySourceId{
|
mutable ReadStatement<8> getProjectPartArtefactsBySourceId{
|
||||||
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
||||||
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
||||||
"FROM projectParts WHERE projectPartId = (SELECT "
|
"FROM projectParts WHERE projectPartId = (SELECT "
|
||||||
"projectPartId FROM projectPartsFiles WHERE sourceId = ?)",
|
"projectPartId FROM projectPartsFiles WHERE sourceId = ?)",
|
||||||
database};
|
database};
|
||||||
mutable ReadStatement getProjectPartArtefactsByProjectPartId{
|
mutable ReadStatement<8> getProjectPartArtefactsByProjectPartId{
|
||||||
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
"SELECT toolChainArguments, compilerMacros, systemIncludeSearchPaths, "
|
||||||
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
"projectIncludeSearchPaths, projectPartId, language, languageVersion, languageExtension "
|
||||||
"FROM projectParts WHERE projectPartId = ?",
|
"FROM projectParts WHERE projectPartId = ?",
|
||||||
@@ -397,17 +398,17 @@ public:
|
|||||||
"INSERT INTO projectPartsHeaders(projectPartId, sourceId) VALUES (?,?)", database};
|
"INSERT INTO projectPartsHeaders(projectPartId, sourceId) VALUES (?,?)", database};
|
||||||
WriteStatement insertProjectPartsSourcesStatement{
|
WriteStatement insertProjectPartsSourcesStatement{
|
||||||
"INSERT INTO projectPartsSources(projectPartId, sourceId) VALUES (?,?)", database};
|
"INSERT INTO projectPartsSources(projectPartId, sourceId) VALUES (?,?)", database};
|
||||||
mutable ReadStatement fetchProjectPartsHeadersByIdStatement{
|
mutable ReadStatement<1> fetchProjectPartsHeadersByIdStatement{
|
||||||
"SELECT sourceId FROM projectPartsHeaders WHERE projectPartId = ? ORDER BY sourceId",
|
"SELECT sourceId FROM projectPartsHeaders WHERE projectPartId = ? ORDER BY sourceId",
|
||||||
database};
|
database};
|
||||||
mutable ReadStatement fetchProjectPartsSourcesByIdStatement{
|
mutable ReadStatement<1> fetchProjectPartsSourcesByIdStatement{
|
||||||
"SELECT sourceId FROM projectPartsSources WHERE projectPartId = ? ORDER BY sourceId",
|
"SELECT sourceId FROM projectPartsSources WHERE projectPartId = ? ORDER BY sourceId",
|
||||||
database};
|
database};
|
||||||
mutable ReadStatement fetchProjectPrecompiledHeaderBuildTimeStatement{
|
mutable ReadStatement<1> fetchProjectPrecompiledHeaderBuildTimeStatement{
|
||||||
"SELECT projectPchBuildTime FROM precompiledHeaders WHERE projectPartId = ?", database};
|
"SELECT projectPchBuildTime FROM precompiledHeaders WHERE projectPartId = ?", database};
|
||||||
WriteStatement resetDependentIndexingTimeStampsStatement{
|
WriteStatement resetDependentIndexingTimeStampsStatement{
|
||||||
"UPDATE fileStatuses SET indexingTimeStamp = NULL WHERE sourceId = ?", database};
|
"UPDATE fileStatuses SET indexingTimeStamp = NULL WHERE sourceId = ?", database};
|
||||||
mutable ReadStatement fetchAllProjectPartNamesAndIdsStatement{
|
mutable ReadStatement<2> fetchAllProjectPartNamesAndIdsStatement{
|
||||||
"SELECT projectPartName, projectPartId FROM projectParts", database};
|
"SELECT projectPartName, projectPartId FROM projectParts", database};
|
||||||
};
|
};
|
||||||
} // namespace ClangBackEnd
|
} // namespace ClangBackEnd
|
||||||
|
|||||||
@@ -150,15 +150,20 @@ Utils::optional<LanguageClientValue<T>> JsonObject::optionalClientValue(const QS
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
QList<T> JsonObject::array(const QString &key) const
|
QList<T> JsonObject::array(const QString &key) const
|
||||||
{
|
{
|
||||||
return LanguageClientArray<T>(value(key)).toList();
|
const Utils::optional<QList<T>> &array = optionalArray<T>(key);
|
||||||
|
if (array.has_value())
|
||||||
|
return array.value();
|
||||||
|
qCDebug(conversionLog) << QString("Expected array under %1 in:").arg(key) << *this;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
Utils::optional<QList<T>> JsonObject::optionalArray(const QString &key) const
|
Utils::optional<QList<T>> JsonObject::optionalArray(const QString &key) const
|
||||||
{
|
{
|
||||||
using Result = Utils::optional<QList<T>>;
|
const QJsonValue &jsonValue = value(key);
|
||||||
return contains(key) ? Result(LanguageClientArray<T>(value(key)).toList())
|
if (jsonValue.isUndefined())
|
||||||
: Result(Utils::nullopt);
|
return Utils::nullopt;
|
||||||
|
return Utils::transform<QList<T>>(jsonValue.toArray(), &fromJsonValue<T>);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|||||||
@@ -30,15 +30,15 @@ add_qtc_library(Sqlite
|
|||||||
sqliteexception.cpp sqliteexception.h
|
sqliteexception.cpp sqliteexception.h
|
||||||
sqliteglobal.cpp sqliteglobal.h
|
sqliteglobal.cpp sqliteglobal.h
|
||||||
sqliteindex.h
|
sqliteindex.h
|
||||||
sqlitereadstatement.cpp sqlitereadstatement.h
|
sqlitereadstatement.h
|
||||||
sqlitereadwritestatement.cpp sqlitereadwritestatement.h
|
sqlitereadwritestatement.h
|
||||||
sqlitesessionchangeset.cpp sqlitesessionchangeset.h
|
sqlitesessionchangeset.cpp sqlitesessionchangeset.h
|
||||||
sqlitesessions.cpp sqlitesessions.h
|
sqlitesessions.cpp sqlitesessions.h
|
||||||
sqlitetable.h
|
sqlitetable.h
|
||||||
sqlitetransaction.h
|
sqlitetransaction.h
|
||||||
sqlitetransaction.h
|
sqlitetransaction.h
|
||||||
sqlitevalue.h
|
sqlitevalue.h
|
||||||
sqlitewritestatement.cpp sqlitewritestatement.h
|
sqlitewritestatement.h
|
||||||
sqlstatementbuilder.cpp sqlstatementbuilder.h
|
sqlstatementbuilder.cpp sqlstatementbuilder.h
|
||||||
sqlstatementbuilderexception.h
|
sqlstatementbuilderexception.h
|
||||||
tableconstraints.h
|
tableconstraints.h
|
||||||
|
|||||||
@@ -15,11 +15,8 @@ SOURCES += \
|
|||||||
$$PWD/sqlitedatabasebackend.cpp \
|
$$PWD/sqlitedatabasebackend.cpp \
|
||||||
$$PWD/sqliteexception.cpp \
|
$$PWD/sqliteexception.cpp \
|
||||||
$$PWD/sqliteglobal.cpp \
|
$$PWD/sqliteglobal.cpp \
|
||||||
$$PWD/sqlitereadstatement.cpp \
|
|
||||||
$$PWD/sqlitereadwritestatement.cpp \
|
|
||||||
$$PWD/sqlitesessionchangeset.cpp \
|
$$PWD/sqlitesessionchangeset.cpp \
|
||||||
$$PWD/sqlitesessions.cpp \
|
$$PWD/sqlitesessions.cpp \
|
||||||
$$PWD/sqlitewritestatement.cpp \
|
|
||||||
$$PWD/sqlstatementbuilder.cpp \
|
$$PWD/sqlstatementbuilder.cpp \
|
||||||
$$PWD/utf8string.cpp \
|
$$PWD/utf8string.cpp \
|
||||||
$$PWD/utf8stringvector.cpp \
|
$$PWD/utf8stringvector.cpp \
|
||||||
|
|||||||
@@ -10,12 +10,9 @@ SOURCES += \
|
|||||||
sqlitedatabaseconnectionproxy.cpp \
|
sqlitedatabaseconnectionproxy.cpp \
|
||||||
sqliteexception.cpp \
|
sqliteexception.cpp \
|
||||||
sqliteglobal.cpp \
|
sqliteglobal.cpp \
|
||||||
sqlitereadstatement.cpp \
|
|
||||||
sqlitereadwritestatement.cpp \
|
|
||||||
sqlitestatement.cpp \
|
sqlitestatement.cpp \
|
||||||
sqlitetransaction.cpp \
|
sqlitetransaction.cpp \
|
||||||
sqliteworkerthread.cpp \
|
sqliteworkerthread.cpp \
|
||||||
sqlitewritestatement.cpp \
|
|
||||||
sqlstatementbuilder.cpp \
|
sqlstatementbuilder.cpp \
|
||||||
utf8string.cpp \
|
utf8string.cpp \
|
||||||
utf8stringvector.cpp \
|
utf8stringvector.cpp \
|
||||||
|
|||||||
@@ -687,7 +687,8 @@ StringType textForColumn(sqlite3_stmt *sqlStatment, int column)
|
|||||||
|
|
||||||
BlobView blobForColumn(sqlite3_stmt *sqlStatment, int column)
|
BlobView blobForColumn(sqlite3_stmt *sqlStatment, int column)
|
||||||
{
|
{
|
||||||
const byte *blob = reinterpret_cast<const byte *>(sqlite3_column_blob(sqlStatment, column));
|
const std::byte *blob = reinterpret_cast<const std::byte *>(
|
||||||
|
sqlite3_column_blob(sqlStatment, column));
|
||||||
std::size_t size = std::size_t(sqlite3_column_bytes(sqlStatment, column));
|
std::size_t size = std::size_t(sqlite3_column_bytes(sqlStatment, column));
|
||||||
|
|
||||||
return {blob, size};
|
return {blob, size};
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ extern template SQLITE_EXPORT Utils::SmallStringView BaseStatement::fetchValue<U
|
|||||||
extern template SQLITE_EXPORT Utils::SmallString BaseStatement::fetchValue<Utils::SmallString>(int column) const;
|
extern template SQLITE_EXPORT Utils::SmallString BaseStatement::fetchValue<Utils::SmallString>(int column) const;
|
||||||
extern template SQLITE_EXPORT Utils::PathString BaseStatement::fetchValue<Utils::PathString>(int column) const;
|
extern template SQLITE_EXPORT Utils::PathString BaseStatement::fetchValue<Utils::PathString>(int column) const;
|
||||||
|
|
||||||
template <typename BaseStatement>
|
template<typename BaseStatement, int ResultCount>
|
||||||
class StatementImplementation : public BaseStatement
|
class StatementImplementation : public BaseStatement
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -173,9 +173,7 @@ public:
|
|||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void bindValues()
|
void bindValues() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename... ValueType>
|
template<typename... ValueType>
|
||||||
void bindValues(const ValueType&... values)
|
void bindValues(const ValueType&... values)
|
||||||
@@ -192,18 +190,15 @@ public:
|
|||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ResultType,
|
template<typename ResultType>
|
||||||
int ResultTypeCount = 1>
|
|
||||||
std::vector<ResultType> values(std::size_t reserveSize)
|
std::vector<ResultType> values(std::size_t reserveSize)
|
||||||
{
|
{
|
||||||
BaseStatement::checkColumnCount(ResultTypeCount);
|
|
||||||
|
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
std::vector<ResultType> resultValues;
|
std::vector<ResultType> resultValues;
|
||||||
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
|
|
||||||
while (BaseStatement::next())
|
while (BaseStatement::next())
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
emplaceBackValues(resultValues);
|
||||||
|
|
||||||
setMaximumResultCount(resultValues.size());
|
setMaximumResultCount(resultValues.size());
|
||||||
|
|
||||||
@@ -212,11 +207,9 @@ public:
|
|||||||
return resultValues;
|
return resultValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ResultType, int ResultTypeCount = 1, typename... QueryTypes>
|
template<typename ResultType, typename... QueryTypes>
|
||||||
auto values(std::size_t reserveSize, const QueryTypes &...queryValues)
|
auto values(std::size_t reserveSize, const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
BaseStatement::checkColumnCount(ResultTypeCount);
|
|
||||||
|
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
std::vector<ResultType> resultValues;
|
std::vector<ResultType> resultValues;
|
||||||
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
||||||
@@ -224,7 +217,7 @@ public:
|
|||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
while (BaseStatement::next())
|
while (BaseStatement::next())
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
emplaceBackValues(resultValues);
|
||||||
|
|
||||||
setMaximumResultCount(resultValues.size());
|
setMaximumResultCount(resultValues.size());
|
||||||
|
|
||||||
@@ -233,66 +226,16 @@ public:
|
|||||||
return resultValues;
|
return resultValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ResultType, int ResultTypeCount = 1, typename QueryElementType>
|
template<typename ResultType, typename... QueryTypes>
|
||||||
auto values(std::size_t reserveSize, const std::vector<QueryElementType> &queryValues)
|
|
||||||
{
|
|
||||||
BaseStatement::checkColumnCount(ResultTypeCount);
|
|
||||||
|
|
||||||
std::vector<ResultType> resultValues;
|
|
||||||
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
|
||||||
|
|
||||||
for (const QueryElementType &queryValue : queryValues) {
|
|
||||||
Resetter resetter{*this};
|
|
||||||
bindValues(queryValue);
|
|
||||||
|
|
||||||
while (BaseStatement::next())
|
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
|
||||||
|
|
||||||
setMaximumResultCount(resultValues.size());
|
|
||||||
|
|
||||||
resetter.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
return resultValues;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename ResultType, int ResultTypeCount = 1, typename... QueryElementTypes>
|
|
||||||
auto values(std::size_t reserveSize,
|
|
||||||
const std::vector<std::tuple<QueryElementTypes...>> &queryTuples)
|
|
||||||
{
|
|
||||||
BaseStatement::checkColumnCount(ResultTypeCount);
|
|
||||||
|
|
||||||
using Container = std::vector<ResultType>;
|
|
||||||
Container resultValues;
|
|
||||||
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
|
|
||||||
|
|
||||||
for (const auto &queryTuple : queryTuples) {
|
|
||||||
Resetter resetter{*this};
|
|
||||||
bindTupleValues(queryTuple);
|
|
||||||
|
|
||||||
while (BaseStatement::next())
|
|
||||||
emplaceBackValues<ResultTypeCount>(resultValues);
|
|
||||||
|
|
||||||
setMaximumResultCount(resultValues.size());
|
|
||||||
|
|
||||||
resetter.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
return resultValues;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename ResultType, int ResultTypeCount = 1, typename... QueryTypes>
|
|
||||||
auto value(const QueryTypes &...queryValues)
|
auto value(const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
BaseStatement::checkColumnCount(ResultTypeCount);
|
|
||||||
|
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
Utils::optional<ResultType> resultValue;
|
Utils::optional<ResultType> resultValue;
|
||||||
|
|
||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
if (BaseStatement::next())
|
if (BaseStatement::next())
|
||||||
resultValue = assignValue<Utils::optional<ResultType>, ResultTypeCount>();
|
resultValue = assignValue<Utils::optional<ResultType>>();
|
||||||
|
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
|
|
||||||
@@ -311,17 +254,15 @@ public:
|
|||||||
return statement.template fetchValue<Type>(0);
|
return statement.template fetchValue<Type>(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<int ResultTypeCount = 1, typename Callable, typename... QueryTypes>
|
template<typename Callable, typename... QueryTypes>
|
||||||
void readCallback(Callable &&callable, const QueryTypes &...queryValues)
|
void readCallback(Callable &&callable, const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
BaseStatement::checkColumnCount(ResultTypeCount);
|
|
||||||
|
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
|
|
||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
while (BaseStatement::next()) {
|
while (BaseStatement::next()) {
|
||||||
auto control = callCallable<ResultTypeCount>(callable);
|
auto control = callCallable(callable);
|
||||||
|
|
||||||
if (control == CallbackControl::Abort)
|
if (control == CallbackControl::Abort)
|
||||||
break;
|
break;
|
||||||
@@ -333,14 +274,12 @@ public:
|
|||||||
template<int ResultTypeCount = 1, typename Container, typename... QueryTypes>
|
template<int ResultTypeCount = 1, typename Container, typename... QueryTypes>
|
||||||
void readTo(Container &container, const QueryTypes &...queryValues)
|
void readTo(Container &container, const QueryTypes &...queryValues)
|
||||||
{
|
{
|
||||||
BaseStatement::checkColumnCount(ResultTypeCount);
|
|
||||||
|
|
||||||
Resetter resetter{*this};
|
Resetter resetter{*this};
|
||||||
|
|
||||||
bindValues(queryValues...);
|
bindValues(queryValues...);
|
||||||
|
|
||||||
while (BaseStatement::next())
|
while (BaseStatement::next())
|
||||||
emplaceBackValues<ResultTypeCount>(container);
|
emplaceBackValues(container);
|
||||||
|
|
||||||
resetter.reset();
|
resetter.reset();
|
||||||
}
|
}
|
||||||
@@ -399,18 +338,21 @@ private:
|
|||||||
int column;
|
int column;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename ContainerType,
|
constexpr int resultCount(int localResultCount) const
|
||||||
int... ColumnIndices>
|
{
|
||||||
|
return ResultCount < 0 ? localResultCount : ResultCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ContainerType, int... ColumnIndices>
|
||||||
void emplaceBackValues(ContainerType &container, std::integer_sequence<int, ColumnIndices...>)
|
void emplaceBackValues(ContainerType &container, std::integer_sequence<int, ColumnIndices...>)
|
||||||
{
|
{
|
||||||
container.emplace_back(ValueGetter(*this, ColumnIndices)...);
|
container.emplace_back(ValueGetter(*this, ColumnIndices)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <int ResultTypeCount,
|
template<typename ContainerType>
|
||||||
typename ContainerType>
|
|
||||||
void emplaceBackValues(ContainerType &container)
|
void emplaceBackValues(ContainerType &container)
|
||||||
{
|
{
|
||||||
emplaceBackValues(container, std::make_integer_sequence<int, ResultTypeCount>{});
|
emplaceBackValues(container, std::make_integer_sequence<int, ResultCount>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ResultOptionalType,
|
template <typename ResultOptionalType,
|
||||||
@@ -420,11 +362,10 @@ private:
|
|||||||
return ResultOptionalType(Utils::in_place, ValueGetter(*this, ColumnIndices)...);
|
return ResultOptionalType(Utils::in_place, ValueGetter(*this, ColumnIndices)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ResultOptionalType,
|
template<typename ResultOptionalType>
|
||||||
int ResultTypeCount>
|
|
||||||
ResultOptionalType assignValue()
|
ResultOptionalType assignValue()
|
||||||
{
|
{
|
||||||
return assignValue<ResultOptionalType>(std::make_integer_sequence<int, ResultTypeCount>{});
|
return assignValue<ResultOptionalType>(std::make_integer_sequence<int, ResultCount>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Callable, int... ColumnIndices>
|
template<typename Callable, int... ColumnIndices>
|
||||||
@@ -433,10 +374,10 @@ private:
|
|||||||
return std::invoke(callable, ValueGetter(*this, ColumnIndices)...);
|
return std::invoke(callable, ValueGetter(*this, ColumnIndices)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<int ResultTypeCount, typename Callable>
|
template<typename Callable>
|
||||||
CallbackControl callCallable(Callable &&callable)
|
CallbackControl callCallable(Callable &&callable)
|
||||||
{
|
{
|
||||||
return callCallable(callable, std::make_integer_sequence<int, ResultTypeCount>{});
|
return callCallable(callable, std::make_integer_sequence<int, ResultCount>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ValueType>
|
template<typename ValueType>
|
||||||
@@ -446,25 +387,12 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename ValueType, typename... ValueTypes>
|
template<typename ValueType, typename... ValueTypes>
|
||||||
void bindValuesByIndex(int index, const ValueType &value, const ValueTypes&... values)
|
void bindValuesByIndex(int index, const ValueType &value, const ValueTypes &...values)
|
||||||
{
|
{
|
||||||
BaseStatement::bind(index, value);
|
BaseStatement::bind(index, value);
|
||||||
bindValuesByIndex(index + 1, values...);
|
bindValuesByIndex(index + 1, values...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TupleType, std::size_t... ColumnIndices>
|
|
||||||
void bindTupleValuesElement(const TupleType &tuple, std::index_sequence<ColumnIndices...>)
|
|
||||||
{
|
|
||||||
bindValues(std::get<ColumnIndices>(tuple)...);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename TupleType,
|
|
||||||
typename ColumnIndices = std::make_index_sequence<std::tuple_size<TupleType>::value>>
|
|
||||||
void bindTupleValues(const TupleType &element)
|
|
||||||
{
|
|
||||||
bindTupleValuesElement(element, ColumnIndices());
|
|
||||||
}
|
|
||||||
|
|
||||||
void setMaximumResultCount(std::size_t count)
|
void setMaximumResultCount(std::size_t count)
|
||||||
{
|
{
|
||||||
m_maximumResultCount = std::max(m_maximumResultCount, count);
|
m_maximumResultCount = std::max(m_maximumResultCount, count);
|
||||||
|
|||||||