diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index 41cd8f3490d..48cef688cc9 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -9,7 +9,7 @@ on: env: QT_VERSION: 6.7.2 MACOS_DEPLOYMENT_TARGET: 11.0 - CLANG_VERSION: 18.1.7 + CLANG_VERSION: 19.1.0 ELFUTILS_VERSION: 0.175 CMAKE_VERSION: 3.30.3 NINJA_VERSION: 1.10.2 @@ -73,7 +73,20 @@ jobs: file(APPEND "$ENV{GITHUB_OUTPUT}" "tag=${{github.run_id}}\n") endif() - + - name: Setup Go 1.22.x + uses: actions/setup-go@v5 + with: + go-version: 1.22.x + - name: Install UPX + if: ${{ !startsWith(matrix.config.os, 'macos') }} + uses: crazy-max/ghaction-upx@v3 + with: + install-only: true + - name: Install UPX (macOS) + if: ${{ startsWith(matrix.config.os, 'macos') }} + run: | + brew update + brew install upx - name: Download Ninja and CMake shell: cmake -P {0} run: | @@ -141,7 +154,7 @@ jobs: COMMAND sudo apt install chrpath libgl1-mesa-dev libvulkan-dev libxcb-xinput-dev libxcb-xinerama0-dev libxkbcommon-dev libxkbcommon-x11-dev - libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xkb1 libxcb-randr0 libxcb-icccm4 + libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xkb1 libxcb-randr0 libxcb-icccm4 libsecret-1-dev xvfb RESULT_VARIABLE result ) @@ -477,15 +490,12 @@ jobs: - name: Download ccache archive shell: cmake -P {0} run: | - file(WRITE $ENV{GITHUB_WORKSPACE}/netrc.txt - "default login runneradmin password ${{ secrets.GITHUB_TOKEN }}") - foreach(page_id RANGE 1 10) file( DOWNLOAD "https://api.github.com/repos/${{ github.repository }}/actions/artifacts?per_page=100&page=${page_id}" - HTTPHEADER "Accept: application/vnd.github.v3+json" - NETRC_FILE "$ENV{GITHUB_WORKSPACE}/netrc.txt" - NETRC REQUIRED + HTTPHEADER "Accept: application/vnd.github+json" + HTTPHEADER "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" + HTTPHEADER "X-GitHub-Api-Version: 2022-11-28" SHOW_PROGRESS artifacts.json) file(READ artifacts.json artifacts_json) @@ -502,8 +512,9 @@ jobs: foreach(retry RANGE 10) file(DOWNLOAD "${download_url}" "${{ steps.ccache.outputs.archive_name }}.zip" - NETRC_FILE "$ENV{GITHUB_WORKSPACE}/netrc.txt" - NETRC REQUIRED + HTTPHEADER "Accept: application/vnd.github+json" + HTTPHEADER "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" + HTTPHEADER "X-GitHub-Api-Version: 2022-11-28" SHOW_PROGRESS) file(SIZE "${{ steps.ccache.outputs.archive_name }}.zip" fileSize) if (fileSize GREATER 0) diff --git a/.gitignore b/.gitignore index 6369b049a28..cd50124a7d9 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ .DS_Store .qmake.cache .qmake.stash +.qmlls.ini .vscode Makefile* Thumbs.db diff --git a/CMakeLists.txt b/CMakeLists.txt index d593903ad01..36ac23e0f3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.20) option(BUILD_DESIGNSTUDIO "Build and install design studio plugins, examples and settings." OFF) if (BUILD_DESIGNSTUDIO) @@ -113,10 +113,9 @@ find_package(Threads) find_package(Clang QUIET) # Crashpad -set(CRASHPAD_BACKEND_URL "" CACHE STRING "Crashpad backend URL") +set(CRASHPAD_BACKEND_URL "$ENV{QTC_CRASHPAD_BACKEND_URL}" CACHE STRING "Crashpad backend URL") set(BUILD_WITH_CRASHPAD OFF) # Linux is not supported for now -# x86_64;arm64 is not supported for now if(CRASHPAD_BACKEND_URL AND (WIN32 OR APPLE)) # Linux is not supported for now find_package(Crashpad QUIET) if(TARGET Crashpad::Crashpad) diff --git a/HACKING b/HACKING index b2582a035ac..91ccd2e9d43 100644 --- a/HACKING +++ b/HACKING @@ -8,11 +8,8 @@ https://wiki.qt.io/Setting_up_Gerrit#How_to_get_started_-_Gerrit_registration Qt Creator has integrated auto tests, and further external tests in the subdirectory 'tests'. -To build the integrated auto tests, build Qt Creator with the additional -QMake option TEST=1 - -To build also the auto tests, manual tests and unit tests in the 'tests' -subdirectory, use the QMake option BUILD_TESTS=1 +To build the auto tests, manual tests and unit tests in the 'tests' +subdirectory, configure with the CMake option WITH_TESTS=ON. Afterwards: diff --git a/README.md b/README.md index 274c5094868..14a08075fc2 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,11 @@ https://doc.qt.io/qtcreator/creator-overview.html The standalone binary packages support the following platforms: -* Windows 10 (64-bit) or later -* (K)Ubuntu Linux 22.04 (64-bit) or later -* macOS 11 or later +* Windows 10 (x86_64) or later +* Windows 11 (ARM64) or later +* (K)Ubuntu Linux 22.04 (x86_64) or later +* (K)Ubuntu Linux 24.04 (arm64) or later +* macOS 12 or later When you compile Qt Creator yourself, the Qt version that you build with determines the supported platforms. @@ -46,7 +48,7 @@ Prerequisites: * MinGW with GCC 11.2 or Visual Studio 2019 or later * Python 3.8 or later (optional, needed for the python enabled debug helper) * Debugging Tools for Windows (optional, for MSVC debugging support with CDB) -* On Mac OS X: latest Xcode +* On macOS: latest Xcode * On Linux: GCC 9 or later * LLVM/Clang 14 or later (optional, LLVM/Clang 17 is recommended. See [instructions](#getting-llvmclang-for-the-clang-code-model) on how to diff --git a/cmake/Findyaml-cpp.cmake b/cmake/Findyaml-cpp.cmake index b79056f67fe..06d518cf5db 100644 --- a/cmake/Findyaml-cpp.cmake +++ b/cmake/Findyaml-cpp.cmake @@ -10,7 +10,7 @@ find_package(yaml-cpp 0.5 QUIET NO_MODULE) if (yaml-cpp_FOUND) # target doesn't set include directory for some reason get_filename_component(yaml_cpp_include_dir "${YAML_CPP_INCLUDE_DIR}" ABSOLUTE) - if (NOT EXISTS yaml_cpp_include_dir) + if (NOT EXISTS ${yaml_cpp_include_dir}) unset(yaml_cpp_include_dir) unset(yaml_cpp_include_dir CACHE) find_path(yaml_cpp_include_dir yaml-cpp/yaml.h) diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index 6e3ff0e1661..e05a48563bc 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -331,10 +331,29 @@ function(add_qtc_library name) endif() endfunction(add_qtc_library) + +function(markdown_to_json resultVarName filepath) + file(STRINGS ${filepath} markdown) + set(result "") + foreach(line IN LISTS markdown) + string(REPLACE "\\" "\\\\" line "${line}") # Replace \ with \\ + string(REPLACE "\"" "\\\"" line "${line}") # Replace " with \" + string(PREPEND line " \"") + string(APPEND line "\"") + # We have to escape ; because list(APPEND ...) will split the string at ; + # list(JOIN ...) will replace the \; with ; again + string(REPLACE ";" "\\;" line "${line}") + list(APPEND result "${line}") + endforeach() + list(JOIN result ",\n" result) + set(result "[\n${result}\n ]") + set("${resultVarName}" ${result} PARENT_SCOPE) +endfunction() + function(add_qtc_plugin target_name) cmake_parse_arguments(_arg "SKIP_INSTALL;INTERNAL_ONLY;SKIP_TRANSLATION;EXPORT;SKIP_PCH" - "VERSION;COMPAT_VERSION;PLUGIN_PATH;PLUGIN_NAME;OUTPUT_NAME;BUILD_DEFAULT;PLUGIN_CLASS" + "VERSION;COMPAT_VERSION;PLUGIN_PATH;PLUGIN_NAME;OUTPUT_NAME;BUILD_DEFAULT;PLUGIN_CLASS;LONG_DESCRIPTION_MD;LICENSE_MD" "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;PUBLIC_DEFINES;INCLUDES;SYSTEM_INCLUDES;PUBLIC_INCLUDES;PUBLIC_SYSTEM_INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;EXTRA_TRANSLATIONS;PLUGIN_DEPENDS;PLUGIN_RECOMMENDS;PLUGIN_TEST_DEPENDS;PLUGIN_MANUAL_DEPENDS;PROPERTIES;PRIVATE_COMPILE_OPTIONS;PUBLIC_COMPILE_OPTIONS" ${ARGN} ) @@ -346,6 +365,11 @@ function(add_qtc_plugin target_name) message(FATAL_ERROR "add_qtc_plugin had unparsed arguments") endif() + # ignore _arg_EXPORT for main repository and super repository build + if (QTC_MERGE_BINARY_DIR) + set(_arg_EXPORT "") + endif() + update_cached_list(__QTC_PLUGINS "${target_name}") set(name ${target_name}) @@ -395,38 +419,35 @@ function(add_qtc_plugin target_name) endif() # Generate dependency list: - find_dependent_plugins(_DEP_PLUGINS ${_arg_PLUGIN_DEPENDS}) - set(_arg_DEPENDENCY_STRING "\"Dependencies\" : [\n") - foreach(i IN LISTS _DEP_PLUGINS) + foreach(i IN LISTS _arg_PLUGIN_DEPENDS) + get_property(_v TARGET "${i}" PROPERTY QTC_PLUGIN_VERSION) if (i MATCHES "^QtCreator::") - set(_v ${IDE_VERSION}) string(REPLACE "QtCreator::" "" i ${i}) - else() - get_property(_v TARGET "${i}" PROPERTY _arg_VERSION) endif() + string(TOLOWER ${i} i) string(APPEND _arg_DEPENDENCY_STRING - " { \"Name\" : \"${i}\", \"Version\" : \"${_v}\" }" + " { \"Id\" : \"${i}\", \"Version\" : \"${_v}\" }" ) endforeach(i) foreach(i IN LISTS _arg_PLUGIN_RECOMMENDS) + get_property(_v TARGET "${i}" PROPERTY QTC_PLUGIN_VERSION) if (i MATCHES "^QtCreator::") - set(_v ${IDE_VERSION}) string(REPLACE "QtCreator::" "" i ${i}) - else() - get_property(_v TARGET "${i}" PROPERTY _arg_VERSION) endif() + string(TOLOWER ${i} i) string(APPEND _arg_DEPENDENCY_STRING - " { \"Name\" : \"${i}\", \"Version\" : \"${_v}\", \"Type\" : \"optional\" }" + " { \"Id\" : \"${i}\", \"Version\" : \"${_v}\", \"Type\" : \"optional\" }" ) endforeach(i) foreach(i IN LISTS _arg_PLUGIN_TEST_DEPENDS) if (i MATCHES "^QtCreator::") string(REPLACE "QtCreator::" "" i ${i}) endif() + string(TOLOWER ${i} i) set(_v ${IDE_VERSION}) string(APPEND _arg_DEPENDENCY_STRING - " { \"Name\" : \"${i}\", \"Version\" : \"${_v}\", \"Type\" : \"test\" }" + " { \"Id\" : \"${i}\", \"Version\" : \"${_v}\", \"Type\" : \"test\" }" ) endforeach(i) list(LENGTH _arg_PLUGIN_MANUAL_DEPENDS manualdep_len) @@ -436,11 +457,12 @@ function(add_qtc_plugin target_name) foreach (i RANGE 0 ${manualdep_maxindex} 3) math(EXPR dep_version_i "${i} + 1") math(EXPR dep_type_i "${i} + 2") - list(GET _arg_PLUGIN_MANUAL_DEPENDS ${i} dep_name) + list(GET _arg_PLUGIN_MANUAL_DEPENDS ${i} dep_id) list(GET _arg_PLUGIN_MANUAL_DEPENDS ${dep_version_i} dep_version) list(GET _arg_PLUGIN_MANUAL_DEPENDS ${dep_type_i} dep_type) + string(TOLOWER ${dep_id} dep_id) string(APPEND _arg_DEPENDENCY_STRING - " { \"Name\" : \"${dep_name}\", \"Version\" : \"${dep_version}\", \"Type\" : \"${dep_type}\" }" + " { \"Id\" : \"${dep_id}\", \"Version\" : \"${dep_version}\", \"Type\" : \"${dep_type}\" }" ) endforeach() endif() @@ -452,6 +474,19 @@ function(add_qtc_plugin target_name) set(IDE_PLUGIN_DEPENDENCIES ${_arg_DEPENDENCY_STRING}) + set(LONG_DESCRIPTION "[]") + if (_arg_LONG_DESCRIPTION_MD) + markdown_to_json(LONG_DESCRIPTION ${_arg_LONG_DESCRIPTION_MD}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${_arg_LONG_DESCRIPTION_MD}) + endif() + + set(LICENSE "[]") + if (_arg_LICENSE_MD) + markdown_to_json(LICENSE ${_arg_LICENSE_MD}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${_arg_LICENSE_MD}) + endif() + + ### Configure plugin.json file: if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${name}.json.in") list(APPEND _arg_SOURCES ${name}.json.in) @@ -488,6 +523,12 @@ function(add_qtc_plugin target_name) if (WITH_TESTS) set(TEST_DEFINES WITH_TESTS SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") + else() + # Many source files have Q_OBJECT inside #ifdef WITH_TESTS. Automoc uses + # a very basic parser that detects this file as mocable, but moc shows a + # warning: "No relevant classes found." + # Just suppress the warning on this case. + set_target_properties(${target_name} PROPERTIES AUTOMOC_MOC_OPTIONS "-nw") endif() if (WITH_SANITIZE) @@ -501,8 +542,8 @@ function(add_qtc_plugin target_name) PUBLIC_SYSTEM_INCLUDES ${_arg_PUBLIC_SYSTEM_INCLUDES} DEFINES ${DEFAULT_DEFINES} ${_arg_DEFINES} ${TEST_DEFINES} PUBLIC_DEFINES ${_arg_PUBLIC_DEFINES} - DEPENDS ${_arg_DEPENDS} ${_DEP_PLUGINS} ${IMPLICIT_DEPENDS} - PUBLIC_DEPENDS ${_arg_PUBLIC_DEPENDS} + DEPENDS ${_arg_DEPENDS} ${IMPLICIT_DEPENDS} + PUBLIC_DEPENDS ${_arg_PUBLIC_DEPENDS} ${_arg_PLUGIN_DEPENDS} EXPLICIT_MOC ${_arg_EXPLICIT_MOC} SKIP_AUTOMOC ${_arg_SKIP_AUTOMOC} EXTRA_TRANSLATIONS ${_arg_EXTRA_TRANSLATIONS} @@ -552,8 +593,7 @@ function(add_qtc_plugin target_name) CXX_EXTENSIONS OFF CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON - _arg_DEPENDS "${_arg_PLUGIN_DEPENDS}" - _arg_VERSION "${_arg_VERSION}" + QTC_PLUGIN_VERSION "${_arg_VERSION}" BUILD_RPATH "${_PLUGIN_RPATH};${CMAKE_BUILD_RPATH}" INSTALL_RPATH "${_PLUGIN_RPATH};${CMAKE_INSTALL_RPATH}" LIBRARY_OUTPUT_DIRECTORY "${_output_binary_dir}/${plugin_dir}" @@ -566,7 +606,8 @@ function(add_qtc_plugin target_name) ${_arg_PROPERTIES} ) - set_property(TARGET ${target_name} APPEND PROPERTY EXPORT_PROPERTIES "QTC_PLUGIN_CLASS_NAME") + set_property(TARGET ${target_name} APPEND PROPERTY EXPORT_PROPERTIES + "QTC_PLUGIN_CLASS_NAME;QTC_PLUGIN_VERSION") if (NOT _arg_SKIP_PCH) enable_pch(${target_name}) diff --git a/cmake/QtCreatorAPIInternal.cmake b/cmake/QtCreatorAPIInternal.cmake index 928c7fc22e8..ef7b55ff830 100644 --- a/cmake/QtCreatorAPIInternal.cmake +++ b/cmake/QtCreatorAPIInternal.cmake @@ -23,7 +23,9 @@ list(APPEND DEFAULT_DEFINES QT_NO_JAVA_STYLE_ITERATORS QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII QT_NO_FOREACH QT_DISABLE_DEPRECATED_BEFORE=0x050900 + QT_DISABLE_DEPRECATED_UP_TO=0x050900 QT_WARN_DEPRECATED_BEFORE=0x060400 + QT_WARN_DEPRECATED_UP_TO=0x060400 QT_USE_QSTRINGBUILDER ) @@ -354,33 +356,6 @@ function(add_qtc_depends target_name) endforeach() endfunction() -function(find_dependent_plugins varName) - set(_RESULT ${ARGN}) - - foreach(i ${ARGN}) - if(NOT TARGET ${i}) - continue() - endif() - get_property(_class_name TARGET "${i}" PROPERTY QTC_PLUGIN_CLASS_NAME) - if (NOT _class_name) - message(SEND_ERROR "${i} is a library, not a plugin!") - endif() - set(_dep) - get_property(_dep TARGET "${i}" PROPERTY _arg_DEPENDS) - if (_dep) - find_dependent_plugins(_REC ${_dep}) - list(APPEND _RESULT ${_REC}) - endif() - endforeach() - - if (_RESULT) - list(REMOVE_DUPLICATES _RESULT) - list(SORT _RESULT) - endif() - - set("${varName}" ${_RESULT} PARENT_SCOPE) -endfunction() - function(check_library_dependencies) foreach(i ${ARGN}) if (NOT TARGET ${i}) diff --git a/cmake/QtCreatorDocumentation.cmake b/cmake/QtCreatorDocumentation.cmake index bf679d2188f..101088c78c4 100644 --- a/cmake/QtCreatorDocumentation.cmake +++ b/cmake/QtCreatorDocumentation.cmake @@ -265,8 +265,8 @@ function(add_qtc_documentation qdocconf_file) # Set up environment for qdoc: set(QTC_VERSION "${IDE_VERSION_DISPLAY}") - set(QTCREATOR_COPYRIGHT_YEAR "${IDE_COPYRIGHT_YEAR}") string(REPLACE "." "" QTC_VERSION_TAG "${IDE_VERSION}") + string(REPLACE "(C)" "©\\\;" QTCREATOR_COPYRIGHT "${IDE_COPYRIGHT}") set(QDOC_INDEX_DIR "${QT_INSTALL_DOCS}") if (QT_INSTALL_DOCS_src) set(QT_INSTALL_DOCS "${QT_INSTALL_DOCS_src}") @@ -274,7 +274,7 @@ function(add_qtc_documentation qdocconf_file) list(APPEND _qdoc_params ENVIRONMENT_EXPORTS IDE_ID IDE_CASED_ID IDE_DISPLAY_NAME QTC_DOCS_DIR QTC_VERSION QTC_VERSION_TAG - QTCREATOR_COPYRIGHT_YEAR + QTCREATOR_COPYRIGHT QT_INSTALL_DOCS QDOC_INDEX_DIR ${_arg_ENVIRONMENT_EXPORTS} ) diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index c17aa915945..182b7369af0 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,7 +1,6 @@ -set(IDE_VERSION "14.0.2") # The IDE version. -set(IDE_VERSION_COMPAT "14.0.0") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "14.0.2") # The IDE display version. -set(IDE_COPYRIGHT_YEAR "2024") # The IDE current copyright year. +set(IDE_VERSION "15.0.0") # The IDE version. +set(IDE_VERSION_COMPAT "15.0.0") # The IDE Compatibility version. +set(IDE_VERSION_DISPLAY "15.0.0") # The IDE display version. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. set(IDE_DISPLAY_NAME "Qt Creator") # The IDE display name. @@ -9,7 +8,8 @@ set(IDE_ID "qtcreator") # The IDE id (no spaces, l set(IDE_CASED_ID "QtCreator") # The cased IDE id (no spaces!) set(IDE_BUNDLE_IDENTIFIER "org.qt-project.${IDE_ID}") # The macOS application bundle identifier. set(IDE_APP_ID "org.qt-project.${IDE_ID}") # The free desktop application identifier. - +set(IDE_AUTHOR "The Qt Company Ltd. and other contributors.") +set(IDE_COPYRIGHT "Copyright (C) ${IDE_AUTHOR}") set(PROJECT_USER_FILE_EXTENSION .user) set(IDE_DOC_FILE "qtcreator/qtcreator.qdocconf") diff --git a/cmake/QtCreatorTranslations.cmake b/cmake/QtCreatorTranslations.cmake index f7774194ce8..7379f1e60cc 100644 --- a/cmake/QtCreatorTranslations.cmake +++ b/cmake/QtCreatorTranslations.cmake @@ -1,7 +1,5 @@ # Defines function add_translation_targets -include(${CMAKE_CURRENT_LIST_DIR}/Utils.cmake) - function(_extract_ts_data_from_targets outprefix) set(_sources "") set(_includes "") @@ -20,7 +18,9 @@ function(_extract_ts_data_from_targets outprefix) if (NOT _skip_translation) if(_include_dirs) - remove_generator_expressions(_include_dirs ${_include_dirs}) + list(FILTER _include_dirs EXCLUDE REGEX "\\$]+)>" "\\1") list(APPEND _includes ${_include_dirs}) endif() diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index 64473a926c2..9c4b95af990 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -119,11 +119,3 @@ function(configure_qml_designer Qt6_VERSION) endif() endif() endfunction() - -function(remove_generator_expressions out_var list) - set(result ${list}) - list(FILTER result EXCLUDE REGEX "\\$]+)>" "\\1") - set(${out_var} ${result} PARENT_SCOPE) -endfunction() diff --git a/coin/instructions/build.yaml b/coin/instructions/build.yaml index b98cfbafbcc..3e8890c88d9 100644 --- a/coin/instructions/build.yaml +++ b/coin/instructions/build.yaml @@ -1,48 +1,33 @@ type: Group instructions: - - type: MakeDirectory - directory: "{{.AgentWorkingDir}}/build/qt_temp" - - type: Group - instructions: - - type: EnvironmentVariable - variableName: QTC_TEST_OPTION - variableValue: "--with-tests" - enable_if: - condition: property - property: features - not_contains_value: DisableTests - - type: Group instructions: - type: ExecuteCommand - command: "curl --fail -L --retry 5 --retry-delay 5 -o {{.AgentWorkingDir}}/build/qt_temp/elfutils-release_0.175qt-linux-x86_64.7z https://master.qt.io/development_releases/prebuilt/elfutils/elfutils-release_0.175qt-linux-x86_64.7z" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to download elfutils package, check logs." - - type: ExecuteCommand - command: "7z x -y {{.AgentWorkingDir}}/build/qt_temp/elfutils-release_0.175qt-linux-x86_64.7z -o{{.AgentWorkingDir}}/build/qt_temp/elfutils" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to extract elfutils package, check logs." - - type: ExecuteCommand - command: "curl --fail -L --retry 5 --retry-delay 5 -o {{.AgentWorkingDir}}/build/qt_temp/libclang.7z {{.Env.LLVM_BASE_URL}}-linux-Rhel8.6-gcc10.3-x86_64.7z" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to download LLVM package, check logs." - - type: ExecuteCommand - command: "7z x -y {{.AgentWorkingDir}}/build/qt_temp/libclang.7z -o{{.AgentWorkingDir}}/build/qt_temp/" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to extract LLVM package, check logs." - - type: ExecuteCommand - command: "python3 -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/build.py --build-type {{.Env.QTC_BUILD_TYPE}} --src {{.AgentWorkingDir}}/qt-creator/qt-creator --build {{.AgentWorkingDir}}/qt-creator/qt-creator_build --qt-path {{.AgentWorkingDir}}/build/qt_install_dir --elfutils-path {{.AgentWorkingDir}}/build/qt_temp/elfutils --llvm-path {{.AgentWorkingDir}}/build/qt_temp/libclang {{.Env.QTC_TEST_OPTION}} --no-zip {{.Env.QTC_SCCACHE_C_OPTION}} {{.Env.QTC_SCCACHE_CXX_OPTION}} {{.Env.QTC_SCCACHE_ENABLE_OPTION}}" + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/build.py + --build-type {{.Env.QTC_BUILD_TYPE}} + --src {{.AgentWorkingDir}}/qt-creator/qt-creator + --build {{.AgentWorkingDir}}/qt-creator/qt-creator_build + --qt-path {{.AgentWorkingDir}}/build/qt_install_dir + --elfutils-path {{.AgentWorkingDir}}/build/qt_temp/elfutils + --llvm-path {{.AgentWorkingDir}}/build/qt_temp/libclang + {{.Env.QTC_TEST_OPTION}} + --no-zip + {{.Env.QTC_SCCACHE_C_OPTION}} + {{.Env.QTC_SCCACHE_CXX_OPTION}} + {{.Env.QTC_SCCACHE_ENABLE_OPTION}} maxTimeInSeconds: 36000 maxTimeBetweenOutput: 3600 userMessageOnFailure: "Failed to run build.py, check logs." - - type: ChangeDirectory - directory: "{{.AgentWorkingDir}}/build/tqtc-qtsdk/packaging_tools" - type: ExecuteCommand - command: "python3 -m pipenv run python -u bld_sdktool.py --qt-url {{.Env.QTC_SDKTOOL_QT_BASE_URL}}{{.Env.QTC_SDKTOOL_QT_EXT}} --qt-build {{.AgentWorkingDir}}/build/sdktool/qt --src {{.AgentWorkingDir}}/qt-creator/qt-creator/src/tools/sdktool --build {{.AgentWorkingDir}}/build/sdktool/build --install {{.AgentWorkingDir}}/build/sdktool/install --make-command ninja" + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/build_sdktool.py + --qt-url {{.Env.QTC_SDKTOOL_QT_BASE_URL}}{{.Env.QTC_SDKTOOL_QT_EXT}} + --qt-build {{.AgentWorkingDir}}/build/sdktool/qt + --src {{.AgentWorkingDir}}/qt-creator/qt-creator/src/tools/sdktool + --build {{.AgentWorkingDir}}/build/sdktool/build + --install {{.AgentWorkingDir}}/build/sdktool/install + --make-command ninja maxTimeInSeconds: 36000 maxTimeBetweenOutput: 3600 userMessageOnFailure: "Failed to build sdktool, check logs." @@ -52,34 +37,39 @@ instructions: - condition: property property: host.os equals_value: Linux - - condition: property - property: target.compiler - in_values: [GCC] - type: Group instructions: - type: ExecuteCommand - command: "curl --fail -L --retry 5 --retry-delay 5 -o {{.AgentWorkingDir}}/build/qt_temp/libclang.7z {{.Env.LLVM_BASE_URL}}-macos-universal.7z" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to download LLVM package, check logs." - - type: ExecuteCommand - command: "7z x -y {{.AgentWorkingDir}}/build/qt_temp/libclang.7z -o{{.AgentWorkingDir}}/build/qt_temp/" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to extract LLVM package, check logs." - - type: ExecuteCommand - command: "python3 -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/build.py --build-type {{.Env.QTC_BUILD_TYPE}} --src {{.AgentWorkingDir}}/qt-creator/qt-creator --build {{.AgentWorkingDir}}/qt-creator/qt-creator_build --qt-path {{.AgentWorkingDir}}/build/qt_install_dir --llvm-path {{.AgentWorkingDir}}/build/qt_temp/libclang --keychain-unlock-script /Users/qt/unlock-keychain.sh {{.Env.QTC_TEST_OPTION}} --no-zip {{.Env.QTC_SCCACHE_C_OPTION}} {{.Env.QTC_SCCACHE_CXX_OPTION}} {{.Env.QTC_SCCACHE_ENABLE_OPTION}}" + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/build.py + --build-type {{.Env.QTC_BUILD_TYPE}} + --src {{.AgentWorkingDir}}/qt-creator/qt-creator + --build {{.AgentWorkingDir}}/qt-creator/qt-creator_build + --qt-path {{.AgentWorkingDir}}/build/qt_install_dir + --llvm-path {{.AgentWorkingDir}}/build/qt_temp/libclang + --keychain-unlock-script /Users/qt/unlock-keychain.sh + {{.Env.QTC_TEST_OPTION}} + --no-zip + {{.Env.QTC_SCCACHE_C_OPTION}} + {{.Env.QTC_SCCACHE_CXX_OPTION}} + {{.Env.QTC_SCCACHE_ENABLE_OPTION}} maxTimeInSeconds: 36000 maxTimeBetweenOutput: 3600 userMessageOnFailure: "Failed to run build.py, check logs." - - type: ChangeDirectory - directory: "{{.AgentWorkingDir}}/build/tqtc-qtsdk/packaging_tools" - type: EnvironmentVariable variableName: MACOSX_DEPLOYMENT_TARGET variableValue: "{{.Env.SDKTOOL_MACOSX_DEPLOYMENT_TARGET}}" - type: ExecuteCommand - command: "python3 -m pipenv run python -u bld_sdktool.py --qt-url {{.Env.QTC_SDKTOOL_QT_BASE_URL}}{{.Env.QTC_SDKTOOL_QT_EXT}} --qt-build {{.AgentWorkingDir}}/build/sdktool/qt --src {{.AgentWorkingDir}}/qt-creator/qt-creator/src/tools/sdktool --build {{.AgentWorkingDir}}/build/sdktool/build --install {{.AgentWorkingDir}}/build/sdktool/install --make-command ninja --universal" + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/build_sdktool.py + --qt-url {{.Env.QTC_SDKTOOL_QT_BASE_URL}}{{.Env.QTC_SDKTOOL_QT_EXT}} + --qt-build {{.AgentWorkingDir}}/build/sdktool/qt + --src {{.AgentWorkingDir}}/qt-creator/qt-creator/src/tools/sdktool + --build {{.AgentWorkingDir}}/build/sdktool/build + --install {{.AgentWorkingDir}}/build/sdktool/install + --make-command ninja + --universal maxTimeInSeconds: 36000 maxTimeBetweenOutput: 3600 userMessageOnFailure: "Failed to build sdktool, check logs." @@ -91,64 +81,45 @@ instructions: - type: Group instructions: - type: ExecuteCommand - command: "curl --fail -L --retry 5 --retry-delay 5 -o {{.AgentWorkingDir}}\\build\\qt_temp\\elfutils-release_0.175qt-windows-x86_64.7z https://master.qt.io/development_releases/prebuilt/elfutils/elfutils-release_0.175qt-windows-x86_64.7z" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to download elfutils package, check logs." - - type: ExecuteCommand - command: "7z.exe x -y {{.AgentWorkingDir}}\\build\\qt_temp\\elfutils-release_0.175qt-windows-x86_64.7z -o{{.AgentWorkingDir}}\\build\\qt_temp\\elfutils" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to extract elfutils package, check logs." - - type: ExecuteCommand - command: "curl --fail -L --retry 5 --retry-delay 5 -o {{.AgentWorkingDir}}\\build\\qt_temp\\Python38-win-x64.7z https://master.qt.io/development_releases/prebuilt/python/Python38-win-x64.7z" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to download python package, check logs." - - type: ExecuteCommand - command: "7z.exe x -y {{.AgentWorkingDir}}\\build\\qt_temp\\Python38-win-x64.7z -o{{.AgentWorkingDir}}\\build\\qt_temp\\python" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to extract python package, check logs." - - type: ExecuteCommand - command: "curl --fail -L --retry 5 --retry-delay 5 -o {{.AgentWorkingDir}}\\build\\qt_temp\\libclang.7z {{.Env.LLVM_BASE_URL}}-windows-vs2019_64.7z" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to download LLVM package, check logs." - - type: ExecuteCommand - command: "7z.exe x -y {{.AgentWorkingDir}}\\build\\qt_temp\\libclang.7z -o{{.AgentWorkingDir}}\\build\\qt_temp\\" - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to extract LLVM package, check logs." - - type: ExecuteCommand - command: "python -u {{.AgentWorkingDir}}\\qt-creator\\qt-creator\\scripts\\build.py --build-type {{.Env.QTC_BUILD_TYPE}} --src {{.AgentWorkingDir}}\\qt-creator\\qt-creator --build {{.AgentWorkingDir}}\\qt-creator\\qt-creator_build --qt-path {{.AgentWorkingDir}}/build/qt_install_dir --python-path {{.AgentWorkingDir}}\\build\\qt_temp\\python --elfutils-path {{.AgentWorkingDir}}\\buid\\qt_temp\\elfutils --llvm-path {{.AgentWorkingDir}}\\build\\qt_temp\\libclang {{.Env.QTC_TEST_OPTION}} --no-zip {{.Env.QTC_SCCACHE_C_OPTION}} {{.Env.QTC_SCCACHE_CXX_OPTION}} {{.Env.QTC_SCCACHE_ENABLE_OPTION}}" + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}\qt-creator\qt-creator\scripts\build.py + --build-type {{.Env.QTC_BUILD_TYPE}} + --src {{.AgentWorkingDir}}\qt-creator\qt-creator + --build {{.AgentWorkingDir}}\qt-creator\qt-creator_build + --qt-path {{.AgentWorkingDir}}/build/qt_install_dir + --python-path {{.AgentWorkingDir}}\build\qt_temp\python + --add-config=-DPythonTargetx64Dll={{.AgentWorkingDir}}\build\qt_temp\python-amd64\python311.dll + --add-config=-DPythonTargetarm64Dll={{.AgentWorkingDir}}\build\qt_temp\python-arm64\python311.dll + --add-config=-DPythonTargetwin32Dll={{.AgentWorkingDir}}\build\qt_temp\python-win32\python311.dll + --elfutils-path {{.AgentWorkingDir}}/buid/qt_temp/elfutils + --llvm-path {{.AgentWorkingDir}}/build/qt_temp/libclang + --no-zip + {{.Env.QTC_TEST_OPTION}} + {{.Env.QTC_SCCACHE_C_OPTION}} + {{.Env.QTC_SCCACHE_CXX_OPTION}} + {{.Env.QTC_SCCACHE_ENABLE_OPTION}} maxTimeInSeconds: 36000 maxTimeBetweenOutput: 3600 userMessageOnFailure: "Failed to run build.py, check logs." - - type: ChangeDirectory - directory: "{{.AgentWorkingDir}}\\build\\tqtc-qtsdk\\packaging_tools" - type: ExecuteCommand - command: "python -m pipenv run python -u bld_sdktool.py --qt-url {{.Env.QTC_SDKTOOL_QT_BASE_URL}}{{.Env.QTC_SDKTOOL_QT_EXT}} --qt-build {{.AgentWorkingDir}}\\build\\sdktool\\qt --src {{.AgentWorkingDir}}\\qt-creator\\qt-creator\\src\\tools\\sdktool --build {{.AgentWorkingDir}}\\build\\sdktool\\build --install {{.AgentWorkingDir}}\\build\\sdktool\\install --make-command ninja" + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}\qt-creator\qt-creator\scripts\build_sdktool.py + --qt-url {{.Env.QTC_SDKTOOL_QT_BASE_URL}}{{.Env.QTC_SDKTOOL_QT_EXT}} + --qt-build {{.AgentWorkingDir}}\build\sdktool\qt + --src {{.AgentWorkingDir}}\qt-creator\qt-creator\src\tools\sdktool + --build {{.AgentWorkingDir}}\build\sdktool\build + --install {{.AgentWorkingDir}}\build\sdktool\install + --make-command ninja maxTimeInSeconds: 36000 maxTimeBetweenOutput: 3600 userMessageOnFailure: "Failed to build sdktool, check logs." enable_if: - condition: and - conditions: - - condition: property - property: target.compiler - in_values: [MSVC2013, MSVC2015, MSVC2017, MSVC2019] - - condition: property - property: target.arch - equals_value: X86_64 + condition: property + property: host.os + equals_value: Windows - type: UploadArtifact archiveDirectory: "{{.AgentWorkingDir}}/qt-creator/qt-creator_build/build" transferType: UploadModuleBuildArtifact maxTimeInSeconds: 1800 maxTimeBetweenOutput: 1800 - -enable_if: - condition: property - property: features - not_contains_value: "Qt5" diff --git a/coin/instructions/common_environment.yaml b/coin/instructions/common_environment.yaml index 31d658ff3ab..dedcbaf2fc5 100644 --- a/coin/instructions/common_environment.yaml +++ b/coin/instructions/common_environment.yaml @@ -2,59 +2,195 @@ type: Group instructions: - type: Group instructions: + # Currently used Qt version for packaging ... + - type: Group + instructions: + - type: EnvironmentVariable + variableName: QTC_QT_BASE_URL + variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/qt/6.8.0/release_content/" + - type: EnvironmentVariable + variableName: MACOSX_DEPLOYMENT_TARGET + variableValue: 12.0 + enable_if: + condition: property + property: features + not_contains_value: "OldestQt" + # ... or oldest supported Qt version + - type: Group + instructions: + - type: EnvironmentVariable + variableName: QTC_QT_BASE_URL + variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/qt/6.4.3/release_content/" + - type: EnvironmentVariable + variableName: MACOSX_DEPLOYMENT_TARGET + variableValue: 11.0 + enable_if: + condition: property + property: features + contains_value: "OldestQt" + - type: SetBuildDirectory + directory: "{{.AgentWorkingDir}}/build" + - type: MakeDirectory + directory: "{{.BuildDir}}" - type: EnvironmentVariable variableName: QTC_BUILD_TYPE variableValue: "RelWithDebInfo" - type: EnvironmentVariable variableName: LLVM_BASE_URL - variableValue: https://ci-files02-hki.ci.qt.io/packages/jenkins/qtcreator_libclang/libclang-release_18.1.7-based - - type: EnvironmentVariable - variableName: QTC_QT_BASE_URL - variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.7/6.7.2-released/Qt" + variableValue: https://ci-files02-hki.ci.qt.io/packages/jenkins/qtcreator_libclang/libclang-release_19.1.0-based - type: EnvironmentVariable variableName: QTC_QT_MODULES variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine" - - type: EnvironmentVariable - variableName: MACOSX_DEPLOYMENT_TARGET - variableValue: 11.0 - type: EnvironmentVariable variableName: SDKTOOL_MACOSX_DEPLOYMENT_TARGET variableValue: 11.0 - type: EnvironmentVariable variableName: QTC_SDKTOOL_QT_BASE_URL variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.6/6.6.0-released/Qt/src/submodules/qtbase-everywhere-src-6.6.0" + - type: EnvironmentVariable + variableName: GOFLAGS + variableValue: "-buildvcs=false" - type: Group instructions: - type: EnvironmentVariable variableName: QTC_QT_POSTFIX - variableValue: "-Windows-Windows_10_22H2-MSVC2019-Windows-Windows_10_22H2-X86_64.7z" + variableValue: "-Windows-Windows_11_23H2-MSVC2022-Windows-Windows_11_23H2-X86_64.7z" + enable_if: + condition: property + property: features + not_contains_value: "OldestQt" + - type: EnvironmentVariable + variableName: QTC_QT_POSTFIX + variableValue: "-Windows-Windows_11_22H2-MSVC2019-Windows-Windows_11_22H2-X86_64.7z" + enable_if: + condition: property + property: features + contains_value: "OldestQt" - type: EnvironmentVariable variableName: QTC_SDKTOOL_QT_EXT variableValue: ".zip" + - type: EnvironmentVariable + variableName: QTC_ELFUTILS_URL + variableValue: "https://master.qt.io/development_releases/prebuilt/elfutils/elfutils-release_0.175qt-windows-x86_64.7z" + - type: EnvironmentVariable + variableName: QTC_LLVM_POSTFIX + variableValue: "-windows-vs2019_64.7z" + - type: EnvironmentVariable + variableName: PYTHON_EXECUTABLE + variableValue: "python" enable_if: condition: property property: target.os equals_value: Windows - type: Group instructions: - - type: EnvironmentVariable - variableName: QTC_QT_POSTFIX - variableValue: "-Linux-RHEL_8_8-GCC-Linux-RHEL_8_8-X86_64.7z" + - type: Group + instructions: + - type: EnvironmentVariable + variableName: QTC_QT_POSTFIX + variableValue: "-Linux-RHEL_8_8-GCC-Linux-RHEL_8_8-X86_64.7z" + - type: EnvironmentVariable + variableName: QTC_ICU_URL + variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/development_releases/prebuilt/icu/prebuilt/73.2/icu-linux-g++-Rhel8.6-x64.7z" + enable_if: + condition: property + property: features + not_contains_value: "OldestQt" + - type: Group + instructions: + - type: EnvironmentVariable + variableName: QTC_QT_POSTFIX + variableValue: "-Linux-RHEL_8_4-GCC-Linux-RHEL_8_4-X86_64.7z" + - type: EnvironmentVariable + variableName: QTC_ICU_URL + variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/development_releases/prebuilt/icu/prebuilt/56.1/icu-linux-g++-Rhel7.2-x64.7z" + enable_if: + condition: property + property: features + contains_value: "OldestQt" - type: EnvironmentVariable variableName: QTC_SDKTOOL_QT_EXT variableValue: ".tar.xz" + - type: EnvironmentVariable + variableName: QTC_ELFUTILS_URL + variableValue: "https://master.qt.io/development_releases/prebuilt/elfutils/elfutils-release_0.175qt-linux-x86_64.7z" + - type: EnvironmentVariable + variableName: QTC_LLVM_POSTFIX + variableValue: "-linux-Rhel8.8-gcc10.3-x86_64.7z" + - type: EnvironmentVariable + variableName: PYTHON_EXECUTABLE + variableValue: "python3" + # RHEL 8.10 comes with Python 3.6, we need explicitly python3.11 + - type: EnvironmentVariable + variableName: PYTHON_EXECUTABLE + variableValue: "python3.11" + enable_if: + condition: property + property: host.osVersion + contains_value: "RHEL" enable_if: - condition: property - property: target.os - equals_value: Linux + condition: and + conditions: + - condition: property + property: target.os + equals_value: Linux + - condition: property + property: target.arch + equals_value: X86_64 - type: Group instructions: - type: EnvironmentVariable variableName: QTC_QT_POSTFIX - variableValue: "-MacOS-MacOS_13-Clang-MacOS-MacOS_13-X86_64-ARM64.7z" + variableValue: "-Linux-Debian_11_6-GCC-Linux-Debian_11_6-AARCH64.7z" - type: EnvironmentVariable variableName: QTC_SDKTOOL_QT_EXT variableValue: ".tar.xz" + - type: EnvironmentVariable + variableName: QTC_ELFUTILS_URL + variableValue: "https://master.qt.io/development_releases/prebuilt/elfutils/elfutils-release_0.175qt-linux-arm64.7z" + - type: EnvironmentVariable + variableName: QTC_LLVM_POSTFIX + variableValue: "-linux-Debian-11.6-gcc10.2-arm64.7z" + - type: EnvironmentVariable + variableName: QTC_ICU_URL + variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/development_releases/prebuilt/icu/prebuilt/73.2/icu-linux-g++-Debian11.6-aarch64.7z" + - type: EnvironmentVariable + variableName: PYTHON_EXECUTABLE + variableValue: "python3" + enable_if: + condition: and + conditions: + - condition: property + property: target.os + equals_value: Linux + - condition: property + property: target.arch + equals_value: AARCH64 + - type: Group + instructions: + - type: EnvironmentVariable + variableName: QTC_QT_POSTFIX + variableValue: "-MacOS-MacOS_14-Clang-MacOS-MacOS_14-X86_64-ARM64.7z" + enable_if: + condition: property + property: features + not_contains_value: "OldestQt" + - type: EnvironmentVariable + variableName: QTC_QT_POSTFIX + variableValue: "-MacOS-MacOS_12-Clang-MacOS-MacOS_12-X86_64-ARM64.7z" + enable_if: + condition: property + property: features + contains_value: "OldestQt" + - type: EnvironmentVariable + variableName: QTC_SDKTOOL_QT_EXT + variableValue: ".tar.xz" + - type: EnvironmentVariable + variableName: QTC_LLVM_POSTFIX + variableValue: "-macos-universal.7z" + - type: EnvironmentVariable + variableName: PYTHON_EXECUTABLE + variableValue: "python3" enable_if: condition: property property: target.os @@ -74,6 +210,15 @@ instructions: condition: property property: features contains_value: Sccache + - type: Group + instructions: + - type: EnvironmentVariable + variableName: QTC_TEST_OPTION + variableValue: "--with-tests" + enable_if: + condition: property + property: features + not_contains_value: DisableTests - type: Group instructions: @@ -112,8 +257,3 @@ instructions: condition: property property: host.os equals_value: Linux - -enable_if: - condition: property - property: features - not_contains_value: "Qt5" diff --git a/coin/instructions/provision.yaml b/coin/instructions/provision.yaml index a5dad3955c6..fe3850c2d22 100644 --- a/coin/instructions/provision.yaml +++ b/coin/instructions/provision.yaml @@ -1,82 +1,192 @@ type: Group instructions: - type: MakeDirectory - directory: ".git" - - type: SetBuildDirectory - directory: "{{.SourceDir}}" - disable_if: - condition: property - property: features - contains_value: OutOfSourceBuild + directory: "{{.AgentWorkingDir}}/build/qt_temp" - type: Group instructions: - - type: SetBuildDirectory - directory: "{{.AgentWorkingDir}}/build" - - type: MakeDirectory - directory: "{{.BuildDir}}" - - type: ChangeDirectory - directory: "{{.BuildDir}}" - - type: InstallSourceArchive - maxTimeInSeconds: 600 - maxTimeBetweenOutput: 600 - project: qtsdk/tqtc-qtsdk - ref: production - directory: "build/tqtc-qtsdk" - userMessageOnFailure: "Failed to install tqtc-qtsdk, check logs" - - type: Group - instructions: - - type: ExecuteCommand - command: python tqtc-qtsdk/jenkins-templates/jenkins/scripts/pkg_bootstrap.py - maxTimeInSeconds: 36000 - maxTimeBetweenOutput: 3600 - userMessageOnFailure: "pkg_bootstrap.py failed" - enable_if: - condition: and - conditions: - - condition: property - property: host.os - equals_value: Windows - - type: Group - instructions: - - type: ExecuteCommand - command: python3 tqtc-qtsdk/jenkins-templates/jenkins/scripts/pkg_bootstrap.py - maxTimeInSeconds: 36000 - maxTimeBetweenOutput: 3600 - userMessageOnFailure: "pkg_bootstrap.py failed" - enable_if: - condition: and - conditions: - - condition: property - property: host.os - not_equals_value: Windows - - type: ChangeDirectory - directory: "{{.BuildDir}}/tqtc-qtsdk/packaging_tools" - - type: ExecuteCommand - command: "python3 -m pipenv run python -u install_qt.py --qt-path {{.BuildDir}}/qt_install_dir --base-url {{.Env.QTC_QT_BASE_URL}} --base-url-postfix={{.Env.QTC_QT_POSTFIX}} --icu7z https://ci-files02-hki.ci.qt.io/packages/jenkins/development_releases/prebuilt/icu/prebuilt/56.1/icu-linux-g++-Rhel7.2-x64.7z {{.Env.QTC_QT_MODULES}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to install qt, check logs." + - type: ExecuteCommand + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/install_qt.py + --qt-path {{.BuildDir}}/qt_install_dir + --base-url {{.Env.QTC_QT_BASE_URL}} + --base-url-postfix={{.Env.QTC_QT_POSTFIX}} + --icu7z {{.Env.QTC_ICU_URL}} + {{.Env.QTC_QT_MODULES}} + executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to install qt, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}/build/qt_temp/elfutils.7z + {{.Env.QTC_ELFUTILS_URL}} + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download elfutils package, check logs." + - type: ExecuteCommand + command: >- + 7z x -y {{.AgentWorkingDir}}/build/qt_temp/elfutils.7z + -o{{.AgentWorkingDir}}/build/qt_temp/elfutils + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract elfutils package, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}/build/qt_temp/libclang.7z + {{.Env.LLVM_BASE_URL}}{{.Env.QTC_LLVM_POSTFIX}} + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download LLVM package, check logs." + - type: ExecuteCommand + command: "7z x -y {{.AgentWorkingDir}}/build/qt_temp/libclang.7z -o{{.AgentWorkingDir}}/build/qt_temp/" + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract LLVM package, check logs." enable_if: condition: property property: host.os equals_value: Linux - - type: ExecuteCommand - command: "python3 -m pipenv run python -u install_qt.py --qt-path {{.BuildDir}}/qt_install_dir --base-url {{.Env.QTC_QT_BASE_URL}} --base-url-postfix={{.Env.QTC_QT_POSTFIX}} {{.Env.QTC_QT_MODULES}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to install qt, check logs." + - type: Group + instructions: + - type: ExecuteCommand + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}/qt-creator/qt-creator/scripts/install_qt.py + --qt-path {{.BuildDir}}/qt_install_dir + --base-url {{.Env.QTC_QT_BASE_URL}} + --base-url-postfix={{.Env.QTC_QT_POSTFIX}} + {{.Env.QTC_QT_MODULES}}" + executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to install qt, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}/build/qt_temp/libclang.7z + {{.Env.LLVM_BASE_URL}}{{.Env.QTC_LLVM_POSTFIX}} + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download LLVM package, check logs." + - type: ExecuteCommand + command: "7z x -y {{.AgentWorkingDir}}/build/qt_temp/libclang.7z -o{{.AgentWorkingDir}}/build/qt_temp/" + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract LLVM package, check logs." enable_if: condition: property property: host.os equals_value: MacOS - - type: ExecuteCommand - command: "python -m pipenv run python -u install_qt.py --qt-path {{.BuildDir}}/qt_install_dir --base-url {{.Env.QTC_QT_BASE_URL}} --base-url-postfix={{.Env.QTC_QT_POSTFIX}} --opengl32sw7z https://ci-files02-hki.ci.qt.io/packages/jenkins/development_releases/prebuilt/llvmpipe/windows/opengl32sw-64.7z --d3dcompiler7z https://ci-files02-hki.ci.qt.io/packages/jenkins/development_releases/prebuilt/d3dcompiler/msvc2013/d3dcompiler_47-x64.7z --openssl7z https://ci-files02-hki.ci.qt.io/packages/jenkins/openssl/openssl_1.1.1d_prebuild_x64.7z {{.Env.QTC_QT_MODULES}}" - executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution - maxTimeInSeconds: 3600 - maxTimeBetweenOutput: 360 - userMessageOnFailure: "Failed to install qt, check logs." + - type: Group + instructions: + - type: ExecuteCommand + command: >- + {{.Env.PYTHON_EXECUTABLE}} -u {{.AgentWorkingDir}}\qt-creator\qt-creator\scripts\install_qt.py + --qt-path {{.BuildDir}}/qt_install_dir + --base-url {{.Env.QTC_QT_BASE_URL}} + --base-url-postfix={{.Env.QTC_QT_POSTFIX}} + {{.Env.QTC_QT_MODULES}} + executeCommandArgumentSplitingBehavior: SplitAfterVariableSubstitution + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to install qt, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}\build\qt_temp\elfutils.7z + {{.Env.QTC_ELFUTILS_URL}} + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download elfutils package, check logs." + - type: ExecuteCommand + command: >- + 7z.exe x -y + {{.AgentWorkingDir}}\build\qt_temp\elfutils.7z + -o{{.AgentWorkingDir}}\build\qt_temp\elfutils + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract elfutils package, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}\build\qt_temp\Python311-win-x64.7z + https://master.qt.io/development_releases/prebuilt/python/Python311-win-x64.7z + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download python package, check logs." + - type: ExecuteCommand + command: >- + 7z.exe x -y + {{.AgentWorkingDir}}\build\qt_temp\Python311-win-x64.7z + -o{{.AgentWorkingDir}}\build\qt_temp\python + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract python package, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}\build\qt_temp\python-3.11.9-embed-amd64.zip + https://master.qt.io/development_releases/prebuilt/python/python-3.11.9-embed-amd64.zip + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download python package, check logs." + - type: ExecuteCommand + command: >- + 7z.exe x -y + {{.AgentWorkingDir}}\build\qt_temp\python-3.11.9-embed-amd64.zip + -o{{.AgentWorkingDir}}\build\qt_temp\python-amd64 + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract python package, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}\build\qt_temp\python-3.11.9-embed-arm64.zip + https://master.qt.io/development_releases/prebuilt/python/python-3.11.9-embed-arm64.zip + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download python package, check logs." + - type: ExecuteCommand + command: >- + 7z.exe x -y + {{.AgentWorkingDir}}\build\qt_temp\python-3.11.9-embed-arm64.zip + -o{{.AgentWorkingDir}}\build\qt_temp\python-arm64 + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract python package, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}\build\qt_temp\python-3.11.9-embed-win32.zip + https://master.qt.io/development_releases/prebuilt/python/python-3.11.9-embed-win32.zip + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download python package, check logs." + - type: ExecuteCommand + command: >- + 7z.exe x -y + {{.AgentWorkingDir}}\build\qt_temp\python-3.11.9-embed-win32.zip + -o{{.AgentWorkingDir}}\build\qt_temp\python-win32 + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract python package, check logs." + - type: ExecuteCommand + command: >- + curl --fail -L --retry 5 --retry-delay 5 + -o {{.AgentWorkingDir}}\build\qt_temp\libclang.7z + {{.Env.LLVM_BASE_URL}}{{.Env.QTC_LLVM_POSTFIX}} + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to download LLVM package, check logs." + - type: ExecuteCommand + command: >- + 7z.exe x -y + {{.AgentWorkingDir}}\build\qt_temp\libclang.7z + -o{{.AgentWorkingDir}}\build\qt_temp + maxTimeInSeconds: 3600 + maxTimeBetweenOutput: 360 + userMessageOnFailure: "Failed to extract LLVM package, check logs." enable_if: condition: and conditions: @@ -86,8 +196,3 @@ instructions: - condition: property property: target.arch equals_value: X86_64 - -enable_if: - condition: property - property: features - not_contains_value: "Qt5" diff --git a/coin/instructions/test.yaml b/coin/instructions/test.yaml index 26b211d1ef8..c66442585e4 100644 --- a/coin/instructions/test.yaml +++ b/coin/instructions/test.yaml @@ -13,7 +13,3 @@ instructions: maxTimeInSeconds: 600 maxTimeBetweenOutput: 600 userMessageOnFailure: "Failed to run tests, check logs" -enable_if: - condition: property - property: features - not_contains_value: "Qt5" diff --git a/coin/module_config.yaml b/coin/module_config.yaml index ecef22e379c..f7e543802e7 100644 --- a/coin/module_config.yaml +++ b/coin/module_config.yaml @@ -1,34 +1,4 @@ version: 2 -accept_configuration: - condition: or - conditions: - - condition: property - property: features - contains_value: LicenseCheck - - condition: and - conditions: - - condition: property - property: host.os - equals_value: Windows - - condition: property - property: host - equals_property: target - - condition: property - property: target.compiler - equals_value: MSVC2019 - - condition: property - property: target.arch - not_equals_value: X86 - - condition: and - conditions: - - condition: property - property: host.os - equals_value: Linux - - condition: and - conditions: - - condition: property - property: host.os - equals_value: MacOS machine_type: Build: diff --git a/coin/product_dependencies.yaml b/coin/product_dependencies.yaml index 9a7e164d2b3..959465886ef 100644 --- a/coin/product_dependencies.yaml +++ b/coin/product_dependencies.yaml @@ -1,4 +1,3 @@ dependencies: ../../qt/qt5.git: - ref: "6.7" - + ref: "6.8" diff --git a/dist/branding/qtdesignstudio/QtCreatorIDEBranding.cmake b/dist/branding/qtdesignstudio/QtCreatorIDEBranding.cmake index 05428c39217..295220f43fa 100644 --- a/dist/branding/qtdesignstudio/QtCreatorIDEBranding.cmake +++ b/dist/branding/qtdesignstudio/QtCreatorIDEBranding.cmake @@ -1,7 +1,6 @@ set(IDE_VERSION "4.7.0") # The IDE version. set(IDE_VERSION_COMPAT "4.7.0") # The IDE Compatibility version. set(IDE_VERSION_DISPLAY "4.7") # The IDE display version. -set(IDE_COPYRIGHT_YEAR "2024") # The IDE current copyright year. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. set(IDE_COPY_SETTINGSVARIANT "Nokia") # The IDE settings to initially import. @@ -10,6 +9,8 @@ set(IDE_ID "qtdesignstudio") # The IDE id (no spaces, l set(IDE_CASED_ID "QtDesignStudio") # The cased IDE id (no spaces!) set(IDE_BUNDLE_IDENTIFIER "org.qt-project.${IDE_ID}") # The macOS application bundle identifier. set(IDE_APP_ID "io.qt.${IDE_ID}") # The free desktop application identifier. +set(IDE_AUTHOR "The Qt Company Ltd. and other contributors.") +set(IDE_COPYRIGHT "Copyright (C) ${IDE_AUTHOR}") set(PROJECT_USER_FILE_EXTENSION .qtds) set(IDE_DOC_FILE "qtdesignstudio/qtdesignstudio.qdocconf") diff --git a/dist/changelog/changes-14.0.2.md b/dist/changelog/changes-14.0.2.md new file mode 100644 index 00000000000..4e9deb4e273 --- /dev/null +++ b/dist/changelog/changes-14.0.2.md @@ -0,0 +1,121 @@ +Qt Creator 14.0.2 +================= + +Qt Creator version 14.0.2 contains bug fixes. + +The most important changes are listed in this document. For a complete list of +changes, see the Git log for the Qt Creator sources that you can check out from +the public Git repository. For example: + + + +Editing +------- + +* Fixed performance issues when long lines are highlighted +* Fixed a crash after completion + (QTCREATORBUG-31563) + +### C++ + +* Fixed generating getters and setters for static pointer members + (QTCREATORBUG-27547) +* Fixed a crash while parsing + (QTCREATORBUG-31569) +* Built-in + * Fixed an issue with empty lists in member initializations + (QTCREATORBUG-30797) + * Fixed an issue with empty lists in the placement version of `new` + (QTCREATORBUG-30798) + +### QML + +* Fixed that automatic formatting on save with `qmlformat` ignored + `.qmlformat.ini` + (QTCREATORBUG-29668) +* `qmlls` + * Fixed semantic highlighting + (QTCREATORBUG-31148) + * Fixed that enabling `qmlls` disabled code snippets + (QTCREATORBUG-31322) + +### Python + +* Fixed the state of the `Generate Kit` button + +### Language Server Protocol + +* Fixed the line number for diagnostics + +### Widget Designer + +* Fixed issues with switching to Design mode when external editor windows are + open + (QTCREATORBUG-31378) +* Fixed a crash when renaming widgets + (QTCREATORBUG-31519) + +Projects +-------- + +* Fixed a crash when editing the project environment + (QTCREATORBUG-31483) + +### CMake + +* Fixed that `Clear CMake Configuration` was visible regardless of the used + build system +* Presets + * Fixed the handling of the `PATH` environment variable + (QTCREATORBUG-31439) + +### vcpkg + +* Fixed that the wrong `vcpkg` executable could be used + +Debugging +--------- + +### C++ + +* CDB + * Fixed the debugging of 32bit applications + (QTCREATORBUG-31345) + +Platforms +--------- + +### Windows + +* Fixed the detection of ARM compilers and debuggers + +### Android + +* Fixed that the debugger could be interrupted a lot during startup + (QTCREATORBUG-29928) + +### Remote Linux + +* Fixed that deployment with `rsync` preserved owner, group, and permissions + (QTCREATORBUG-31138) + +Credits for these changes go to: +-------------------------------- +Alessandro Portale +Alexandre Laurent +Aurélien Brooke +Christian Kandeler +Christian Stenger +Cristian Adam +David Schulz +Eike Ziller +Friedemann Kleint +Jaroslaw Kobus +Jussi Witick +Leena Miettinen +Marcus Tillmanns +Oliver Wolff +Orgad Shaneh +Robert Löhning +Sami Shalayel +Semih Yavuz diff --git a/dist/changelog/changes-15.0.0.md b/dist/changelog/changes-15.0.0.md new file mode 100644 index 00000000000..558ef3cc63f --- /dev/null +++ b/dist/changelog/changes-15.0.0.md @@ -0,0 +1,388 @@ +Qt Creator 15 +============= + +Qt Creator version 15 contains bug fixes and new features. + +The most important changes are listed in this document. For a complete list of +changes, see the Git log for the Qt Creator sources that you can check out from +the public Git repository or view online at + + + +General +------- + +* Changed the default MIME types to the Apache Tika MIME type database +* Added the option to hide modes (`View > Modes` and the context menu on the + mode selector) +* Added the option to exclude binary files in `Search Results` + ([QTCREATORBUG-1756](https://bugreports.qt.io/browse/QTCREATORBUG-1756)) +* Added new dark and light themes + ([Blog Post](https://www.qt.io/blog/review-new-themes-for-qt-creator)) +* Added `Tools > Scripting > New Script` for creating Lua based Qt Creator + scripts + ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-lua-scripts.html)) +* Plugins + * Added `DocumentationUrl` and new mandatory fields `Id` and `VendorId` + to the plugin meta data + * Changed the plugin descriptions to Markdown in + `Help > About Plugins > Details` and `Extensions` mode + * Extended the API available to Lua plugins + ([Documentation](https://doc-snapshots.qt.io/qtcreator-extending/lua-extensions.html)) +* Prebuilt binaries + * Added opt-in crash reporting to + `Edit > Preferences > Environment > System` + ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-turn-on-crash-reports.html)) + +Editing +------- + +* Added actions for opening the next and previous documents from the + `Open Documents` view + ([QTCREATORBUG-1208](https://bugreports.qt.io/browse/QTCREATORBUG-1208)) +* Added actions for moving and sorting bookmarks in the `Bookmarks` view + ([QTCREATORBUG-30286](https://bugreports.qt.io/browse/QTCREATORBUG-30286)) +* Added the folding actions to the context menu on the folding marks + ([QTCREATORBUG-7461](https://bugreports.qt.io/browse/QTCREATORBUG-7461)) +* Added `Fold Recursively` and `Unfold Recursively` +* Fixed the display of multi-line annotations + ([QTCREATORBUG-29951](https://bugreports.qt.io/browse/QTCREATORBUG-29951)) +* Fixed the tab order in `Advanced Search` + ([QTCREATORBUG-31771](https://bugreports.qt.io/browse/QTCREATORBUG-31771)) + +### C++ + +* Added a syntax highlighting style for C++ attributes +* Merged the `C` and `C++` compiler categories + ([QTCREATORBUG-31132](https://bugreports.qt.io/browse/QTCREATORBUG-31132), + [QTCREATORBUG-30630](https://bugreports.qt.io/browse/QTCREATORBUG-30630)) +* Fixed that `Clang` was preferred over `GCC` on Linux when automatically + assigning toolchains to kits + ([QTCREATORBUG-29913](https://bugreports.qt.io/browse/QTCREATORBUG-29913)) +* Fixed that include statements could be added before `#pragma once` + ([QTCREATORBUG-30808](https://bugreports.qt.io/browse/QTCREATORBUG-30808)) +* Fixed that symbol locations could be mixed up between different open projects + ([QTCREATORBUG-19636](https://bugreports.qt.io/browse/QTCREATORBUG-19636)) +* Fixed issues with code folding and `ifdef` statements + ([QTCREATORBUG-21064](https://bugreports.qt.io/browse/QTCREATORBUG-21064)) +* Fixed the indentation after multi-line comments + ([QTCREATORBUG-31256](https://bugreports.qt.io/browse/QTCREATORBUG-31256)) +* Fixed the display of annotations with array operators + ([QTCREATORBUG-31670](https://bugreports.qt.io/browse/QTCREATORBUG-31670)) +* Fixed code formatting after `Apply Changes to Declaration / Definition` + ([QTCREATORBUG-31293](https://bugreports.qt.io/browse/QTCREATORBUG-31293)) +* ClangFormat + * Implemented `Export` and `Import` for the settings + +### QML + +* Moved the option for creating Qt Design Studio compatible projects from the + `Qt Quick Application` to the `Qt Quick UI Prototype` wizard + ([QTCREATORBUG-31355](https://bugreports.qt.io/browse/QTCREATORBUG-31355), + [QTCREATORBUG-31657](https://bugreports.qt.io/browse/QTCREATORBUG-31657)) +* Fixed the indentation of files created by `Move Component into Separate File` + ([QTCREATORBUG-31084](https://bugreports.qt.io/browse/QTCREATORBUG-31084)) + +### Language Server Protocol + +* Fixed that global environment changes were not applied to language servers + +### Copilot + +* Fixed the application of multi-line suggestions + ([QTCREATORBUG-31418](https://bugreports.qt.io/browse/QTCREATORBUG-31418)) + +### Compiler Explorer + +* Added the option to change the server URL + ([QTCREATORBUG-31261](https://bugreports.qt.io/browse/QTCREATORBUG-31261)) + ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-explore-compiler-code.html)) + +### Lua + +* Added an interactive shell (REPL) as an output view + +### SCXML + +* Made names and conditions movable + ([QTCREATORBUG-31397](https://bugreports.qt.io/browse/QTCREATORBUG-31397)) +* Fixed that the colors didn't follow the theme + ([QTCREATORBUG-29701](https://bugreports.qt.io/browse/QTCREATORBUG-29701)) + +### Binary Files + +* Fixed searching text when a codec is set + ([QTCREATORBUG-30589](https://bugreports.qt.io/browse/QTCREATORBUG-30589)) + +Projects +-------- + +* Removed the Qt Linguist related external tool items, which did not work for + CMake + ([QTCREATORBUG-28467](https://bugreports.qt.io/browse/QTCREATORBUG-28467)) +* Improved the performance of compile and application output parsing and added + the option to `Discard excessive output` + ([QTCREATORBUG-30135](https://bugreports.qt.io/browse/QTCREATORBUG-30135), + [QTCREATORBUG-31449](https://bugreports.qt.io/browse/QTCREATORBUG-31449)) +* Improved the display of toolchains in the kit options by sorting and showing + issue icons +* Improved the warning against editing files that are not part of the project + ([QTCREATORBUG-31542](https://bugreports.qt.io/browse/QTCREATORBUG-31542)) +* Added `Create Header File` and `Create Source File` to the context menu + for source files and header files in the project tree respectively + ([QTCREATORBUG-24575](https://bugreports.qt.io/browse/QTCREATORBUG-24575)) +* Added the option to deploy dependent projects + ([QTCREATORBUG-27406](https://bugreports.qt.io/browse/QTCREATORBUG-27406)) +* Added the option to run build and deploy steps as root user + ([QTCREATORBUG-31012](https://bugreports.qt.io/browse/QTCREATORBUG-31012)) +* Added `Copy Contents to Scratch Buffer` to the context menu of output views + ([QTCREATORBUG-31144](https://bugreports.qt.io/browse/QTCREATORBUG-31144)) +* Added the list of open files to the session overview, for sessions that + do not have any projects + ([QTCREATORBUG-7660](https://bugreports.qt.io/browse/QTCREATORBUG-7660)) +* Added the project names to the `Recent Projects` menu + ([QTCREATORBUG-31753](https://bugreports.qt.io/browse/QTCREATORBUG-31753)) +* Fixed issues with creating subprojects for non-active projects +* Fixed that the wizards were asking for a build system type when creating + subprojects + ([QTCREATORBUG-30281](https://bugreports.qt.io/browse/QTCREATORBUG-30281)) +* Fixed that new build configurations could use the wrong build directory + ([QTCREATORBUG-31470](https://bugreports.qt.io/browse/QTCREATORBUG-31470)) +* Fixed that temporary kits could stay around + ([QTCREATORBUG-31461](https://bugreports.qt.io/browse/QTCREATORBUG-31461)) +* Fixed that Qt Creator could freeze while trying to stop a user application + ([QTCREATORBUG-31319](https://bugreports.qt.io/browse/QTCREATORBUG-31319)) +* Fixed that the application exit code was not shown after grazefully + terminating it + ([QTCREATORBUG-31141](https://bugreports.qt.io/browse/QTCREATORBUG-31141)) +* Fixed a focus issue when renaming files + ([QTCREATORBUG-30926](https://bugreports.qt.io/browse/QTCREATORBUG-30926)) + +### CMake + +* Implemented `New Subproject` for CMake projects + ([QTCREATORBUG-30471](https://bugreports.qt.io/browse/QTCREATORBUG-30471), + [QTCREATORBUG-30818](https://bugreports.qt.io/browse/QTCREATORBUG-30818)) +* Added support for the `FOLDER` property of targets + ([QTCREATORBUG-28873](https://bugreports.qt.io/browse/QTCREATORBUG-28873)) +* Added groups for resources when `Package manager auto setup` is enabled + (opt-out) + ([QTCREATORBUG-31308](https://bugreports.qt.io/browse/QTCREATORBUG-31308), + [QTCREATORBUG-31312](https://bugreports.qt.io/browse/QTCREATORBUG-31312)) +* Added `CMakeLists.txt` items to targets in the `Projects` tree, to the point + where they are defined + ([QTCREATORBUG-31362](https://bugreports.qt.io/browse/QTCREATORBUG-31362)) +* Added `Open...` to CMake folders in the `Projects` tree + ([QTCREATORBUG-31362](https://bugreports.qt.io/browse/QTCREATORBUG-31362)) +* Added `Build`, `Rebuild`, and `Clean` operations for subprojects to the + `Build` menu and `Projects` tree + ([QTCREATORBUG-27588](https://bugreports.qt.io/browse/QTCREATORBUG-27588)) +* Added the parsing of `AUTOMOC` and `AUTOUIC` warnings and errors + ([QTCREATORBUG-29345](https://bugreports.qt.io/browse/QTCREATORBUG-29345), + [QTCREATORBUG-31597](https://bugreports.qt.io/browse/QTCREATORBUG-31597)) +* Added the option of opening `CMakeCache.txt` to open the project + ([QTCREATORBUG-24439](https://bugreports.qt.io/browse/QTCREATORBUG-24439), + [QTCREATORBUG-30507](https://bugreports.qt.io/browse/QTCREATORBUG-30507)) +* Fixed the option `Build Only the Application to Be Run` for the + `Build before deploying` preferences + ([QTCREATORBUG-31416](https://bugreports.qt.io/browse/QTCREATORBUG-31416)) +* Fixed the `vcpkg` support for Android + ([QTCREATORBUG-31883](https://bugreports.qt.io/browse/QTCREATORBUG-31883)) + +### Workspace + +* Added the option to add build configurations into + `Projects > Build & Run > Build > Add` + ([Documentation](https://doc.qt.io/qtcreator/creator-project-opening.html)) +* Added automatic updating of the project tree in `Projects` +* Fixed that cloned run configurations were not editable + +### vcpkg + +* Fixed the detection of `VCPKG_TARGET_TRIPLET` on ARM macOS + +Debugging +--------- + +* Added `Disable All Breakpoints` to the debugger toolbar +* Fixed that the port range for debugging was not customizable for the + desktop + ([QTCREATORBUG-31406](https://bugreports.qt.io/browse/QTCREATORBUG-31406)) +* Fixed the unfolding of items in the debugger tooltip + ([QTCREATORBUG-31250](https://bugreports.qt.io/browse/QTCREATORBUG-31250)) +* Fixed issues with breakpoints in threads + ([QTCREATORBUG-23219](https://bugreports.qt.io/browse/QTCREATORBUG-23219)) +* Pretty printers + * Added pretty printers for `std:dequeue` and `std::forward_list` + ([QTCREATORBUG-29994](https://bugreports.qt.io/browse/QTCREATORBUG-29994)) + * Fixed various standard library types + * Fixed issues with `_GLIBCXX_DEBUG` enabled + ([QTCREATORBUG-20476](https://bugreports.qt.io/browse/QTCREATORBUG-20476)) + +### C++ + +* Added `Load Last Core File` + ([QTCREATORBUG-29256](https://bugreports.qt.io/browse/QTCREATORBUG-29256)) +* Fixed the display of 64-bit `QFlags` + +Analyzer +-------- + +### Clang + +* Fixed issues with the compiler options by using the compilation database + ([QTCREATORBUG-29529](https://bugreports.qt.io/browse/QTCREATORBUG-29529)) + +### Axivion + +* Moved the Axivion views to a Debug perspective +* Improved the handling of invalid filters +* Removed the linking between Dashboard and a project. Now, the Dashboard + has to be selected on the Axivion issues view. +* Added the option to define path mappings + (`Preferences > Axivion > Path Mapping`) +* Added a tool button for `Show issue markers inline` +* Added column sorting to the list of issues +* Added a `Reload` button + +Version Control Systems +----------------------- + +* Improved the error dialog when adding files fails + ([QTCREATORBUG-31161](https://bugreports.qt.io/browse/QTCREATORBUG-31161)) +* Added `Log Directory` to the context menu of the `Projects` tree + +### Git + +* Added actions for blame at the revision, blame of the parent, the file + from the revision, and the log for the line to the tooltip for `Instant Blame` + ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-vcs-git.html#using-instant-blame)) +* Added visual indications that files are modified to the `Projects` view + ([QTCREATORBUG-8857](https://bugreports.qt.io/browse/QTCREATORBUG-8857)) +* Added the option to include all local branches in the log +* Gerrit + * Fixed the support for pushing patches with topics + ([QTCREATORBUG-31411](https://bugreports.qt.io/browse/QTCREATORBUG-31411)) + +Test Integration +---------------- + +* Added test duration information for test frameworks that support it + ([QTCREATORBUG-31242](https://bugreports.qt.io/browse/QTCREATORBUG-31242)) + +Extension Manager +----------------- + +* Added filters and sorting + ([QTCREATORBUG-31179](https://bugreports.qt.io/browse/QTCREATORBUG-31179)) +* Added a button for opening the preferences + +Platforms +--------- + +### Windows + +* Fixed that it wasn't possible to select a remote `qmake` executable + ([QTCREATORBUG-31939](https://bugreports.qt.io/browse/QTCREATORBUG-31939)) + +### macOS + +* Added support for back and forward gestures + ([QTCREATORBUG-7387](https://bugreports.qt.io/browse/QTCREATORBUG-7387)) + +### Android + +* Improved the responsiveness of Qt Creator during Android related operations +* Fixed that the setup wizard could use the wrong NDK and build tools version + ([QTCREATORBUG-31311](https://bugreports.qt.io/browse/QTCREATORBUG-31311)) +* Fixed a freeze in the preferences while an emulator is running + ([QTCREATORBUG-31912](https://bugreports.qt.io/browse/QTCREATORBUG-31912)) + +### iOS + +* Improved the error messages when installation on the Simulator fails + ([QTCREATORBUG-25833](https://bugreports.qt.io/browse/QTCREATORBUG-25833)) +* Fixed issues when multiple devices are open in the Simulator + +### Docker + +* Improved the performance of operations on the device by deploying + a helper application (GoCmdBridge) + +### WebAssembly + +* Improved error messages on registration failure + ([QTCREATORBUG-30057](https://bugreports.qt.io/browse/QTCREATORBUG-30057)) + +### VxWorks + +* Added support for VxWorks 24.03 + ([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-vxworks-kits.html)) + +Credits for these changes go to: +-------------------------------- +Aleksei German +Alessandro Portale +Alexandru Croitor +Ali Kianian +Andre Hartmann +André Pönitz +Andrii Batyiev +Andrii Semkiv +Artem Sokolovskii +Artur Twardy +Assam Boudjelthia +Audun Sutterud +BogDan Vatra +Burak Hancerli +Christian Kandeler +Christian Stenger +Cristian Adam +David Schulz +Dominik Holland +Eike Ziller +Francisco Boni +Friedemann Kleint +Henning Gruendl +Jaroslaw Kobus +Jussi Witick +Justyna Hudziak +Kai Köhne +Karim Pinter +Knud Dollereder +Kwangsub Kim +Leena Miettinen +Liu Zhangjian +Lukasz Papierkowski +Mahmoud Badri +Marc Mutz +Marco Bubke +Marcus Tillmanns +Mariusz Szczepanik +Mathias Hasselmann +Mats Honkamaa +Mehdi Salem +Michael Weghorn +Miikka Heikkinen +Orgad Shaneh +Pino Toscano +Pranta Dastider +Przemyslaw Lewandowski +Rauno Pennanen +Renaud Guezennec +Robert Löhning +Sami Shalayel +Semih Yavuz +Shrief Gabr +Sivert Krøvel +styxer +Teea Poldsam +Thiago Macieira +Thomas Hartmann +Tim Jenßen +Toni Saario +Ulf Hermann +Vikas Pachdha +Ville Lavonius +Xavier Besson +Zoltan Gera diff --git a/dist/changelog/template.md b/dist/changelog/template.md index e6a4b2fcb31..6eb329ca8d9 100644 --- a/dist/changelog/template.md +++ b/dist/changelog/template.md @@ -134,5 +134,9 @@ Platforms ### Bare Metal +### WebAssembly + +### VxWorks + Credits for these changes go to: -------------------------------- diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 7d34b4365b3..9c25afb2763 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,7 +1,5 @@ # Generate documentation -include(Utils) - option(BUILD_DEVELOPER_DOCS "Include developer documentation" OFF) add_feature_info("Include developer documentation" BUILD_DEVELOPER_DOCS "") diff --git a/doc/qtcreator/config/style/qt5-sidebar.html b/doc/qtcreator/config/style/qt5-sidebar.html index c5c9f62c161..e9bdbfb1da8 100644 --- a/doc/qtcreator/config/style/qt5-sidebar.html +++ b/doc/qtcreator/config/style/qt5-sidebar.html @@ -70,7 +70,7 @@

Reference

    -
  • Acknowledgements
  • +
  • Licenses and Acknowledgments
  • Command-Line Options
  • Custom Wizards
  • FAQ
  • diff --git a/doc/qtcreator/images/extraimages/images/FTSvDmcAgPI.jpg b/doc/qtcreator/images/extraimages/images/FTSvDmcAgPI.jpg deleted file mode 100644 index ff4798dd033..00000000000 Binary files a/doc/qtcreator/images/extraimages/images/FTSvDmcAgPI.jpg and /dev/null differ diff --git a/doc/qtcreator/images/extraimages/images/LnVjI0I7cKs.jpg b/doc/qtcreator/images/extraimages/images/LnVjI0I7cKs.jpg deleted file mode 100644 index 68fc982a2e5..00000000000 Binary files a/doc/qtcreator/images/extraimages/images/LnVjI0I7cKs.jpg and /dev/null differ diff --git a/doc/qtcreator/images/extraimages/images/hOx3dod5-1A.jpg b/doc/qtcreator/images/extraimages/images/hOx3dod5-1A.jpg deleted file mode 100644 index a75657f81cd..00000000000 Binary files a/doc/qtcreator/images/extraimages/images/hOx3dod5-1A.jpg and /dev/null differ diff --git a/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf b/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf index dcaf3a6bf9a..67ac27dd46c 100644 --- a/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf +++ b/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf @@ -1,7 +1,4 @@ {HTML.extraimages,qhp.QtCreator.extraFiles} += \ images/commercial.png \ - images/5OiIqFTjUZI.jpg \ images/EhJ1eV_6RH8.jpg \ - images/FTSvDmcAgPI.jpg \ - images/hOx3dod5-1A.jpg \ - images/LnVjI0I7cKs.jpg + images/5OiIqFTjUZI.jpg diff --git a/doc/qtcreator/images/icons/info.png b/doc/qtcreator/images/icons/info.png index eace805de31..06d59d1bd61 100644 Binary files a/doc/qtcreator/images/icons/info.png and b/doc/qtcreator/images/icons/info.png differ diff --git a/doc/qtcreator/images/icons/location.png b/doc/qtcreator/images/icons/location.png new file mode 100644 index 00000000000..2c0aacb881c Binary files /dev/null and b/doc/qtcreator/images/icons/location.png differ diff --git a/doc/qtcreator/images/icons/warning.png b/doc/qtcreator/images/icons/warning.png new file mode 100644 index 00000000000..75955c6253f Binary files /dev/null and b/doc/qtcreator/images/icons/warning.png differ diff --git a/doc/qtcreator/images/qtcreator-android-create-avd.png b/doc/qtcreator/images/qtcreator-android-create-avd.png deleted file mode 100644 index 50121765e56..00000000000 Binary files a/doc/qtcreator/images/qtcreator-android-create-avd.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-android-create-avd.webp b/doc/qtcreator/images/qtcreator-android-create-avd.webp new file mode 100644 index 00000000000..e016a92bdab Binary files /dev/null and b/doc/qtcreator/images/qtcreator-android-create-avd.webp differ diff --git a/doc/qtcreator/images/qtcreator-axivion-issue-search.webp b/doc/qtcreator/images/qtcreator-axivion-issue-search.webp index b7f13e50356..d98c5929ad1 100644 Binary files a/doc/qtcreator/images/qtcreator-axivion-issue-search.webp and b/doc/qtcreator/images/qtcreator-axivion-issue-search.webp differ diff --git a/doc/qtcreator/images/qtcreator-axivion-view.webp b/doc/qtcreator/images/qtcreator-axivion-view.webp deleted file mode 100644 index 0d1614b4eba..00000000000 Binary files a/doc/qtcreator/images/qtcreator-axivion-view.webp and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-bookmarks-view.png b/doc/qtcreator/images/qtcreator-bookmarks-view.png deleted file mode 100644 index 70c3bc2fe3d..00000000000 Binary files a/doc/qtcreator/images/qtcreator-bookmarks-view.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-bookmarks-view.webp b/doc/qtcreator/images/qtcreator-bookmarks-view.webp new file mode 100644 index 00000000000..3d4eead7599 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-bookmarks-view.webp differ diff --git a/doc/qtcreator/images/qtcreator-compiler-explorer.webp b/doc/qtcreator/images/qtcreator-compiler-explorer.webp index 3fb945df38b..b6ec50550f8 100644 Binary files a/doc/qtcreator/images/qtcreator-compiler-explorer.webp and b/doc/qtcreator/images/qtcreator-compiler-explorer.webp differ diff --git a/doc/qtcreator/images/qtcreator-compilers-target-triple.png b/doc/qtcreator/images/qtcreator-compilers-target-triple.png deleted file mode 100644 index 7157cae001e..00000000000 Binary files a/doc/qtcreator/images/qtcreator-compilers-target-triple.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-create-new-kit-vxworks.webp b/doc/qtcreator/images/qtcreator-create-new-kit-vxworks.webp new file mode 100644 index 00000000000..d27bf9fe313 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-create-new-kit-vxworks.webp differ diff --git a/doc/qtcreator/images/qtcreator-debugger-general-options.png b/doc/qtcreator/images/qtcreator-debugger-general-options.png deleted file mode 100644 index 6ab957dd76a..00000000000 Binary files a/doc/qtcreator/images/qtcreator-debugger-general-options.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-extension-mode.webp b/doc/qtcreator/images/qtcreator-extension-mode.webp index 8a880f3c444..ac8efaeca6d 100644 Binary files a/doc/qtcreator/images/qtcreator-extension-mode.webp and b/doc/qtcreator/images/qtcreator-extension-mode.webp differ diff --git a/doc/qtcreator/images/qtcreator-external-tools.png b/doc/qtcreator/images/qtcreator-external-tools.png deleted file mode 100644 index 949eff9ae25..00000000000 Binary files a/doc/qtcreator/images/qtcreator-external-tools.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-external-tools.webp b/doc/qtcreator/images/qtcreator-external-tools.webp new file mode 100644 index 00000000000..43bf51685b5 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-external-tools.webp differ diff --git a/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.png b/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.png deleted file mode 100644 index c2ad158b183..00000000000 Binary files a/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.webp b/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.webp new file mode 100644 index 00000000000..e53a901cc0c Binary files /dev/null and b/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.webp differ diff --git a/doc/qtcreator/images/qtcreator-install-plugin-accept-terms-and-conditions.webp b/doc/qtcreator/images/qtcreator-install-plugin-accept-terms-and-conditions.webp new file mode 100644 index 00000000000..7bf337b6145 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-install-plugin-accept-terms-and-conditions.webp differ diff --git a/doc/qtcreator/images/qtcreator-install-plugin-location.png b/doc/qtcreator/images/qtcreator-install-plugin-location.png deleted file mode 100644 index a4007680e0f..00000000000 Binary files a/doc/qtcreator/images/qtcreator-install-plugin-location.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-install-plugin-location.webp b/doc/qtcreator/images/qtcreator-install-plugin-location.webp new file mode 100644 index 00000000000..2b570767c16 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-install-plugin-location.webp differ diff --git a/doc/qtcreator/images/qtcreator-install-plugin-source.png b/doc/qtcreator/images/qtcreator-install-plugin-source.png deleted file mode 100644 index c4766b670a5..00000000000 Binary files a/doc/qtcreator/images/qtcreator-install-plugin-source.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-install-plugin-source.webp b/doc/qtcreator/images/qtcreator-install-plugin-source.webp new file mode 100644 index 00000000000..8d262011cbd Binary files /dev/null and b/doc/qtcreator/images/qtcreator-install-plugin-source.webp differ diff --git a/doc/qtcreator/images/qtcreator-options-cpp-compilers.png b/doc/qtcreator/images/qtcreator-options-cpp-compilers.png deleted file mode 100644 index ca2f1f6fa12..00000000000 Binary files a/doc/qtcreator/images/qtcreator-options-cpp-compilers.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-performance-analyzer-timeline.png b/doc/qtcreator/images/qtcreator-performance-analyzer-timeline.png deleted file mode 100644 index f47d79787ba..00000000000 Binary files a/doc/qtcreator/images/qtcreator-performance-analyzer-timeline.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-performance-analyzer-timeline.webp b/doc/qtcreator/images/qtcreator-performance-analyzer-timeline.webp new file mode 100644 index 00000000000..a8cecfd5626 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-performance-analyzer-timeline.webp differ diff --git a/doc/qtcreator/images/qtcreator-plugin-details.webp b/doc/qtcreator/images/qtcreator-plugin-details.webp new file mode 100644 index 00000000000..a242e101ad7 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-plugin-details.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-axivion-general.webp b/doc/qtcreator/images/qtcreator-preferences-axivion-general.webp new file mode 100644 index 00000000000..3089b3378f3 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-axivion-general.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-axivion-path-mapping.webp b/doc/qtcreator/images/qtcreator-preferences-axivion-path-mapping.webp new file mode 100644 index 00000000000..48bab0b659b Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-axivion-path-mapping.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-axivion-project.webp b/doc/qtcreator/images/qtcreator-preferences-axivion-project.webp deleted file mode 100644 index 1a1520909f1..00000000000 Binary files a/doc/qtcreator/images/qtcreator-preferences-axivion-project.webp and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-preferences-axivion.webp b/doc/qtcreator/images/qtcreator-preferences-axivion.webp deleted file mode 100644 index 6d3ebc35ec4..00000000000 Binary files a/doc/qtcreator/images/qtcreator-preferences-axivion.webp and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-preferences-compile-output.webp b/doc/qtcreator/images/qtcreator-preferences-compile-output.webp index 2dab7f7333c..9c11e13837e 100644 Binary files a/doc/qtcreator/images/qtcreator-preferences-compile-output.webp and b/doc/qtcreator/images/qtcreator-preferences-compile-output.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-clang-cl.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-clang-cl.webp new file mode 100644 index 00000000000..c02517d1b21 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-compilers-clang-cl.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-clang.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-clang.webp new file mode 100644 index 00000000000..68e3252355e Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-compilers-clang.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers-qcc.webp b/doc/qtcreator/images/qtcreator-preferences-compilers-qcc.webp new file mode 100644 index 00000000000..7d39d268a92 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-compilers-qcc.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-compilers.webp b/doc/qtcreator/images/qtcreator-preferences-compilers.webp new file mode 100644 index 00000000000..3a31ea611c1 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-compilers.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-debugger-general.webp b/doc/qtcreator/images/qtcreator-preferences-debugger-general.webp new file mode 100644 index 00000000000..9eb9c77ef8c Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-debugger-general.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-devices-vxworks.webp b/doc/qtcreator/images/qtcreator-preferences-devices-vxworks.webp new file mode 100644 index 00000000000..7bd41530443 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-devices-vxworks.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-environment-system.webp b/doc/qtcreator/images/qtcreator-preferences-environment-system.webp index 9b86064da52..76d3154d041 100644 Binary files a/doc/qtcreator/images/qtcreator-preferences-environment-system.webp and b/doc/qtcreator/images/qtcreator-preferences-environment-system.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-extensions.webp b/doc/qtcreator/images/qtcreator-preferences-extensions.webp index ba94c46dca4..e66b43c0e17 100644 Binary files a/doc/qtcreator/images/qtcreator-preferences-extensions.webp and b/doc/qtcreator/images/qtcreator-preferences-extensions.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-telemetry-usage-statistics.webp b/doc/qtcreator/images/qtcreator-preferences-telemetry-usage-statistics.webp new file mode 100644 index 00000000000..392b518284d Binary files /dev/null and b/doc/qtcreator/images/qtcreator-preferences-telemetry-usage-statistics.webp differ diff --git a/doc/qtcreator/images/qtcreator-preferences-vcs-general.webp b/doc/qtcreator/images/qtcreator-preferences-vcs-general.webp index b6206a71d0f..a44987b8d6a 100644 Binary files a/doc/qtcreator/images/qtcreator-preferences-vcs-general.webp and b/doc/qtcreator/images/qtcreator-preferences-vcs-general.webp differ diff --git a/doc/qtcreator/images/qtcreator-project-qt-quick-details.webp b/doc/qtcreator/images/qtcreator-project-qt-quick-details.webp index 56da5804372..cfd0d752cef 100644 Binary files a/doc/qtcreator/images/qtcreator-project-qt-quick-details.webp and b/doc/qtcreator/images/qtcreator-project-qt-quick-details.webp differ diff --git a/doc/qtcreator/images/qtcreator-project-qt-quick.webp b/doc/qtcreator/images/qtcreator-project-qt-quick.webp index f4587391bbe..db983569dee 100644 Binary files a/doc/qtcreator/images/qtcreator-project-qt-quick.webp and b/doc/qtcreator/images/qtcreator-project-qt-quick.webp differ diff --git a/doc/qtcreator/images/qtcreator-projects-build-dependencies.webp b/doc/qtcreator/images/qtcreator-projects-build-dependencies.webp new file mode 100644 index 00000000000..2d1c72d375f Binary files /dev/null and b/doc/qtcreator/images/qtcreator-projects-build-dependencies.webp differ diff --git a/doc/qtcreator/images/qtcreator-projects-settings-qt-quick.webp b/doc/qtcreator/images/qtcreator-projects-settings-qt-quick.webp new file mode 100644 index 00000000000..585d832fdb4 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-projects-settings-qt-quick.webp differ diff --git a/doc/qtcreator/images/qtcreator-refactoring-find.png b/doc/qtcreator/images/qtcreator-refactoring-find.png deleted file mode 100644 index 5cf396361e2..00000000000 Binary files a/doc/qtcreator/images/qtcreator-refactoring-find.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-refactoring-find.webp b/doc/qtcreator/images/qtcreator-refactoring-find.webp new file mode 100644 index 00000000000..d1df9560a17 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-refactoring-find.webp differ diff --git a/doc/qtcreator/images/qtcreator-search-all-projects.webp b/doc/qtcreator/images/qtcreator-search-all-projects.webp index 7cabff26631..cad645c470b 100644 Binary files a/doc/qtcreator/images/qtcreator-search-all-projects.webp and b/doc/qtcreator/images/qtcreator-search-all-projects.webp differ diff --git a/doc/qtcreator/images/qtcreator-search-cpp-symbols.png b/doc/qtcreator/images/qtcreator-search-cpp-symbols.png deleted file mode 100644 index f5aade540c9..00000000000 Binary files a/doc/qtcreator/images/qtcreator-search-cpp-symbols.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-search-cpp-symbols.webp b/doc/qtcreator/images/qtcreator-search-cpp-symbols.webp new file mode 100644 index 00000000000..207b8a1a6ed Binary files /dev/null and b/doc/qtcreator/images/qtcreator-search-cpp-symbols.webp differ diff --git a/doc/qtcreator/images/qtcreator-search-file-system.webp b/doc/qtcreator/images/qtcreator-search-file-system.webp index 31494d1a17f..1ea7b704ea6 100644 Binary files a/doc/qtcreator/images/qtcreator-search-file-system.webp and b/doc/qtcreator/images/qtcreator-search-file-system.webp differ diff --git a/doc/qtcreator/images/qtcreator-search-reg-exp.webp b/doc/qtcreator/images/qtcreator-search-reg-exp.webp index a56f9b18d42..b7100a159d3 100644 Binary files a/doc/qtcreator/images/qtcreator-search-reg-exp.webp and b/doc/qtcreator/images/qtcreator-search-reg-exp.webp differ diff --git a/doc/qtcreator/images/qtcreator-set-compiler-explorer-url.webp b/doc/qtcreator/images/qtcreator-set-compiler-explorer-url.webp new file mode 100644 index 00000000000..29e4a29cf55 Binary files /dev/null and b/doc/qtcreator/images/qtcreator-set-compiler-explorer-url.webp differ diff --git a/doc/qtcreator/images/qtcreator-telemetry-settings.png b/doc/qtcreator/images/qtcreator-telemetry-settings.png deleted file mode 100644 index aac2db8240a..00000000000 Binary files a/doc/qtcreator/images/qtcreator-telemetry-settings.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-test-results.webp b/doc/qtcreator/images/qtcreator-test-results.webp index 409c8970965..7192b0367b1 100644 Binary files a/doc/qtcreator/images/qtcreator-test-results.webp and b/doc/qtcreator/images/qtcreator-test-results.webp differ diff --git a/doc/qtcreator/images/qtcreator-toolchains.png b/doc/qtcreator/images/qtcreator-toolchains.png deleted file mode 100644 index 938762a6e62..00000000000 Binary files a/doc/qtcreator/images/qtcreator-toolchains.png and /dev/null differ diff --git a/doc/qtcreator/images/qtcreator-welcome-session.webp b/doc/qtcreator/images/qtcreator-welcome-session.webp index 7a67042f1cb..3911bd66e65 100644 Binary files a/doc/qtcreator/images/qtcreator-welcome-session.webp and b/doc/qtcreator/images/qtcreator-welcome-session.webp differ diff --git a/doc/qtcreator/qtcreator-online.qdocconf b/doc/qtcreator/qtcreator-online.qdocconf index b96e6e53979..d2155c9786c 100644 --- a/doc/qtcreator/qtcreator-online.qdocconf +++ b/doc/qtcreator/qtcreator-online.qdocconf @@ -4,7 +4,7 @@ include(config/qtcreator-project.qdocconf) HTML.footer = \ " \n" \ "

    \n" \ - " © $QTCREATOR_COPYRIGHT_YEAR The Qt Company Ltd.\n" \ + " $QTCREATOR_COPYRIGHT\n" \ " Documentation contributions included herein are the copyrights of\n" \ " their respective owners. " \ " The documentation provided herein is licensed under the terms of the" \ diff --git a/doc/qtcreator/qtcreator.qdocconf b/doc/qtcreator/qtcreator.qdocconf index 9ebd93b0192..d1e920409d8 100644 --- a/doc/qtcreator/qtcreator.qdocconf +++ b/doc/qtcreator/qtcreator.qdocconf @@ -10,7 +10,7 @@ HTML.footer = \ "\n" \ "

    \n" \ "

    \n" \ - " © $QTCREATOR_COPYRIGHT_YEAR The Qt Company Ltd.\n" \ + " $QTCREATOR_COPYRIGHT\n" \ " Documentation contributions included herein are the copyrights of\n" \ " their respective owners.
    " \ " The documentation provided herein is licensed under the terms of the" \ diff --git a/doc/qtcreator/src/analyze/cpu-usage-analyzer.qdoc b/doc/qtcreator/src/analyze/cpu-usage-analyzer.qdoc index d267eaf8f60..d34997b1ee0 100644 --- a/doc/qtcreator/src/analyze/cpu-usage-analyzer.qdoc +++ b/doc/qtcreator/src/analyze/cpu-usage-analyzer.qdoc @@ -257,7 +257,7 @@ The \uicontrol Timeline view displays a graphical representation of CPU usage per thread and a condensed view of all recorded events. - \image qtcreator-performance-analyzer-timeline.png {Performance Analyzer} + \image qtcreator-performance-analyzer-timeline.webp {Performance Analyzer Timeline view} Each category in the timeline describes a thread in the application. Move the cursor on an event (5) on a row to see how long it takes and which @@ -452,12 +452,16 @@ \section1 Loading and Saving Trace Files You can save and load trace data in a format specific to the - Performance Analyzer with the respective entries in \uicontrol Analyze > - \uicontrol {Performance Analyzer Options}. This format is self-contained, and + Performance Analyzer (.ptq). This format is self-contained, and therefore loading it does not require you to specify the recording environment. You can transfer such trace files to a different computer without any toolchain or debug symbols and analyze them there. + To load trace data, go to \uicontrol Analyze > + \uicontrol {Performance Analyzer Options} > \uicontrol {Load Trace File}. + + To save trace data, select \uicontrol {Save Trace File}. + \section1 Troubleshooting Performance Analyzer might fail to record data for the following reasons: diff --git a/doc/qtcreator/src/analyze/creator-axivion.qdoc b/doc/qtcreator/src/analyze/creator-axivion.qdoc index 8f0a00e01ca..72b5bfacfe6 100644 --- a/doc/qtcreator/src/analyze/creator-axivion.qdoc +++ b/doc/qtcreator/src/analyze/creator-axivion.qdoc @@ -7,37 +7,56 @@ \ingroup creator-how-to-analyze - \title Prevent code erosion + \title View Axivion static code analysis results Connect to an Axivion dashboard server from \QC to view results of code analysis. - \note Enable the Axivion plugin to use it. + \note Enable the Axivion plugin to use it. To use the plugin, you must be + connected to an Axivion dashboard server. - To use the plugin, you must set up a project in the Axivion dashboard - server and link to it from \QC. You can then see found issues in the - \uicontrol Edit mode, issues in the \uicontrol Axivion dashboard, and - issue details in the \uicontrol Axivion sidebar view. + \section1 View inline annotations in editor - The editor shows found issues as inline annotations. Hover the mouse over - an annotation to bring up a tool tip with a short description of the issue. + The editor shows found issues as inline annotations if the project matches + the currently open one and the respective file is part of the project. + Hover the mouse over an annotation to bring up a tooltip with a short + description of the issue. \image qtcreator-axivion-annotation.webp {Annotation popup} Select \inlineimage icons/info.png to view detailed information about the - issue in the \uicontrol Axivion sidebar view. + issue in the \uicontrol {Issue Details} view. - \image qtcreator-axivion-view-rule.webp {Axivion sidebar view} + \image qtcreator-axivion-view-rule.webp {Issue Details view} - \section1 View issue counts + To hide inline annotations, go to \uicontrol Analyze > \uicontrol Axivion + and clear \inlineimage icons/warning.png. - To view the issue counts, select \inlineimage icons/home.png - (\uicontrol {Show Dashboard}) in the \uicontrol Axivion dashboard. + \section1 View issues - \image qtcreator-axivion-view.webp {Axivion dashboard} + To inspect issues found during the analyses: - The \uicontrol Axivion dashboard lists the numbers of the following types of - issues that Axivion found in the linked project: + \list 1 + \li To go to the \uicontrol Axivion view: + \image qtcreator-axivion-issue-search.webp {Issues in Axivion view} + \list + \li Go to \uicontrol Analyze > \uicontrol Axivion. + \li In the mode selector, select \uicontrol Debug > + \uicontrol Axivion. + \li Switch to the \uicontrol Debug mode, and select + \uicontrol Axivion in the debugger toolbar. + \endlist + \li Select a dashboard and a project. + \li Select the icon of an issue type. + \endlist + + To refresh the list, select \inlineimage icons/reload_gray.png. + + To get help, select \inlineimage icons/info.png. + + \section1 Issue types + + Axivion looks for the following types of issues in the selected project: \table \header @@ -73,16 +92,8 @@ or coding conventions. \endtable - To clear the view, select \inlineimage icons/clean_pane_small.png - (\uicontrol Clear). - - To view issues, select \inlineimage icons/zoom.png - (\uicontrol {Search for Issues}). - \section1 Filter issues - \image qtcreator-axivion-issue-search.webp {Issues in Axivion view} - To filter issues, select: \list @@ -98,8 +109,13 @@ match the pattern. \endlist + Select \inlineimage icons/filtericon.png for a column to set or clear the + filter expression for the column. + The information you see depends on the issue type. Double-click an issue - to see more information about it in the \uicontrol Axivion sidebar view. + to see more information about it in the \uicontrol {Issue Details} view. + + To show inline issues, select \inlineimage icons/location.png. \section1 Jump to issues in the editor @@ -119,8 +135,7 @@ or \uicontrol {Target Path} column. \sa {Enable and disable plugins}, {Analyze}{How To: Analyze}, - {Link projects to Axivion dashboards}, {Analyzers}, {Axivion}, - {Analyzing Code} + {Analyzers}, {Axivion}, {Analyzing Code} */ /*! @@ -133,14 +148,16 @@ \brief Create a connection to an Axivion dashboard server. - To set preferences for the Axivion static code analysis tool, go to - \preferences > \uicontrol Axivion. + You can connect to an Axivion dashboard server and map dashboard projects to + local projects. - \image qtcreator-preferences-axivion.webp {General tab in Axivion Preferences} + \section1 Connecting to a Dashboard Server To connect to an Axivion dashboard server: \list + \li Go to \preferences > \uicontrol Axivion > \uicontrol General. + \image qtcreator-preferences-axivion-general.webp {General tab in Axivion Preferences} \li Select \uicontrol Add to add a new connection to an Axivion dashboard server. \li Select \uicontrol Edit to modify an existing connection to @@ -161,31 +178,22 @@ Select \uicontrol {Highlight marks} to highlight found issues on the scrollbar in the editor. - \sa {Enable and disable plugins}, {Link projects to Axivion dashboards}, - {Prevent code erosion} -*/ + \section1 Mapping Paths -/*! - \page creator-link-axivion-dashboards.html - \previouspage creator-how-tos.html + Projects on the dashboard might have subprojects that also appear on the + dashboard because they are analyzed separately. - \ingroup creator-how-to-projects-configure - - \title Link projects to Axivion dashboards - - To link a project to an Axivion dashboard: + To map dashboard projects to local projects: \list 1 - \li Go to \uicontrol Projects > \uicontrol {Project Settings} > - \uicontrol Axivion. - \image qtcreator-preferences-axivion-project.webp {Axivion settings in Project Settings} - \li Select the Axivion dashboard server to fetch projects from. - \li Select \uicontrol {Fetch Projects} to list projects from the server. - \li In \uicontrol {Dashboard projects} select a project. - \li Select \uicontrol {Link Project} to link to the project. + \li Go to \preferences > \uicontrol Axivion > \uicontrol {Path Mapping}. + \image qtcreator-preferences-axivion-path-mapping.webp {Path Mapping tab in Axivion Preferences} + \li In \uicontrol {Project name}, enter the project name on the dashboard. + \li In \uicontrol {Local path}, enter the path to the project on the + computer. + \li In \uicontrol {Analysis path}, enter the path to the analysis of a + subproject. You need this only to map analyses of subprojects. \endlist - To unlink a project, select \uicontrol {Unlink Project}. - - \sa {Enable and disable plugins}, {Prevent code erosion}, {Axivion} + \sa {Enable and disable plugins}, {View Axivion static code analysis results} */ diff --git a/doc/qtcreator/src/android/androiddev.qdoc b/doc/qtcreator/src/android/androiddev.qdoc index e2b064d5b50..42bf54b8b44 100644 --- a/doc/qtcreator/src/android/androiddev.qdoc +++ b/doc/qtcreator/src/android/androiddev.qdoc @@ -43,7 +43,7 @@ automatically download, install, and configure for you. \endlist - \sa {Android}{How To: Develop for Android} + \sa {Android}{How To: Develop for Android}, {Get and Install Qt} */ /*! @@ -319,15 +319,14 @@ \li Go to \preferences > \uicontrol Devices. \li Select \uicontrol Add > \uicontrol {Android Device} > \uicontrol {Start Wizard}. - \image qtcreator-android-create-avd.png {Create New AVD dialog} + \image qtcreator-android-create-avd.webp {Create New AVD dialog} \li In \uicontrol Name, give the AVD a name. - \li In \uicontrol {Device definition}, select the AVD type, and then - select one of the predefined AVDs or \uicontrol Custom for a custom - AVD. - \li In \uicontrol {Architecture (ABI)}, select an Android system image - that you installed on the computer. - \li In \uicontrol {Target API level}, select the \l{What is API Level?} - {API level} to use for building the application. + \li In \uicontrol {Target ABI / API}, select an Android system image + architecture (ABI) and \l{What is API Level?}{API level} that you + installed on the computer. + \li In \uicontrol {Skin definition}, select the AVD type, and then + select one of the predefined AVD skins or \uicontrol Custom for + a custom AVD skin. \li In \uicontrol {SD card size}, set the size of the SD card for the AVD. \li Select \uicontrol {Override existing AVD name} to overwrite an diff --git a/doc/qtcreator/src/conan/creator-projects-conan.qdoc b/doc/qtcreator/src/conan/creator-projects-conan.qdoc index 67cdd9141ae..4ebd14aa9fb 100644 --- a/doc/qtcreator/src/conan/creator-projects-conan.qdoc +++ b/doc/qtcreator/src/conan/creator-projects-conan.qdoc @@ -31,8 +31,8 @@ sources. Because the client has a local cache for package storage, you can work offline, as long as no new packages are needed from remote servers. - To use Conan, install it by using \QOI or the tools that - your operating system has. For example, on Windows, you can use the + To use Conan, install it by using \l{Get and Install Qt}{\QOI} or the tools + that your operating system has. For example, on Windows, you can use the \c {choco install conan} or \c {pip install conan} command. \note Enable the Conan plugin to use it. diff --git a/doc/qtcreator/src/debugger/creator-debug-views.qdoc b/doc/qtcreator/src/debugger/creator-debug-views.qdoc index 8880b64218b..fa73b33784d 100644 --- a/doc/qtcreator/src/debugger/creator-debug-views.qdoc +++ b/doc/qtcreator/src/debugger/creator-debug-views.qdoc @@ -146,7 +146,8 @@ \generatelist studio-how-to-debug \else - \sa {Debug}{How To: Debug}, {Debugging}, {Debuggers}, {Debugger} + \sa {Add breakpoints}, {Debug}{How To: Debug}, {Debugging}, {Debuggers}, + {Debugger} \endif */ @@ -461,15 +462,19 @@ \brief Compute values of arithmetic expressions or function calls. - To compute values of arithmetic expressions or function calls, use + To access global data that is not visible in the + \l {Local Variables and Function Parameters}{Locals} view or to compute + values of arithmetic expressions or function calls, use expression evaluators in the \uicontrol Expressions view. - You can examine static variables that the debuggers don't pick up as - \e {local variables}. For example, if you define + For example, if you define \c {static int staticVar = 42;} in a source file and then add \c staticVar as an evaluated expression, you should see \e 42 in the view when the debugger stops in the source file. + You can also use Expression Evaluators as shortcuts to items that are + nested deeply in the locals tree. + \image qtcreator-debugger-expressions.webp {Expressions view} \section1 Adding Expression Evaluators @@ -480,8 +485,8 @@ You can also: \list - \li Double-click in the \uicontrol {Expressions} or - \l {Local Variables and Function Parameters}{Locals} view. + \li Double-click in the \uicontrol {Expressions} or \uicontrol {Locals} + view. \li Select \uicontrol {Add New Expression Evaluator} from the context menu. \endlist @@ -501,21 +506,12 @@ The set of evaluated expressions is saved in your session. - \note Expression evaluators are powerful, but slow down debugger operation - significantly. Use them sparingly and remove them when you no longer need - them. - Expression evaluators are re-evaluated whenever the current frame changes. The functions used in the expressions are called each time, even if they have side-effects. - \if defined(qtcreator) - \section1 Expressions View Actions - - Right-click the \uicontrol Expressions view to select the following actions: - - \include creator-debug-views.qdoc 0 - \endif + \note Evaluating expressions is slow, so remove expression evaluators after + use. \section1 JavaScript Expressions @@ -525,27 +521,46 @@ \section1 C and C++ Expressions - GDB, LLDB and CDB support the evaluation of simple C and C++ expressions. + CDB, GDB, and LLDB support the evaluation of simple C and C++ expressions, + such as arithmetic expressions made of simple values and pointers. + + Depending on the backend and concrete location, some function calls + can be evaluated. CDB is the most limited backend in this respect. + + \section2 Function Calls + Functions can be called only if they are actually compiled into the debugged executable or a library used by the executable. Inlined functions such as most \c{operator[]} implementations of standard containers are typically \e{not} available. + \note When an expression has a function call, anything can happen, including + corruption of the application's state, or using the application's permission + to perform arbitrary actions. + + \section2 Ranged Syntax + When using GDB or LLDB as backend, you can use a special ranged syntax to display multiple values with one expression. A sub-expression of form \c{foo[a..b]} is split into a sequence of individually evaluated expressions \c{foo[a], ..., foo[b]}. + \section2 Compound Variables + You can expand compound variables of struct or class type to show their members. As you also see the variable value and type, you can examine and traverse the low-level layout of object data. + \section2 Optimized Builds + GDB and LLDB, and therefore \QC's debugger, also work for optimized builds on Linux and \macos. Optimization can lead to re-ordering of instructions or removal of some local variables, causing the \uicontrol {Locals} and \uicontrol {Expressions} views to show unexpected data. + \section2 GCC + The debug information from GCC does not include enough information about the time when a variable is initialized. Therefore, \QC can not tell whether the contents of a local @@ -554,6 +569,12 @@ \uicontrol {not in scope}. Not all uninitialized objects, however, can be recognized as such. + \section1 Expressions View Actions + + Right-click the \uicontrol Expressions view to select the following actions: + + \include creator-debug-views.qdoc 0 + \sa {Debug}{How To: Debug}, {Debugging}, {Debuggers}, {Debugger} \endif */ diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdoc index b3fef5c0e32..a26ac4a8f44 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdoc @@ -15,7 +15,7 @@ \uicontrol Debugger. In the \uicontrol General tab, you can specify settings that are common to all debuggers. - \image qtcreator-debugger-general-options.png "Debugger General preferences" + \image qtcreator-preferences-debugger-general.webp {Debugger General preferences} You can customize the appearance and behavior of the debug views and setting breakpoints, as well as map source paths to target paths. diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc index 26884aee027..31937cc381a 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc @@ -421,6 +421,8 @@ generated from crashed processes on Linux and Unix systems if the system is set up to allow this. + \section1 Get core files + To enable the dumping of core files on a Unix system, enter the following command in the shell from which the application is launched: @@ -428,11 +430,13 @@ ulimit -c unlimited \endcode + \section1 Attach to a core file + To launch the debugger in the core mode: \list 1 - \li Go to \uicontrol Debug > \uicontrol {Start Debugging} > - \uicontrol {Load Core File}. + \li Go to \uicontrol Debug > \uicontrol {Start Debugging}, and then + select \uicontrol {Load Core File}. \image qtcreator-debugger-load-core-file.png \li In \uicontrol Kit, select a build and run kit that was used for building the binary for which the core file was created. @@ -452,8 +456,17 @@ the \c sysroot to use instead of the default \c sysroot. \endlist - Even though using a properly configured project that has the sources of the - crashed application is not strictly necessary, it is helpful. + For better results, use a properly configured project that has the sources of + the crashed application. + + \section1 Attach to the latest core file + + On Linux systems, \QC uses the \c coredumpctl command provided by the + \c systemd crash handling to get core files. For more information, see + \l {systemd-coredump}. + + To attach to the latest core file, go to \uicontrol Debug > + \uicontrol {Start Debugging}, and then select \uicontrol {Load Last Core File}. \sa {Debug}{How To: Debug}, {Debugging}, {Debuggers}, {Debugger}, {Kits} */ @@ -825,7 +838,7 @@ To change the appearance and behavior of the debug views, set preferences in \preferences > \uicontrol Debugger > \uicontrol General. - \image qtcreator-debugger-general-options.png {General tab in Debugger preferences} + \image qtcreator-preferences-debugger-general.webp {General tab in Debugger preferences} For example, you can: @@ -1257,7 +1270,7 @@ at which the libraries were built, you can map source paths to target paths in \preferences > \uicontrol Debugger > \uicontrol General. - \image qtcreator-debugger-general-options.png {General tab in Debugger preferences} + \image qtcreator-preferences-debugger-general.webp {General tab in Debugger preferences} For more information, see \l{Source Paths Mapping}. diff --git a/doc/qtcreator/src/docker/creator-docker.qdoc b/doc/qtcreator/src/docker/creator-docker.qdoc index 4f1167b359a..90a44e67b10 100644 --- a/doc/qtcreator/src/docker/creator-docker.qdoc +++ b/doc/qtcreator/src/docker/creator-docker.qdoc @@ -102,7 +102,7 @@ \row \li \uicontrol {Do not modify entry point} \li Stops \QC from modifying the \l {Modify entry points}{entry point} - of the image. Make sure that the entry point starts a shell. + of the image. Make sure that the entry point of the image does not exit immediately. \row \li \uicontrol {Enable flags needed for LLDB} \li Adds the following flags to the container to allow LLDB to run: diff --git a/doc/qtcreator/src/editors/creator-code-indentation.qdoc b/doc/qtcreator/src/editors/creator-code-indentation.qdoc index f088e833879..0fa0a4ce048 100644 --- a/doc/qtcreator/src/editors/creator-code-indentation.qdoc +++ b/doc/qtcreator/src/editors/creator-code-indentation.qdoc @@ -74,8 +74,8 @@ To use a context-specific margin when available, select the \uicontrol {Use context-specific margin} check box. \if defined(qtcreator) - Then, use the ClangFormat \c ColumnLimit option to set the margin, for - example. + Then, use the \l{ClangFormat Style Options}{ClangFormat} \c ColumnLimit + option to set the margin, for example. \sa {C++ Code Style} \endif diff --git a/doc/qtcreator/src/editors/creator-code-syntax.qdoc b/doc/qtcreator/src/editors/creator-code-syntax.qdoc index f59ba0fd941..c9712d66320 100644 --- a/doc/qtcreator/src/editors/creator-code-syntax.qdoc +++ b/doc/qtcreator/src/editors/creator-code-syntax.qdoc @@ -708,12 +708,6 @@ and most likely invalid \li - \row - \li M325 - \li Warning - \li Logical value does not depend on actual values - \li Removed: This warning is no longer being used since Qt Creator version 12. - \row \li M326 \li Error @@ -747,6 +741,13 @@ \li The alias property cannot reference the root component in a hierarchy. Create an instance of the component instead. + \row + \li M403 + \li Error + \li A when condition cannot contain an object + \li Set the \c when condition to an expression that evaluates to \c true + when the condition is met. + \endtable \section1 Resetting the Code Model diff --git a/doc/qtcreator/src/editors/creator-only/creator-beautifier.qdoc b/doc/qtcreator/src/editors/creator-only/creator-beautifier.qdoc index b8b9efda4b5..2f74bd44e33 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-beautifier.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-beautifier.qdoc @@ -23,7 +23,7 @@ \li \l{http://astyle.sourceforge.net}{Artistic Style} - \li \l{http://clang.llvm.org/docs/ClangFormat.html}{ClangFormat} + \li \l{ClangFormat: Documentation}{ClangFormat} \li \l{http://uncrustify.sourceforge.net}{Uncrustify} @@ -41,7 +41,7 @@ \list \li \l{http://sourceforge.net/projects/astyle/files/astyle} {Artistic Style} - \li \l{http://llvm.org/releases/download.html}{ClangFormat} + \li \l{ClangFormat: Download}{ClangFormat} \li \l{http://sourceforge.net/projects/uncrustify/files/uncrustify} {Uncrustify} \endlist diff --git a/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc b/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc index 7f2d57e8eb3..6afb21972d8 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-coding-edit-mode.qdoc @@ -378,7 +378,7 @@ \image qtcreator-add-resource.png {Resource Browser} - \sa {Edit Code}{How To: Edit Code}, {Edit Mode}, {Editing Keyboard Shortcuts}, + \sa {Edit Code}{How To: Edit Code}, {Edit Mode}, {Editor Shortcuts}, {Navigate with locator} */ @@ -632,7 +632,14 @@ move between bookmarks, select the \uicontrol {Previous Bookmark} or \uicontrol {Next Bookmark} button or use the keyboard shortcuts. - \image qtcreator-bookmarks-view.png "Listing bookmarks in Bookmarks view" + \image qtcreator-bookmarks-view.webp {Listing bookmarks in Bookmarks view} + + To move bookmarks up and down, select \uicontrol {Move Up} or + \uicontrol {Move Down} in the context menu or press \key {Ctrl+Alt+,} or + \key {Ctrl+Alt+.}. + + To list bookmarks alphabetically by the name of the file where you set them, + select \uicontrol {Sort by Filenames}. \sa {Edit Code}{How To: Edit Code}, {Edit Mode} */ diff --git a/doc/qtcreator/src/editors/creator-only/creator-compilation-database.qdoc b/doc/qtcreator/src/editors/creator-only/creator-compilation-database.qdoc index 4bc641fb091..a3388374f49 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-compilation-database.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-compilation-database.qdoc @@ -18,6 +18,10 @@ code model with the necessary information for correctly parsing the code when you open a file for editing. + To open a compilation database as a \l {Managing Projects}{project}, go to + \uicontrol File > \uicontrol {Open File or Project} and select a compilation + database JSON file. + To generate a compilation database from the information that the code model has, select \uicontrol Build > \uicontrol {Generate Compilation Database}. @@ -37,5 +41,5 @@ database projects in the \uicontrol Projects mode. \sa {Enable and disable plugins}, {Add custom build steps}, - {Configure projects for running}, {Code Model} + {Configure projects for running}, {Code Model}, {Configuring Projects} */ diff --git a/doc/qtcreator/src/editors/creator-only/creator-how-to-create-lua.scripts.qdoc b/doc/qtcreator/src/editors/creator-only/creator-how-to-create-lua.scripts.qdoc new file mode 100644 index 00000000000..5822f59e940 --- /dev/null +++ b/doc/qtcreator/src/editors/creator-only/creator-how-to-create-lua.scripts.qdoc @@ -0,0 +1,46 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page creator-how-to-create-lua-scripts.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-edit + + \title Create Lua scripts + + To add small features to \QC, create and run \l{Lua}{Lua scripts}. + + The sample script adds a string at the current cursor position in the + editor. + + To create Lua scripts: + + \list 1 + \li Go to \uicontrol Tools > \uicontrol Scripting > + \uicontrol {New Script}. + \li In \uicontrol {File name}, enter a name for the script file. + \li Select \uicontrol Finish to create the script file. + \li Edit the sample script. + \endlist + + \section1 Run Lua scripts + + To run Lua scripts: + + \list 1 + \li Go to \uicontrol Tools > \uicontrol Scripting. + \li Select a script, and then select \uicontrol Run. + \endlist + + \section1 Edit Lua scripts + + To edit Lua scripts: + + \list 1 + \li Go to \uicontrol Tools > \uicontrol Scripting. + \li Select a script, and then select \uicontrol Edit. + \endlist + + \sa {Record text editing macros} +*/ diff --git a/doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc b/doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc index b377f8c7da0..2643720f704 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-how-to-find-symbols.qdoc @@ -21,7 +21,7 @@ \li Go to \uicontrol Tools > \uicontrol {C++} > \uicontrol {Find References to Symbol Under Cursor}, or press \key {Ctrl+Shift+U}. - \image qtcreator-find-references-to-symbol-under-cursor.png {Search results for finding references to symbols} + \image qtcreator-find-references-to-symbol-under-cursor.webp {Found symbols in the Search Results view} \endlist \section2 Color-code access type @@ -38,7 +38,7 @@ from files listed as part of the project or from all files that are used by the code, such as include files. - \image qtcreator-search-cpp-symbols.png + \image qtcreator-search-cpp-symbols.webp {Search criteria in the Search Results view} \QC searches from the following locations: @@ -54,7 +54,7 @@ \l{Search Results View} shows the location and number of search hits in the current project. - \image qtcreator-refactoring-find.png + \image qtcreator-refactoring-find.webp {Found symbols in the Search Results view} \sa {Search}{How To: Search}, {Search Results View} */ diff --git a/doc/qtcreator/src/editors/creator-only/creator-preferences-cpp-code-style.qdoc b/doc/qtcreator/src/editors/creator-only/creator-preferences-cpp-code-style.qdoc index 024b731d3ca..a2f6521d85f 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-preferences-cpp-code-style.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-preferences-cpp-code-style.qdoc @@ -11,7 +11,7 @@ \brief Set global code style for C++ files. - \QC uses the Clang \l{https://clang.llvm.org/docs/LibFormat.html}{LibFormat} + \QC uses the Clang \l{LibFormat: Documentation}{LibFormat} library to automatically format and indent C++ code. It enforces a coding style for a project or the whole organization. @@ -25,7 +25,8 @@ \li \uicontrol {Indenting Only} to only indent code. \li \uicontrol {Full Formatting} to use the \key {Ctrl+I} keyboard shortcut to format code instead of indenting. - \li \uicontrol {Use Built-In Indenter} to turn off ClangFormat. + \li \uicontrol {Use Built-In Indenter} to turn off + \l{ClangFormat: Documentation}{ClangFormat}. \endlist \li Select \uicontrol {Ignore files greater than} to make parsing faster by ignoring big files. Specify the maximum size of files to parse. @@ -38,10 +39,8 @@ \li In \uicontrol {Custom settings}, select the settings to change, and then select \uicontrol Copy. \li Give a name to the settings, and select \uicontrol OK. - \li In \uicontrol ClangFormat, edit the - \l{https://clang.llvm.org/docs/ClangFormatStyleOptions.html} - {ClangFormat Style Options}. The live preview shows how the - preferences change the indentation. + \li In \uicontrol ClangFormat, edit the \l {ClangFormat Style Options}. + The live preview shows how the preferences change the indentation. If you enter invalid values, you see warning messages. \endlist diff --git a/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc b/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc index 796931f3289..b709d4a6c71 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-text-editing-macros.qdoc @@ -56,6 +56,6 @@ To assign a keyboard shortcut to a text editing macro, go to \preferences > \uicontrol Environment > \uicontrol Keyboard. - \sa {Assign keyboard shortcuts}, {Edit Code}{How To: Edit Code}, - {Navigate with locator} + \sa {Assign keyboard shortcuts}, {Create Lua scripts}, + {Edit Code}{How To: Edit Code}, {Navigate with locator} */ diff --git a/doc/qtcreator/src/editors/creator-search.qdoc b/doc/qtcreator/src/editors/creator-search.qdoc index 03c9641fc25..dfe6b594e07 100644 --- a/doc/qtcreator/src/editors/creator-search.qdoc +++ b/doc/qtcreator/src/editors/creator-search.qdoc @@ -152,8 +152,8 @@ \li In \uicontrol Scope, select \uicontrol {All Projects}. \image qtcreator-search-all-projects.webp {Search Results view} \li In \uicontrol {Search for}, enter the string you are looking for. - \li Select options to make the search case sensitive, search only whole - words, or use regular expressions. + \li Select options to make the search case sensitive, search only whole + words, use regular expressions, or ignore binary files. \li In \uicontrol {File pattern}, specify file patterns to restrict the search to files that match the pattern. For example, to search for a string only in \c {.cpp} and \c {.h} files, enter diff --git a/doc/qtcreator/src/external-resources/external-resources.qdoc b/doc/qtcreator/src/external-resources/external-resources.qdoc index bc9ee595a80..c4e4ec852b2 100644 --- a/doc/qtcreator/src/external-resources/external-resources.qdoc +++ b/doc/qtcreator/src/external-resources/external-resources.qdoc @@ -5,10 +5,26 @@ \externalpage https://doc.qt.io/index.html \title Qt Documentation */ +/*! + \externalpage https://www.lua.org/ + \title Lua +*/ +/*! + \externalpage https://www.qt.io/academy/course-catalog#getting-started-with-qt-creator + \title Qt Academy: Getting Started with \QC +*/ +/*! + \externalpage https://www.freedesktop.org/software/systemd/man/latest/systemd-coredump.html + \title systemd-coredump +*/ /*! \externalpage https://www.perforce.com/manuals/cmdref/Content/CmdRef/P4CONFIG.html \title Perforce: P4CONFIG */ +/*! + \externalpage https://sentry.io/security/ + \title Sentry: Security & Compliance +*/ /*! \externalpage https://doc.qt.io/qt-6/qtdesigner-manual.html \title Qt Widgets Designer Manual @@ -233,3 +249,23 @@ \externalpage https://www.openssh.com/ \title OpenSSH */ +/*! + \externalpage https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/share/qtcreator/jsonschemas/project.json + \title project.json +*/ +/*! + \externalpage https://clang.llvm.org/docs/ClangFormat.html + \title ClangFormat: Documentation +*/ +/*! + \externalpage https://llvm.org/releases/download.html + \title ClangFormat: Download +*/ +/*! + \externalpage https://clang.llvm.org/docs/ClangFormatStyleOptions.html + \title ClangFormat Style Options +*/ +/*! + \externalpage https://clang.llvm.org/docs/LibFormat.html + \title LibFormat: Documentation +*/ diff --git a/doc/qtcreator/src/howto/creator-external-tools.qdoc b/doc/qtcreator/src/howto/creator-external-tools.qdoc index 61de9134d5b..48140e38c21 100644 --- a/doc/qtcreator/src/howto/creator-external-tools.qdoc +++ b/doc/qtcreator/src/howto/creator-external-tools.qdoc @@ -20,10 +20,10 @@ \title Use external tools - You can use external tools directly from \QC. Qt Linguist, QML preview - tools, and the default text editor for your system are preconfigured - for use. You can change their default configurations and configure new - tools. + You can add menu items for using external tools directly from \QC to + \uicontrol Tools > \uicontrol External. As examples, the menu shows + items for opening the currently active file for editing in a text editor + or running the currently active QML file. To run the tools, select \uicontrol Tools > \uicontrol External, or use the \c x filter in the locator. @@ -33,7 +33,7 @@ You can change the configuration of preconfigured tools and configure additional tools in \QC \preferences. - \image qtcreator-external-tools.png + \image qtcreator-external-tools.webp {External Tools preferences} \if defined(qtcreator) Select the \inlineimage icons/replace.png @@ -42,6 +42,7 @@ particular context. \endif + To configure external tools: \list 1 @@ -107,7 +108,7 @@ revert the changes by selecting the \uicontrol Reset button. The tool configurations that you add and modify are stored in XML format in - the user configuration folder. For example, + the user's configuration folder. For example, \c {~/config/QtProject/qtcreator/externaltools} on Linux and \macos and \c {C:\Users\username\AppData\Roaming\QtProject\qtcreator\externaltools} @@ -155,40 +156,11 @@ \uicontrol Projects or \uicontrol {File System} view and go to \uicontrol {Open With} > \uicontrol {Qt Linguist} in the context menu. - \section1 Use lupdate and lrelease - - Use the Qt Linguist release manager tools, lupdate and lrelease, - directly from \QC. The lupdate tool synchronizes source - code and translations. The lrelease tool creates run-time - translation files for use by the released application. - - \note Running the tools from \QC is supported only when using qmake as the - build system. For more information about using the tools with CMake, see - \l{https://doc.qt.io/qt-6/cmake-command-reference.html#qt6-linguisttools} - {Qt6::LinguistTools}. - - By default, the project .pro file is passed to the tools as an argument. To - specify other command-line arguments for the tools, go to \uicontrol Tools > - \uicontrol External > \uicontrol Configure. - - \section2 Synchronize TS files - - To synchronize TS files from a translator with the - application code, go to \uicontrol Tools > \uicontrol External > - \uicontrol Linguist > \uicontrol {Update Translations (lupdate)}. - - \section2 Generate QM files - - To generate from the TS files Qt message (QM) files that can be used by an - application, go to \uicontrol Tools > \uicontrol External > - \uicontrol Linguist > \uicontrol {Release Translations (lrelease)}. - \if defined(qtcreator) \sa {Add translation files} \endif - \sa {Use external tools}, {Internationalization with Qt}, - {Qt Linguist Manual} + \sa {Internationalization with Qt}, {Qt Linguist Manual} */ /*! @@ -227,12 +199,27 @@ \title Use external text editors - You can open files for editing in the default text editor for your system: - Notepad on Windows and vi on Linux and \macos. - To open the file you are currently viewing in an external editor, select - \uicontrol Tools > \uicontrol External > \uicontrol Text > - \uicontrol {Edit with Notepad} or \uicontrol {Edit with vi}, depending on - your system. + To open files for editing in the default text editor for your system: + + \list 1 + \li Right-click the filename in one of the following views to open a context + menu: + \list + \li \l {Edit mode} + \li \l {File System} + \li \l {Open Documents} + \li \l {Projects} + \endlist + \li Select \uicontrol {Open With} > \uicontrol {System Editor}. + \endlist + + \section1 Add editors to Tools menu + + You can add menu items for opening the file you are currently viewing in + an external editor to \uicontrol Tools > \uicontrol External > + \uicontrol Text. The current example commands are + \uicontrol {Edit with Notepad} on Windows and \uicontrol {Edit with vi} on + Linux and \macos. \QC looks for the editor path in the PATH environment variable of your operating system. diff --git a/doc/qtcreator/src/howto/creator-help.qdoc b/doc/qtcreator/src/howto/creator-help.qdoc index 530937337cc..06f669472f0 100644 --- a/doc/qtcreator/src/howto/creator-help.qdoc +++ b/doc/qtcreator/src/howto/creator-help.qdoc @@ -153,7 +153,8 @@ \endlist \if defined(qtcreator) - \sa {Read Documentation}{How To: Read Documentation} + \sa {Read Documentation}{How To: Read Documentation}, {Installation}, + {Get and Install Qt} \endif */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc index 0c3ff91b303..1005f891089 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc @@ -771,6 +771,9 @@ \image qtcreator-test-results.webp {Visual display in the Test Results view} + The view shows test duration for the test frameworks that support it. To + show and hide duration information, select \inlineimage icons/stopwatch.png. + \section1 Qt Test Output The \uicontrol{Test Results} view shows Qt and Qt Quick test results @@ -870,5 +873,5 @@ \endtable - \sa {Test}{How To: Test}, {Test Results} + \sa {Test}{How To: Test} */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc b/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc index a0e9129c6b9..49d4958149b 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-cli.qdoc @@ -59,7 +59,7 @@ \li Disable the startup check for a previously crashed \QC instance. \row - \li -load + \li -load \li Enable the specified plugin and all plugins that it depends on. You can combine \c -load and \c -noload options and specify both options multiple times to enable and disable several plugins. @@ -70,7 +70,7 @@ \li Enable all plugins. \row - \li -noload + \li -noload \li Disable the specified plugin and all plugins that depend on it. \row diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-enable-plugins.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-enable-plugins.qdoc index ad5b4e45938..f53a4ba0ca6 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-enable-plugins.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-enable-plugins.qdoc @@ -39,8 +39,11 @@ \li Go to \uicontrol {About Plugins}. \li Start typing in the \uicontrol Filter field to find a plugin. \image qtcreator-installed-plugins.webp {Installed Plugins dialog} - \li Select the \uicontrol Load check box to enable a plugin, or deselect + \li Select the \uicontrol Load checkbox to enable a plugin, or clear it to disable a plugin. + \li Select \uicontrol Details to see more information about a plugin, + such as its purpose, vendor, license, and dependencies. + \image qtcreator-plugin-details.webp {Plugin Details dialog} \li Select \uicontrol OK. \li Select \uicontrol {Restart Now} to restart \QC and have the changes take effect. diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-extensions.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-extensions.qdoc index 13ebc406b25..7debf51c946 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-extensions.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-extensions.qdoc @@ -1,6 +1,30 @@ // Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only +/*! + \page creator-how-to-manage-extensions.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-use + + \title Manage extensions + + In the experimental \uicontrol Extensions mode, you can install extensions + from the computer or the web, as well as load and unload them. + + \image qtcreator-extension-mode.webp {Extensions mode} + + To find extensions, start typing in \uicontrol Search. + + You can sort extensions according to their name, vendor, popularity, or + update date. + + To set preferences for loading extension from the web or to install + extensions, select \inlineimage icons/settings.png. + + \sa {Enable and disable plugins}, {Install extensions}, {Load extensions} +*/ + /*! \page creator-how-to-load-extensions.html \previouspage creator-how-tos.html @@ -19,6 +43,7 @@ \image qtcreator-extension-mode.webp {Extensions mode} \li Select an extension. \li Select \uicontrol {Load on start}. + \li Select \uicontrol {Restart Now} to restart \QC and load the plugin. \endlist \section1 Load extensions from the web @@ -29,11 +54,57 @@ To load extensions from the web: \list 1 - \li Go to \preferences > \uicontrol Environment > \uicontrol Extensions. + \li Go to \preferences > \uicontrol Extensions. \image qtcreator-preferences-extensions.webp {Extensions in Preferences} \li Select \uicontrol {Use external repository}. - \li Select \uicontrol OK. + \li In \uicontrol {Server URL} enter the URL of the external repository. + \li Select \uicontrol {OK}. \endlist - \sa {Enable and disable plugins}, {Install plugins} + \sa {Install extensions}, {Manage extensions} +*/ + +/*! + \page creator-how-to-install-extensions.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-use + + \title Install extensions + + To install extensions to \QC: + + \list 1 + \li Go to \uicontrol Extensions. + \image qtcreator-extension-mode.webp {Extensions mode} + \li Select an extension. + \li Select \uicontrol {Install}. + \include creator-how-to-install-plugins.qdoc install-plugins + \endlist + + \section1 Security considerations + + \QC does not check extensions from external vendors for security flaws or + malicious intent, so be careful when installing them, as it might leave your + computer vulnerable to attacks such as hacking, malware, and phishing. + + Before you install an extension from an external vendor: + + \list + \li Check that the extension is compatible with your \QC version and + other extensions that you install. You can find this information in + the description of the extension in the \uicontrol Extensions mode. + \li Check what other users are saying about the extension and how they + rate it. + \li Make sure the vendor is reputable and known for creating high-quality + extensions. + \li Check that the extension package was recently updated. Outdated + extensions present a bigger risk. + \li Check that the extension has good documentation and other means of + support. + \li Check that the extension mostly has features that you need. + All extensions that are loaded on start make \QC start a bit slower. + \endlist + + \sa {Load extensions}, {Manage extensions} */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc index a0f0bb9adb8..d643381c2b3 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-install-plugins.qdoc @@ -22,21 +22,26 @@ To install plugins: \list 1 - \li Go to \uicontrol {About Plugins} > \uicontrol {Install Plugins}. + \li Go to \uicontrol {About Plugins} > \uicontrol {Install Plugin}. +//! [install-plugins] \li In the \uicontrol Source dialog, enter the path to the archive or library that has the plugin. - \image qtcreator-install-plugin-source.png + \image qtcreator-install-plugin-source.webp {Source dialog} + \li In the \uicontrol {Accept Terms and Connections} dialog, select + \uicontrol {I accept terms and conditions}. + \image qtcreator-install-plugin-accept-terms-and-conditions.webp {Accept Terms and Connections dialog} \li In the \uicontrol {Install Location} dialog, select \uicontrol {User plugins} to make the plugin available for the current user in all compatible \QC instances or \uicontrol {\QC installation} to make the plugin available for all users of a particular \QC instance. - \image qtcreator-install-plugin-location.png + \image qtcreator-install-plugin-location.webp {Install Location dialog} \li In the \uicontrol Summary dialog, select \uicontrol Finish to install the plugin. - \image qtcreator-install-plugin-summary.png + \image qtcreator-install-plugin-summary.png {Summary dialog} \li Select \uicontrol {Restart Now} to restart \QC and load the plugin. +//! [install-plugins] \endlist - \sa {Enable and disable plugins} + \sa {Enable and disable plugins}, {Installation}, {Get and Install Qt} */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-install.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-install.qdoc index f64c870cfe0..fad52f18617 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-to-install.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-install.qdoc @@ -88,5 +88,6 @@ {Compiling \QC} and \l{https://wiki.qt.io/Building_Qt_Creator_from_Git} {Building Qt Creator from Git}. - \sa {Manage Kits}{How To: Manage Kits}, {Register installed Qt versions} + \sa {Manage Kits}{How To: Manage Kits}, {Register installed Qt versions}, + {Install plugins}, {Licenses and Acknowledgments} */ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc new file mode 100644 index 00000000000..c35e71e4a0e --- /dev/null +++ b/doc/qtcreator/src/howto/creator-only/creator-how-to-turn-on-crash-reports.qdoc @@ -0,0 +1,35 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page creator-how-to-turn-on-crash-reports.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-use + + \title Turn on crash reports + + \QC uses Google Crashpad to collect information about crashes and to send it + to \l{Sentry: Security & Compliance}{Sentry} for processing. Crashpad might + capture arbitrary contents from the memory of the crashed process, including + user-sensitive information, URLs, and other content users have trusted + \QC with. However, the crash reports are used for the sole purpose of fixing + software errors. + + To turn on crash reports: + + \list 1 + \li Go to \preferences > \uicontrol Environment > \uicontrol System. + \image qtcreator-preferences-environment-system.webp {System preferences} + \li Select \uicontrol {Enable crash reporting}. + \endlist + + To free up disk space that crash reports reserve on the computer, + select \uicontrol {Clear Local Crash Reports}. You can see the + size of the crash reports next to the button. + + Select \uicontrol ? to view more information about Crashpad and the security + policy. + + \sa {Contact Qt} +*/ diff --git a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc index d31fe7a97bd..a3ff886b09a 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-how-tos.qdoc @@ -141,6 +141,12 @@ \generatelist creator-how-to-remote-linux + \section2 VxWorks + + Build \l {Qt for VxWorks}, and create VxWorks build and run kits. + + \generatelist creator-how-to-vxworks + \section2 WebAssembly Install \l{Qt for WebAssembly} to build applications for the web and run them @@ -297,15 +303,31 @@ \section1 Examples of CLI commands + The following are examples of the commands on supported platforms when you + install \QC with \l{Get and Install Qt}{\QOI} to the default location. Change + the paths as necessary. + On Windows: \list - \li \c {C:\qtcreator\bin>qtcreator -help} + \li \c {C:\Qt\Tools\QtCreator\bin\qtcreator -help} - \li \c {C:\qtcreator\bin>qtcreator C:\TextFinder\textfinder.cpp:100:2} + \li \c {C:\Qt\Tools\QtCreator\bin\qtcreator C:\TextFinder\textfinder.cpp:100:2} - \li \c {C:\qtcreator\bin>qtcreator C:\TextFinder\textfinder.cpp +100+2} + \li \c {C:\Qt\Tools\QtCreator\bin\qtcreator C:\TextFinder\textfinder.cpp +100+2} + + \endlist + + On Linux: + + \list + + \li \c {~/Qt/Tools/QtCreator/bin/qtcreator -help} + + \li \c {~/Qt/Tools/QtCreator/bin/qtcreator /src/TextFinder/textfinder.cpp:100:2} + + \li \c {~/Qt/Tools/QtCreator/bin/qtcreator /src/TextFinder/textfinder.cpp+100+2} \endlist @@ -313,7 +335,7 @@ \list - \li \c {Qt\ Creator.app/Contents/MacOS/Qt\ Creator -help} + \li \c {~/Qt/Qt\ Creator.app/Contents/MacOS/Qt\ Creator -help} \endlist diff --git a/doc/qtcreator/src/howto/creator-only/creator-telemetry.qdoc b/doc/qtcreator/src/howto/creator-only/creator-telemetry.qdoc new file mode 100644 index 00000000000..b2cfde5c4bc --- /dev/null +++ b/doc/qtcreator/src/howto/creator-only/creator-telemetry.qdoc @@ -0,0 +1,38 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page creator-how-to-collect-usage-statistics.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-use + + \title Collect usage statistics + + When you install \QC with \QOI, you can allow it to collect pseudonymous + information about your system and \QC use. If you decline, the telemetry + plugin is not installed and no usage statistics are collected. + + \section1 Principles of data collection + + No personal data, such as names, IP addresses, MAC addresses, or project + and path names are collected. However, QUuid objects are used to identify + data records that belong to one user. The objects cannot be converted + back to the actual values from which they were generated. + + For more information about Qt privacy policy, see + \l{https://www.qt.io/terms-conditions/privacy-and-security} + {Qt Appendix for Privacy and Security}. + + \QC respects the same privacy rules. + + \section1 Turn on data collection + + To allow the telemetry plugin to collect data, go to \preferences > + \uicontrol Telemetry > \uicontrol {Usage Statistics}, and then select + \uicontrol {Send pseudonymous usage statistics}. + + \image qtcreator-preferences-telemetry-usage-statistics.webp {Usage Statistics} + + \sa {Installation} +*/ diff --git a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc index a67a8fb7657..63a428febe1 100644 --- a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc +++ b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc @@ -121,7 +121,7 @@ \b {The Qt API Reference Documentation is missing and context help does not find topics. What can I do?} - Install a Qt version and Qt documentation with \QOI. + Install a Qt version and Qt documentation with \l{Get and Install Qt}{\QOI}. To view the installed documentation (.qch files) and to add documentation, go to \preferences > \uicontrol Help > diff --git a/doc/qtcreator/src/howto/creator-telemetry.qdoc b/doc/qtcreator/src/howto/creator-telemetry.qdoc deleted file mode 100644 index 672ef719eb0..00000000000 --- a/doc/qtcreator/src/howto/creator-telemetry.qdoc +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \page creator-telemetry.html - \if defined(qtdesignstudio) - \previouspage creator-quick-ui-forms.html - \nextpage collecting-usage-statistics.html - \else - \previouspage creator-how-tos.html - \endif - - \ingroup creator-how-to-use - - \title Manage data collection - - \if defined (qtcreator) - When you install \QC as a part of Qt installation, you are asked whether - you allow it to collect pseudonymous information about your system and \QC - use. If you decline, the plugin is not installed and no analytics data is - collected. - - If you accept, all collected and transmitted data is fully transparent to - you. You can change the settings for collecting and transmitting data any - time. By default, no data is collected and you have to select a telemetry - mode for data collection to begin. - - - See \l {Collect usage statistics} for more information about the data - transmitted by the telemetry plugin and \l {Specify telemetry settings} - {specifying telemetry settings}. - \else - To enable the use of the telemetry plugin, you need to select \uicontrol - {Enable Usage Statistics} in the splash screen that appears when you first - launch \QDS. If the splash screen does not appear, you can enable the - telemetry plugin by selecting \uicontrol Help > \uicontrol {About Plugins} > - \uicontrol Utilities > \uicontrol UsageStatistic on Linux and Windows (or - \uicontrol {\QDS} > \uicontrol {About Plugins} > \uicontrol Utilities > - \uicontrol UsageStatistic on \macos). - \image studio-usage-statistics.png "Enabling Usage Statistics" - \endif - - \if defined(qtdesignstudio) - See below for more information about the collected data: - - \list - \li \l {Collect usage statistics} - \li \l {Collecting User Feedback} - \li \l {Reporting Crashes} - \endlist - \endif - - \section1 Principles of data collection - - No personal data, such as names, IP addresses, MAC addresses, or project - and path names are collected. However, QUuid objects are used to identify - data records that belong to one user. The objects cannot be converted - back to the actual values from which they were generated. - - For more information about Qt privacy policy, select - \l{https://www.qt.io/terms-conditions/#privacy} - {Legal Notice and Privacy Policy}. - - \sa {Collect usage statistics} -*/ - -/*! - \page collecting-usage-statistics.html - \if defined(qtdesignstudio) - \previouspage creator-telemetry.html - \nextpage studio-user-feedback.html - \else - \previouspage creator-how-tos.html - \endif - - \ingroup creator-how-to-use - - \title Collect usage statistics - - The telemetry plugin uses the - \l{https://api.kde.org/frameworks/kuserfeedback/html/index.html} - {KUserFeedback} framework to collect the usage data. The library - has been designed from the user data privacy point of view and - \QC respects the same privacy rules. - - The data is transmitted to the backend storage using an encrypted - connection. The storage is located in the same Heroku backend as the - \QOI backend. Physically, data is stored in the Amazon cloud. - - \section1 Specify telemetry settings - - To determine what data is transmitted to the backend storage: - - \list 1 - \li Select \preferences > \uicontrol Telemetry - > \uicontrol {Usage Statistics}. - \image qtcreator-telemetry-settings.png "Telemetry settings" - \li In the \uicontrol {Telemetry mode} list, select the mode that - determines what kind of data is collected. - \li In the \uicontrol {Data sources} list, select entries to view - exactly what data is collected. Deselect check boxes for data - that you do not want to transmit to the backend storage. - \endlist - - \sa {Manage data collection} -*/ diff --git a/doc/qtcreator/src/ios/creator-ios-dev.qdoc b/doc/qtcreator/src/ios/creator-ios-dev.qdoc index b6c8d53cde9..e465b035617 100644 --- a/doc/qtcreator/src/ios/creator-ios-dev.qdoc +++ b/doc/qtcreator/src/ios/creator-ios-dev.qdoc @@ -17,7 +17,7 @@ configured iOS devices. You only need Qt libraries that are built for iOS. You can install Qt for iOS - with \QOI. + with \l{Get and Install Qt}{\QOI}. \section1 iOS 17 Devices diff --git a/doc/qtcreator/src/linux-mobile/creator-developing-vxworks.qdoc b/doc/qtcreator/src/linux-mobile/creator-developing-vxworks.qdoc new file mode 100644 index 00000000000..0f6513407bb --- /dev/null +++ b/doc/qtcreator/src/linux-mobile/creator-developing-vxworks.qdoc @@ -0,0 +1,46 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page creator-how-to-create-vxworks-kits.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-vxworks + + \title Create kits for VxWorks devices + + To develop Qt applications for VxWorks, build \l {Qt for VxWorks} and create + a VxWorks \l {Kits}{kit}. Currently, you can develop applications with Qt 6.8 + and build them for VxWorks 24.03 devices. You cannot connect the devices to + \QC yet, so you must deploy the built packages to the devices and run them + there manually. + + \note Enable the VxWorks plugin to use it. + + To create a kit: + + \list 1 + \li Go to \preferences > \uicontrol Devices > \uicontrol VxWorks. + \image qtcreator-preferences-devices-vxworks.webp {VxWorks Preferences} + \li In \uicontrol {VxWorks installation folder}, select the directory + where the WindRiver installer installed VxWorks. + \li Select \uicontrol {Add Kit}. + \li In \uicontrol {Kit name}, enter a name for the kit. + \image qtcreator-create-new-kit-vxworks.webp {Create New Kit dialog} + \li In \uicontrol {Qt version}, select the folder that contains qmake for + the Qt VxWorks build. + \li In \uicontrol {VBS path}, enter the path to the VxWorks VSB directory. + \li In \uicontrol {Host name}, enter the host name or IP address of the + device. + \li Select \uicontrol OK to create a VxWorks kit. + \li Go to \uicontrol Projects > \uicontrol {Build & Run} to activate the + kit for your project. + \endlist + + \note To deploy the built package, you can add a build step to the deploy + configuration of the project that copies the built binary of your project to + a NFS directory shared with the device. + + \sa {Enable and disable plugins}, {Activate kits for a project}, + {Remote Linux Deploy Configuration}, {Qt for VxWorks} +*/ diff --git a/doc/qtcreator/src/linux-mobile/linuxdev.qdoc b/doc/qtcreator/src/linux-mobile/linuxdev.qdoc index 6691ca4b2c4..311b68a48b8 100644 --- a/doc/qtcreator/src/linux-mobile/linuxdev.qdoc +++ b/doc/qtcreator/src/linux-mobile/linuxdev.qdoc @@ -93,9 +93,6 @@ \li In \uicontrol {Run device type}, select \uicontrol {Remote Linux Device}. - \li To build on the remote device, select \uicontrol {Remote Linux Device} - also in \uicontrol {Build device}. - \li To specify build settings: \list 1 @@ -141,3 +138,68 @@ {Debug remotely with GDB}, {Developing for Remote Linux Devices}, {Remote Linux Deploy Configuration} */ + +/*! + \page creator-how-to-build-on-remote-linux.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-remote-linux + + \title Build applications on remote Linux devices + + In addition to building applications \e {for} a generic Linux device, you can + use the toolchain on the device to build the applications \e {on} the device. + + To build applications on a remote Linux device: + + \list 1 + + \li Go to \preferences > \uicontrol Devices > \uicontrol Devices, and + then select \uicontrol Add to add a remote Linux device. + + \li Go to \preferences > \uicontrol CMake > \uicontrol {CMake Tools}, and + then select \uicontrol Add to add the path to the CMake executable + on the remote Linux device. + + \li Go to \preferences > \uicontrol Kits > \uicontrol {Qt Versions}, + and then select \uicontrol Add to add the Qt version on the remote + Linux device + + \li Go to \preferences > \uicontrol Kits > \uicontrol Compilers, and + then select \uicontrol Add to add the the compiler on the remote + Linux device. + + \li Go to \preferences > \uicontrol Kits, and then select \uicontrol Add + to add a kit for building for the device. + + \li Select the device, CMake tool, Qt version, and compiler that you + added above. + + \li In \uicontrol {Run device type} and \uicontrol {Build device}, select + \uicontrol {Remote Linux Device}. + + \li To specify build settings: + + \list 1 + + \li Open a project for an application you want to develop for the + device. + + \li Select \uicontrol Projects > \uicontrol {Build & Run} to activate + the kit that you specified above. + + \endlist + + \li Select \uicontrol Run to specify run settings. Usually, you can use + the default settings. + + When you run the project, \QC deploys the application as specified by + the deploy steps. + + \endlist + + \sa {Add CMake tools}, {Remote Linux}{How To: Develop for remote Linux}, + {Manage Kits}{How To: Manage Kits}, {Developing for Remote Linux Devices}, + {Remote Linux Deploy Configuration}, {Remote Linux Run Settings} +*/ + diff --git a/doc/qtcreator/src/overview/creator-acknowledgements.qdoc b/doc/qtcreator/src/overview/creator-acknowledgements.qdoc index e69626b35cf..f1ccb416af0 100644 --- a/doc/qtcreator/src/overview/creator-acknowledgements.qdoc +++ b/doc/qtcreator/src/overview/creator-acknowledgements.qdoc @@ -17,9 +17,15 @@ \ingroup creator-reference - \title Acknowledgements + \title Licenses and Acknowledgments - \brief Third-party components in \QC. + \brief Licenses and third-party components in \QC. + + \section1 Licenses + + \QC is available under commercial licenses from The Qt Company, and + under the GNU General Public License version 3, annotated with + The Qt Company GPL Exception 1.0. \section1 Credits diff --git a/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc b/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc index 388801786f3..ecc13a24556 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-configuring.qdoc @@ -22,10 +22,12 @@ Qt versions and compilers by adding the paths to them and by creating \l{Kits}{kits} that use them. - To make \QC behave more like your favorite code editor or IDE, - change the preferences for keyboard shortcuts, color schemes, generic - highlighting, code snippets, and version control systems. Manage plugins - to turn on and off \QC features. + To make \QC behave more like your favorite code editor or IDE, change the + preferences for generic highlighting, code snippets, and version control + systems. Manage plugins and extensions to turn on and off \QC features. + + To make \QC more accessible, use keyboard navigation or adjust colors and + zoom levels. The following sections summarize the options that you have and point you to detailed information to help you specify any required settings and to make @@ -69,7 +71,55 @@ For more information, see \l{Manage Kits}{How To: Manage Kits} and \l{Develop for Devices}{How To: Develop for Devices}. - \section1 Changing Keyboard Shortcuts + \section1 Adding Your Own Code Snippets + + As you write code, \QC suggests properties, IDs, and code snippets to + complete the code. It lists context-sensitive suggestions for + the statement currently under your cursor. Add, modify, and remove + snippets in the snippet editor. + + To open the snippet editor, go to \preferences > + \uicontrol {Text Editor} > \uicontrol Snippets. + + For more information, see \l{Snippets}. + + \section1 Configuring Version Control Systems + + \QC supports several version control systems. In most cases, you do not need + to configure the version control in any special way to make it work with + \QC. + + However, you can set some configuration options in \preferences > + \uicontrol {Version Control} > \uicontrol General. + + For more information about the supported functions, see + \l{Version Control Systems}. + + \section1 Managing Plugins and Extensions + + \QC comes with a set of plugins, some of which are disabled by default. + You can \l{Enable and disable plugins}{enable} disabled plugins if you + need them and disable plugins you don't need. + + \l{Install plugins}{Download and install} more plugins from + \l{https://marketplace.qt.io/}{Qt Marketplace} or some + other source, such as \l{https://github.com/}{GitHub}. + + To enable and disable plugins, go to \uicontrol Help > + \uicontrol {About Plugins}. + + To install plugins, go to \uicontrol Help > \uicontrol {About Plugins} and + select \uicontrol {Install Plugins}. + + You can also install and load extensions in the \uicontrol Extensions mode. + + \section1 Accessibility + + You can use keyboard shortcuts to navigate the UI without a mouse, or set + zoom levels and change colors to improve the visibility of the text. Also, + \QC supports screen readers. + + \section2 Changing Keyboard Shortcuts You can use \QC with your favorite keyboard shortcuts. @@ -77,7 +127,33 @@ \uicontrol Environment > \uicontrol Keyboard. For more information, see \l{Keyboard Shortcuts}. - \section1 Changing Color Schemes + \section2 Navigating with the Keyboard + + To move between UI controls, press the the \key Tab key or the \key Left, + \key Right, \key Up, and \key Down arrow keys. + + \section2 Setting Zoom Levels + + To set editor font and colors, select \preferences > + \uicontrol {Text Editor} > \uicontrol {Font & Colors}. + + Select the font family and size, and set the zoom level in percentage for + viewing the text or use keyboard shortcuts or the mouse wheel to zoom in or + out. + + To improve the readability of text in the editor, adjust the line spacing. + + For more information, see \l{Font & Colors}. + + The system configuration determines the font sizes in other parts of \QC. + + When viewing output, use the \inlineimage icons/plus.png {Plus button} and + \inlineimage icons/minus.png {Minus button} buttons or keyboard shortcuts to + set the zoom level. + + For more information, see \l{View output}. + + \section2 Changing Color Schemes Themes set the appearance of the \QC UI: widgets, colors, and icons. @@ -104,45 +180,5 @@ For more information, see \l{Download highlight definitions}. - \section1 Adding Your Own Code Snippets - - As you write code, \QC suggests properties, IDs, and code snippets to - complete the code. It lists context-sensitive suggestions for - the statement currently under your cursor. Add, modify, and remove - snippets in the snippet editor. - - To open the snippet editor, go to \preferences > - \uicontrol {Text Editor} > \uicontrol Snippets. - - For more information, see \l{Snippets}. - - \section1 Configuring Version Control Systems - - \QC supports several version control systems. In most cases, you do not need - to configure the version control in any special way to make it work with - \QC. - - However, you can set some configuration options in \preferences > - \uicontrol {Version Control} > \uicontrol General. - - For more information about the supported functions, see - \l{Version Control Systems}. - - \section1 Managing Plugins - - \QC comes with a set of plugins, some of which are disabled by default. - You can \l{Enable and disable plugins}{enable} disabled plugins if you - need them and disable plugins you don't need. - - \l{Install plugins}{Download and install} more plugins from - \l{https://marketplace.qt.io/}{Qt Marketplace} or some - other source, such as \l{https://github.com/}{GitHub}. - - To enable and disable plugins, go to \uicontrol Help > - \uicontrol {About Plugins}. - - To install plugins, go to \uicontrol Help > \uicontrol {About Plugins} and - select \uicontrol {Install Plugins}. - - \sa {Installation}, {Reset \QC settings}, {Preferences} + \sa {Installation}, {Reset \QC settings}, {Preferences}, {Get and Install Qt} */ diff --git a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc index 6a2602b34d0..3e4b803be50 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc @@ -25,7 +25,11 @@ \section1 Linux - (K)Ubuntu Linux 22.04 (64-bit) or later is supported. + Supported platforms are: + \list + \li (K)Ubuntu Linux 22.04 (x86_64) or later + \li (K)Ubuntu Linux 24.04 (arm64) or later + \endlist To build Qt applications using \QC on Linux, you usually need the following: @@ -50,12 +54,16 @@ \section1 macOS - \macos 11.0 or later is supported with the Xcode tools for your \macos + \macos 12.0 or later is supported with the Xcode tools for your \macos version available in the Mac App Store. \section1 Windows - Windows 10 (64-bit) or later is supported. + Supported platforms are: + \list + \li Windows 10 (x86_64) or later + \li Windows 11 (ARM64) or later + \endlist \note Some \QC plugins rely on Direct3D (part of DirectX). You might have to manually enable support for it if you are running Windows in a diff --git a/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc b/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc index 8c54ecbe91c..13b1ec37746 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-getting-started.qdoc @@ -8,9 +8,8 @@ \title Getting Started - To learn the basics of \QC, take the - \l{https://www.qt.io/academy/course-catalog#getting-started-with-qt-creator} - {Getting Started with Qt Creator} course in Qt Academy. + To learn the basics of \QC, take the \l{Qt Academy: Getting Started with \QC} + course. \table borderless \row @@ -57,5 +56,5 @@ and APIs to develop Qt applications, go to \l {Qt Documentation}. \endtable - \sa {Installation} + \sa {Installation}, {Get and Install Qt} */ diff --git a/doc/qtcreator/src/overview/creator-only/creator-keyboard-shortcuts.qdoc b/doc/qtcreator/src/overview/creator-only/creator-keyboard-shortcuts.qdoc index d15fc43003c..eea222ee4b9 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-keyboard-shortcuts.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-keyboard-shortcuts.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2023 The Qt Company Ltd. +// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // ********************************************************************** @@ -17,12 +17,17 @@ \brief Default keyboard shortcuts. - \QC has various keyboard shortcuts that speed up your development process. + Keyboard shortcuts make application development faster. To view all \QC functions and their keyboard shortcuts, select \preferences > \uicontrol Environment > \uicontrol Keyboard. \image qtcreator-keyboard-shortcuts.png + The tables in this topic list the default keyboard shortcuts. They are + categorized by actions. + + \section1 Conflicting Shortcuts + Shortcuts that are displayed in red are associated with several functions. \QC executes the function that is available in the current context. If several functions are available for the same shortcut in the current context, @@ -38,6 +43,8 @@ and therefore the default \QC keyboard shortcut \key F10 (Step Over) will not work on that system. + \section1 Showing Shortcuts in Menus + To override the platform default value that determines whether keyboard shortcuts are shown in the labels of context menu items, select \preferences > \uicontrol Environment > @@ -47,386 +54,1237 @@ \image qtcreator-preferences-environment-interface.webp {Interface tab in Environment preferences} - The following tables list the default keyboard shortcuts. They are - categorized by actions. + \section1 Top 5 General Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Return to the editor + \li Esc + \li Esc + \row + \li Go to previous open document in history + \li Ctrl+Tab + \li Opt+Tab + \row + \li Build project + \li Ctrl+B + \li Cmd+B + \row + \li Run + \li Ctrl+R + \li Cmd+R + \row + \li Toggle output views + \li Alt+ + + Where the number is the number of the view. + \li Cmd+ + \endtable + + \section1 Top 5 Locator Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Activate \uicontrol Locator + \li Ctrl+K + \li Cmd+K + \row + \li Find a file + \li Ctrl+K, + \li Cmd+K, + \row + \li Start debugging a run configuration of the active project + \li Ctrl+K, dr + \li Cmd+K, dr + \row + \li Run a run configuration of the active project + \li Ctrl+K, rr + \li Cmd+K, rr + \row + \li Trigger a menu item + \li Ctrl+Shift+K,

    + \li Cmd+Shift+K, + \endtable + + \section1 Top 10 Editor Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Auto-indent selection + \li Ctrl+I + \li Cmd+I + \row + \li Find references to symbol under cursor + \li Ctrl+Shift+U + \li Cmd+Shift+U + \row + \li Follow symbol under cursor + \li F2 + \li F2 + \row + \li Go to advanced find + \li Ctrl+Shift+F + \li Cmd+Shift+F + \row + \li Go to previous bookmark + \li Ctrl+, + \li Ctr+, + \row + \li Open type hierarchy + \li Ctrl+Shift+T + \li Ctrl+Shift+T + \row + \li Paste from the clipboard history + \li Ctrl+Shift+V + \li Cmd+Shift+V + \row + \li Sort selected lines alphabetically + \li Alt+Shift+S + \li Ctrl+Shift+S + \row + \li Switch between header and source file + \li F4 + \li F4 + \row + \li Trigger a code completion in the current scope + \li Ctrl+Space + \li Ctrl+Space + \endtable + + \section1 Top 5 Debugger Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Start or continue debugging + \li F5 + \li Cmd+Y + \row + \li Exit debugger + \li Shift+F5 + \li Cmd+Shift+Y + \row + \li Step over + \li F10 + \li Cmd+Shift+0 + \row + \li Step into + \li F11 + \li Cmd+Shift+I + \row + \li Step out + \li Shift+F11 + \li Cmd+Shift+T + \endtable + + \section1 Top 5 Git Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Diff + \li Alt+G, Alt+D + \li Ctrl+G, Ctrl+D + \row + \li Diff project or repository + \li Alt+G, Alt+Shift+D + \li Ctrl+G, Ctrl+Shift+D + \row + \li Diff of current modified editor + \li Alt+H + \li Ctrl+H + \row + \li Git blame + \li Alt+G, Alt+B + \li Ctrl+G, Ctrl+B + \row + \li Git log repository + \li Alt+G, Alt+K + \li Ctrl+G, Ctrl+K + \endtable \section1 General Keyboard Shortcuts + \section2 Document Navigation Shortcuts + \table \header - \li Action - \li Keyboard shortcut + \li Action + \li Windows and Linux + \li \macos \row - \li Open file or project - \li Ctrl+O + \li Go back + \li Alt+Left + \li Cmd+Opt+Left \row - \li New project - \li Ctrl+Shift+N + \li Go forward + \li Alt+Right + \li Cmd+Opt+Right \row - \li New file - \li Ctrl+N + \li Go to line + \li Ctrl+L + \li Cmd+L \row - \li Open in external editor - \li Alt+V, Alt+I + \li Go to next open document in history + \li Ctrl+Shift+Tab + \li Opt+Shift+Tab \row - \li Select all - \li Ctrl+A + \li Go to previous open document in history + \li Ctrl+Tab + \li Opt+Tab \row - \li Delete - \li Del - \row - \li Cut - \li Ctrl+X - \row - \li Copy - \li Ctrl+C - \row - \li Paste - \li Ctrl+V - \row - \li Redo - \li Ctrl+Y - \row - \li Print - \li Ctrl+P - \row - \li Save - \li Ctrl+S - \row - \li Save all - \li Ctrl+Shift+S - \row - \li Close window - \li Ctrl+W - \row - \li Close all - \li Ctrl+Shift+W - \row - \li Close current file - \li Ctrl+F4 - \row - \li Go back - \li Alt+Left - \row - \li Go forward - \li Alt+Right - \row - \li Go to line - \li Ctrl+L - \row - \li Next open document in history - \li Ctrl+Shift+Tab - \row - \li Go to other split - \li Ctrl+E, O - \row - \li Previous open document in history - \li Ctrl+Tab - \row - \li Activate \uicontrol Locator - \li Ctrl+K - \row - \li Switch to \uicontrol Welcome mode - \li Ctrl+1 - \row - \li Switch to \uicontrol Edit mode - \li Ctrl+2 - \row - \li Switch to \uicontrol Design mode - \li Ctrl+3 - \row - \li Switch to \uicontrol Debug mode - \li Ctrl+4 - \row - \li Switch to \uicontrol Projects mode - \li Ctrl+5 - \row - \li Switch to \uicontrol Extensions mode - \li Ctrl+6 - \row - \li Switch to \uicontrol Help mode - \li Ctrl+7 - \row - \li Toggle \uicontrol{Issues} - \li Alt+1 (Cmd+1 on \macos) - \row - \li Toggle \uicontrol{Search Results} - \li Alt+2 (Cmd+2 on \macos) - \row - \li Toggle \uicontrol{Application Output} - \li Alt+3 (Cmd+3 on \macos) - \row - \li Toggle \uicontrol{Compile Output} - \li Alt+4 (Cmd+4 on \macos) - \row - \li Toggle other output views - \li Alt+number (Cmd+number on \macos) + \li Go to next split or window + \li Ctrl+E, O + \li Ctrl+E, O + \endtable - Where the number is the number of the view. + \section2 Exit \QC + + By default, \QC exits without asking for confirmation, unless there are + unsaved changes in open files. To always be asked, go to \preferences > + \uicontrol Environment > \uicontrol System and then select + \uicontrol {Ask for confirmation before exiting}. + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Activate \uicontrol Bookmarks view - \li Alt+M + \li Exit \QC + \li Ctrl+Q + \li Cmd+Q + \endtable + + \section2 File Management Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Activate \uicontrol{File System} view - \li Alt+Y + \li Open file or project + \li Ctrl+O + \li Cmd+O \row - \li Activate \uicontrol{Open Documents} view - \li Alt+O + \li Open in a new window + \li Ctrl+E, 4 + \li Ctrl+E, 4 \row - \li Maximize output views - \li Alt+Shift+9 + \li New project + \li Ctrl+Shift+N + \li Cmd+Shift+N \row - \li Move to next item in output - \li F6 + \li New file + \li Ctrl+N + \li Cmd+N \row - \li Move to previous item in output - \li Shift+F6 + \li Save current document + \li Ctrl+S + \li Cmd+S \row - \li Activate \uicontrol Projects view - \li Alt+X + \li Save all documents + \li Ctrl+Shift+S + \li \e {None} \row - \li Full screen - \li Ctrl+Shift+F11 + \li Close current editor + \li Ctrl+W + \li Cmd+W \row - \li Toggle the sidebar - \li Alt+0 (Cmd+0 on \macos) + \li Close all editors + \li Ctrl+Shift+W + \li Cmd+Shift+W + \endtable + + \section2 Find-and-Replace Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Undo - \li Ctrl+Z + \li Activate \uicontrol Locator + \li Ctrl+K + \li Cmd+K \row - \li Move to \uicontrol Edit mode + \li Find and replace + \li Ctrl+F + \li Cmd+F + \row + \li Find next + \li F3 + \li Cmd+G + \row + \li Find previous + \li Shift+F3 + \li Ctrl+Shift+G + \row + \li Find next occurrence of selected text + \li Ctrl+F3 + \li Cmd+F3 + \row + \li Find previous occurrence of selected text + \li Cmd+Shift+F3 + \li \e {None} + \row + \li Replace next + \li Ctrl+= + \li Cmd+= + \row + \li Open advanced find + \li Ctrl+Shift+F + \li Cmd+Shift+F + \endtable + + \section2 Text Editing Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Select all + \li Ctrl+A + \li Cmd+A + \row + \li Cut + \li Ctrl+X + \li Cmd+X + \row + \li Copy + \li Ctrl+C + \li Cmd+C + \row + \li Paste + \li Ctrl+V + \li Cmd+V + \row + \li Paste from the clipboard history + \li Ctrl+Shift+V + \li Cmd+Shift+V + \row + \li Print + \li Ctrl+P + \li Cmd+P + \row + \li Undo + \li Ctrl+Z + \li Cmd+Z + \row + \li Redo + \li Ctrl+Shift+Z + \li Cmd+Shift+Z + \endtable + + \section1 UI Navigation Shortcuts + + \section2 Mode Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Switch to \uicontrol Welcome mode + \li Ctrl+1 + \li Ctrl+1 + \row + \li Switch to \uicontrol Edit mode + \li Ctrl+2 + \li Ctrl+2 + \row + \li Switch to \uicontrol Design mode + \li Ctrl+3 + \li Ctrl+3 + \row + \li Switch to \uicontrol Debug mode + \li Ctrl+4 + \li Ctrl+4 + \row + \li Switch to \uicontrol Projects mode + \li Ctrl+5 + \li Ctrl+5 + \row + \li Switch to \uicontrol Extensions mode + \li Ctrl+6 + \li Ctrl+6 + \row + \li Switch to \uicontrol Help mode + \li Ctrl+7 + \li Ctrl+7 + \row + \li Go to \uicontrol Edit mode In \uicontrol Edit mode: \list - \li The first press moves focus to the editor - \li The second press closes secondary windows + \li The first press moves focus to the editor + \li The second press closes secondary windows \endlist - \li Esc - \row - \li Exit \QC - - By default, \QC exits without asking for confirmation, unless - there are unsaved changes in open files. To always be asked, - select the \uicontrol {Ask for confirmation before exiting} - check box in \preferences > \uicontrol Environment > - \uicontrol System. - \li Ctrl+Q + \li Esc + \li Esc \endtable - \section1 Editing Keyboard Shortcuts + \section2 Output View Shortcuts \table \header - \li Action - \li Keyboard shortcut + \li Action + \li Windows and Linux + \li \macos \row - \li Auto-indent selection - \li Ctrl+I + \li Toggle \uicontrol{Issues} + \li Alt+1 + \li Cmd+1 \row - \li Collapse - \li Ctrl+< + \li Toggle \uicontrol{Search Results} + \li Alt+2 + \li Cmd+2 \row - \li Expand - \li Ctrl+> + \li Toggle \uicontrol{Application Output} + \li Alt+3 + \li Cmd+3 \row - \li Trigger a completion in this scope - \li Ctrl+Space + \li Toggle \uicontrol{Compile Output} + \li Alt+4 + \li Cmd+4 \row - \li Display tooltips for function signatures regardless of the - cursor position in the function call - \li Ctrl+Shift+D - \row - \li Copy line - \li Ctrl+Ins - \row - \li Copy line down - \li Ctrl+Alt+Down - \row - \li Copy line up - \li Ctrl+Alt+Up - \row - \li Paste from the clipboard history - \li Ctrl+Shift+V + \li Toggle other output views + \li Alt+ - Subsequent presses move you back in the history + Where the number is the number of the view. + \li Cmd+ \row - \li Cut line - \li Shift+Del + \li Maximize output views + \li Alt+Shift+9 + \li Cmd+Shift+9 \row - \li Join lines - \li Ctrl+J + \li Move to next item in output + \li F6 + \li F6 \row - \li Insert line above current line - \li Ctrl+Shift+Enter - \row - \li Insert line below current line - \li Ctrl+Enter - \row - \li Decrease font size - \li Ctrl+- (Ctrl+Roll mouse wheel down) - \row - \li Increase font size - \li Ctrl++ (Ctrl+Roll mouse wheel up) - \row - \li Reset font size - \li Ctrl+0 - \row - \li Toggle Vim-style editing - \li Alt+Y, Alt+Y - \row - \li Split - \li Ctrl+E, 2 - \row - \li Split side by side - \li Ctrl+E, 3 - \row - \li Remove all splits - \li Ctrl+E, 1 - \row - \li Remove current split - \li Ctrl+E, 0 - \row - \li Select all - \li Ctrl+A - \row - \li Go to block end - \li Ctrl+] - \row - \li Go to block start - \li Ctrl+[ - \row - \li Go to block end and select the lines between the current cursor - position and the end of the block - \li Ctrl+Shift+] - \row - \li Go to block start and select the lines between the current - cursor position and the beginning of the block - \li Ctrl+Shift+[ - \row - \li Select the current block + \li Move to previous item in output + \li Shift+F6 + \li Shift+F6 + \endtable - The second press extends the selection to the parent block. To - enable this behavior, select \preferences > - \uicontrol {Text Editor} > \uicontrol Behavior > - \uicontrol {Enable smart selection changing}. - \li Ctrl+U - \row - \li Undo the latest smart block selection - \li Ctrl+Alt+Shift+U - \row - \li Move current line down - \li Ctrl+Shift+Down - \row - \li Move current line up - \li Ctrl+Shift+Up - \row - \li Trigger a refactoring action in this scope - \li Alt+Enter - \row - \li Rewrap paragraph - \li Ctrl+E, R - \row - \li Enable text wrapping - \li Ctrl+E, Ctrl+W - \row - \li Toggle comment for selection - \li Ctrl+/ - \row - \li Visualize whitespace - \li Ctrl+E, Ctrl+V - \row - \li Toggle bookmark - \li Ctrl+M - \row - \li Go to next bookmark - \li Ctrl+. - \row - \li Go to previous bookmark - \li Ctrl+, - \row - \li Fetch snippet - \li Alt+C, Alt+F - \row - \li Paste snippet - \li Alt+C, Alt+P - \row - \li Find references to symbol under cursor - \li Ctrl+Shift+U - \note If this keyboard shortcut does not work on Linux, see - \l {Editing Issues}. - \row - \li Follow symbol under cursor + \section2 Sidebar View Shortcuts - Works with namespaces, classes, functions, variables, include - statements, and macros, as well as CMake functions, macros, - targets, and packages. Also, opens URLs in the default browser - and Qt resource files (.qrc) in the \l{Create resource files} - {resource editor} - \li F2 + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Rename symbol under cursor - \li Ctrl+Shift+R + \li Activate \uicontrol Bookmarks view + \li Alt+M + \li Ctrl+Opt+M \row - \li Switch between function declaration and definition - \li Shift+F2 + \li Activate \uicontrol{File System} view + \li Alt+Y, Alt+F + \li Ctrl+Y, Ctrl+F \row - \li Open type hierarchy - \li Ctrl+Shift+T + \li Activate \uicontrol{Open Documents} view + \li Alt+O + \li Ctrl+O \row - \li Switch between header and source file - \li F4 + \li Activate \uicontrol Projects view + \li Alt+X + \li Ctrl+X + \row + \li Full screen + \li Ctrl+Shift+F11 + \li Cmd+Ctrl+F + \row + \li Toggle the left sidebar + \li Alt+0 + \li Cmd+0 + \row + \li Toggle the right sidebar + \li Alt+Shift+0 + \li Cmd+Shift+0 + \endtable + + \section1 Editor Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Auto-indent selection + \li Ctrl+I + \li Cmd+I + \row + \li Rewrap paragraph + \li Ctrl+E, R + \li Ctrl+E, R + \row + \li Enable text wrapping + \li Ctrl+E, Ctrl+W + \li Ctrl+E, Ctrl+W + \row + \li Toggle comment for selection + \li Ctrl+/ + \li Cmd+/ + \row + \li Visualize whitespace + \li Ctrl+E, Ctrl+V + \li Ctrl+E, Ctrl+V + \row + \li Trigger a code completion in the current scope + \li Ctrl+Space + \li Ctrl+Space + \row + \li Trigger a refactoring action in this scope + \li Alt+Enter + \li Opt+Return + \row + \li Display tooltips for function signatures regardless of the + cursor position in the function call + \li Ctrl+Shift+D + \li Ctrl+Shift+D + \endtable + + \section2 Bookmark Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Toggle bookmark + \li Ctrl+M + \li Ctrl+M + \row + \li Go to next bookmark + \li Ctrl+. + \li Ctrl+. + \row + \li Go to previous bookmark + \li Ctrl+, + \li Ctrl+, + \endtable + + \section2 Code Block Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Collapse block + \li Ctrl+< + \li Cmd+< + \row + \li Expand block + \li Ctrl+> + \li Cmd+> + \row + \li Go to block end + \li Ctrl+] + \li Cmd+] + \row + \li Go to block start + \li Ctrl+[ + \li Cmd+[ + \row + \li Go to block end and select the lines between the current cursor + position and the end of the block + \li Ctrl+Shift+] + \li Cmd+} + \row + \li Go to block start and select the lines between the current + cursor position and the beginning of the block + \li Ctrl+Shift+[ + \li Cmd+{ + \row + \li Select the current block + + The second press extends the selection to the parent block. To + enable this behavior, select \preferences > + \uicontrol {Text Editor} > \uicontrol Behavior > + \uicontrol {Enable smart selection changing}. + \li Ctrl+U + \li Cmd+U + \row + \li Undo the latest smart block selection + \li Ctrl+Alt+Shift+U + \li Cmd+Opt+Shift+U + \endtable + + \section2 Code Line Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Copy line + \li Ctrl+Ins + \li Cmd+Ins + \row + \li Copy line down + \li Ctrl+Alt+Down + \li Cmd+Opt+Down + \row + \li Copy line up + \li Ctrl+Alt+Up + \li Cmd+Opt+Up + \row + \li Cut line + \li Shift+Del + \li Shift+Del + \row + \li Join lines + \li Ctrl+J + \li Cmd+J + \row + \li Insert line above current line + \li Ctrl+Shift+Enter + \li Cmd+Shift+Return + \row + \li Insert line below current line + \li Ctrl+Enter + \li Cmd+Return + \row + \li Move current line down + \li Ctrl+Shift+Down + \li Cmd+Shift+Down + \row + \li Move current line up + \li Ctrl+Shift+Up + \li Cmd+Shift+Up + \endtable + + \section2 Code Navigation Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Find references to symbol under cursor + \li Ctrl+Shift+U + \note If this keyboard shortcut does not work on Linux, see + \l {Editing Issues}. + \li Cmd+Shift+U + \row + \li Follow symbol under cursor + + Works with namespaces, classes, functions, variables, include + statements, and macros, as well as CMake functions, macros, + targets, and packages. Also, opens URLs in the default browser + and Qt resource files (.qrc) in the \l{Create resource files} + {resource editor} + \li F2 + \li F2 + \row + \li Switch between function declaration and definition + \li Shift+F2 + \li Shift+F2 + \endtable + + \section2 C++ Editing Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Open type hierarchy + \li Ctrl+Shift+T + \li Ctrl+Shift+T + \row + \li Open include hierarchy + \li Ctrl+Shift+I + \li Ctrl+Shift+I + \row + \li Rename symbol under cursor + \li Ctrl+Shift+R + \li Cmd+Shift+R + \row + \li Switch between header and source file + \li F4 + \li F4 \row \li Add a cursor at the next occurrence of selected text for multi-cursor editing - \li Ctrl+D + \li Ctrl+D + \li Cmd+D \row - \li Turn selected text into lowercase - \li Alt+U + \li Turn selected text into lowercase + \li Alt+U + \li Ctrl+U \row - \li Turn selected text into uppercase - \li Alt+Shift+U + \li Turn selected text into uppercase + \li Alt+Shift+U + \li Ctrl+Shift+U \row - \li Sort selected lines alphabetically - \li Alt+Shift+S + \li Sort selected lines alphabetically + \li Alt+Shift+S + \li Ctrl+Shift+S + \endtable + + \section2 FakeVim Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Run static checks on JavaScript code to find common problems - \li Ctrl+Shift+C + \li Toggle Vim-style editing + \li Alt+Y, Alt+Y + \li Ctrl+Shift+Y, Ctrl+Shift+Y \row - \li Find and replace - \li Ctrl+F + \li Execute user actions in FakeVim mode + \li Alt+Y, n, where n is the number of the user action, from 1 to 9 + \li Ctrl+Shift+Y, n + \endtable + + \section2 Font Size Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Find next - \li F3 + \li Decrease font size + \li Ctrl+- (Ctrl+Roll mouse wheel down) + \li Cmd+- (Cmd+Roll mouse wheel down) \row - \li Find previous - \li Shift+F3 + \li Increase font size + \li Ctrl++ (Ctrl+Roll mouse wheel up) + \li Cmd++ (Cmd+Roll mouse wheel up) \row - \li Find next occurrence of selected text - \li Ctrl+F3 + \li Reset font size + \li Ctrl+0 + \li Ctrl+0 + \endtable + + \section2 Snippet Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Find previous occurrence of selected text - \li Ctrl+Shift+F3 + \li Fetch snippet + \li Alt+C, Alt+F + \li Ctrl+C, Ctrl+F \row - \li Replace next - \li Ctrl+= + \li Paste snippet + \li Alt+C, Alt+P + \li Ctrl+C, Ctrl+P + \endtable + + \section2 Split View Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Open advanced find - \li Ctrl+Shift+F + \li Split view + \li Ctrl+E, 2 + \li Ctrl+E, 2 \row - \li Record a text-editing macro - \li Alt+[ + \li Split side by side + \li Ctrl+E, 3 + \li Ctrl+E, 3 \row - \li Stop recording a macro - \li Alt+] + \li Remove all splits + \li Ctrl+E, 1 + \li Ctrl+E, 1 \row - \li Play last macro - \li Alt+R + \li Remove current split + \li Ctrl+E, 0 + \li Ctrl+E, 0 + \endtable + + \section2 Text Editing Macro Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos \row - \li Show Qt Quick toolbars - \li Ctrl+Alt+Space + \li Record a text-editing macro + \li Alt+[ + \li Cmd+[ \row - \li Execute user actions in FakeVim mode - \li Alt+Y, n, where n is the number of the user action, from 1 to 9 + \li Stop recording a macro + \li Alt+] + \li Cmd+] + \row + \li Play last macro + \li Alt+R + \li Ctrl+R + \endtable + + \section1 Build-and-Run Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Build project + \li Ctrl+B + \li Cmd+B + \row + \li Build current file + \li Ctrl+Alt+B + \li Cmd+Opt+B + \row + \li Build all + \li Ctrl+Shift+B + \li Cmd+Shift+B + \row + \li Select the \l{Kits}{kit} to build and run your project with + \li Ctrl+T + \li Cmd+T + \row + \li Run + \li Ctrl+R + \li Cmd+R + \endtable + + \section1 Debugger Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Start or continue debugging + \li F5 + \li Cmd+Y + \row + \li Exit debugger + \li Shift+F5 + \li Cmd+Shift+Y + \row + \li Step over + \li F10 + \li Cmd+Shift+O + \row + \li Step into + \li F11 + \li Cmd+Shift+I + \row + \li Step out + \li Shift+F11 + \li Cmd+Shift+T + \row + \li Set or remove breakpoint + \li F9 + \li F8 + \row + \li Enable or disable breakpoint + \li Ctrl+F9 + \li Cmd+F8 + \row + \li Run to selected function + \li Ctrl+F6 + \li Cmd+F6 + \row + \li Run to line + \li Ctrl+F10 + \li Shift+F8 + \row + \li Reverse direction + \li F12 + \li \e {None} + \endtable + + \section1 Help Mode Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li View context-sensitive help + \li F1 + \li F1 + \row + \li Go to \uicontrol Contents in the \uicontrol Help mode + \li Ctrl+Shift+C + \li \e {None} + \row + \li Add a bookmark + \li Ctrl+M + \li Ctrl+M + \row + \li Go to \uicontrol Index in the \uicontrol Help mode + \li Ctrl+Shift+I + \li Ctrl+I + \row + \li Reset font size + \li Ctrl+0 + \li Ctrl+0 + \row + \li Go to \uicontrol Search in the \uicontrol Help mode + \li Ctrl+Shift+/ + \li Ctrl+/ + \endtable + + \section1 Image Viewer Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Switch to background + \li Ctrl+[ + \li Cmd+[ + \row + \li Switch to outline + \li Ctrl+] + \li Cmd+] + \row + \li Zoom in + \li Ctrl++ + \li Cmd++ + \row + \li Zoom out + \li Ctrl+- + \li Cmd+- + \row + \li Fit to screen + \li Ctrl+= + \li Cmd+= + \row + \li Original size + \li Ctrl+0 + \li Ctrl+0 + \endtable + + \section1 Project Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li New project + \li Ctrl+Shift+N + \li Cmd+Shift+N + \row + \li Open project + \li Ctrl+Shift+O + \li \e {None} + \endtable + + \section1 Qt Quick Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Show Qt Quick toolbars + \li Ctrl+Alt+Space + \li Ctrl+Opt+Space + \row + \li Run static checks on JavaScript code to find common problems + \li Ctrl+Shift+C + \li Cmd+Shift+C + \endtable + + \section1 \QD Shortcuts + + \table + \header + \li Action + \li Windows and Linux + \li \macos + \row + \li Adjust size + \li Ctrl+J + \li Ctrl+J + \row + \li Lay out in a grid + \li Ctrl+G + \li Ctrl+Shift+G + \row + \li Lay out horizontally + \li Ctrl+H + \li Ctrl+Shift+H + \row + \li Lay out vertically + \li Ctrl+L + \li Ctrl+L + \row + \li Preview + \li Alt+Shift+R + \li Opt+Shift+R + \row + \li Edit signals and slots + \li F4 + \li F4 + \endtable + + \section1 Version Control Shortcuts + + \table + \header + \li {1,2} Action + \li {6,1} Version control system + \header + \li Bazaar + \li CVS + \li Git + \li Mercurial + \li Perforce + \li Subversion + \row + \li Add + \li \e {None} + \li Alt+C, Alt+A + \li Alt+G, Alt+A + \li \e {None} + \li Alt+P, Alt+A + \li Alt+S, Alt+A + \row + \li Commit/Submit + \li Alt+Z, Alt+C + \li Alt+C, Alt+C + \li Alt+G, Alt+C + \li Alt+G, Alt+C + \li Alt+P, Alt+S + \li Alt+S, Alt+C + \row + \li Diff + \li Alt+Z, Alt+D + \li Alt+C, Alt+D + \li Alt+G, Alt+D + \li Alt+G, Alt+D + \li \e {None} + \li Alt+S, Alt+D + \row + \li Diff of project or repository + \li \e {None} + \li \e {None} + \li Alt+G, Alt+Shift+D + \li \e {None} + \li Alt+P, Alt+D + \li \e {None} + \row + \li Diff of current modified editor + \li \e {None} + \li \e {None} + \li Alt+H + \li \e {None} + \li \e {None} + \li \e {None} + \row + \li Blame/Annotate + \li \e {None} + \li \e {None} + \li Alt+G, Alt+B + \li \e {None} + \li \e {None} + \li \e {None} + \row + \li Log/Filelog + \li Alt+Z, Alt+L + \li \e {None} + \li Alt+G, Alt+L + \li Alt+G, Alt+L + \li Alt+P, Alt+F + \li \e {None} + \row + \li Log repository + \li \e {None} + \li \e {None} + \li Alt+G, Alt+K + \li \e {None} + \li \e {None} + \li \e {None} + \row + \li Status + \li Alt+Z, Alt+S + \li \e {None} + \li \e {None} + \li Alt+G, Alt+S + \li \e {None} + \li \e {None} + \row + \li Undo changes/Revert + \li \e {None} + \li \e {None} + \li Alt+G, Alt+U + \li \e {None} + \li Alt+P, Alt+R + \li \e {None} + \row + \li Edit + \li \e {None} + \li \e {None} + \li \e {None} + \li \e {None} + \li Alt+P, Alt+E + \li \e {None} + \row + \li Opened + \li \e {None} + \li \e {None} + \li \e {None} + \li \e {None} + \li Alt+P, Alt+O + \li \e {None} + \endtable + + \section2 VCS Shortcuts on \macos + + \table + \header + \li {1,2} Action + \li {6,1} Version control system + \header + \li Bazaar + \li CVS + \li Git + \li Mercurial + \li Perforce + \li Subversion + \row + \li Add + \li \e {None} + \li Ctrl+C, Ctrl+A + \li Ctrl+G, Ctrl+A + \li \e {None} + \li Ctrl+P, Ctrl+A + \li Ctrl+S, Ctrl+A + \row + \li Commit/Submit + \li Ctrl+Z, Ctrl+C + \li Ctrl+C, Ctrl+C + \li Ctrl+G, Ctrl+C + \li Ctrl+H, Ctrl+C + \li Ctrl+P, Ctrl+S + \li Ctrl+S, Ctrl+C + \row + \li Diff + \li Ctrl+Z, Ctrl+D + \li Ctrl+C, Ctrl+D + \li Ctrl+G, Ctrl+D + \li Ctrl+H, Ctrl+D + \li \e {None} + \li Ctrl+S, Ctrl+D + \row + \li Diff of project or repository + \li \e {None} + \li \e {None} + \li Ctrl+G, Ctrl+Shift+D + \li \e {None} + \li Ctrl+P, Ctrl+D + \li \e {None} + \row + \li Diff of current modified editor + \li \e {None} + \li \e {None} + \li Ctrl+H + \li \e {None} + \li \e {None} + \li \e {None} + \row + \li Blame/Annotate + \li \e {None} + \li \e {None} + \li Ctrl+G, Ctrl+B + \li \e {None} + \li \e {None} + \li \e {None} + \row + \li Log/Filelog + \li Ctrl+Z, Ctrl+L + \li \e {None} + \li Ctrl+G, Ctrl+L + \li Ctrl+H, Ctrl+L + \li Ctrl+P, Ctrl+F + \li \e {None} + \row + \li Log repository + \li \e {None} + \li \e {None} + \li Ctrl+G, Ctrl+K + \li \e {None} + \li \e {None} + \li \e {None} + \row + \li Status + \li Ctrl+Z, Ctrl+S + \li \e {None} + \li \e {None} + \li Ctrl+H, Ctrl+S + \li \e {None} + \li \e {None} + \row + \li Undo changes/Revert + \li \e {None} + \li \e {None} + \li Ctrl+G, Ctrl+U + \li \e {None} + \li Ctrl+P, Ctrl+R + \li \e {None} + \row + \li Edit + \li \e {None} + \li \e {None} + \li \e {None} + \li \e {None} + \li Ctrl+P, Ctrl+E + \li \e {None} + \row + \li Opened + \li \e {None} + \li \e {None} + \li \e {None} + \li \e {None} + \li Ctrl+P, Ctrl+O + \li \e {None} \endtable \section1 Emacs Shortcuts @@ -464,251 +1322,6 @@ \li Yank \endlist - \section1 \QD Shortcuts - - \table - \header - \li Action - \li Keyboard shortcut - \row - \li Adjust size - \li Ctrl+J - \row - \li Lay out in a grid - \li Ctrl+G - \row - \li Lay out horizontally - \li Ctrl+H - \row - \li Lay out vertically - \li Ctrl+L - \row - \li Preview - \li Alt+Shift+R - \row - \li Edit signals and slots - \li F4 - \endtable - - \section1 Image Viewer Shortcuts - - \table - \header - \li Action - \li Keyboard shortcut - \row - \li Switch to background - \li Ctrl+[ - \row - \li Switch to outline - \li Ctrl+] - \row - \li Zoom in - \li Ctrl++ - \row - \li Zoom out - \li Ctrl+- - \row - \li Fit to screen - \li Ctrl+= - \row - \li Original size - \li Ctrl+0 - \endtable - - \section1 Debugging Keyboard Shortcuts - - \table - \header - \li Action - \li Keyboard shortcut - \row - \li Start or continue debugging - \li F5 - \row - \li Exit debugger - \li Shift+F5 - \row - \li Step over - \li F10 - \row - \li Step into - \li F11 - \row - \li Step out - \li Shift+F11 - \row - \li Set or remove breakpoint - \li F9 (F8 on \macos) - \row - \li Enable or disable breakpoint - \li Ctrl+F9 (Ctrl+F8 on \macos) - \row - \li Run to selected function - \li Ctrl+F6 - \row - \li Run to line - \li Ctrl+F10 - \row - \li Reverse direction - \li F12 - \endtable - - \section1 Project Keyboard Shortcuts - - \table - \header - \li Action - \li Keyboard shortcut - \row - \li Build project - \li Ctrl+B - \row - \li Build all - \li Ctrl+Shift+B - \row - \li New project - \li Ctrl+Shift+N - \row - \li Open project - \li Ctrl+Shift+O - \row - \li Select the \l{Kits}{kit} to build and run your project with - \li Ctrl+T - \row - \li Run - \li Ctrl+R - \endtable - - \section1 Help Keyboard Shortcuts - - \table - \header - \li Action - \li Keyboard shortcut - \row - \li View context-sensitive help - \li F1 - \row - \li Activate contents in \uicontrol Help mode - \li Ctrl+T - \row - \li Add bookmark in \uicontrol Help mode - \li Ctrl+M - \row - \li Activate index in \uicontrol Help mode - \li Ctrl+I - \row - \li Reset font size - \li Ctrl+0 - \row - \li Activate search in \uicontrol Help mode - \li Ctrl+S - \endtable - - \section1 Version Control Keyboard Shortcuts - - \table - \header - \li {1,2} Action - \li {6,1} Version control system - \header - \li Bazaar - \li CVS - \li Git - \li Mercurial - \li Perforce - \li Subversion - \row - \li Add - \li - \li Alt+C, Alt+A - \li Alt+G, Alt+A - \li - \li Alt+P, Alt+A - \li Alt+S, Alt+A - \row - \li Commit/Submit - \li Alt+Z, Alt+C - \li Alt+C, Alt+C - \li Alt+G, Alt+C - \li Alt+G, Alt+C - \li Alt+P, Alt+S - \li Alt+S, Alt+C - \row - \li Diff - \li Alt+Z, Alt+D - \li Alt+C, Alt+D - \li Alt+G, Alt+D - \li Alt+G, Alt+D - \li - \li Alt+S, Alt+D - \row - \li Diff project or repository - \li - \li - \li Alt+G, Alt+Shift+D - \li - \li Alt+P, Alt+D - \li - \row - \li Blame/Annotate - \li - \li - \li Alt+G, Alt+B - \li - \li - \li - \row - \li Log/Filelog - \li Alt+Z, Alt+L - \li - \li Alt+G, Alt+L - \li Alt+G, Alt+L - \li Alt+P, Alt+F - \li - \row - \li Log repository - \li - \li - \li Alt+G, Alt+K - \li - \li - \li - \row - \li Status - \li Alt+Z, Alt+S - \li - \li - \li Alt+G, Alt+S - \li - \li - \row - \li Undo changes/Revert - \li - \li - \li Alt+G, Alt+U - \li - \li Alt+P, Alt+R - \li - \row - \li Edit - \li - \li - \li - \li - \li Alt+P, Alt+E - \li - \row - \li Opened - \li - \li - \li - \li - \li Alt+P, Alt+O - \li - \endtable - \sa {Assign keyboard shortcuts}, {Find keyboard shortcuts}, {Import and export keyboard shortcuts}, {Enable and disable plugins} */ diff --git a/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc b/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc index 9ab035a23e1..19717732963 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-overview.qdoc @@ -210,9 +210,9 @@ \li \l {Remote Linux} \endlist - Install the toolchain for building applications for the targeted - embedded platform on the computer, and then use \QOI to install Qt - libraries that are built for the platform. Add a kit with the toolchain and + Install the toolchain for building applications for the targeted embedded + platform on the computer, and then use \l{Get and Install Qt}{\QOI} to install + Qt libraries that are built for the platform. Add a kit with the toolchain and the Qt version for the device's architecture. When possible, \QOI creates suitable kits for you. diff --git a/doc/qtcreator/src/overview/license-Apache-2.0.txt b/doc/qtcreator/src/overview/license-Apache-2.0.txt new file mode 100644 index 00000000000..bc86743e64a --- /dev/null +++ b/doc/qtcreator/src/overview/license-Apache-2.0.txt @@ -0,0 +1,177 @@ + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/doc/qtcreator/src/projects/creator-only/creator-how-to-create-compiler-explorer-setup.qdoc b/doc/qtcreator/src/projects/creator-only/creator-how-to-create-compiler-explorer-setup.qdoc index a8bc0f11d4b..e228abe8e03 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-how-to-create-compiler-explorer-setup.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-how-to-create-compiler-explorer-setup.qdoc @@ -55,9 +55,8 @@ \list 1 \li Go to \uicontrol Tools > \uicontrol {Compiler Explorer} > \uicontrol {Open Compiler Explorer}. - \li In the \uicontrol Language field, select the language to compile. - \li In the \uicontrol Compiler field, select a compiler to see the - assembly code. + \li In \uicontrol Language, select the language to compile. + \li In \uicontrol Compiler, select a compiler to see the assembly code. \li Enter code to see the resulting assembly code. \endlist @@ -70,7 +69,7 @@ \section1 Set compiler options - Select \inlineimage icons/settings.png + Select \inlineimage icons/settings.png next to the \uicontrol Compiler field to set options for the selected compiler. \image qtcreator-compiler-explorer-options.webp {Compiler Explorer options} @@ -107,6 +106,17 @@ function belongs to and which arguments it handles in which order. \endtable + \section1 Change the server URL + + To use Compiler Explorer at another URL: + + \list 1 + \li Select \inlineimage icons/settings.png next to + \uicontrol {Powered by}. + \li In \uicontrol URL, enter the address of the Compiler Explorer to use. + \image qtcreator-set-compiler-explorer-url.webp {Set Compiler Explorer dialog} + \endlist + \sa {Create compiler explorer sessions}, {Enable and disable plugins}, {Add compilers}, {Add custom compilers} */ diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc index 206e028e348..a0ca1155568 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-build-run-tutorial.qdoc @@ -19,8 +19,8 @@ \brief How to build and run a Qt example. - To test that your \QOI installation is successful, open an existing - example application project. + To test that your \l{Get and Install Qt}{\QOI} installation is successful, + open an existing example application project. To run an example application on an Android or iOS device, you must set up the development environment for Android or iOS. For more information, see diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc index e068ec86d4f..f5d96cf5f2f 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-compilers.qdoc @@ -22,11 +22,11 @@ necessary tools for building an application for and running it on a particular platform. - \QC automatically detects the compilers that your system or \QOI - registers and lists them in \preferences > \uicontrol Kits > - \uicontrol Compilers. + \QC automatically detects the compilers that your system or + \l{Get and Install Qt}{\QOI} registers and lists them in + \preferences > \uicontrol Kits > \uicontrol Compilers. - \image qtcreator-toolchains.png + \image qtcreator-preferences-compilers.webp {Compilers in Kits preferences} \note On \macos, the \c ccache C/C++ compiler cache is detected automatically only if you installed it using Homebrew or MacPorts. @@ -55,7 +55,6 @@ \li Select \uicontrol Add to add a new compiler or \uicontrol Clone to add another version of the selected compiler. \li Select a compiler in the list. - \li Select \uicontrol C or \uicontrol C++. \li Set \l{Compilers}{preferences} according to the selected compiler. \endlist @@ -188,67 +187,74 @@ the application binary interface (ABI) version from the list of available versions. You can also create a custom ABI definition. For QCC, also specify the path to the QNX Software Development Platform - (SDP) in the \uicontrol {SPD path} field. + (SDP) in \uicontrol {SPD path}. To enable Microsoft Visual C++ Compilers (MSVC) and clang-cl to find system headers, libraries, and the linker, \QC executes them inside a command prompt where you set up the environment using \c {vcvarsall.bat}. For these compilers, you also specify the path to the script that sets up the - command prompt in the \uicontrol Initialization field. + command prompt in \uicontrol Initialization. You specify the compiler to use for each kit in \preferences > \uicontrol Kits. - To set compiler preferences according to the compiler type, select - \preferences > \uicontrol Kits > \uicontrol Compilers: + To set compiler preferences according to the compiler type: - \list + \list 1 - \li In the \uicontrol Name field, enter a name for the compiler to + \li Go to \preferences > \uicontrol Kits > \uicontrol Compilers. + + \li Select a compiler in the list. + + \list + + \li In \uicontrol Name, enter a name for the compiler to identify it in \QC. - \image qtcreator-options-cpp-compilers.png {Adding a clang-cl compiler} + \image qtcreator-preferences-compilers-clang-cl.webp {Adding a clang-cl compiler} \caption Adding a clang-cl compiler. - \li In the \uicontrol Initialization field, select the + \li In \uicontrol {C compiler path}, enter the path to the + directory where the C compiler is located. + + \li In \uicontrol {C++ compiler path}, enter the path + to the directory where the C++ compiler is located. Select + \uicontrol {Derive from C compiler} to derive the C++ compiler + name from the C compiler name. + + \li In \uicontrol Initialization, select the \c {vcvarsall.bat} file for setting up the command prompt to use. - \li In the \uicontrol {Compiler path} field, enter the path to the - directory where the compiler is located. + \image qtcreator-preferences-compilers-clang.webp {Adding a Clang compiler} + \caption Adding a Clang compiler. - \li In the \uicontrol {Platform codegen flags} field, check the flags passed + \li In \uicontrol {Platform codegen flags}, check the flags passed to the compiler that specify the architecture on the target platform. - \image qtcreator-options-clang-compilers.png {Adding a Clang compiler} - \caption Adding a Clang compiler. + \li In \uicontrol {Platform linker flags}, check the flags passed to the + linker that specify the architecture on the target platform. - \li \b {When building with Qbs}: In the \uicontrol {Platform linker flags} - field, check the flags passed to the linker that specify the - architecture on the target platform. - - \li In the \uicontrol {Parent toolchain} field, select a \MinGW - compiler, which is needed because Clang does not have its own - standard library. - - \li In the \uicontrol {SPD path} field, specify the path to the QNX - Software Development Platform (SDP). - - \image qtcreator-options-qcc-compilers.png {Adding a QCC compiler} - \caption Adding a QCC compiler. - - \li In the \uicontrol ABI field, enter an identifier for the - target architecture. This is used to warn about ABI mismatches - within the kits. - - \li In the \uicontrol {Target triple} field, specify the GCC target + \li In \uicontrol {Target triple}, specify the GCC target architecture. If code model services fail because Clang does not understand the target architecture, select \uicontrol {Override for code model}. - \image qtcreator-compilers-target-triple.png {Target triple field} - \caption Target triple field. + \li In \uicontrol {Parent toolchain}, select a \MinGW + compiler, which is needed because Clang does not have its own + standard library. + + \image qtcreator-preferences-compilers-qcc.webp {Adding a QCC compiler} + \caption Adding a QCC compiler. + + \li In \uicontrol {SDP path}, specify the path to the QNX + Software Development Platform (SDP). + + \li In \uicontrol ABI, enter an identifier for the + target architecture. This is used to warn about ABI mismatches + within the kits. + \endlist \endlist \sa {Add compilers}, {Add custom compilers}, {Add Nim compilers}, @@ -278,32 +284,32 @@ \uicontrol Compilers > \uicontrol Add > \uicontrol Custom > \uicontrol C or \uicontrol C++. - \li In the \uicontrol Name field, enter a name for the compiler. + \li In \uicontrol Name, enter a name for the compiler. - \li In the \uicontrol {Compiler path} field, enter the path to the directory + \li In \uicontrol {Compiler path}, enter the path to the directory where the compiler is located. - \li In the \uicontrol {Make path} field, enter the path to the directory where + \li In \uicontrol {Make path}, enter the path to the directory where the make tool is located. - \li In the \uicontrol ABI field, specify the ABI version. + \li In \uicontrol ABI, specify the ABI version. - \li In the \uicontrol {Predefined macros} field, specify the macros that the + \li In \uicontrol {Predefined macros}, specify the macros that the compiler enables by default. Specify each macro on a separate line, in the following format: MACRO[=value]. - \li In the \uicontrol {Header paths} field, specify the paths to directories + \li In \uicontrol {Header paths}, specify the paths to directories that the compiler checks for headers. Specify each path on a separate line. - \li In the \uicontrol {C++11 flags} field, specify the flags that turn on + \li In \uicontrol {C++11 flags}, specify the flags that turn on C++11 support in the compiler. - \li In the \uicontrol {Qt mkspecs} field, specify the path to the directory + \li In \uicontrol {Qt mkspecs}, specify the path to the directory where mkspecs are located. Usually, the path is specified relative to the Qt mkspecs directory. - \li In the \uicontrol {Error parser} field, select the error parser to use. + \li In \uicontrol {Error parser}, select the error parser to use. You can add custom output parsers to the list. Select \uicontrol {Custom Parser Settings} to view and edit their preferences. \endlist diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc index 7bf47440696..e100c948f1e 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-creating.qdoc @@ -150,9 +150,8 @@ \endtable - The following video shows how to create a Qt Widgets application project: - - \youtube FTSvDmcAgPI + To learn how to create a Qt Widgets application project, take the + \l{Qt Academy: Getting Started with \QC} course. For examples of creating different types of projects, see \l{Tutorials}. @@ -259,17 +258,29 @@ system libraries or your own libraries. Further, your own libraries might link to other libraries. To compile your project and benefit from services such as code completion and syntax highlighting, add the libraries to your - project. The process of adding a library to a project depends on the build - system that you use. + project. - \section1 CMake projects + \section1 Create subprojects - To add CMakeLists.txt files to any project, use the - \l{https://cmake.org/cmake/help/latest/command/add_subdirectory.html} - {add_subdirectory} command. The files can define complete projects that - you include into the top-level project or any other CMake commands. + To create subprojects and add them to a project: - \section1 qmake projects + \list 1 + \li Right-click the project name in the \l Projects view to open the + context menu, and select \uicontrol {New Subproject}. + \li Follow the instructions of the wizard to create a subproject. + \image qtcreator-project-qt-quick.webp {New Project dialog} + \endlist + + \section1 Add existing projects as subprojects + + To add an existing project as a subproject: + + \list 1 + \li Select \uicontrol {Add Existing Projects} in the context menu. + \li In the file browser dialog, locate your subproject. + \endlist + + \section1 Create SUBDIRS projects for qmake When you create a new project and select qmake as the build system, you can add it to another project as a subproject in the @@ -293,28 +304,15 @@ and the subproject that you add as a value of the \l{Variables#subdirs} {SUBDIRS variable}. It also adds all the necessary files for the subproject. - \section2 Add subprojects to the root project + \section2 Specify dependencies - To create more subprojects, right-click the project name in the - \l Projects view to open the context menu, and select - \uicontrol {New Subproject}. Follow the steps in the - \uicontrol {New Subproject} wizard to create a subproject. - - \image qtcreator-project-qt-quick.webp {New Project dialog} - - To add an existing project as a subproject, select - \uicontrol {Add Existing Projects} in the context menu. - In the file browser dialog, locate your subproject. + To specify dependencies, use the \uicontrol{Add Library} wizard. \section2 Remove subprojects To remove subprojects, right-click the project name in the \uicontrol Projects view, and select \uicontrol {Remove Subproject} in the context menu. - \section2 Specify dependencies - - To specify dependencies, use the \uicontrol{Add Library} wizard. - \sa {Creating Projects}, {Use project wizards}, {Add libraries to qmake projects}, {Add libraries to CMake projects} */ diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc b/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc index d6b714bb7c7..f6da8a35934 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc @@ -299,7 +299,13 @@ It is automatically assigned if you do not set it. \li \c enabled is set to \c true to show the page and to - \c false to hide it. + \c false to hide it. This is evaluated only once at + the time of creating the respective wizard. + + \li \c skipForSubprojects can be used to skip a page of the + wizard. Useful for e.g. handling of build information. + This is evaluated only once at the time of creating the + respective wizard page. \li \c data specifies the wizard pages. In the C++ wizard, it specifies a \c Fields page and a \c Summary page. The @@ -482,7 +488,6 @@ "trDisplayName": "Kit Selection", "trShortTitle": "Kits", "typeId": "Kits", - "enabled": "%{IsTopLevelProject}", "data": { "projectFilePath": "%{ProFileName}" } }, \endcode @@ -490,7 +495,9 @@ The page evaluates \c {%\{Platform\}} to set the platform selected in \uicontrol File > \uicontrol {New Project} or \uicontrol {New File}. - + \note This page sets \c skipForSubprojects to \c true to suppress + the page in case it is not needed, as sub projects derive this information + from their parent project. \section2 Project @@ -511,6 +518,9 @@ The page evaluates \c InitialPath to set the initial project path. The page sets \c ProjectDirectory and \c TargetPath to the project directory. + Furthermore the page sets \c IsSubproject to true if the project is + explicitly added to another project. In this case \c BuildSystem will be set + to the build system of the parent project. \section2 Summary @@ -525,8 +535,8 @@ } \endcode - The page sets \c IsSubproject to an empty string if this is a top-level - project and to \c yes otherwise. It sets \c VersionControl to the ID of the + The page sets \c IsSubproject to \c false if this is a top-level + project and to \c true otherwise. It sets \c VersionControl to the ID of the version control system in use. \section2 VcsCommand diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-opening.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-opening.qdoc index b71064f96e0..1576fc58be6 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-opening.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-opening.qdoc @@ -18,10 +18,10 @@ \title Open projects - To open a project, open the project file for the project: - \e {CMakeLists.txt} (CMake), \e {.pro} (qmake), \e {.qbs} (Qbs), - \e {meson.build} (Meson), \e {pyproject} (Python), or \e {Makefile.am} - (Autotools, experimental). + To open a project, open the configuration file for the project: + \e {CMakeLists.txt} or \e {CMakeCache.txt} (CMake), \e {.pro} (qmake), + \e {.qbs} (Qbs), \e {meson.build} (Meson), \e {pyproject} (Python), or + \e {Makefile.am} (Autotools, experimental). You can open a project in the following ways: @@ -56,8 +56,26 @@ \uicontrol {Open Workspace}. \QC generates the \e .qtcreator/project.json project file in the directory - for setting a project name and file exclusion filters. You can open either - the JSON file or the workspace to open the project the next time. + for setting a project name and file exclusion filters. You can add build and + run settings to the file, as defined by its \l{project.json}{JSON schema}. + + You can open either the JSON file or the workspace to open the project the + next time. + + When you add files to the directory or remove them from there, the contents + of the \l Projects view are updated automatically. + + To add a build configuration to the workspace: + + \list 1 + \li Go to \uicontrol Projects > \uicontrol {Build & Run} > + \uicontrol Build. + \li Select \uicontrol Add > \uicontrol Build. + \li Specify build settings. + \endlist + + To specify run settings for the workspace, go to \uicontrol Projects > + \uicontrol {Build & Run} > \uicontrol Run. \section1 Re-configure projects @@ -123,5 +141,6 @@ later. Select the \inlineimage icons/pin.png (\uicontrol Pin) button to pin the progress bar back to the toggle button. - \sa {Manage Kits}{How To: Manage Kits}, {Kits}, + \sa {Configure projects for building}, {Configure projects for running}, + {Manage Kits}{How To: Manage Kits}, {Kits} */ diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc index 48958f8846e..a535c12b304 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-qt-versions.qdoc @@ -31,7 +31,7 @@ \section1 Register installed Qt versions - You can link to a Qt that \QOI installed to + You can link to a Qt that \l{Get and Install Qt}{\QOI} installed to automatically detect the installed Qt versions. However, you cannot link to a Qt that the system installed with some other package manager, such as your Linux distribution, brew on \macos, or Chocolatey on diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-code-style.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-code-style.qdoc index 88e0354aaa9..e22fabd370d 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-code-style.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-code-style.qdoc @@ -53,9 +53,9 @@ project. \endlist - In rare cases, ClangFormat can trip over a code construct and - trigger a \QC crash. If that happens for your project, select - \uicontrol {Use Built-In Indenter} in \uicontrol {Formatting mode} to + In rare cases, \l{ClangFormat: Documentation}{ClangFormat} can trip over a + code construct and trigger a \QC crash. If that happens for your project, + select \uicontrol {Use Built-In Indenter} in \uicontrol {Formatting mode} to turn off ClangFormat for the project. If you can reproduce the crash, go to \uicontrol Help > \uicontrol {Report Bug} to report the bug and attach the code that triggers the crash to the bug report. diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-dependencies.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-dependencies.qdoc index 9bfe2dc2451..bdbf4a5b0c6 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-dependencies.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-dependencies.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2018 The Qt Company Ltd. +// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // ********************************************************************** @@ -22,23 +22,26 @@ \note The build order is stored as a property of a session, not a project. You must open the session for these settings to take effect. - \image qtcreator-build-dependencies.png {Dependencies settings in Projects mode} + \image qtcreator-projects-build-dependencies.webp {Dependencies settings in Projects mode} To define the build order of projects within a session: \list 1 - \li Select \uicontrol Projects > \uicontrol {Project Settings} > + \li Go to \uicontrol Projects > \uicontrol {Project Settings} > \uicontrol Dependencies. \li Select projects that must be built before the current project is built. - \li Select the \uicontrol {Synchronize configuration} check box to + \li Select \uicontrol {Synchronize configuration} to use the same kit as well as the same build and deploy configuration to build and deploy all dependent projects loaded in a session. + \li Select \uicontrol {Deploy dependencies} to deploy the built + dependent projects. + \endlist \QC calculates the build order based on the dependencies that you diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc index 942c42bddcf..9b1fd30dc36 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc @@ -81,13 +81,12 @@ the project: \list - \li \l{Link projects to Axivion dashboards}{Axivion} - \li \l{Specify clangd settings}{Clangd} \li \l{Specify Clang tools settings}{Clang Tools} + \li \l{Specify clangd settings}{Clangd} \li \l{Override CMake settings for a project}{CMake} + \li \l{Specify code style}{Code Style} \li \l{Turn suggestions on or off for a project}{Copilot} \li \l{Configure C++ code model}{C++ Code Model} - \li \l{Specify code style}{C++ Code Style} \li \l{Set C++ file naming preferences}{C++ File Naming} \li \l{Specify dependencies}{Dependencies} \li \l{Document code}{Documentation Comments} @@ -95,6 +94,7 @@ \li \l{Specify the environment for projects}{Environment} \li \l{Link projects with GitLab}{GitLab} \li \l{Configure language server workspace}{Language Server} + \li \l{Turn on or off \QMLLS for a project}{Qt Quick} \li \l{Specify settings for quick fixes}{Quick Fixes} \li \l{Apply filters before scanning for tests}{Testing} \li \l{Exclude files from to-do lists}{To-Do} (experimental) @@ -105,7 +105,7 @@ \sa {Activate kits for a project}, {Configure projects for building}, {Configure projects for running}, {Open projects}, - {Activate custom output parsers} + {Activate custom output parsers}, {Get and Install Qt} */ /*! diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-qt-quick.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-qt-quick.qdoc new file mode 100644 index 00000000000..28f884a9732 --- /dev/null +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-qt-quick.qdoc @@ -0,0 +1,29 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page creator-how-to-qt-quick-settings-for-projects.html + \previouspage creator-how-tos.html + + \ingroup creator-how-to-projects-configure + \ingroup creator-how-to-lsp + + \title Turn on or off \QMLLS for a project + + Since Qt 6.4, \QMLLS offers code completion and issues warnings for QML. + + To turn on or off \QMLLS for the current project: + + \list 1 + \li Select \uicontrol Projects > \uicontrol {Project Settings} > + \uicontrol {Qt Quick}. + \image qtcreator-projects-settings-qt-quick.webp {Qt Quick settings for a project} + \li Clear \uicontrol {Use global settings}. + \li Clear or select \uicontrol {Turn on}. + \endlist + + To view and modify the global settings, select the link in + \uicontrol {Use global settings}. + + \sa {Configure \QMLLS}, {Configuring Projects} +*/ diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdoc index 35188f5ce94..b562cd70d3e 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-run-desktop.qdoc @@ -62,8 +62,8 @@ \section1 Running as root User - On Linux and \macos, select \uicontrol {Run as root user} to run the - application with root user permissions. + On Linux and \macos, select \uicontrol {Run as root user} to build, deploy, + and run the application with root user permissions. \sa {Configure projects for running}, {Specify a custom executable to run}, {Specify the run environment} diff --git a/doc/qtcreator/src/python/creator-python-development.qdoc b/doc/qtcreator/src/python/creator-python-development.qdoc index f98aff41fa2..5a30cf0d40e 100644 --- a/doc/qtcreator/src/python/creator-python-development.qdoc +++ b/doc/qtcreator/src/python/creator-python-development.qdoc @@ -51,7 +51,7 @@ Use wizards to create Qt for Python application projects. The wizards generate a project file, \c {.pyproject}, that lists the files in the Python project. They also generate a \c {.py} file that has some boilerplate code - and \c {reguirements.txt} that stores the PySide version of the generated code. + and \c {requirements.txt} that stores the PySide version of the generated code. In addition, the widget-based UI wizard creates a \c {.ui} file that has a \QD form, and the Qt Quick Application wizard creates a \c {.qml} file that imports Qt Quick controls. diff --git a/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets-ui.qdoc b/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets-ui.qdoc index f7aa1238777..8380a6495ca 100644 --- a/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets-ui.qdoc +++ b/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets-ui.qdoc @@ -72,7 +72,7 @@ \li \c {hello_world_ui.pyproject}, which lists the files in the Python project. \li \c {mainwindow.py}, which has some boilerplate code for a class. - \li \c {reguirements.txt}, which stores the PySide version of the + \li \c {requirements.txt}, which stores the PySide version of the generated code. You can use this file to install the required PySide version using pip. \endlist diff --git a/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets.qdoc b/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets.qdoc index b6eec3cb167..6235af0adb4 100644 --- a/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets.qdoc +++ b/doc/qtcreator/src/python/creator-tutorial-python-application-qt-widgets.qdoc @@ -68,10 +68,10 @@ The wizard generates the following files: \list - \li \c {hellow_world.pyproject}, which lists the files in the Python + \li \c {hello_world.pyproject}, which lists the files in the Python project. \li \c {mywidget.py}, which has some boilerplate code for a class. - \li \c {reguirements.txt}, which stores the PySide version of the + \li \c {requirements.txt}, which stores the PySide version of the generated code. You can use this file to install the required PySide version using pip. \endlist diff --git a/doc/qtcreator/src/python/creator-tutorial-python-application-qtquick.qdoc b/doc/qtcreator/src/python/creator-tutorial-python-application-qtquick.qdoc index df3218197b3..c49dc1cbd5a 100644 --- a/doc/qtcreator/src/python/creator-tutorial-python-application-qtquick.qdoc +++ b/doc/qtcreator/src/python/creator-tutorial-python-application-qtquick.qdoc @@ -61,7 +61,7 @@ project. \li \c {main.py}, which has some boilerplate code. \li \c {main.qml}, which imports Qt Quick controls. - \li \c {reguirements.txt}, which stores the PySide version of the + \li \c {requirements.txt}, which stores the PySide version of the generated code. You can use this file to install the required PySide version using pip. \endlist diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index 5235ec0217b..be259080797 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -64,6 +64,8 @@ \generatelist creator-how-to-remote-linux \li WebAssembly \generatelist creator-how-to-webassembly + \li VxWorks + \generatelist creator-how-to-vxworks \endlist \li Edit Code \generatelist creator-how-to-edit diff --git a/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc b/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc index 6864010554e..3e880f28c2b 100644 --- a/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc +++ b/doc/qtcreator/src/qtquick/creator-only/qtquick-creating.qdoc @@ -19,16 +19,12 @@ Build the applications and deploy them to desktop, embedded, and mobile target platforms. - You can select an option to create a project that you can open in a separate - visual editor, \QDS. - To create a Qt Quick Application project: \list 1 - \li Select \uicontrol File > \uicontrol {New Project} > - \uicontrol {Application (Qt)} > \uicontrol {Qt Quick Application} - > \uicontrol Choose. + \li Go to \uicontrol File > \uicontrol {New Project} > + \uicontrol {Application (Qt)} > \uicontrol {Qt Quick Application}. \image qtcreator-project-qt-quick.webp {New Project dialog} @@ -36,42 +32,35 @@ or add translations to the application, select \uicontrol {Qt Quick Application (compat)}. - \li In the \uicontrol {Project Location} dialog, \uicontrol Name field, - enter a name for the project. Keep in mind that you cannot easily - change the project name later. + \li Select \uicontrol Choose to open the \uicontrol {Project Location} + dialog. - \li In the \uicontrol {Create in} field, enter the path for the project - files. Select the \uicontrol {Use as default project location} check - box to create new projects in this folder by default. You can move - project folders later without problems. + \li In \uicontrol Name, enter a name for the project. Keep in mind that + you cannot easily change the project name later. - \li Select \uicontrol Next (or \uicontrol Continue on \macos) to open - the \uicontrol {Define Build System} dialog. - - \image qtcreator-project-qt-quick-details.webp {Define Project Details dialog} - - To create a project that you can develop with a visual editor in - \QDS, select \uicontrol {Create a project that you can open in \QDS}. - - \li In the \uicontrol {Build system} field, select the build system to - use for building and running the project: \l {CMake} - {CMake} or \l {qbs-build-system}{Qbs}. + \li In \uicontrol {Create in}, enter the path for the project files. + Select \uicontrol {Use as default project location} to create new + projects in this folder by default. You can move project folders + later without problems. \li Select \uicontrol Next to open the \uicontrol {Define Project Details} dialog. - \li Select the Qt version to develop with in the - \uicontrol {Minimum required Qt version} field. - The Qt version determines the Qt Quick imports - that are used in the QML files. + \image qtcreator-project-qt-quick-details.webp {Define Project Details dialog} - \li Select the \uicontrol {Use Qt Virtual Keyboard} check box to add + + \li Select \uicontrol {Use Qt Virtual Keyboard} to add support for \l{Qt Virtual Keyboard} to the application. \note If you have not installed the Qt Virtual Keyboard module when you installed Qt, an error message will appear when you try to open - \e Main.qml for editing. You can use \l {Installing Qt} - {\QMT} to install Qt Virtual Keyboard. + \e Main.qml for editing. You can use \l{Get and Install Qt}{\QOI} + to install Qt Virtual Keyboard. + + \li Select the Qt version to develop with in + \uicontrol {Minimum required Qt version}. + The Qt version determines the Qt Quick imports + that are used in the QML files. \li Select \uicontrol Next to open the \uicontrol {Kit Selection} dialog. @@ -129,29 +118,25 @@ \list 1 - \li Select \uicontrol File > \uicontrol {New Project} > + \li Go to \uicontrol File > \uicontrol {New Project} > \uicontrol {Other Project} > \uicontrol {Qt Quick UI Prototype}. \li Select \uicontrol Choose to open the \uicontrol {Project Location} dialog. - \li In the \uicontrol Name field, enter a name for the application. + \li In \uicontrol Name, enter a name for the application. - \li In the \uicontrol {Create in} field, enter the path for the project - files. Select the \uicontrol {Use as default project location} check - box to create new projects in this folder by default. + \li In \uicontrol {Create in}, enter the path for the project files. + Select \uicontrol {Use as default project location} to create new + projects in this folder by default. \li Select \uicontrol Next (or \uicontrol Continue on \macos) to open the \uicontrol {Define Project Details} dialog. - \li In the \uicontrol {Minimum required Qt version} field, select the Qt - version to develop with. The Qt version determines the Qt Quick - imports that are used in the QML files. + \li Select \uicontrol {Create a project that you can open in \QDS} to + make the project compatible with \QDS. - You can add imports later to combine Qt Quick basic types with - Qt Quick Controls, Qt Quick Dialogs, and Qt Quick Layouts. - - \li Select the \uicontrol {Use Qt Virtual Keyboard} check box to add + \li Select \uicontrol {Use Qt Virtual Keyboard} check box to add support for \l{Qt Virtual Keyboard} to the application. \note If you have not installed the Qt Virtual Keyboard module when @@ -187,9 +172,10 @@ \li .qml file defines a UI item, such as a component or the whole application UI. - \li ui.qml file defines a form for the application UI. This file is - created if you selected the \uicontrol {With .ui.qml file} check - box. + \li Screen01.ui.qml file defines a custom QML type using instances of a + Rectangle type that forms the background, a Button, and a Text + component that displays some text. This file is created if you select + \uicontrol {Create a project that you can open in \QDS}. \endlist diff --git a/doc/qtcreator/src/qtquick/creator-only/qtquick-tutorial-create-empty-project.qdocinc b/doc/qtcreator/src/qtquick/creator-only/qtquick-tutorial-create-empty-project.qdocinc index 03abe50380a..e25719ffdfc 100644 --- a/doc/qtcreator/src/qtquick/creator-only/qtquick-tutorial-create-empty-project.qdocinc +++ b/doc/qtcreator/src/qtquick/creator-only/qtquick-tutorial-create-empty-project.qdocinc @@ -28,15 +28,9 @@ \image qtcreator-project-qt-quick-details.webp {Define Project Details dialog} - \li Clear \uicontrol {Create a project that you can open in \QDS}. - - \note This tutorial shows how to create the application in the - \uicontrol Edit mode. If you leave the checkbox selected, the - following instructions won't apply. - \li Select \uicontrol Next to open the \uicontrol {Kit Selection} dialog. - \li Select Qt 6.4 or later \l{Kits}{kits} for the + \li Select Qt 6.5 or later \l{Kits}{kits} for the platforms that you want to build the application for. To build applications for mobile devices, select kits also for Android and iOS. @@ -53,8 +47,5 @@ \endlist - For more information about the settings that you skipped, see - \l{Create Qt Quick Applications}. - //! [qtquick empty application] */ diff --git a/doc/qtcreator/src/reference/creator-sdk-tool.qdoc b/doc/qtcreator/src/reference/creator-sdk-tool.qdoc index 27f22f1bbce..547cc1b304d 100644 --- a/doc/qtcreator/src/reference/creator-sdk-tool.qdoc +++ b/doc/qtcreator/src/reference/creator-sdk-tool.qdoc @@ -12,7 +12,8 @@ \brief Configure CMake and set up compilers, debuggers, devices, Qt versions, and kits from the command line. - \QOI uses the SDK Tool (\c sdktool) to configure CMake and set \l {Kits}{Kit} + \l{Get and Install Qt}{\QOI} uses the SDK Tool (\c sdktool) to configure + CMake and set \l {Kits}{Kit} preferences, such as compilers, debuggers, devices, and Qt versions. You can use it from the command line to set Qt and \QC preferences automatically for all users of a computer, for example. For a single user, it is usually easier diff --git a/doc/qtcreator/src/user-interface/creator-how-to-view-output.qdoc b/doc/qtcreator/src/user-interface/creator-how-to-view-output.qdoc index 95de069becb..03f3e817560 100644 --- a/doc/qtcreator/src/user-interface/creator-how-to-view-output.qdoc +++ b/doc/qtcreator/src/user-interface/creator-how-to-view-output.qdoc @@ -74,8 +74,16 @@ Some output views do not support finding and filtering. + \section1 Save output as a file + + To save output as a text file, select \uicontrol {Save Contents} in the + context menu. + + To copy output to a temporary file, select + \uicontrol {Copy Contents to Scratch Buffer}. + \if defined(qtcreator) - \sa {Output Views} + \sa {Output Views}, {Write down notes} \else \section1 Output views diff --git a/doc/qtcreator/src/user-interface/creator-only/creator-how-to-switch-between-modes.qdoc b/doc/qtcreator/src/user-interface/creator-only/creator-how-to-switch-between-modes.qdoc index fe498aca9f7..071c4381230 100644 --- a/doc/qtcreator/src/user-interface/creator-only/creator-how-to-switch-between-modes.qdoc +++ b/doc/qtcreator/src/user-interface/creator-only/creator-how-to-switch-between-modes.qdoc @@ -73,10 +73,20 @@ \uicontrol {Start Debugging of Startup Project} automatically switches to \uicontrol {Debug} mode. - To hide the mode selector and to save space on the display, select - \uicontrol View > \uicontrol {Mode Selector Style} > \uicontrol Hidden. - To only show icons on the mode selector, select the \uicontrol {Icons Only} - style. + \section1 Hide and show modes + + To hide and show modes in the mode selector and to save space on the display, + go to \uicontrol View > \uicontrol Modes: + + \list + \li To hide the mode selector, select \uicontrol Hidden. + \li To only show icons on the mode selector, select + \uicontrol {Icons Only}. + \li To hide modes that you don't use, clear the \uicontrol {Show } + checkboxes. + \endlist + + You can use the keyboard shortcuts to switch to the hidden modes. \sa {Show and hide sidebars},{Show and hide the main menu} */ diff --git a/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc b/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc index 67c0134c78d..505ffcd8c83 100644 --- a/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc +++ b/doc/qtcreator/src/user-interface/creator-open-documents-view.qdoc @@ -44,6 +44,9 @@ clipboard. \li Pin files to the top of the list to keep them open when you select \uicontrol {Close All}. + \li Assign keyboard shortcuts for opening the next and previous + document in the list (\uicontrol OpenNextDocument and + \uicontrol OpenPreviousDocument). \endlist \section1 Setting Preferences for Opening Files @@ -76,7 +79,7 @@ \uicontrol File > \uicontrol {Recent Files}. \endlist - \sa {Apply quick fixes}, {Rename symbols} + \sa {Apply quick fixes}, {Assign keyboard shortcuts}, {Rename symbols} \if defined(qtcreator) \sa {Find symbols} diff --git a/doc/qtcreator/src/user-interface/creator-projects-view.qdoc b/doc/qtcreator/src/user-interface/creator-projects-view.qdoc index d28e6f9ef00..a6826c9ca3e 100644 --- a/doc/qtcreator/src/user-interface/creator-projects-view.qdoc +++ b/doc/qtcreator/src/user-interface/creator-projects-view.qdoc @@ -32,6 +32,7 @@ \note Usually, \l{Navigate with locator}{searching with the locator} is the fastest way to find a particular project, file, class, or function, or almost anything else in your project. + \else \image projects-view-design.webp {Projects view} \endif @@ -79,6 +80,8 @@ \li Execute \uicontrol Build menu commands. \li Create new files. For more information, see \l{Create files}. + \li Create a corresponding source or header file for a C++ header or + source file. \li Rename existing files. If you change the base name of a file, \QC displays a list of other files with the same base name and offers to rename them as well. If you rename a UI file (.ui), @@ -92,7 +95,7 @@ \li Add and remove subprojects. \li Find unused functions. \li Search in the selected directory. - + \li View version control system log for the current directory. \li Open a terminal window in the project directory. To specify the terminal to use on Linux and \macos, select \preferences > \uicontrol Environment > \uicontrol System. diff --git a/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc b/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc index 5116000256c..abe322edeb7 100644 --- a/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc +++ b/doc/qtcreator/src/user-interface/creator-reference-output-views.qdoc @@ -110,6 +110,8 @@ \li To search only whole words, select \uicontrol {Whole words only}. \li To search using \l{QRegularExpression}{regular expressions}, select \uicontrol {Use regular expressions}. + \li To exclude binary files from the search results, select + \uicontrol {Ignore binary files}. \endlist \image qtcreator-search-file-system.webp {Search Results view with search options} @@ -261,8 +263,10 @@ \uicontrol {Compile Output}. \endlist \image qtcreator-preferences-compile-output.webp {Compile Output tab in Preferences} - \li Select the \uicontrol {Open Compile Output when building} check box. - \li In the \uicontrol {Limit output to} field, you can specify the + \li Select \uicontrol {Open Compile Output when building}. + \li Select \uicontrol {Discard excessive output} to discard compile + output that continuously comes in faster than it can be handled. + \li In \uicontrol {Limit output to}, specify the maximum amount of build output lines to display. \endlist @@ -276,18 +280,18 @@ To parse compile output: \list 1 - \li Select \uicontrol Tools > \uicontrol {Parse Build Output}. + \li Go to \uicontrol Tools > \uicontrol {Parse Build Output}. \image qtcreator-parse-build-output.png - \li Paste the build output in the \uicontrol {Build Output} field, or + \li Paste the build output in \uicontrol {Build Output}, or select \uicontrol {Load from File} to load it from a file. - \li Deselect the \uicontrol {Output went to stderr} check box if the - parser expects issues on \c stdout. - \li In the \uicontrol {Use parsers from kit} field, select the kit to + \li Clear \uicontrol {Output went to stderr} if the parser expects issues + on \c stdout. + \li In \uicontrol {Use parsers from kit}, select the kit to use for parsing the output. Select \uicontrol Manage to view and modify kit settings. \li The parser displays the parsed output in \l Issues. By default, the view is cleared before adding the new output. - Deselect the \uicontrol {Clear existing tasks} check box to append + Clear \uicontrol {Clear existing tasks} to append the new output to the old output. \li Select \uicontrol OK to start parsing. \endlist diff --git a/doc/qtcreator/src/user-interface/creator-ui.qdoc b/doc/qtcreator/src/user-interface/creator-ui.qdoc index 90ef03431ac..a266a47fab3 100644 --- a/doc/qtcreator/src/user-interface/creator-ui.qdoc +++ b/doc/qtcreator/src/user-interface/creator-ui.qdoc @@ -66,10 +66,8 @@ To see where the above controls are in the UI, select \uicontrol Help > \uicontrol {UI Tour}. - The following video shows the parts of the UI and the \uicontrol Welcome - mode: - - \youtube hOx3dod5-1A + To learn more about the parts of the UI and the \uicontrol Welcome mode, take + the \l{Qt Academy: Getting Started with \QC} course. \section1 What's New? diff --git a/doc/qtcreator/src/vcs/creator-only/creator-vcs-preferences.qdoc b/doc/qtcreator/src/vcs/creator-only/creator-vcs-preferences.qdoc index 2bf02fbe4c8..469ad09fb2c 100644 --- a/doc/qtcreator/src/vcs/creator-only/creator-vcs-preferences.qdoc +++ b/doc/qtcreator/src/vcs/creator-only/creator-vcs-preferences.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2023 The Qt Company Ltd. +// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -27,7 +27,7 @@ \section1 General VCS preferences - Select \preferences > \uicontrol {Version Control} + Go to \preferences > \uicontrol {Version Control} > \uicontrol General to specify settings for submit messages: \image qtcreator-preferences-vcs-general.webp {General tab in Version Control preferences} @@ -74,5 +74,13 @@ from the command line, for example. \endlist + \section1 Show file status in Projects + + Requesting file status updates from files and showing them in \l {Projects} + might slow down \QC. + + To show file status, go to \preferences > \uicontrol {Version Control} + > \uicontrol General, and then select \uicontrol {Show VCS file status}. + \sa {Version Control Systems} */ diff --git a/doc/qtcreator/src/vcs/creator-vcs-git.qdoc b/doc/qtcreator/src/vcs/creator-vcs-git.qdoc index ab58429efe5..d2d51abfe60 100644 --- a/doc/qtcreator/src/vcs/creator-vcs-git.qdoc +++ b/doc/qtcreator/src/vcs/creator-vcs-git.qdoc @@ -543,6 +543,45 @@ \endtable + \section2 Using Instant Blame + + Instant Blame annotates the current editor line with its author and date this + line was last changed. The commit subject can optionally be shown in the annotation. + + \note Instant Blame is not available for unsaved files. + + To show the latest real changes to the line, configure Instant Blame to ignore + whitespace changes and line moves. + + When you hover the annotation, a tooltip with additional information is shown. + From the tooltip, the following actions are available: + + \table + \header + \li Action + \li Description + \row + \li Blame + \li Opens the full file blame for the revision of \e hash. + \row + \li Blame Parent + \li Opens the full file blame for the parent revision of \e hash. + \row + \li File at + \li Opens the file contents at the revision of \e hash. + \row + \li Log for line + \li Shows a log with all the commits that touched the \e line. + \row + \li Icon "Copy" + \li Copies the full \e hash to the clipboard. + \row + \li commit + \li Opens the commit \e hash with full description and diff. + \endtable + + \note Most of these actions have no meaning for uncommmited changes. + \section2 Using Git with Subversion You can use Git as a client for a Subversion server. To fetch changes from a diff --git a/doc/qtcreator/src/webassembly/creator-webassembly.qdoc b/doc/qtcreator/src/webassembly/creator-webassembly.qdoc index ab757d7add0..37526abe87d 100644 --- a/doc/qtcreator/src/webassembly/creator-webassembly.qdoc +++ b/doc/qtcreator/src/webassembly/creator-webassembly.qdoc @@ -20,8 +20,8 @@ \note Enable the WebAssembly plugin to use it. To build applications for the web and run them in a web browser, install - Qt for WebAssembly with \QOI. It automatically adds a build and run kit - to \QC. + Qt for WebAssembly with \l{Get and Install Qt}{\QOI}. It automatically adds + a build and run kit to \QC. \section1 Set up WebAssembly development environment diff --git a/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc b/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc index 724fbba6125..23709d331bd 100644 --- a/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc +++ b/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc @@ -34,10 +34,8 @@ Generally, the integrated \QD has the same functions as the standalone \QD. The following sections describe the differences. - The following video shows how to use the integrated \QD to create a small Qt - Widgets-based application: - - \youtube LnVjI0I7cKs + To learn how to use the integrated \QD to create a small Qt Widgets-based + application, take the \l{Qt Academy: Getting Started with \QC} course. \section1 Code Editor Integration diff --git a/doc/qtcreatordev/examples/exampleplugin/Example.json.in b/doc/qtcreatordev/examples/exampleplugin/Example.json.in index b6867bb5167..e2149098d68 100644 --- a/doc/qtcreatordev/examples/exampleplugin/Example.json.in +++ b/doc/qtcreatordev/examples/exampleplugin/Example.json.in @@ -1,10 +1,12 @@ { //! [1] + "Id" : "example", "Name" : "Example", "Version" : "0.0.1", "CompatVersion" : "0.0.1", //! [1] //! [2] + "VendorId" : "mycompany", "Vendor" : "MyCompany", "Copyright" : "(C) MyCompany", "License" : "Put short license information here", diff --git a/doc/qtcreatordev/qtcreator-dev-online.qdocconf b/doc/qtcreatordev/qtcreator-dev-online.qdocconf index 26b62aeae53..db66c0a0de4 100644 --- a/doc/qtcreatordev/qtcreator-dev-online.qdocconf +++ b/doc/qtcreatordev/qtcreator-dev-online.qdocconf @@ -5,7 +5,7 @@ include($QT_INSTALL_DOCS/global/qt-html-templates-online.qdocconf) HTML.footer = \ "
    \n" \ "

    \n" \ - " © $QTCREATOR_COPYRIGHT_YEAR The Qt Company Ltd.\n" \ + " $QTCREATOR_COPYRIGHT\n" \ " Documentation contributions included herein are the copyrights of\n" \ " their respective owners. " \ " The documentation provided herein is licensed under the terms of the" \ diff --git a/doc/qtcreatordev/src/coding-style.qdoc b/doc/qtcreatordev/src/coding-style.qdoc index 33a2189aaf6..ae911830fff 100644 --- a/doc/qtcreatordev/src/coding-style.qdoc +++ b/doc/qtcreatordev/src/coding-style.qdoc @@ -952,13 +952,22 @@ Consider using \c{=default} and \c{=delete} to control the special functions. - \section3 Override + \section3 Final and Override - It is recommended to use the \c{override} keyword when overriding virtual functions. Do not - use virtual on overridden functions. + It is recommended to use the \c{final} keyword for classes that are not meant to be inherited + from. This is the typical case for value classes, factories and most factory products. - Make sure that a class uses \c{override} consistently, either for all overridden functions or - for none. + It is recommended to use the \c{final} keyword when overriding virtual functions in + final classes, and whenever a virtual function is not meant to be overridden further. + Do not use \c{virtual} on \c{final} functions. + + It is recommended to use the \c{override} keyword when overriding virtual functions if + \c{final} is not applicable, i.e. when the class is meant to be derived further and + further overriding of the function may be necessary. + + Note that some compilers complain when a derived class marks only some but not all + overridden functions as either \c{final} or \c{override}, so make sure to mark all + at the same time. \section3 Range-Based for-Loop diff --git a/doc/qtcreatordev/src/first-plugin.qdoc b/doc/qtcreatordev/src/first-plugin.qdoc index 0e45e17759f..4f483f3cd74 100644 --- a/doc/qtcreatordev/src/first-plugin.qdoc +++ b/doc/qtcreatordev/src/first-plugin.qdoc @@ -255,8 +255,8 @@ \snippet exampleplugin/Example.json.in 3 The \c {IDE_PLUGIN_DEPENDENCIES} variable is automatically replaced by the - dependency information in \c {QTC_PLUGIN_DEPENDS} and - \c {QTC_PLUGIN_RECOMMENDS} from your plugin's \c {.pro} file. + dependency information in \c {PLUGIN_DEPENDS} amd \c {PLUGIN_RECOMMENDS} + from your plugin's \c {add_qtc_plugin()} call in its \c {CMakeLists.txt} file. \section1 Plugin Class diff --git a/doc/qtcreatordev/src/plugin-metadata.qdoc b/doc/qtcreatordev/src/plugin-metadata.qdoc index 20d4073fd14..d91bf52c4f2 100644 --- a/doc/qtcreatordev/src/plugin-metadata.qdoc +++ b/doc/qtcreatordev/src/plugin-metadata.qdoc @@ -17,7 +17,7 @@ \section2 Main Keys The main keys that are used to identify your your plugin and define default loading behavior, - consist of the mandatory keys \c Name and \c Version, and the optional keys \c CompatVersion, + consist of the mandatory keys \c Id and \c Version, and the optional keys \c CompatVersion, \c Experimental, \c DisabledByDefault, \c Required and \c Platform. \table \header @@ -25,10 +25,14 @@ \li Value Type \li Meaning \row - \li Name + \li Id \li String \li This is used as an identifier for the plugin and can e.g. be referenced in other plugin's dependencies. + \row + \li Name + \li String + \li This is used as the display name of your plugin in the UI. \row \li Version \li String @@ -132,6 +136,11 @@ \li String \li Link to further information about the plugin, like \c{http://www.mycompany-online.com/products/greatplugin}. + \row + \li DocumentationUrl + \li String + \li Link to online documentation for the plugin, like + \c{https://www.mycompany-online.com/docs/greatplugin/manual.html}. \endtable \section2 Dependencies @@ -141,36 +150,37 @@ these other plugins are loaded before this plugin. Dependencies are declared with the key \c Dependency, which contains an array of JSON objects - with required keys \c Name and \c Version, and optional key \c Type. + with required keys \c Id and \c Version, and optional key \c Type. The following formulas illustrate how the dependency information is matched. - In the formulas the name of the required plugin (as defined in the \c Name of the dependency - object) is denoted as \c DependencyName + In the formulas the Id of the required plugin (as defined in the \c Id of the dependency + object) is denoted as \c DependencyId and the required version of the plugin is denoted as \c DependencyVersion. - A plugin with given \c Name, \c Version and \c CompatVersion + A plugin with given \c Id, \c Version and \c CompatVersion as defined in the plugin meta data matches the dependency if \list - \li its \c Name matches \c DependencyName, and + \li its \c Id matches \c DependencyId, and \li \c {CompatVersion <= DependencyVersion <= Version}. \endlist For example a dependency \code { - "Name" : "SomeOtherPlugin", + "Id" : "someotherplugin", "Version" : "2.3.0_2" } \endcode would be matched by a plugin with \code { + "Id" : "someotherplugin", "Name" : "SomeOtherPlugin", "Version" : "3.1.0", "CompatVersion" : "2.2.0", ... } \endcode - since the name matches, and the version \c{2.3.0_2} given in the dependency tag + since the id matches, and the version \c{2.3.0_2} given in the dependency tag lies in the range of \c{2.2.0} and \c{3.1.0}. \table @@ -191,9 +201,9 @@ \li Value Type \li Meaning \row - \li Name + \li Id \li String - \li The name of the plugin, on which this plugin relies. + \li The Id of the plugin, on which this plugin relies. \row \li Version \li String @@ -293,9 +303,11 @@ \code { + "Id" : "test", "Name" : "Test", "Version" : "1.0.1", "CompatVersion" : "1.0.0", + "VendorId" : "mycompany", "Vendor" : "My Company", "Copyright" : "(C) 2016 MyCompany", "License" : [ @@ -309,6 +321,7 @@ "It demonstrates the great use of the plugin meta data." ], "Url" : "http://www.mycompany-online.com/products/greatplugin", + "DocumentationUrl" : "https://www.mycompany-online.com/docs/greatplugin/manual.html", "Arguments" : [ { "Name" : "-variant", @@ -317,8 +330,8 @@ } ], "Dependencies" : [ - { "Name" : "SomeOtherPlugin", "Version" : "2.3.0_2" }, - { "Name" : "EvenOther", "Version" : "1.0.0" } + { "Id" : "someotherplugin", "Version" : "2.3.0_2" }, + { "Id" : "evenother", "Version" : "1.0.0" } ] } \endcode diff --git a/doc/qtcreatordev/src/qtcreator-dev.qdoc b/doc/qtcreatordev/src/qtcreator-dev.qdoc index 998f040ebf7..17897710145 100644 --- a/doc/qtcreatordev/src/qtcreator-dev.qdoc +++ b/doc/qtcreatordev/src/qtcreator-dev.qdoc @@ -243,7 +243,7 @@ \endlist \li Reference \list - \li \l{http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html} + \li \l{https://specifications.freedesktop.org/shared-mime-info-spec/latest/} {MIME Type Specification Files} \li \l{External Tool Specification Files} \li \l{http://kate-editor.org/2005/03/24/writing-a-syntax-highlighting-file/} diff --git a/doc/qtdesignstudio/images/studio-preferences-telemetry-usage-statistics.webp b/doc/qtdesignstudio/images/studio-preferences-telemetry-usage-statistics.webp new file mode 100644 index 00000000000..a5c4dbf6826 Binary files /dev/null and b/doc/qtdesignstudio/images/studio-preferences-telemetry-usage-statistics.webp differ diff --git a/doc/qtdesignstudio/src/how-to/qtdesignstudio-usage-statistics.qdoc b/doc/qtdesignstudio/src/how-to/qtdesignstudio-usage-statistics.qdoc new file mode 100644 index 00000000000..750d2d11c6b --- /dev/null +++ b/doc/qtdesignstudio/src/how-to/qtdesignstudio-usage-statistics.qdoc @@ -0,0 +1,59 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \page studio-telemetry.html + \previouspage creator-quick-ui-forms.html + \nextpage studio-collecting-usage-statistics.html + + \title Managing Data Collection + + See below for more information about the collected data: + + \list + \li \l {Collecting Usage Statistics} + \li \l {Collecting User Feedback} + \li \l {Reporting Crashes} + \endlist + + \section1 Principles of Data Collection + + No personal data, such as names, IP addresses, MAC addresses, or project + and path names are collected. However, QUuid objects are used to identify + data records that belong to one user. The objects cannot be converted + back to the actual values from which they were generated. + + For more information about Qt privacy policy, see + \l{https://www.qt.io/terms-conditions/privacy-and-security} + {Qt Appendix for Privacy and Security}. + + \sa {Collecting Usage Statistics} +*/ + +/*! + \page studio-collecting-usage-statistics.html + \previouspage studio-telemetry.html + \nextpage studio-user-feedback.html + + \title Collecting Usage Statistics + + The telemetry plugin uses the + \l{https://api.kde.org/frameworks/kuserfeedback/html/index.html} + {KUserFeedback} framework to collect the usage data. The library + has been designed from the user data privacy point of view and + \QC respects the same privacy rules. + + The data is transmitted to the backend storage using an encrypted + connection. The storage is located in the same Heroku backend as the + \QOI backend. Physically, data is stored in the Amazon cloud. + + \section1 Turning on Telemetry + + To determine what data is transmitted to the backend storage, go to + \preferences > \uicontrol Telemetry > \uicontrol {Usage Statistics}, + and then select \uicontrol {Enable telemetry}. + + \image studio-preferences-telemetry-usage-statistics.webp {Usage Statistics} + + \sa {Managing Data Collection} +*/ diff --git a/doc/qtdesignstudio/src/qtdesignstudio-advanced.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-advanced.qdoc index 7c11a4a7800..fbc362f6c8c 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-advanced.qdoc +++ b/doc/qtdesignstudio/src/qtdesignstudio-advanced.qdoc @@ -23,7 +23,7 @@ Some of the wizard templates create projects that contain UI files. You should always edit UI files in the \l {2D} and \l Properties view, to avoid breaking the code. - \li \l{Manage Data Collection} + \li \l{Managing Data Collection} You can enable \QDS to report crashes automatically. If you enable the telemetry plugin, you can turn on the pseudonymous user diff --git a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc index 26145cb013b..a9b187d409f 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc +++ b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc @@ -217,9 +217,9 @@ \li Extending Component Functionality \endomit \li \l{UI Files} - \li \l{Manage Data Collection} + \li \l{Managing Data Collection} \list - \li \l {Collect Usage Statistics} + \li \l {Collecting Usage Statistics} \li \l {Collecting User Feedback} \li \l {Reporting Crashes} \endlist @@ -257,7 +257,7 @@ \li \l{Supported Platforms} \endlist \li \l{Technical Support} - \li \l{Acknowledgements} + \li \l{Licenses and Acknowledgments} \li \l{What's New} \endlist */ diff --git a/qbs/imports/QtcDocumentation.qbs b/qbs/imports/QtcDocumentation.qbs index c5ddf497206..1b33f0af658 100644 --- a/qbs/imports/QtcDocumentation.qbs +++ b/qbs/imports/QtcDocumentation.qbs @@ -16,7 +16,7 @@ Product { "IDE_DISPLAY_NAME=" + qtc.ide_display_name, "IDE_CASED_ID=" + qtc.ide_cased_id, "IDE_ID=" + qtc.ide_id, - "QTCREATOR_COPYRIGHT_YEAR=" + qtc.qtcreator_copyright_year, + "QTCREATOR_COPYRIGHT=" + qtc.qtcreator_copyright_string, "QTC_VERSION=" + qtc.qtcreator_version, "QTC_VERSION_TAG=" + qtc.qtcreator_version, "QT_INSTALL_DOCS=" + Qt.core.docPath, diff --git a/qbs/modules/go/go.qbs b/qbs/modules/go/go.qbs new file mode 100644 index 00000000000..63c792519c3 --- /dev/null +++ b/qbs/modules/go/go.qbs @@ -0,0 +1,99 @@ +import qbs.File +import qbs.Probes + +Module { + property stringList architectures: [] + property stringList platforms: [] + property string magicPacketMarker: "" + + Probes.BinaryProbe { + id: goProbe + names: "go" + } + property string goFilePath: goProbe.filePath + + Probes.BinaryProbe { + id: upxProbe + names: "upx" + } + property string upxFilePath: upxProbe.filePath + + validate: { + found = goProbe.found + if (!goProbe.found) + throw ("The go executable '" + goFilePath + "' does not exist."); + if (!upxProbe.found) + console.warn("The upx executable '" + upxFilePath + "' does not exist."); + if (architectures.length == 0) + console.warn("No architectures given."); + if (platforms.length == 0) + console.warn("No platforms given."); + if (magicPacketMarker === "") + console.warn("magicPacketMarker not set.") + } + FileTagger { + patterns: [ "*.go", "go.mod", "go.sum" ] + fileTags: [ "go_src" ] + } + Rule { + multiplex: true + outputArtifacts: { + var result = []; + for (var i = 0; i < product.go.architectures.length; ++i) { + var arch = product.go.architectures[i]; + for (var j = 0; j < product.go.platforms.length; ++j) { + var plat = product.go.platforms[j]; + var artifact = { + filePath: product.targetName + '-' + plat + '-' + arch, + fileTags: [ "application", plat, arch ] + }; + result.push(artifact); + } + } + return result; + } + + inputs: [ "go_src" ] + outputFileTags: [ "application" ].concat(architectures, platforms) + prepare: { + var commands = []; + var appOutputs = outputs.application || []; + for (var i = 0; i < appOutputs.length; ++i) { + var out = appOutputs[i]; + for (var j = 0; j < product.go.architectures.length; ++j) { + var arch = product.go.architectures[j]; + if (!out.fileTags.contains(arch)) + continue; + for (var k = 0; k < product.go.platforms.length; ++k) { + var plat = product.go.platforms[k]; + if (!out.fileTags.contains(plat)) + continue; + + var env = ["GOARCH=" + arch, "GOOS=" + plat]; + var workDir = product.sourceDirectory; + var args = ['build', '-ldflags', + '-s -w -X main.MagicPacketMarker=' + product.go.magicPacketMarker, + '-o', out.filePath]; + var cmd = new Command(product.go.goFilePath, args); + cmd.environment = env; + cmd.workingDirectory = workDir; + cmd.description = "building (with go) " + out.fileName; + cmd.highlight = "compiler"; + commands.push(cmd); + if ((product.go.upxFilePath !== undefined + && File.exists(product.go.upxFilePath)) + && (plat === 'linux' || (plat === 'windows' && arch === 'amd64'))) { + var upxCmd = new Command(product.go.upxFilePath, ['-9', out.filePath]); + upxCmd.environment = env; + upxCmd.workingDirectory = workDir; + upxCmd.description = "packaging executable " + out.fileName; + cmd.highlight = "filegen"; + commands.push(upxCmd); + } + } + } + } + return commands; + } + } +} diff --git a/qbs/modules/pluginjson/pluginjson.qbs b/qbs/modules/pluginjson/pluginjson.qbs index 43d5e7f0012..11bb481ac03 100644 --- a/qbs/modules/pluginjson/pluginjson.qbs +++ b/qbs/modules/pluginjson/pluginjson.qbs @@ -38,13 +38,14 @@ Module { additionalProductTypes: ["qt_plugin_metadata"] Rule { - inputs: ["pluginJsonIn"] + inputs: ["pluginJsonIn", "pluginjson.license", "pluginjson.longDescription"] + multiplex: true Artifact { fileTags: ["qt_plugin_metadata"] filePath: { - var destdir = FileInfo.joinPaths(product.moduleProperty("Qt.core", - "generatedHeadersDir"), input.fileName); + var destdir = FileInfo.joinPaths(product.Qt.core.generatedHeadersDir, + inputs.pluginJsonIn[0].fileName); return destdir.replace(/\.[^\.]*$/,'') } } @@ -60,7 +61,7 @@ Module { var depdeps = deps[d].dependencies; for (var dd in depdeps) { if (depdeps[dd].name == 'pluginjson') { - cmd.plugin_depends.push(deps[d].name); + cmd.plugin_depends.push(deps[d].name.toLowerCase()); break; } } @@ -71,7 +72,7 @@ Module { cmd.sourceCode = function() { var i; var vars = pluginJsonReplacements || {}; - var inf = new TextFile(input.filePath); + var inf = new TextFile(inputs.pluginJsonIn[0].filePath); var all = inf.readAll(); // replace config vars var qtcVersion = product.moduleProperty("qtc", "qtcreator_version"); @@ -81,22 +82,34 @@ Module { vars['IDE_VERSION_MAJOR'] = product.moduleProperty("qtc", "ide_version_major"); vars['IDE_VERSION_MINOR'] = product.moduleProperty("qtc", "ide_version_minor"); vars['IDE_VERSION_RELEASE'] = product.moduleProperty("qtc", "ide_version_release"); - vars['IDE_COPYRIGHT_YEAR'] - = product.moduleProperty("qtc", "qtcreator_copyright_year") + vars['IDE_COPYRIGHT'] = product.moduleProperty("qtc", "ide_copyright_string"); if (!vars['QTC_PLUGIN_REVISION']) vars['QTC_PLUGIN_REVISION'] = product.vcs ? (product.vcs.repoState || "") : ""; var deplist = []; for (i in plugin_depends) { - deplist.push(" { \"Name\" : \"" + plugin_depends[i] + "\", \"Version\" : \"" + qtcVersion + "\" }"); + deplist.push(" { \"Id\" : \"" + plugin_depends[i] + "\", \"Version\" : \"" + qtcVersion + "\" }"); } for (i in plugin_recommends) { - deplist.push(" { \"Name\" : \"" + plugin_recommends[i] + "\", \"Version\" : \"" + qtcVersion + "\", \"Type\" : \"optional\" }"); + deplist.push(" { \"Id\" : \"" + plugin_recommends[i] + "\", \"Version\" : \"" + qtcVersion + "\", \"Type\" : \"optional\" }"); } for (i in plugin_test_depends) { - deplist.push(" { \"Name\" : \"" + plugin_test_depends[i] + "\", \"Version\" : \"" + qtcVersion + "\", \"Type\" : \"test\" }"); + deplist.push(" { \"Id\" : \"" + plugin_test_depends[i] + "\", \"Version\" : \"" + qtcVersion + "\", \"Type\" : \"test\" }"); } deplist = deplist.join(",\n") vars['IDE_PLUGIN_DEPENDENCIES'] = "\"Dependencies\" : [\n" + deplist + "\n ]"; + vars['LICENSE'] = '"No license"'; + var licenseInputs = inputs["pluginjson.license"]; + if (licenseInputs) { + var licFile = new TextFile(licenseInputs[0].filePath); + vars['LICENSE'] = JSON.stringify(licFile.readAll()); + } + vars['LONG_DESCRIPTION'] = '""'; + var longDescriptionInputs = inputs["pluginjson.longDescription"]; + if (longDescriptionInputs) { + var longDescFile = new TextFile(longDescriptionInputs[0].filePath); + vars['LONG_DESCRIPTION'] = JSON.stringify(longDescFile.readAll()); + } + for (i in vars) { all = all.replace(new RegExp('\\\$\\{' + i + '(?!\w)\\}', 'g'), vars[i]); } @@ -109,4 +122,3 @@ Module { } } } - diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index 86484cdef70..0071c2f840c 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -4,21 +4,21 @@ import qbs.FileInfo import qbs.Utilities Module { - property string qtcreator_display_version: '14.0.2' - property string ide_version_major: '14' + property string qtcreator_display_version: '15.0.0' + property string ide_version_major: '15' property string ide_version_minor: '0' - property string ide_version_release: '2' + property string ide_version_release: '0' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release - property string ide_compat_version_major: '14' + property string ide_compat_version_major: '15' property string ide_compat_version_minor: '0' property string ide_compat_version_release: '0' property string qtcreator_compat_version: ide_compat_version_major + '.' + ide_compat_version_minor + '.' + ide_compat_version_release - property string qtcreator_copyright_year: '2024' - property string qtcreator_copyright_string: "(C) " + qtcreator_copyright_year + " The Qt Company Ltd" + property string ide_author: "The Qt Company Ltd. and other contributors." + property string ide_copyright_string: "Copyright (C) The Qt Company Ltd. and other contributors." property string ide_display_name: 'Qt Creator' property string ide_id: 'qtcreator' @@ -72,12 +72,13 @@ Module { property bool preferSystemSyntaxHighlighting: true - property bool withPluginTests: Environment.getEnv("TEST") || qbs.buildVariant === "debug" - property bool testsEnabled: withPluginTests // TODO: compat, remove - property bool withAutotests: project.withAutotests // FIXME: withPluginTests + property bool withAllTests: Environment.getEnv("TEST") || qbs.buildVariant === "debug" + property bool withPluginTests: withAllTests + property bool withAutotests: withAllTests property stringList generalDefines: [ "QT_CREATOR", + 'IDE_APP_ID="org.qt-project.qtcreator"', 'IDE_LIBRARY_BASENAME="' + libDirName + '"', 'RELATIVE_PLUGIN_PATH="' + FileInfo.relativePath('/' + ide_bin_path, '/' + ide_plugin_path) + '"', @@ -91,6 +92,7 @@ Module { "QT_NO_FOREACH", "QT_DISABLE_DEPRECATED_BEFORE=0x050900", "QT_USE_QSTRINGBUILDER", + "QT_NO_QSNPRINTF", ].concat(withPluginTests ? ["WITH_TESTS"] : []) .concat(qbs.toolchain.contains("msvc") ? ["_CRT_SECURE_NO_WARNINGS"] : []) } diff --git a/qt_attributions.json b/qt_attributions.json index 5f9e1e5343d..008ff353943 100644 --- a/qt_attributions.json +++ b/qt_attributions.json @@ -612,11 +612,11 @@ "QDocModule": "qtcreator", "QtParts": ["tools"], "QtUsage": "Used for async/await support in Lua modules.", - "Path": "src/plugins/lua/bindings", + "Path": "src/plugins/lua/scripts", "Description": "lua-async-await implements the async/await pattern in Lua.", "Homepage": "https://github.com/ms-jpq/lua-async-await", "License": "MIT License", - "LicenseFile": "src/plugins/lua/bindings/ASYNC-LICENSE.txt", + "LicenseFile": "src/plugins/lua/scripts/ASYNC-LICENSE.txt", "Copyright": "Copyright (c) 2008 Paul Evans" }, { @@ -625,11 +625,11 @@ "QDocModule": "qtcreator", "QtParts": ["tools"], "QtUsage": "Used for pretty printing from Lua scripts.", - "Path": "share/qtcreator/lua-plugins/luatests", + "Path": "src/plugins/lua/scripts", "Description": "inspect.lua is a library for pretty printing complex objects in Lua.", "Homepage": "https://github.com/kikito/inspect.lua", "License": "MIT License", - "LicenseFile": "share/qtcreator/lua-plugins/luatests/INSPECT-LICENSE.txt", + "LicenseFile": "src/plugins/lua/scripts/INSPECT-LICENSE.txt", "Copyright": "Copyright (c) 2022 Enrique García Cota" }, { @@ -645,6 +645,20 @@ "License": "BSD 3-Clause \"New\" or \"Revised\" License", "LicenseFile": "src/libs/3rdparty/zlib/LICENSE", "Copyright": "Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler" + }, + { + "Id": "tika-mimetypes", + "Name": "Apache Tika MimeType Definitions", + "QDocModule": "qtcreator", + "QtParts": ["tools"], + "QtUsage": "Used for resolving file types by MIME type information.", + "Path": "src/libs/3rdparty/tika", + "Description": "The Apache Tika MimeTypes list many known MIME types and how to match files (using globs and/or 'magic' rules for the file contents). See qtbase/src/corelib/mimetypes/3rdparty/ for more information, also on how to update the file.", + "Homepage": "https://github.com/apache/tika/tree/main/tika-core/src/main/resources/org/apache/tika/mime", + "Version": "019041117149667bc4d18fabf222a0670d407959", + "DownloadLocation": "https://github.com/apache/tika/blob/019041117149667bc4d18fabf222a0670d407959/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml", + "License": "Apache License 2.0", + "LicenseFile": "doc/qtcreator/src/overview/license-Apache-2.0.txt", + "Copyright": "Copyright 2011 The Apache Software Foundation" } ] - diff --git a/qtcreator.qbs b/qtcreator.qbs index 21f610de563..052350b77e0 100644 --- a/qtcreator.qbs +++ b/qtcreator.qbs @@ -1,7 +1,6 @@ Project { name: "Qt Creator" minimumQbsVersion: "2.0.0" - property bool withAutotests: qbs.buildVariant === "debug" // TODO: compat, remove property path ide_source_tree: path property pathList additionalPlugins: [] property pathList additionalLibs: [] diff --git a/scripts/axivion2tasks.py b/scripts/axivion2tasks.py new file mode 100755 index 00000000000..87eecb79f3d --- /dev/null +++ b/scripts/axivion2tasks.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +''' +axivion2tasks.py - Convert Axivion JSON warnings into Qt Creator task files. + +Process a file produced by an Axivion JSON export + +Only style violations are implemented ATM. + +SYNOPSIS + + axivion2tasks.py < json-file > taskfile +''' + +import json +import sys +from enum import Enum, auto + + +SV_MESSAGE_COLUMN = "message" +SV_PATH_COLUMN = "path" +SV_LINE_NUMBER_COLUMN = "line" + + +class Type(Enum): + Unknown = auto() + StyleViolation = auto() + + +def columns(data): + """Extract the column keys.""" + result = [] + for col in data["columns"]: + result.append(col["key"]) + return set(result) + + +def detect_type(data): + """Determine file type.""" + keys = columns(data) + if set([SV_MESSAGE_COLUMN, SV_PATH_COLUMN, SV_LINE_NUMBER_COLUMN]) <= keys: + return Type.StyleViolation + return Type.Unknown + + +def print_warning(path, line_number, text): + print(f"{path}\t{line_number}\twarn\t{text}") + + +def print_style_violations(data): + rows = data["rows"] + for row in rows: + print_warning(row[SV_PATH_COLUMN], row[SV_LINE_NUMBER_COLUMN], row[SV_MESSAGE_COLUMN]) + return len(rows) + + +if __name__ == '__main__': + data = json.load(sys.stdin) + + count = 0 + file_type = detect_type(data) + if file_type == Type.StyleViolation: + count = print_style_violations(data) + if count: + print(f"{count} issue(s) found.", file=sys.stderr) diff --git a/scripts/build.py b/scripts/build.py index 094cc9d6c4b..6f2cd39e668 100755 --- a/scripts/build.py +++ b/scripts/build.py @@ -10,20 +10,13 @@ import collections import os import shlex import shutil +import sys import common def existing_path(path): return path if os.path.exists(path) else None -def default_python3(): - path_system = os.path.join('/usr', 'bin') if not common.is_windows_platform() else None - path = os.environ.get('PYTHON3_PATH') or path_system - postfix = '.exe' if common.is_windows_platform() else '' - return (path if not path - else (existing_path(os.path.join(path, 'python3' + postfix)) or - existing_path(os.path.join(path, 'python' + postfix)))) - def get_arguments(): parser = argparse.ArgumentParser(description='Build Qt Creator for packaging') parser.add_argument('--src', help='path to sources', required=True) @@ -52,7 +45,7 @@ def get_arguments(): help='Path to python libraries for use by cdbextension (Windows)') parser.add_argument('--python3', help='File path to python3 executable for generating translations', - default=default_python3()) + default=sys.executable) parser.add_argument('--no-qtcreator', help='Skip Qt Creator build (only build separate tools)', @@ -279,33 +272,31 @@ def package_qtcreator(args, paths): if not args.no_cdb: common.check_print_call(command + [paths.qtcreatorcdbext_install]) + zip = common.sevenzip_command(args.zip_threads) if not args.no_zip: if not args.no_qtcreator: - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, - os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'), - zipPatternForApp(paths)], + common.check_print_call(zip + + [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '.7z'), + zipPatternForApp(paths)], paths.install) - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, - os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'), - '*'], + common.check_print_call(zip + + [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '_dev.7z'), + '*'], paths.dev_install) if args.with_debug_info: - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, - os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-debug.7z'), - '*'], + common.check_print_call(zip + + [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-debug.7z'), + '*'], paths.debug_install) if common.is_windows_platform(): - # use -mf=off to avoid usage of the ARM executable compression filter, - # which cannot be extracted by the p7zip version on the machine doing - # the repository builds - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, '-mf=off', - os.path.join(paths.result, 'wininterrupt' + args.zip_infix + '.7z'), - '*'], + common.check_print_call(zip + + [os.path.join(paths.result, 'wininterrupt' + args.zip_infix + '.7z'), + '*'], paths.wininterrupt_install) if not args.no_cdb: - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, '-mf=off', - os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'), - '*'], + common.check_print_call(zip + + [os.path.join(paths.result, 'qtcreatorcdbext' + args.zip_infix + '.7z'), + '*'], paths.qtcreatorcdbext_install) if common.is_mac_platform() and not args.no_qtcreator: @@ -319,12 +310,12 @@ def package_qtcreator(args, paths): app = apps[0] common.codesign(os.path.join(signed_install_path, app)) if not args.no_zip: - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, - os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-signed.7z'), - app], + common.check_print_call(zip + + [os.path.join(paths.result, 'qtcreator' + args.zip_infix + '-signed.7z'), + app], signed_install_path) if not args.no_dmg: - common.check_print_call(['python', '-u', + common.check_print_call([args.python3, '-u', os.path.join(paths.src, 'scripts', 'makedmg.py'), 'qt-creator' + args.zip_infix + '.dmg', 'Qt Creator', diff --git a/scripts/build_plugin.py b/scripts/build_plugin.py index 9469fc5dfea..81d80bd2561 100755 --- a/scripts/build_plugin.py +++ b/scripts/build_plugin.py @@ -147,16 +147,17 @@ def package(args, paths): if common.is_windows_platform() and args.sign_command: command = shlex.split(args.sign_command) common.check_print_call(command + [paths.install]) - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, os.path.join(paths.result, args.name + '.7z'), '*'], + zip = common.sevenzip_command(args.zip_threads) + common.check_print_call(zip + [os.path.join(paths.result, args.name + '.7z'), '*'], paths.install) if os.path.exists(paths.dev_install): # some plugins might not provide anything in Devel - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, - os.path.join(paths.result, args.name + '_dev.7z'), '*'], + common.check_print_call(zip + + [os.path.join(paths.result, args.name + '_dev.7z'), '*'], paths.dev_install) # check for existence - the DebugInfo install target doesn't work for telemetry plugin if args.with_debug_info and os.path.exists(paths.debug_install): - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, - os.path.join(paths.result, args.name + '-debug.7z'), '*'], + common.check_print_call(zip + + [os.path.join(paths.result, args.name + '-debug.7z'), '*'], paths.debug_install) if common.is_mac_platform() and common.codesign_call(): if args.keychain_unlock_script: @@ -169,9 +170,9 @@ def package(args, paths): app = apps[0] common.conditional_sign_recursive(os.path.join(signed_install_path, app), lambda ff: ff.endswith('.dylib')) - common.check_print_call(['7z', 'a', '-mmt' + args.zip_threads, - os.path.join(paths.result, args.name + '-signed.7z'), - app], + common.check_print_call(zip + + [os.path.join(paths.result, args.name + '-signed.7z'), + app], signed_install_path) def get_paths(args): diff --git a/scripts/build_sdktool.py b/scripts/build_sdktool.py new file mode 100755 index 00000000000..d831492939a --- /dev/null +++ b/scripts/build_sdktool.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python3 +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +from __future__ import annotations +import argparse +import os +from pathlib import Path +from typing import NamedTuple + +from common import (is_linux_platform, is_mac_platform, is_windows_platform, + download_and_extract, check_print_call, sevenzip_command, + get_single_subdir) + + +class BuildParams(NamedTuple): + src_path: Path + build_path: Path + target_path: Path + make_command: str + universal: bool = False + platform: str | None = None + + +def qt_static_configure_options() -> list[str]: + return ['-release', '-opensource', '-confirm-license', '-accessibility', + '-no-gui', + '-no-openssl', + '-no-feature-sql', + '-qt-zlib', + '-nomake', 'examples', + '-nomake', 'tests', + '-static'] + qt_static_platform_configure_options() + + +def qt_static_platform_configure_options() -> list[str]: + if is_windows_platform(): + return ['-static-runtime', '-no-icu'] + if is_linux_platform(): + return ['-no-icu', '-no-glib', '-qt-zlib', '-qt-pcre', '-qt-doubleconversion'] + return [] + + +def get_qt_src_path(qt_build_base: Path) -> Path: + return qt_build_base / 'src' + + +def get_qt_build_path(qt_build_base: Path) -> Path: + return qt_build_base / 'build' + + +def get_qt_install_path(qt_build_base: Path) -> Path: + return qt_build_base / 'install' + + +def configure_qt(params: BuildParams, src: Path, build: Path, install: Path) -> None: + build.mkdir(parents=True, exist_ok=True) + configure = src / "configure" + cmd = [str(configure), "-prefix", str(install)] + qt_static_configure_options() + if params.platform: + cmd.extend(['-platform', params.platform]) + if params.universal: + cmd.extend(['--', '-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64']) + check_print_call(cmd, cwd=build) + + +def build_qt(params: BuildParams, build: Path) -> None: + check_print_call([params.make_command], cwd=build) + + +def install_qt(params: BuildParams, build: Path) -> None: + check_print_call([params.make_command, 'install'], cwd=build) + + +def build_sdktool_impl(params: BuildParams, qt_install_path: Path) -> None: + params.build_path.mkdir(parents=True, exist_ok=True) + cmake_args = [ + 'cmake', '-DCMAKE_PREFIX_PATH=' + str(qt_install_path), '-DCMAKE_BUILD_TYPE=Release' + ] + # force MSVC on Windows, because it looks for GCC in the PATH first, + # even if MSVC is first mentioned in the PATH... + # TODO would be nicer if we only did this if cl.exe is indeed first in the PATH + if is_windows_platform(): + cmake_args += ['-DCMAKE_C_COMPILER=cl', '-DCMAKE_CXX_COMPILER=cl'] + cmake_args += ['-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded'] + + if params.universal: + cmake_args += ['-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'] + + cmd = cmake_args + ['-G', 'Ninja', str(params.src_path)] + check_print_call(cmd, cwd=params.build_path) + check_print_call(['cmake', '--build', '.'], cwd=params.build_path) + cmd = ['cmake', '--install', '.', '--prefix', str(params.target_path)] + check_print_call(cmd, cwd=params.build_path) + + +def sign_sdktool(params: BuildParams, + environment: dict[str, str]) -> None: + signing_identity = environment.get('SIGNING_IDENTITY') + if not is_mac_platform() or not signing_identity: + return + check_print_call(['codesign', '-o', 'runtime', '--force', '-s', signing_identity, + '-v', 'sdktool'], + cwd=params.target_path, + env=environment) + + +def build_sdktool( + qt_src_url: str, + qt_build_base: Path, + sdktool_src_path: Path, + sdktool_build_path: Path, + sdktool_target_path: Path, + make_command: str, + universal: bool = False, + platform: str | None = None, + environment: dict[str, str] | None = None +) -> None: + if not environment: + environment = os.environ.copy() + params = BuildParams( + src_path=sdktool_src_path, + build_path=sdktool_build_path, + target_path=sdktool_target_path, + make_command=make_command, + platform=platform, + universal=universal + ) + qt_src = get_qt_src_path(qt_build_base) + qt_build = get_qt_build_path(qt_build_base) + qt_install = get_qt_install_path(qt_build_base) + download_and_extract([qt_src_url], qt_src, qt_build_base) + qt_src = get_single_subdir(qt_src) + configure_qt(params, qt_src, qt_build, qt_install) + build_qt(params, qt_build) + install_qt(params, qt_build) + build_sdktool_impl(params, qt_install) + sign_sdktool(params, environment) + + +def zip_sdktool( + sdktool_target_path: Path, out_7zip: Path +) -> None: + glob = "*.exe" if is_windows_platform() else "*" + check_print_call( + cmd=sevenzip_command() + [str(out_7zip), glob], + cwd=sdktool_target_path + ) + + +def get_arguments() -> argparse.Namespace: + parser = argparse.ArgumentParser(description='Build sdktool') + parser.add_argument('--qt-url', help='URL to Qt sources', required=True) + parser.add_argument( + '--qt-build', help='Path that is used for building Qt', required=True, type=Path + ) + parser.add_argument('--src', help='Path to sdktool sources', required=True, type=Path) + parser.add_argument( + '--build', help='Path that is used for building sdktool', required=True, type=Path + ) + parser.add_argument( + '--install', help='Path that is used for installing sdktool', required=True, type=Path + ) + parser.add_argument('--make-command', help='Make command to use for Qt', required=True) + parser.add_argument('--platform', help='Platform argument for configuring Qt', + required=False) + parser.add_argument('--universal', help='Build universal binaries on macOS', + action='store_true', default=False, required=False) + return parser.parse_args() + + +def main() -> None: + args = get_arguments() + build_sdktool( + qt_src_url=args.qt_url, + qt_build_base=args.qt_build, + sdktool_src_path=args.src, + sdktool_build_path=args.build, + sdktool_target_path=args.install, + make_command=args.make_command, + platform=args.platform + ) + + +if __name__ == '__main__': + main() diff --git a/scripts/common.py b/scripts/common.py index 081469963f1..1b9edd780a8 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -1,12 +1,18 @@ # Copyright (C) 2016 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +from __future__ import annotations import argparse +import asyncio +from itertools import islice import os import locale +from pathlib import Path import shutil import subprocess import sys +from urllib.parse import urlparse +import urllib.request encoding = locale.getdefaultlocale()[1] if not encoding: @@ -27,13 +33,13 @@ def to_posix_path(path): return path.replace('\\', '/') return path -def check_print_call(command, workdir=None, env=None): +def check_print_call(command, cwd=None, env=None): print('------------------------------------------') print('COMMAND:') print(' '.join(['"' + c.replace('"', '\\"') + '"' for c in command])) - print('PWD: "' + (workdir if workdir else os.getcwd()) + '"') + print('PWD: "' + (str(cwd) if cwd else os.getcwd()) + '"') print('------------------------------------------') - subprocess.check_call(command, cwd=workdir, env=env) + subprocess.check_call(command, cwd=cwd, shell=is_windows_platform(), env=env) def get_git_SHA(path): @@ -56,6 +62,26 @@ def get_commit_SHA(path): git_sha = f.read().strip() return git_sha + +def get_single_subdir(path: Path): + entries = list(islice(path.iterdir(), 2)) + if len(entries) == 1: + return path / entries[0] + return path + + +def sevenzip_command(threads=None): + # use -mf=off to avoid usage of the ARM executable compression filter, + # which cannot be extracted by p7zip + # use -snl to preserve symlinks even if their target doesn't exist + # which is important for the _dev package on Linux + # (only works with official/upstream 7zip) + command = ['7z', 'a', '-mf=off', '-snl'] + if threads: + command.extend(['-mmt' + threads]) + return command + + # copy of shutil.copytree that does not bail out if the target directory already exists # and that does not create empty directories def copytree(src, dst, symlinks=False, ignore=None): @@ -105,6 +131,79 @@ def copytree(src, dst, symlinks=False, ignore=None): if errors: raise shutil.Error(errors) + +def extract_file(archive: Path, target: Path) -> None: + cmd_args = [] + if archive.suffix == '.tar': + cmd_args = ['tar', '-xf', str(archive)] + elif archive.suffixes[-2:] == ['.tar', '.gz'] or archive.suffix == '.tgz': + cmd_args = ['tar', '-xzf', str(archive)] + elif archive.suffixes[-2:] == ['.tar', '.xz']: + cmd_args = ['tar', '-xf', str(archive)] + elif archive.suffixes[-2:] == ['.tar', '.bz2'] or archive.suffix == '.tbz': + cmd_args = ['tar', '-xjf', str(archive)] + elif archive.suffix in ('.7z', '.zip', '.gz', '.xz', '.bz2', '.qbsp'): + cmd_args = ['7z', 'x', str(archive)] + else: + raise( + "Extract fail: %s. Not an archive or appropriate extractor was not found", str(archive) + ) + return + target.mkdir(parents=True, exist_ok=True) + subprocess.check_call(cmd_args, cwd=target) + + +async def download(url: str, target: Path) -> None: + print((''' +- Starting download {} + -> {}''').strip().format(url, str(target))) + # Since urlretrieve does blocking I/O it would prevent parallel downloads. + # Run in default thread pool. + temp_target = target.with_suffix(target.suffix + '-part') + loop = asyncio.get_running_loop() + await loop.run_in_executor(None, urllib.request.urlretrieve, url, str(temp_target)) + temp_target.rename(target) + print('+ finished downloading {}'.format(str(target))) + + +def download_and_extract( + urls: list[str], + target: Path, + temp: Path, + skip_existing: bool = False +) -> None: + download_and_extract_tuples([(url, target) for url in urls], + temp, + skip_existing) + + +def download_and_extract_tuples( + urls_and_targets: list[tuple[str, Path]], + temp: Path, + skip_existing: bool = False +) -> None: + temp.mkdir(parents=True, exist_ok=True) + target_tuples : list[tuple[Path, Path]] = [] + # TODO make this work with file URLs, which then aren't downloaded + # but just extracted + async def impl(): + tasks : list[asyncio.Task] = [] + for (url, target_path) in urls_and_targets: + u = urlparse(url) + filename = Path(u.path).name + target_file = temp / filename + target_tuples.append((target_file, target_path)) + if skip_existing and target_file.exists(): + print('Skipping download of {}'.format(url)) + else: + tasks.append(asyncio.create_task(download(url, target_file))) + for task in tasks: + await task + asyncio.run(impl()) + for (file, target) in target_tuples: + extract_file(file, target) + + def get_qt_install_info(qmake_bin): output = subprocess.check_output([qmake_bin, '-query']) decoded_output = output.decode(encoding) if encoding else output diff --git a/scripts/fixCopyright.sh b/scripts/fixCopyright.sh deleted file mode 100755 index c5026b0c61c..00000000000 --- a/scripts/fixCopyright.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2016 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -# Prepend a copyright header to all files given on the command line. -# Sample usage: -# find . -type f -name \*.cpp -o -name \*.h | \ -# xargs ~/bin/hasCopyright.pl | grep ": No copyright, NOK" | grep "^./src/" | \ -# cut -d ':' -f1 | xargs ~/bin/fixCopyright.sh dist/copyright_template.txt - -COPYRIGHT_HEADER=$1 - -test -f "$COPYRIGHT_HEADER" || exit 16 -shift - -echo "Using $COPYRIGHT_HEADER..." - -WORKDIR=`mktemp -d` -test -d "$WORKDIR" || exit 17 - -for i in $@ ; do - echo -n "Fixing $i..." - if test -f "$i" && test -s "$i" ; then - BASENAME=`basename "$i"` - TMP_NAME="$WORKDIR/$BASENAME" - sed '/./,$!d' "$i" > "$TMP_NAME" # remove leading empty lines - cat "$COPYRIGHT_HEADER" "$TMP_NAME" > "$i" - rm "$TMP_NAME" - fi - echo done. -done - -rmdir "$WORKDIR" diff --git a/scripts/hasCopyright.pl b/scripts/hasCopyright.pl deleted file mode 100755 index b6968a2782d..00000000000 --- a/scripts/hasCopyright.pl +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2016 The Qt Company Ltd. -# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -# Report possible problems with copy right headers -# -# Sample usage: -# find . -type f | xargs ./scripts/hasCopyright.pl - -use strict; - -shift; # remove script - -sub canIgnoreNoCopyright { - my $file = shift; - return 1 if ($file =~ /\.png$/ or - $file =~ /\.ico$/ or - $file =~ /\.svg$/ or - $file =~ /\.xpm$/ or - $file =~ /\.dia$/ or - $file =~ /\/Doxyfile$/ or - $file =~ /\.qmlproject$/ or - $file =~ /\.pr[oi]$/ or - $file =~ /\.qbs$/ or - $file =~ /\.qrc$/ or - $file =~ /\.txt$/i or - $file =~ /\/README[^\/]*$/i or - $file =~ /\/LICENSE.LGPLv21$/i or - $file =~ /\/LICENSE.LGPLv3$/i or - $file =~ /\.ui$/i or - $file =~ /\.xml$/ or - $file =~ /\.css$/ or - $file =~ /\.metainfo$/ or - $file =~ /\.json$/ or - $file =~ /\.pl$/ or - $file =~ /\.py$/ or - $file =~ /\.sh$/ or - $file =~ /\.bat$/ or - $file =~ /\.patch$/ or - $file =~ /\.sed$/ or - $file =~ /\.pro\.user$/ or - $file =~ /\.plist$/ or - $file =~ /\.qdocconf$/i or - $file =~ /\.qdocinc/); - return 0; -} - -while (1) { - my $file = shift; - last unless $file; - - my $hasCopyright = 0; - my $hasCurrent = 0; - my $hasContact = 0; - my $hasCommercial = 0; - my $hasLGPL = 0; - my $hasGPL = 0; - my $hasCompany = 0; - my $linecount = 0; - - if ($file !~ /\.png$/) { - open(my $fh, "<", $file) or die "Could not open $file.\n"; - - while (<$fh>) { - $linecount++; - last if ($linecount > 50); - - $hasCopyright = 1 if $_ =~ /Copyright/i; - $hasCurrent = 1 if $_ =~ /\(c\).*\s2015/i; - - $hasContact = 1 if $_ =~ /Contact: http:\/\/www.qt-project.org\/legal/; - $hasCommercial = 1 if $_ =~ /Commercial (License )?Usage/; - $hasCompany = 1 if $_ =~ /The Qt Company Ltd/; - $hasLGPL = 1 if $_ =~ /GNU Lesser General Public License Usage/; - $hasGPL = 1 if $_ =~ /GNU General Public License Usage/; - } - close $fh; - } - - unless ($hasCopyright) { - print "$file\t"; - if (canIgnoreNoCopyright($file)) { - print "Warning\t"; - } else { - print "ERROR\t"; - } - print "No copyright\n"; - next; - } - - unless ($hasCurrent) { - print "$file\tERROR\tcopyright outdated\n"; - next; - } - - unless ($hasCompany) { - print "$file\tERROR\tNo The Qt Company\n"; - next; - } - - if (!$hasContact && $file !~ /\.json\.in$/) { - print "$file\tERROR\tWrong contact\n"; - next; - } - - unless ($hasCommercial) { - print "$file\tERROR\tNo commercial license\n"; - next; - } - - unless ($hasLGPL) { - print "$file\tERROR\tNo LGPL license\n"; - next; - } - - if ($hasGPL) { - print "$file\tERROR\tHas GPL license\n"; - next; - } - - print "$file\tinfo\tCopyright OK\n"; - -} # loop over files - -exit 0; diff --git a/scripts/install_qt.py b/scripts/install_qt.py new file mode 100755 index 00000000000..777349c91d0 --- /dev/null +++ b/scripts/install_qt.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +from __future__ import annotations +import argparse +from common import download_and_extract_tuples +from pathlib import Path +import subprocess +import sys +from tempfile import TemporaryDirectory +from typing import Optional + + +def get_arguments() -> argparse.Namespace: + parser = argparse.ArgumentParser(description='Install Qt from individual module archives') + parser.add_argument('--qt-path', help='path to Qt', type=Path, required=True) + parser.add_argument('--qt-module', help='Qt module package url (.7z) needed for building', + action='append', dest='qt_modules', default=[]) + + parser.add_argument('--base-url', help='Base URL for given module_name(s)') + parser.add_argument( + 'module_name', + help='Name of Qt module to install, based on --base-url and --base-url-postfix', + nargs='*' + ) + parser.add_argument( + '--base-url-postfix', + help='Postfix to add to URLs constructed from --base-url and given module_name(s)', + default='' + ) + + # Linux + parser.add_argument('--icu7z', help='a file or url where to get ICU libs as 7z') + + args = parser.parse_args(sys.argv[1:]) + + return args + + +def patch_qt(qt_path: Path) -> None: + print("##### patch Qt #####") + qmake_binary = qt_path / 'bin' / 'qmake' + # write qt.conf + with (qt_path / 'bin' / 'qt.conf').open('w', encoding='utf-8') as qt_conf_file: + qt_conf_file.write('[Paths]\n') + qt_conf_file.write('Prefix=..\n') + subprocess.check_call([str(qmake_binary), '-query'], cwd=qt_path) + + +def install_qt( + qt_path: Path, + qt_modules: list[str], + icu_url: Optional[str] = None +) -> None: + """ + Install Qt to directory qt_path with the specified module and library packages. + + Args: + qt_path: File system path to Qt (target install directory) + qt_modules: List of Qt module package URLs (.7z) + icu_url: Local or remote URI to Linux ICU libraries (.7z) + temp_path: Temporary path used for saving downloaded archives + + Raises: + SystemExit: When qt_modules list is empty + + """ + if not qt_modules: + raise SystemExit("No modules specified in qt_modules") + qt_path = qt_path.resolve() + need_to_install_qt = not qt_path.exists() + + with TemporaryDirectory() as temporary_dir: + if need_to_install_qt: + url_target_tuples = [(url, qt_path) for url in qt_modules] + if icu_url: + url_target_tuples.append((icu_url, qt_path / 'lib')) + download_and_extract_tuples(url_target_tuples, Path(temporary_dir)) + patch_qt(qt_path) + + +def main() -> None: + """Main""" + args: argparse.Namespace = get_arguments() + # Check that qt_module(s) or base-url/module_name(s) combo is specified + if not args.qt_modules and not (args.base_url and args.module_name): + raise SystemExit("'qt-module(s)' and/or 'base-url' with 'module_name(s)' required") + # Create the list of modules from qt_modules + module_names with base_url and postfix + qt_modules: list[str] = args.qt_modules + if args.base_url and args.module_name: + for module in args.module_name: + qt_modules += [args.base_url + "/" + module + "/" + module + args.base_url_postfix] + + install_qt( + qt_path=args.qt_path, + qt_modules=qt_modules, + icu_url=args.icu7z + ) + + +if __name__ == '__main__': + main() diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt index d0b5d2f7266..03a8ae2b75f 100644 --- a/share/qtcreator/CMakeLists.txt +++ b/share/qtcreator/CMakeLists.txt @@ -5,6 +5,7 @@ set(resource_directories indexer_preincludes jsonschemas lua-plugins + lua-lupdate modeleditor qmldesigner qmlicons diff --git a/share/qtcreator/android/sdk_definitions.json b/share/qtcreator/android/sdk_definitions.json index ed1e42402f3..80c41bfd84a 100644 --- a/share/qtcreator/android/sdk_definitions.json +++ b/share/qtcreator/android/sdk_definitions.json @@ -9,32 +9,28 @@ "mac_sha256": "7bc5c72ba0275c80a8f19684fb92793b83a6b5c94d4d179fc5988930282d7e64" }, "sdk_essential_packages": { - "default": ["platform-tools", "platforms;android-31", "cmdline-tools;latest"], + "default": ["platform-tools", "cmdline-tools;latest", "emulator"], "linux": [], "mac": [], "windows": ["extras;google;usb_driver"] } }, "specific_qt_versions": [ - { - "versions": ["default"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;25.1.8937393"] - }, { "versions": ["6.4"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;23.1.7779620"] + "sdk_essential_packages": ["build-tools;31.0.0", "ndk;23.1.7779620", "platforms;android-31"] }, { "versions": ["6.3", "6.2", "5.15.[9-20]"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670"] + "sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670", "platforms;android-31"] }, { "versions": ["5.15.[0-8]", "5.14.[0-2]", "5.13.2", "6.0", "6.1"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;21.3.6528147"] + "sdk_essential_packages": ["build-tools;31.0.0", "ndk;21.3.6528147", "platforms;android-31"] }, { "versions": ["5.12.[0-5]", "5.13.[0-1]"], - "sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600"] + "sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600", "platforms;android-28"] } ] } diff --git a/share/qtcreator/debugger/creatortypes.py b/share/qtcreator/debugger/creatortypes.py index 9c2933ba06b..5b4f9f08900 100644 --- a/share/qtcreator/debugger/creatortypes.py +++ b/share/qtcreator/debugger/creatortypes.py @@ -12,7 +12,7 @@ def typeTarget(type): def stripTypeName(value): - return typeTarget(value.type).unqualified().name + return typeTarget(value.type).name def extractPointerType(d, value): @@ -202,6 +202,46 @@ def qdump__CPlusPlus__Internal__Value(d, value): d.putPlainChildren(value) +def is_windows_drive_letter(ch): + return (ch >= ord('A') and ch <= ord('Z')) or (ch >= ord('a') and ch <= ord('z')) + +def is_relative_filepath_enc(path_enc): + # Note: path is hex-encoded UTF-16 here, i.e. 4 byte per original QChar + """ + This needs to stay in sync with the implementation on the C++ side + in filepath.cpp. + + bool isWindowsDriveLetter(QChar ch) + { + return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); + } + bool startsWithWindowsDriveLetterAndSlash(QStringView path) + { + return path.size() > 2 && path[1] == ':' && path[2] == '/ + && isWindowsDriveLetter(path[0]); + } + bool FilePath::isRelativePath() const + { + const QStringView p = pathView(); + if (p.startsWith('/')) + return false; + if (startsWithWindowsDriveLetterAndSlash(p)) + return false; + if (p.startsWith(u":/")) // QRC + return false; + return true; + } + """ + colon = "3A00" + slash = "2F00" + if path_enc.startswith(slash): + return False + if path_enc[4:12] == colon + slash and is_windows_drive_letter(int(path_enc[0:2], 16)): + return False + if path_enc.startswith(colon + slash): + return False + return True + def qdump__Utils__FilePath(d, value): data, path_len, scheme_len, host_len = d.split("{@QString}IHH", value) length, enc = d.encodeStringHelper(data, d.displayStringLimit) @@ -216,8 +256,10 @@ def qdump__Utils__FilePath(d, value): dot = "2E00" colon = "3A00" val = scheme_enc + colon + slash + slash + host_enc - if not path_enc.startswith(slash): + if is_relative_filepath_enc(path_enc): val += slash + dot + slash + elif is_windows_drive_letter(int(path_enc[0:2], 16)): + val += slash val += path_enc else: val = enc diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index a9427b2c608..d4241160db6 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -227,6 +227,7 @@ class DumperBase(): self.watchers = args.get('watchers', {}) self.useDynamicType = int(args.get('dyntype', '0')) self.useFancy = int(args.get('fancy', '0')) + self.allowInferiorCalls = int(args.get('allowinferiorcalls', '0')) self.forceQtNamespace = int(args.get('forcens', '0')) self.passExceptions = int(args.get('passexceptions', '0')) self.isTesting = int(args.get('testing', '0')) @@ -3200,8 +3201,8 @@ typename)) return "Value(name='%s',typeid=%s, type=%s,data=%s,address=%s)" \ % (self.name, self.typeid, self.type.name, data, addr) - def displayEnum(self, form='%d', bitsize=None): - return self.dumper.value_display_enum(self, form, bitsize) + def displayEnum(self, form='%d'): + return self.dumper.value_display_enum(self, form) def display(self): if self.ldisplay is not None: @@ -4115,7 +4116,7 @@ typename)) fdata = fdata[::-1] return int(fdata, 2) - def value_display_enum(self, value, form='%d', bitsize=None): + def value_display_enum(self, value, form='%d'): size = value.type.size() intval = self.value_extract_integer(value, size, False) dd = self.type_enum_display_cache.get(value.typeid, None) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index ee25520bced..e1a6ae64d63 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -739,6 +739,9 @@ class Dumper(DumperBase): def nativeParseAndEvaluate(self, exp): #self.warn('EVALUATE "%s"' % exp) try: + if not self.allowInferiorCalls: + return None + val = gdb.parse_and_eval(exp) return val except RuntimeError as error: @@ -772,6 +775,9 @@ class Dumper(DumperBase): #self.warn('PTR: %s -> %s(%s)' % (value, function, addr)) exp = '((%s*)0x%x)->%s(%s)' % (type_name, addr, function, arg) #self.warn('CALL: %s' % exp) + if not self.allowInferiorCalls: + return None + result = gdb.parse_and_eval(exp) #self.warn(' -> %s' % result) res = self.fromNativeValue(result) @@ -1504,6 +1510,12 @@ class CliDumper(Dumper): args = {} args['fancy'] = 1 + # It enables skipping the execution of gdb.parse_and_eval which prevents the application from being rerun, + # which could lead to hitting breakpoints repeatedly in different threads, causing an infinite loop. + # Currently, gdb.parse_and_eval is bypassed in several places, resolving the bug QTCREATORBUG-23219. + # In the future, a full wrapper for gdb.parse_and_eval might be necessary to avoid this issue entirely. + # For now, we leave it as-is to retain as much pretty-printing functionality as possible. + args['allowinferiorcalls'] = 1 args['passexceptions'] = 1 args['autoderef'] = 1 args['qobjectnames'] = 1 diff --git a/share/qtcreator/debugger/libcpp_stdtypes.py b/share/qtcreator/debugger/libcpp_stdtypes.py index 2db83521013..6c3e051261d 100644 --- a/share/qtcreator/debugger/libcpp_stdtypes.py +++ b/share/qtcreator/debugger/libcpp_stdtypes.py @@ -1,7 +1,7 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 -from stdtypes import qdump__std__array, qdump__std__complex, qdump__std__once_flag, qdump__std__unique_ptr, qdumpHelper__std__deque__libcxx, qdumpHelper__std__vector__libcxx +from stdtypes import qdump__std__array, qdump__std__complex, qdump__std__once_flag, qdump__std__unique_ptr, qdumpHelper__std__deque__libcxx, qdumpHelper__std__vector__libcxx, qdump__std__forward_list from utils import DisplayFormat from dumper import Children, DumperBase @@ -23,6 +23,10 @@ def qdump__std____1__deque(d, value): qdumpHelper__std__deque__libcxx(d, value) +def qdump__std____1__forward_list(d, value): + qdump__std__forward_list(d, value) + + def qdump__std____1__list(d, value): if value.type.size() == 3 * d.ptrSize(): # C++11 only. @@ -308,7 +312,7 @@ def qform__std____1__unordered_map(): def qdump__std____1__unordered_map(d, value): - (size, _) = value["__table_"]["__p2_"].split("pp") + size = value["__table_"]["__p2_"]["__value_"].integer() d.putItemCount(size) keyType = value.type[0] @@ -316,7 +320,7 @@ def qdump__std____1__unordered_map(d, value): pairType = value.type[4][0] if d.isExpanded(): - curr = value["__table_"]["__p1_"].split("pp")[0] + curr = value["__table_"]["__p1_"].split("p")[0] def traverse_list(node): while node: @@ -329,14 +333,18 @@ def qdump__std____1__unordered_map(d, value): d.putPairItem(i, value, 'key', 'value') +def qdump__std____1__unordered_multimap(d, value): + qdump__std____1__unordered_map(d, value) + + def qdump__std____1__unordered_set(d, value): - (size, _) = value["__table_"]["__p2_"].split("pp") + size = value["__table_"]["__p2_"]["__value_"].integer() d.putItemCount(size) valueType = value.type[0] if d.isExpanded(): - curr = value["__table_"]["__p1_"].split("pp")[0] + curr = value["__table_"]["__p1_"].split("p")[0] def traverse_list(node): while node: diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 3f7ec792a61..4863a0b3f58 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -988,7 +988,7 @@ class Dumper(DumperBase): connect_options = lldb.SBPlatformConnectOptions(self.remoteChannel_) res = self.target.GetPlatform().ConnectRemote(connect_options) - DumperBase.warn("CONNECT: %s %s platform: %s %s" % (res, + DumperBase.warn("CONNECT: %s %s platform: %s connected: %s" % (res, self.remoteChannel_, self.target.GetPlatform().GetName(), self.target.GetPlatform().IsConnected())) @@ -2530,7 +2530,7 @@ def ensure_gdbmiparser(): def __lldb_init_module(debugger, internal_dict): # Module is being imported in an LLDB session if 'QT_CREATOR_LLDB_PROCESS' in os.environ: - # Let Qt Creator take care of its own dumper + debug("Returning early, letting Qt Creator take care of its own dumper", debugger) return debug("Initializing module with", debugger) @@ -2571,3 +2571,4 @@ def __lldb_init_module(debugger, internal_dict): % ("qt.SyntheticChildrenProvider", type_category)) debugger.HandleCommand('type category enable %s' % type_category) + debugger.HandleCommand("settings set target.process.prefer-dynamic-value no-dynamic-values") diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 9f2f1354ce2..a0ab08f7eb7 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -581,10 +581,29 @@ def qdump__QEvent(d, value): with Children(d): # Add a sub-item with the event type. with SubItem(d, '[type]'): - (vtable, privateD, t, flags) = value.split("pp{short}{short}") + if d.qtVersionAtLeast(0x060000): + ( + # QEvent fields (must be kept in sync with the definition in qcoreevent.h) + vtable, # virtual table pointer + t, # quint16 t + posted, # bool m_posted + spont, # bool m_spont + accept, # bool m_accept + unused, # bool m_unused + flags, # quint16 m_reserved:13, quint16 m_inputEvent:1 + # + quint16 m_pointerEvent:1 + quint16 m_singlePointEvent:1 + ) = value.split("p{short}ccccH") + else: + ( + # QEvent fields (must be kept in sync with the definition in qcoreevent.h) + vtable, # virtual table pointer + privateD, # QEventPrivate *d + t, # ushort t + flags, # ushort posted:1 + ushort spont:1 + ushort m_accept:1 + ushort reserved:13 + ) = value.split("pp{short}{short}") event_type_name = d.qtNamespace() + "QEvent::Type" type_value = t.cast(event_type_name) - d.putValue(type_value.displayEnum('0x%04x', bitsize=16)) + d.putValue(type_value.displayEnum('0x%04x')) d.putType(event_type_name) # Show the rest of the class fields as usual. @@ -592,29 +611,49 @@ def qdump__QEvent(d, value): def qdump__QKeyEvent(d, value): - # QEvent fields - # virtual table pointer - # QEventPrivate *d; - # ushort t; - # ushort posted : 1; - # ushort spont : 1; - # ushort m_accept : 1; - # ushort reserved : 13; - # QInputEvent fields - # Qt::KeyboardModifiers modState; - # ulong ts; - # QKeyEvent fields - # QString txt; - # int k; - # quint32 nScanCode; - # quint32 nVirtualKey; - # quint32 nModifiers; <- nativeModifiers - # ushort c; - # ushort autor:1; - # ushort reserved:15; - (vtable, privateD, t, flags, modState, ts, txt, k, scanCode, - virtualKey, modifiers, - c, autor) = value.split("ppHHiQ{@QString}{int}IIIHH") + if d.qtVersionAtLeast(0x060000): + ( + # QEvent fields (must be kept in sync with the definition in qcoreevent.h) + vtable, # virtual table pointer + t, # quint16 t + posted, # bool m_posted + spont, # bool m_spont + accept, # bool m_accept + unused, # bool m_unused + qevent_flags, # quint16 m_reserved:13, quint16 m_inputEvent:1 + # + quint16 m_pointerEvent:1 + quint16 m_singlePointEvent:1 + # QInputEvent fields (must be kept in sync with the definition in qevent.h) + dev, # const QInputDevice *m_dev + ts, # quint64 m_timeStamp + modState, # Qt::KeyboardModifiers modState + reserved, # quint32 m_reserved + # QKeyEvent fields (must be kept in sync with the definition in qevent.h) + txt, # QString m_text + k, # int m_key; (actually a Qt::Key in disguise) + scanCode, # quint32 m_scanCode + virtualKey, # quint32 m_virtualKey + modifiers, # quint32 m_nativeModifiers + qkeyevent_flags # quint16 m_count:15 + quint16 m_autoRepeat:1 + ) = value.split("pHccccHpQiI{@QString}{int}IIIH") + else: + ( + # QEvent fields (must be kept in sync with the definition in qcoreevent.h) + vtable, # virtual table pointer + privateD, # QEventPrivate *d + t, # ushort t + flags, # ushort posted:1 + ushort spont:1 + ushort m_accept:1 + ushort reserved:13 + # QInputEvent fields (must be kept in sync with the definition in qevent.h) + modState, # Qt::KeyboardModifiers modState + ts, # ulong ts + # QKeyEvent fields (must be kept in sync with the definition in qevent.h) + txt, # QString txt + k, # int k + scanCode, # quint32 nScanCode + virtualKey, # quint32 nVirtualKey + modifiers, # quint32 nModifiers + c, # ushort c + autor # ushort author:1 + ) = value.split("ppHHiQ{@QString}{int}IIIHH") #d.putStringValue(txt) #data = d.encodeString(txt) @@ -622,7 +661,7 @@ def qdump__QKeyEvent(d, value): k_type_name = d.qtNamespace() + "Qt::Key" k_cast_to_enum_value = k.cast(k_type_name) - k_name = k_cast_to_enum_value.displayEnum(bitsize=32) + k_name = k_cast_to_enum_value.displayEnum() matches = re.search(r'Key_(\w+)', k_name) if matches: k_name = matches.group(1) @@ -677,7 +716,7 @@ def qdump__QKeyEvent(d, value): # Add a sub-item with the enum name and value. with SubItem(d, '[{}]'.format(k_type_name)): k_cast_to_enum_value = k.cast(k_type_name) - d.putValue(k_cast_to_enum_value.displayEnum('0x%04x', bitsize=32)) + d.putValue(k_cast_to_enum_value.displayEnum('0x%04x')) d.putType(k_type_name) # Show the rest of the class fields as usual. @@ -874,10 +913,11 @@ def qdump__QFiniteStack(d, value): def qdump__QFlags(d, value): - i = value.split('{int}')[0] enumType = value.type[0] - v = i.cast(enumType.name) - d.putValue(v.displayEnum('0x%04x', bitsize=32)) + v = value.cast(enumType.name) + size = enumType.size() + # One byte is 2 hex digits + d.putValue(v.displayEnum(f'0x%0{2 * size}x')) def qform__QHash(): @@ -1349,7 +1389,10 @@ def qdumpHelper_Qt6_QMap(d, value, keyType, valueType): if d_ptr == 0: d.putItemCount(0) return - m = value['d']['d']['m'] + if d.qtVersionAtLeast(0x060900): + m = value['d']['d']['ptr']['m'] + else: + m = value['d']['d']['m'] d.putItem(m) d.putBetterType('@QMap<%s, %s>' % (keyType.name, valueType.name)) @@ -1380,7 +1423,10 @@ def qdumpHelper_Qt6_QMultiMap(d, value, keyType, valueType): if d_ptr == 0: d.putItemCount(0) return - m = value['d']['d']['m'] + if d.qtVersionAtLeast(0x060900): + m = value['d']['d']['ptr']['m'] + else: + m = value['d']['d']['m'] d.putItem(m) d.putBetterType('@QMultiMap<%s, %s>' % (keyType.name, valueType.name)) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index dbe663ef631..b825195311a 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -60,12 +60,16 @@ def qdump__std__deque(d, value): def qdumpHelper__std__deque__libstdcxx(d, value): innerType = value.type[0] innerSize = innerType.size() - bufsize = 1 - if innerSize < 512: - bufsize = 512 // innerSize + bufsize = 512 // innerSize if innerSize < 512 else 1 - (mapptr, mapsize, startCur, startFirst, startLast, startNode, - finishCur, finishFirst, finishLast, finishNode) = value.split("pppppppppp") + start = value['_M_start'] + startCur = start['_M_cur'].pointer() + startLast = start['_M_last'].pointer() + startNode = start['_M_node'].pointer() + finish = value['_M_finish'] + finishCur = finish['_M_cur'].pointer() + finishFirst = finish['_M_first'].pointer() + finishNode = finish['_M_node'].pointer() size = bufsize * ((finishNode - startNode) // d.ptrSize() - 1) size += (finishCur - finishFirst) // innerSize @@ -82,12 +86,12 @@ def qdumpHelper__std__deque__libstdcxx(d, value): d.putSubItem(i, d.createValue(pcur, innerType)) pcur += innerSize if pcur == plast: - newnode = pnode + d.ptrSize() - pfirst = d.extractPointer(newnode) - plast = pfirst + bufsize * d.ptrSize() + pnode += d.ptrSize() + if pnode > finishNode: + break + pfirst = d.extractPointer(pnode) + plast = pfirst + bufsize * innerSize pcur = pfirst - pnode = newnode - def qdumpHelper__std__deque__libcxx(d, value): mptr, mfirst, mbegin, mend, start, size = value.split("pppptt") @@ -180,9 +184,16 @@ def qdump__std__list(d, value): qdump__std__list__QNX(d, value) return - if value.type.size() == 3 * d.ptrSize(): + # QTCREATORBUG-20476: GCC with _GLIBCXX_DEBUG prepends the head node + # with some debug information + if value.hasMember('_M_impl'): + sentinel = value['_M_impl']['_M_node'] + else: + sentinel = value + + if sentinel.type.size() == 3 * d.ptrSize(): # C++11 only. - (dummy1, dummy2, size) = value.split("ppp") + (dummy1, dummy2, size) = sentinel.split("ppp") d.putItemCount(size) else: # Need to count manually. @@ -195,7 +206,7 @@ def qdump__std__list(d, value): d.putItemCount(size, 1000) if d.isExpanded(): - p = d.extractPointer(value) + p = d.extractPointer(sentinel) innerType = value.type[0] with Children(d, size, maxNumChild=1000, childType=innerType): for i in d.childRange(): @@ -234,6 +245,43 @@ def qdump__std____cxx11__list(d, value): qdump__std__list(d, value) +def qdump__std__forward_list(d, value): + # QTCREATORBUG-20476: GCC with _GLIBCXX_DEBUG prepends the head node + # with some debug information + if value.hasMember('_M_impl'): + head = value['_M_impl']['_M_head'] + # MSVC stores the head in a compressed pair with the allocator + # (which is normally an empty class) + elif value.hasMember('_Mypair'): + head = value['_Mypair']['_Myval2']['_Myhead'] + else: + head = value + + # Need to count manually. + p = d.extractPointer(head) + size = 0 + while p and size < 1001: + size += 1 + p = d.extractPointer(p) + d.putItemCount(size, 1000) + + if d.isExpanded(): + p = d.extractPointer(head) + innerType = value.type[0] + with Children(d, size, maxNumChild=1000, childType=innerType): + for i in d.childRange(): + d.putSubItem(i, d.createValue(p + d.ptrSize(), innerType)) + p = d.extractPointer(p) + + +def qdump__std____debug__forward_list(d, value): + qdump__std__forward_list(d, value) + + +def qdump__std____cxx11__forward_list(d, value): + qdump__std__forward_list(d, value) + + def qform__std__map(): return [DisplayFormat.CompactMap] @@ -244,7 +292,7 @@ def qdump__std__map(d, value): return # stuff is actually (color, pad) with 'I@', but we can save cycles/ - (compare, stuff, parent, left, right) = value.split('ppppp') + parent = value["_M_t"]["_M_impl"]["_M_header"] size = value["_M_t"]["_M_impl"]["_M_node_count"].integer() d.check(0 <= size and size <= 100 * 1000 * 1000) d.putItemCount(size) @@ -323,6 +371,14 @@ def qdump__std__multiset(d, value): qdump__std__set(d, value) +def qdump__std____debug__multiset(d, value): + qdump__std__multiset(d, value) + + +def qdump__std____cxx1998__multiset(d, value): + qdump__std__multiset(d, value) + + def qdump__std____cxx1998__map(d, value): qdump__std__map(d, value) @@ -335,6 +391,14 @@ def qdump__std__multimap(d, value): return qdump__std__map(d, value) +def qdump__std____debug__multimap(d, value): + qdump__std__multimap(d, value) + + +def qdump__std____cxx1998__multimap(d, value): + qdump__std__multimap(d, value) + + def qdumpHelper__std__tree__iterator(d, value, isSet=False): treeTypeName = None if value.type.name.endswith("::iterator"): diff --git a/share/qtcreator/glsl/glsl_330.vert b/share/qtcreator/glsl/glsl_330.vert index 0389cd2bc27..71e4eda386d 100644 --- a/share/qtcreator/glsl/glsl_330.vert +++ b/share/qtcreator/glsl/glsl_330.vert @@ -14,20 +14,9 @@ struct gl_PerVertex { float gl_PointSize; float gl_ClipDistance[]; }; - -struct gl_PerVertex { - vec4 gl_Position; - float gl_PointSize; - float gl_ClipDistance[]; -} gl_in[]; +uniform gl_PerVertex[] gl_in; int gl_PrimitiveIDIn; -struct gl_PerVertex { - vec4 gl_Position; - float gl_PointSize; - float gl_ClipDistance[]; -}; - int gl_PrimitiveID; int gl_Layer; @@ -38,13 +27,7 @@ struct gl_PerVertex { float gl_ClipDistance[]; vec4 gl_ClipVertex; }; - -struct gl_PerVertex { - vec4 gl_Position; - float gl_PointSize; - float gl_ClipDistance[]; - vec4 gl_ClipVertex; -} gl_in[]; +uniform gl_PerVertex[] gl_in; vec4 gl_Color; vec4 gl_SecondaryColor; @@ -59,3 +42,6 @@ vec4 gl_MultiTexCoord5; vec4 gl_MultiTexCoord6; vec4 gl_MultiTexCoord7; float gl_FogCoord; + +void EmitVertex(); +void EndPrimitive(); diff --git a/share/qtcreator/jsonschemas/project.json b/share/qtcreator/jsonschemas/project.json index df55dbd693a..5515c02a1a3 100644 --- a/share/qtcreator/jsonschemas/project.json +++ b/share/qtcreator/jsonschemas/project.json @@ -52,6 +52,60 @@ ] } ] + }, + "build.configuration": { + "type": "array", + "description": "A list of build configurations", + "items": [ + { + "type": "object", + "properties": { + "steps": { + "type": "array", + "items": [ + { + "type": "object", + "properties": { + "arguments": { + "type": "array", + "items": [ + { + "type": "string" + } + ], + "description": "Arguments to pass to the executable" + }, + "executable": { + "type": "string", + "description": "The executable to run" + }, + "workingDirectory": { + "type": "string", + "description": "The working directory to run the executable in" + } + }, + "required": [ + "executable" + ] + } + ], + "description": "The steps required for the build" + }, + "name": { + "type": "string", + "description": "The name of the build configuration" + }, + "buildDirectory": { + "type": "string", + "description": "The directory to build the project in" + } + }, + "required": [ + "steps", + "name" + ] + } + ] } } } diff --git a/share/qtcreator/lua-lupdate/README.md b/share/qtcreator/lua-lupdate/README.md new file mode 100644 index 00000000000..2ea70bd3d06 --- /dev/null +++ b/share/qtcreator/lua-lupdate/README.md @@ -0,0 +1,65 @@ +# lupdate.lua + +lupdate.lua allows you to update your .ts files from your .lua files. + +## Installation + +You need to install lua, luarocks and luafilesystem. + +On macOS: + +```sh +$ brew install lua luarocks +$ luarocks install luafilesystem +``` + +For other platforms see: [Download luarocks](https://github.com/luarocks/luarocks/wiki/Download) + +## Usage + +You need to add a "languages" key to your plugin spec file. + +```lua +--- In your plugin.lua file +return { + Name = "MyPlugin", + Version = "1.0.0", + languages = {"de", "fr", "en"}, + --- .... +} --[[@as QtcPlugin]] +``` + +Then run the lupdate.lua script in your plugin directory. Make sure that lupdate is in your PATH. + +```sh +$ # export PATH=$PATH:/path/to/Qt/bin +$ cd my-plugin +$ lua lupdate.lua +``` + +Once you have the .ts files you can use Qt Linguist to translate your strings. + +After translation you can run lrelease to generate the .qm files. + +```sh +$ cd ts +$ lrelease *.ts +``` + +## Background + +Since Qt's lupdate does not currently support lua files, the lupdate.lua script uses a trick +to make it work. It creates a temporary file for each lua file and adds a comment at the start +and end of the file: + +```lua +--- class Plugin { Q_OBJECT + +print(tr("Hello World")) + +--- } +``` + +That way lupdate thinks its inside a C++ Plugin and takes as context the name of the class, in this case "Plugin". + +It then starts the actual lupdate tool to update the .ts files. diff --git a/share/qtcreator/lua-lupdate/lupdate.lua b/share/qtcreator/lua-lupdate/lupdate.lua new file mode 100644 index 00000000000..5c1d3d5b705 --- /dev/null +++ b/share/qtcreator/lua-lupdate/lupdate.lua @@ -0,0 +1,99 @@ +--- luarocks install luafilesystem +local lfs = require "lfs" + +function string:endswith(suffix) + return self:sub(- #suffix) == suffix +end + +function findLUpdate() + if os.execute("lupdate -version 2>/dev/null") then + return "lupdate" + end + QtDir = os.getenv("QTDIR") + if QtDir then + local path = QtDir .. "/bin/lupdate" + if os.execute(path .. " -version 2>/dev/null") then + return path + end + end + return "lupdate" +end + +LUpdatePath = findLUpdate() +TmpFiles = {} + + +local curdir, err = lfs.currentdir() +if not curdir then + print("Error: " .. err) + return +end + +local folderName = curdir:match("([^/]+)$") +print("Working on: " .. curdir) +local pluginSpecName = folderName .. ".lua" + +--- Noop tr function +function tr(str) return str end + +local specScript, err = loadfile(curdir .. "/" .. pluginSpecName) +if not specScript then + print("Error: " .. err) + return +end + +local spec, err = specScript() + +if not spec then + print("Error: " .. err) + return +end + +if not spec.languages then + print("Error: No languages specified in plugin spec.") + return +end + +TrContext = spec.Name:gsub("[^a-zA-Z]", "_") + +for file in lfs.dir(".") do + if file ~= "." and file ~= ".." and file:endswith(".lua") and file ~= "lupdate.lua" then + local f = io.open(file, "r") + if f then + local contents = f:read("a") + local tmpname = os.tmpname() + local tf = io.open(tmpname, "w") + if tf then + tf:write("--- class " .. TrContext .. " { Q_OBJECT \n") + tf:write(contents) + tf:write("--- }\n") + tf:close() + table.insert(TmpFiles, tmpname) + end + end + end +end + +AllFiles = table.concat(TmpFiles, "\n") +LstFileName = os.tmpname() +local lstFile = io.open(LstFileName, "w") + +if lstFile then + lstFile:write(AllFiles) + lstFile:close() + + local allLangs = "" + for _, lang in ipairs(spec.languages) do + local name = "ts/" .. string.lower(folderName) .. "_" .. lang .. ".ts" + allLangs = allLangs .. name .. " " + end + + lfs.mkdir("ts") + os.execute(LUpdatePath .. " @" .. LstFileName .. " -ts " .. allLangs) + + --- Cleanup + os.remove(LstFileName) + for _, file in ipairs(TmpFiles) do + os.remove(file) + end +end diff --git a/share/qtcreator/lua-plugins/luals/init.lua b/share/qtcreator/lua-plugins/luals/init.lua index e7bc13629cc..1999ad83263 100644 --- a/share/qtcreator/lua-plugins/luals/init.lua +++ b/share/qtcreator/lua-plugins/luals/init.lua @@ -79,8 +79,10 @@ local function installOrUpdateServer() binary = "bin/lua-language-server.exe" end - Settings.binary:setValue(lspPkgInfo.path:resolvePath(binary)) - Settings:apply() + if lspPkgInfo.path:resolvePath(binary) ~= Settings.binary.expandedValue then + Settings.binary:setValue(lspPkgInfo.path:resolvePath(binary)) + Settings:apply() + end return end @@ -102,7 +104,7 @@ local function setupClient() mimeTypes = { 'text/x-lua' } }, settings = Settings, - startBehavior = "RequiresFile", + startBehavior = "RequiresProject", onStartFailed = function() a.sync(function() if IsTryingToInstall == true then diff --git a/share/qtcreator/lua-plugins/luals/luals.lua b/share/qtcreator/lua-plugins/luals/luals.lua index 5a68388dd06..f14c88f4fe0 100644 --- a/share/qtcreator/lua-plugins/luals/luals.lua +++ b/share/qtcreator/lua-plugins/luals/luals.lua @@ -1,9 +1,11 @@ -- Copyright (C) 2024 The Qt Company Ltd. -- SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 return { - Name = "LuaLanguageServer", + Id = "lualanguageserver", + Name = "Lua Language Server", Version = "1.0.0", CompatVersion = "1.0.0", + VendorId = "theqtcompany", Vendor = "The Qt Company", Category = "Language Client", Description = "The Lua Language Server", @@ -14,8 +16,8 @@ This plugin provides the Lua Language Server. It will try to install it if it is not found. ]], Dependencies = { - { Name = "Lua", Version = "14.0.0" }, - { Name = "LuaLanguageClient", Version = "14.0.0" } + { Id = "lua", Version = "15.0.0" }, + { Id = "lualanguageclient", Version = "15.0.0" } }, setup = function() require 'init'.setup() diff --git a/share/qtcreator/lua-plugins/luatests/luatests.lua b/share/qtcreator/lua-plugins/luatests/luatests.lua index e85f0d95278..ba2ec28f42e 100644 --- a/share/qtcreator/lua-plugins/luatests/luatests.lua +++ b/share/qtcreator/lua-plugins/luatests/luatests.lua @@ -1,9 +1,11 @@ -- Copyright (C) 2024 The Qt Company Ltd. -- SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 return { - Name = "LuaTests", + Id = "luatests", + Name = "Lua Tests", Version = "1.0.0", CompatVersion = "1.0.0", + VendorId = "theqtcompany", Vendor = "The Qt Company", Category = "Tests", DisabledByDefault = true, @@ -13,7 +15,7 @@ return { It has tests for (almost) all functionality exposed by the API. ]], Dependencies = { - { Name = "Lua", Version = "14.0.0" } + { Id = "lua", Version = "15.0.0" } }, setup = function() require 'tests'.setup() end, printToOutputPane = true, diff --git a/share/qtcreator/lua-plugins/luatests/tests.lua b/share/qtcreator/lua-plugins/luatests/tests.lua index 213aff47ebf..5ab9f8ccca0 100644 --- a/share/qtcreator/lua-plugins/luatests/tests.lua +++ b/share/qtcreator/lua-plugins/luatests/tests.lua @@ -77,6 +77,7 @@ local function setup() script()() end, }) + require 'tst_texteditor'.setup() end return { setup = setup } diff --git a/share/qtcreator/lua-plugins/luatests/tst_texteditor.lua b/share/qtcreator/lua-plugins/luatests/tst_texteditor.lua new file mode 100644 index 00000000000..a21c08659d2 --- /dev/null +++ b/share/qtcreator/lua-plugins/luatests/tst_texteditor.lua @@ -0,0 +1,64 @@ +local function tst_embedWidget() + T = require 'TextEditor' + G = require 'Gui' + + local editor = T.currentEditor() + if not editor then + print("No editor found") + return + end + + local cursor = editor:cursor() + + local embed + local optionals = G.Group { + visible = false, + G.Row { + G.Label { + text = "Optional 1", + }, + G.Label { + text = "Optional 2", + }, + } + } + + local layout = G.Group { + G.Column { + "Hello", G.br, + "World", + G.br, + G.PushButton { + text = "Show optionals", + onClicked = function() + optionals.visible = not optionals.visible + embed:resize() + end, + }, + optionals, + G.PushButton { + text = "Close", + onClicked = function() + embed:close() + end, + }, + } + } + + embed = editor:addEmbeddedWidget(layout, cursor:mainCursor():position()) + embed:onShouldClose(function() + embed:close() + end) +end + +local function setup() + Action = require 'Action' + Action.create("LuaTests.textEditorEmbedDemo", { + text = "Lua TextEditor Embed Demo", + onTrigger = tst_embedWidget, + }) +end + +return { + setup = setup, +} diff --git a/share/qtcreator/lua-plugins/rustls/rustls.lua b/share/qtcreator/lua-plugins/rustls/rustls.lua index 7e0056de25f..b3a1d6de598 100644 --- a/share/qtcreator/lua-plugins/rustls/rustls.lua +++ b/share/qtcreator/lua-plugins/rustls/rustls.lua @@ -1,9 +1,11 @@ -- Copyright (C) 2024 The Qt Company Ltd. -- SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 return { - Name = "RustLanguageServer", + Id = "rustlanguageserver", + Name = "Rust Language Server", Version = "1.0.0", CompatVersion = "1.0.0", + VendorId = "theqtcompany", Vendor = "The Qt Company", Category = "Language Client", Description = "The Rust Language Server", @@ -14,8 +16,8 @@ This plugin provides the Rust Language Server. It will try to install it if it is not found. ]], Dependencies = { - { Name = "Lua", Version = "14.0.0" }, - { Name = "LuaLanguageClient", Version = "14.0.0" } + { Id = "lua", Version = "15.0.0" }, + { Id = "lualanguageclient", Version = "15.0.0" } }, setup = function() require 'init'.setup() diff --git a/share/qtcreator/lua-plugins/tellajoke/tellajoke.lua b/share/qtcreator/lua-plugins/tellajoke/tellajoke.lua index 58d07e0b178..b409d04b037 100644 --- a/share/qtcreator/lua-plugins/tellajoke/tellajoke.lua +++ b/share/qtcreator/lua-plugins/tellajoke/tellajoke.lua @@ -12,12 +12,10 @@ local function fetchJoke() local r = a.wait(fetch({ url = "https://official-joke-api.appspot.com/random_joke", convertToTable = true })) if (type(r) == "table") then mm.writeDisrupting(r.setup) - a.wait(utils.waitms(1000)) - mm.writeSilently(".") - a.wait(utils.waitms(1000)) - mm.writeSilently(".") - a.wait(utils.waitms(1000)) - mm.writeSilently(".") + for i = 1, 3 do + a.wait(utils.waitms(1000)) + mm.writeSilently(".") + end a.wait(utils.waitms(1000)) mm.writeDisrupting(r.punchline) else @@ -43,14 +41,16 @@ local function setup() end return { + Id = "tellajoke", Name = "Tell A Joke", Version = "1.0.0", CompatVersion = "1.0.0", + VendorId = "theqtcompany", Vendor = "The Qt Company", Category = "Fun", Description = "This plugin adds an action that tells a joke.", Dependencies = { - { Name = "Lua", Version = "14.0.0" }, + { Id = "lua", Version = "15.0.0" }, }, setup = setup, } --[[@as QtcPlugin]] diff --git a/share/qtcreator/qml-type-descriptions/qbs.qmltypes b/share/qtcreator/qml-type-descriptions/qbs.qmltypes index 00c0cbb9261..49d40b3f47a 100644 --- a/share/qtcreator/qml-type-descriptions/qbs.qmltypes +++ b/share/qtcreator/qml-type-descriptions/qbs.qmltypes @@ -92,6 +92,7 @@ Module { name: "ModuleProvider" exports: [ "qbs/ModuleProvider 1.0" ] prototype: "QQuickItem" + Property { name: "condition"; type: "bool" } Property { name: "isEager"; type: "bool" } Property { name: "moduleName"; type: "string" } Property { name: "name"; type: "string" } diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml index d8f6551ae59..252ab4becec 100644 --- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml +++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/DeleteBundleItemDialog.qml @@ -31,7 +31,7 @@ StudioControls.Dialog { Text { id: warningText - text: qsTr("Are you sure you? The action cannot be undone") + text: qsTr("Are you sure? The action cannot be undone.") color: StudioTheme.Values.themeTextColor wrapMode: Text.WordWrap anchors.right: parent.right diff --git a/share/qtcreator/styles/creator-dark.xml b/share/qtcreator/styles/creator-dark.xml index 85add5cfac2..088feb7a2ed 100644 --- a/share/qtcreator/styles/creator-dark.xml +++ b/share/qtcreator/styles/creator-dark.xml @@ -29,6 +29,7 @@