diff options
author | Eike Ziller <[email protected]> | 2023-03-29 12:21:50 +0200 |
---|---|---|
committer | Eike Ziller <[email protected]> | 2023-03-29 12:21:50 +0200 |
commit | b36287731eb8ab3895a1e7e19f071009dd1c1ad4 (patch) | |
tree | 4a9999b27058b8efee4ed74cd40f4f16dd97b34f | |
parent | 6ab923c39fd4ac66edb3cf708e3c789cb4a31428 (diff) | |
parent | 81a5e2143cb7728316e02d24925f853e2db2099a (diff) |
Merge remote-tracking branch 'origin/10.0'
Conflicts:
cmake/QtCreatorIDEBranding.cmake
qbs/modules/qtc/qtc.qbs
src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp
src/tools/perfparser
Change-Id: Ie5643100e0eb00e0933359dce320169b876f5634
108 files changed, 2372 insertions, 1475 deletions
diff --git a/README.md b/README.md index 1866b96052f..4a97db2efcc 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,32 @@ Prerequisites: The used toolchain has to be compatible with the one Qt was compiled with. +### Getting Qt Creator from Git + +The official mirror of the Qt Creator repository is located at +https://code.qt.io/cgit/qt-creator/qt-creator.git/. Run + + git clone https://code.qt.io/qt-creator/qt-creator.git + +to clone the Qt Creator sources from there. This creates a checkout of the +Qt Creator sources in the `qt-creator/` directory of your current working +directory. + +Qt Creator relies on some submodules, like +[litehtml](https://github.com/litehtml) for displaying documentation. Get these +submodules with + + cd qt-creator # switch to the sources, if you just ran git clone + git submodule update --init --recursive + +Note the `--recursive` in this command, which fetches also submodules within +submodules, and is necessary to get all the sources. + +The git history contains some coding style cleanup commits, which you might +want to exclude for example when running `git blame`. Do this by running + + git config blame.ignoreRevsFile .gitignore-blame + ### Linux and macOS These instructions assume that Ninja is installed and in the `PATH`, Qt Creator diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index 536fbab3579..7b8a5c47f72 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -840,7 +840,12 @@ function(add_qtc_test name) endif() set(${_build_test_var} "${_build_test_default}" CACHE BOOL "Build test ${name}.") - if (NOT ${_build_test_var} OR NOT ${_arg_CONDITION}) + if ((${_arg_CONDITION}) AND ${_build_test_var}) + set(_test_enabled ON) + else() + set(_test_enabled OFF) + endif() + if (NOT _test_enabled) return() endif() @@ -868,7 +873,6 @@ function(add_qtc_test name) DEFINES ${_arg_DEFINES} ${TEST_DEFINES} ${default_defines_copy} EXPLICIT_MOC ${_arg_EXPLICIT_MOC} SKIP_AUTOMOC ${_arg_SKIP_AUTOMOC} - CONDITION ${_arg_CONDITION} ) set_target_properties(${name} PROPERTIES @@ -988,7 +992,10 @@ function(qtc_add_resources target resourceName) message(FATAL_ERROR "qtc_add_resources had unparsed arguments!") endif() - if (DEFINED _arg_CONDITION AND NOT _arg_CONDITION) + if (NOT _arg_CONDITION) + set(_arg_CONDITION ON) + endif() + if (NOT (${_arg_CONDITION})) return() endif() diff --git a/dist/changelog/changes-10.0.0.md b/dist/changelog/changes-10.0.0.md index 1310d56b1c7..d327b5b1691 100644 --- a/dist/changelog/changes-10.0.0.md +++ b/dist/changelog/changes-10.0.0.md @@ -48,6 +48,7 @@ Editing * Made temporary disabling of global indexing possible by canceling it in the progress indicator * Added support for highlighting angle brackets + * Added semantic highlighting for concepts (QTCREATORBUG-28887) * Built-in * Added support for the spaceship operator (QTCREATORBUG-27503) * Fixed the handling of `= default` (QTCREATORBUG-28102) @@ -99,23 +100,28 @@ Projects * Added a deployment method with `cmake --install` to `Projects > Run Settings > Add Deploy Step > CMake Install` (QTCREATORBUG-25880) -* Added the option to use `cmake-format` for CMake files to `Edit > Preferences > - CMake > Formatter` +* Added the option to use `cmake-format` for CMake files to `Edit > Preferences + > CMake > Formatter` ([cmake-format Documentation](https://cmake-format.readthedocs.io/en/latest/)) * Added `Show advanced options by default` to `Edit > Preferences > CMake > Tools` -* Added support for the `external` strategy for the architecture and toolset of - presets (QTCREATORBUG-28693) +* Added support for presets version 5 + * Added support for the `external` strategy for the architecture and toolset + of presets (QTCREATORBUG-28693) + * Added support for preset includes (QTCREATORBUG-28894) + * Added support for the `pathListSep` variable + * Fixed that CMake preset macros were not expanded for environment variables and + `CMAKE_BUILD_TYPE` (QTCREATORBUG-28606, QTCREATORBUG-28893) * Moved `Autorun CMake` to `Edit > Preferences > CMake > General` * Changed the environment for running CMake to be based on the build environment by default (QTCREATORBUG-28513) -* Fixed that `Package manager auto setup` created a dependency of the project - build to the Qt Creator installation * Fixed that cloned build configurations could miss values from the `Initial Parameters` (QTCREATORBUG-28759) -* Fixed that CMake preset macros were not expanded for environment variables - (QTCREATORBUG-28606) * Fixed a crash with the `Kit Configuration` button for build configurations (QTCREATORBUG-28740) +* Package manager auto setup + * Added support for Conan 2.0 + * Fixed that it created a dependency of the project build to the Qt Creator + installation ### Qbs @@ -209,6 +215,7 @@ Platforms * Added support for loading and attaching to core dumps from remote devices * Added support for using ClangFormat on remote files * Added an option to enable necessary capabilities for debugging with LLDB + to `Edit > Preferences > Devices` for a Docker device * Fixed an issue with space in file paths (QTCREATORBUG-28476) * Fixed that auto-detection controls were shown for devices registered by the installer @@ -237,10 +244,12 @@ Dmitry Bravikov Eike Ziller Fabian Kosmale Fawzi Mohamed +Haowei Hsu Henning Gruendl Jaroslaw Kobus Jussi Witick Kai Köhne +Karim Abdelrahman Knud Dollereder Knut Petter Svendsen Leena Miettinen @@ -260,6 +269,7 @@ Robert Löhning Sami Shalayel Samuel Gaist Samuel Ghinet +Semih Yavuz Sergey Levin Sivert Krøvel Tasuku Suzuki diff --git a/doc/qtcreator/images/extraimages/images/5OiIqFTjUZI.jpg b/doc/qtcreator/images/extraimages/images/5OiIqFTjUZI.jpg Binary files differnew file mode 100644 index 00000000000..91dbba83270 --- /dev/null +++ b/doc/qtcreator/images/extraimages/images/5OiIqFTjUZI.jpg diff --git a/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf b/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf index af81e511928..200058d4a48 100644 --- a/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf +++ b/doc/qtcreator/images/extraimages/qtcreator-extraimages.qdocconf @@ -1,2 +1,3 @@ {HTML.extraimages,qhp.QtCreator.extraFiles} += \ - images/commercial.png + images/commercial.png \ + images/5OiIqFTjUZI.jpg diff --git a/doc/qtcreator/images/qcreator-debugger-select-start-address.webp b/doc/qtcreator/images/qcreator-debugger-select-start-address.webp Binary files differnew file mode 100644 index 00000000000..2e24b71085e --- /dev/null +++ b/doc/qtcreator/images/qcreator-debugger-select-start-address.webp diff --git a/doc/qtcreator/images/qtcreator-add-breakpoint.png b/doc/qtcreator/images/qtcreator-add-breakpoint.png Binary files differdeleted file mode 100644 index 1a399df7b96..00000000000 --- a/doc/qtcreator/images/qtcreator-add-breakpoint.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-add-breakpoint.webp b/doc/qtcreator/images/qtcreator-add-breakpoint.webp Binary files differnew file mode 100644 index 00000000000..8bef8780502 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-add-breakpoint.webp diff --git a/doc/qtcreator/images/qtcreator-android-build-apk-step.png b/doc/qtcreator/images/qtcreator-android-build-apk-step.png Binary files differdeleted file mode 100644 index 8e3b7c43e02..00000000000 --- a/doc/qtcreator/images/qtcreator-android-build-apk-step.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-app-icon.png b/doc/qtcreator/images/qtcreator-android-manifest-editor-app-icon.png Binary files differdeleted file mode 100644 index 60678658b10..00000000000 --- a/doc/qtcreator/images/qtcreator-android-manifest-editor-app-icon.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-app-icon.webp b/doc/qtcreator/images/qtcreator-android-manifest-editor-app-icon.webp Binary files differnew file mode 100644 index 00000000000..b596da36f81 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-android-manifest-editor-app-icon.webp diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-package.png b/doc/qtcreator/images/qtcreator-android-manifest-editor-package.png Binary files differdeleted file mode 100644 index 843ca804bf8..00000000000 --- a/doc/qtcreator/images/qtcreator-android-manifest-editor-package.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-package.webp b/doc/qtcreator/images/qtcreator-android-manifest-editor-package.webp Binary files differnew file mode 100644 index 00000000000..bc4546b838c --- /dev/null +++ b/doc/qtcreator/images/qtcreator-android-manifest-editor-package.webp diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-permissions.png b/doc/qtcreator/images/qtcreator-android-manifest-editor-permissions.png Binary files differdeleted file mode 100644 index 3918c8fb7a4..00000000000 --- a/doc/qtcreator/images/qtcreator-android-manifest-editor-permissions.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-permissions.webp b/doc/qtcreator/images/qtcreator-android-manifest-editor-permissions.webp Binary files differnew file mode 100644 index 00000000000..84c434e53d4 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-android-manifest-editor-permissions.webp diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-services.png b/doc/qtcreator/images/qtcreator-android-manifest-editor-services.png Binary files differdeleted file mode 100644 index d9850e54ea4..00000000000 --- a/doc/qtcreator/images/qtcreator-android-manifest-editor-services.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.png b/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.png Binary files differdeleted file mode 100644 index d90e58b33f0..00000000000 --- a/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.webp b/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.webp Binary files differnew file mode 100644 index 00000000000..b03558c66cc --- /dev/null +++ b/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.webp diff --git a/doc/qtcreator/images/qtcreator-android-sdk-manager.png b/doc/qtcreator/images/qtcreator-android-sdk-manager.png Binary files differdeleted file mode 100644 index 7f24683d741..00000000000 --- a/doc/qtcreator/images/qtcreator-android-sdk-manager.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-android-sdk-manager.webp b/doc/qtcreator/images/qtcreator-android-sdk-manager.webp Binary files differnew file mode 100644 index 00000000000..89a1900c903 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-android-sdk-manager.webp diff --git a/doc/qtcreator/images/qtcreator-autotests-options-boost.png b/doc/qtcreator/images/qtcreator-autotests-options-boost.png Binary files differdeleted file mode 100644 index fedb2a7a15c..00000000000 --- a/doc/qtcreator/images/qtcreator-autotests-options-boost.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-autotests-options-catch2.png b/doc/qtcreator/images/qtcreator-autotests-options-catch2.png Binary files differdeleted file mode 100644 index 347f497247b..00000000000 --- a/doc/qtcreator/images/qtcreator-autotests-options-catch2.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-autotests-options-ctest.png b/doc/qtcreator/images/qtcreator-autotests-options-ctest.png Binary files differdeleted file mode 100644 index 071cba4a718..00000000000 --- a/doc/qtcreator/images/qtcreator-autotests-options-ctest.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-autotests-options-google.png b/doc/qtcreator/images/qtcreator-autotests-options-google.png Binary files differdeleted file mode 100644 index 640da46fd57..00000000000 --- a/doc/qtcreator/images/qtcreator-autotests-options-google.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-autotests-options-qt.png b/doc/qtcreator/images/qtcreator-autotests-options-qt.png Binary files differdeleted file mode 100644 index 808ac1109eb..00000000000 --- a/doc/qtcreator/images/qtcreator-autotests-options-qt.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-autotests-options.png b/doc/qtcreator/images/qtcreator-autotests-options.png Binary files differdeleted file mode 100644 index 4d945f6c936..00000000000 --- a/doc/qtcreator/images/qtcreator-autotests-options.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-build-settings-android-apk.webp b/doc/qtcreator/images/qtcreator-build-settings-android-apk.webp Binary files differnew file mode 100644 index 00000000000..a0d28c9ecb1 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-build-settings-android-apk.webp diff --git a/doc/qtcreator/images/qtcreator-debug-breakpoints.png b/doc/qtcreator/images/qtcreator-debug-breakpoints.png Binary files differdeleted file mode 100644 index 7594830661c..00000000000 --- a/doc/qtcreator/images/qtcreator-debug-breakpoints.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-debug-breakpoints.webp b/doc/qtcreator/images/qtcreator-debug-breakpoints.webp Binary files differnew file mode 100644 index 00000000000..69c22405a2e --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debug-breakpoints.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-breakpoint-preset.png b/doc/qtcreator/images/qtcreator-debugger-breakpoint-preset.png Binary files differdeleted file mode 100644 index e5fa486f2e2..00000000000 --- a/doc/qtcreator/images/qtcreator-debugger-breakpoint-preset.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-debugger-breakpoint-preset.webp b/doc/qtcreator/images/qtcreator-debugger-breakpoint-preset.webp Binary files differnew file mode 100644 index 00000000000..9fd3335126f --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-breakpoint-preset.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-disassembler-view.webp b/doc/qtcreator/images/qtcreator-debugger-disassembler-view.webp Binary files differnew file mode 100644 index 00000000000..7fcf5a13f1b --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-disassembler-view.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-expressions.png b/doc/qtcreator/images/qtcreator-debugger-expressions.png Binary files differdeleted file mode 100644 index ef9e972071c..00000000000 --- a/doc/qtcreator/images/qtcreator-debugger-expressions.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-debugger-expressions.webp b/doc/qtcreator/images/qtcreator-debugger-expressions.webp Binary files differnew file mode 100644 index 00000000000..2a14cce5d53 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-expressions.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-log-view.webp b/doc/qtcreator/images/qtcreator-debugger-log-view.webp Binary files differnew file mode 100644 index 00000000000..ce3e2653650 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-log-view.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-memory-editor.webp b/doc/qtcreator/images/qtcreator-debugger-memory-editor.webp Binary files differnew file mode 100644 index 00000000000..ef51b1dd290 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-memory-editor.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-modules.webp b/doc/qtcreator/images/qtcreator-debugger-modules.webp Binary files differnew file mode 100644 index 00000000000..e4af9e817d2 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-modules.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-new-evaluated-expression.webp b/doc/qtcreator/images/qtcreator-debugger-new-evaluated-expression.webp Binary files differnew file mode 100644 index 00000000000..1934a053722 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-new-evaluated-expression.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-peripheral-registers-view.webp b/doc/qtcreator/images/qtcreator-debugger-peripheral-registers-view.webp Binary files differnew file mode 100644 index 00000000000..34c88131085 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-peripheral-registers-view.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-registers-view.webp b/doc/qtcreator/images/qtcreator-debugger-registers-view.webp Binary files differnew file mode 100644 index 00000000000..05b08e96680 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-registers-view.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-source-files.webp b/doc/qtcreator/images/qtcreator-debugger-source-files.webp Binary files differnew file mode 100644 index 00000000000..7f8faabd4f2 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-source-files.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-views-initial.webp b/doc/qtcreator/images/qtcreator-debugger-views-initial.webp Binary files differnew file mode 100644 index 00000000000..be250d19aa0 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-views-initial.webp diff --git a/doc/qtcreator/images/qtcreator-debugger-views.png b/doc/qtcreator/images/qtcreator-debugger-views.png Binary files differdeleted file mode 100644 index 32e9257269e..00000000000 --- a/doc/qtcreator/images/qtcreator-debugger-views.png +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-debugger-views.webp b/doc/qtcreator/images/qtcreator-debugger-views.webp Binary files differnew file mode 100644 index 00000000000..6d81d538f53 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-debugger-views.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-devices-docker-device.png b/doc/qtcreator/images/qtcreator-preferences-devices-docker-device.png Binary files differnew file mode 100644 index 00000000000..6465c5ae508 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-preferences-devices-docker-device.png diff --git a/doc/qtcreator/images/qtcreator-preferences-devices-docker-device.webp b/doc/qtcreator/images/qtcreator-preferences-devices-docker-device.webp Binary files differdeleted file mode 100644 index 413112c9393..00000000000 --- a/doc/qtcreator/images/qtcreator-preferences-devices-docker-device.webp +++ /dev/null diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-boosttest.webp b/doc/qtcreator/images/qtcreator-preferences-testing-boosttest.webp Binary files differnew file mode 100644 index 00000000000..5f29bae2b60 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-preferences-testing-boosttest.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-catchtest.webp b/doc/qtcreator/images/qtcreator-preferences-testing-catchtest.webp Binary files differnew file mode 100644 index 00000000000..3e5cadcb2f9 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-preferences-testing-catchtest.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-ctest.webp b/doc/qtcreator/images/qtcreator-preferences-testing-ctest.webp Binary files differnew file mode 100644 index 00000000000..2394370dc88 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-preferences-testing-ctest.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-general.webp b/doc/qtcreator/images/qtcreator-preferences-testing-general.webp Binary files differnew file mode 100644 index 00000000000..0b92925e6a1 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-preferences-testing-general.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-googletest.webp b/doc/qtcreator/images/qtcreator-preferences-testing-googletest.webp Binary files differnew file mode 100644 index 00000000000..1a60a66ae90 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-preferences-testing-googletest.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-qttest.webp b/doc/qtcreator/images/qtcreator-preferences-testing-qttest.webp Binary files differnew file mode 100644 index 00000000000..f6df07907ea --- /dev/null +++ b/doc/qtcreator/images/qtcreator-preferences-testing-qttest.webp diff --git a/doc/qtcreator/images/qtcreator-run-settings-python.webp b/doc/qtcreator/images/qtcreator-run-settings-python.webp Binary files differnew file mode 100644 index 00000000000..341a931a171 --- /dev/null +++ b/doc/qtcreator/images/qtcreator-run-settings-python.webp diff --git a/doc/qtcreator/src/android/androiddev.qdoc b/doc/qtcreator/src/android/androiddev.qdoc index 2c39ce3e51e..a171476b13c 100644 --- a/doc/qtcreator/src/android/androiddev.qdoc +++ b/doc/qtcreator/src/android/androiddev.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -8,36 +8,37 @@ \title Connecting Android Devices - You can connect Android devices to the development PC using USB cables - to build, run, debug, and analyze applications from \QC. Devices with - Android version 4.1 (API level 16) or later are supported when developing - with Qt 5 and devices with Android version 6.0 (API level 23) when - developing with Qt 6. + You can connect Android devices to the development PC using USB cables to + build, run, debug, and analyze applications from \QC. - To develop for Android, you must have a tool chain for building applications - for Android devices installed on the development PC. \QC can automatically + To develop for Android, you must install a tool chain for building + applications for Android devices on the development PC. \QC can automatically download and install the tool chain and create a suitable build and run \l{glossary-buildandrun-kit}{kit} that has the tool chain and the Qt version for Android for the device's architecture. - Starting from Qt 5.14.0, the Qt for Android package has all the - architectures (ABIs) installed as one. - To enable helpful code editing features for Java, such as code completion, highlighting, function tooltips, and navigating in code, add a \l{Java Language Server}{Java language server}. - The Android Debug Bridge (adb) command line tool is integrated to \QC to - enable you to deploy applications to connected Android devices, to run - them, and to read their logs. It includes a client and server that run on + \QC integrates the Android Debug Bridge (\c adb) command line tool for + deploying applications to Android devices, running them, and reading their + logs. The \c adb tool includes a client and server that run on the development host and a daemon that runs on the emulator or device. + The following video shows the whole process from installing Qt for Android + to debugging an application on an Android device: + + \youtube 5OiIqFTjUZI + \section1 Requirements To use \QC to develop Qt applications for Android, you need - \l{Qt for Android} 5.2, or later, and the tool chain that \QC - can automatically download, install, and configure for you. - For more information, see \l{Manually Installing the Prerequisites}. + \l {Qt for Android} and a tool chain that \QC can automatically + download, install, and configure for you. For more information + about the requirements for developing with a particular Qt version, + see the documentation for that Qt version. The links in this manual + lead to the latest released Qt reference documentation. \section1 Specifying Android Device Settings @@ -58,42 +59,39 @@ \uicontrol Android on Windows and Linux or \uicontrol {\QC} > \uicontrol Preferences > \uicontrol Devices > \uicontrol Android on \macos. - \image qtcreator-options-android-main.png "Android preferences" + \image qtcreator-options-android-main.png {Android preferences} \li In the \uicontrol {JDK location} field, set the path to the JDK. \QC checks the JDK installation and reports errors. By default, \QC tries to find a supported \l{AdoptOpenJDK} or - \l{OpenJDK} installation. If none is found, you must set the path - manually. If you don't have a supported JDK installed, select + \l{OpenJDK} installation. If it cannot find one, you must set the + path manually. If you have not installed a supported JDK, select \inlineimage icons/online.png to open the JDK download web page in the default browser. - \note We recommended using a 64-bit JDK because the 32-bit one - might cause issues with \c cmdline-tools, and some packages might - not be listed. + \note Use a 64-bit JDK because the 32-bit one might cause issues with + \c cmdline-tools, and some packages might not appear in the list. \li In the \uicontrol {Android SDK location} field, set the path to the - folder where you want the \l{Android SDK Command-line Tools} to be - installed. + folder to install the \l{Android SDK Command-line Tools}. \li Select \uicontrol {Set Up SDK} to automatically download and extract the Android SDK Command-line Tools to the selected path. - The SDK Manager checks whether the tool chain is installed. - If packages are missing or updates are needed, the SDK Manager - offers to add or remove those packages. Before taking action, it - prompts you to accept the changes it is about to make. In addition, - it prompts you to accept Google licenses, as necessary. - \li The installed NDK versions are listed in - \uicontrol {Android NDK list}. - The locked items were installed by the SDK Manager, - and can only be modified from the \uicontrol {Android SDK Manager} - dialog. For more information, see \l{Managing Android NDK Packages}. + The SDK Manager checks that you have the necessary tools. If you need + more packages or updates, the SDK Manager offers to add or remove + the appropriate packages. Before taking action, it prompts you to + accept the changes. In addition, it prompts you to accept Google + licenses, as necessary. + \li The \uicontrol {Android NDK list} lists the installed NDK versions. + The SDK Manager installed the locked items. You can modify them only + from the \uicontrol {Android SDK Manager} dialog. For more + information, see \l{Managing Android NDK Packages}. \li Select the \uicontrol {Automatically create kits for Android tool chains} check box to allow \QC to create the kits for you. \QC displays a warning if it cannot find a suitable Qt version. \li Optionally, in the \uicontrol {Android OpenSSL Settings} group, set the path to the prebuilt OpenSSL libraries. - For Qt applications that require OpenSSL support, \QC allows to + For Qt applications that require OpenSSL support, you can quickly add the \l {Android OpenSSL support} to your project. For more information, see \l{Adding External Libraries}. \li Select \uicontrol {Download OpenSSL} to download the OpenSSL @@ -103,21 +101,20 @@ \section2 Manual Setup - \note We recommend that you use the latest Android SDK Command-Line Tools. - Using Android SDK Tools version 25.2.5 or earlier is not supported because - they cannot be fully integrated with \QC. + \note Use the latest Android SDK Command-Line Tools. \QC does not support + Android SDK Tools version 25.2.5 or earlier because it cannot fully + integrate them. However, if the automatic setup does not meet your needs, you can download and install Android SDK Command-line Tools, and then install or update the - NDKs, tools and packages needed for development. For more information, see + necessary NDKs, tools, and packages. For more information, see \l{Getting Started with Qt for Android}. \section2 Viewing Android Tool Chain Settings - The Android SDK Command-Line Tools download URL, the essential - packages list, and the appropriate NDK for each Qt version are defined in a JSON - configuration file. The file is located under the user's \QC - resource folder: + A JSON configuration file defines the Android SDK Command-Line Tools download + URL, the essential packages list, and the appropriate NDK for each Qt version. + The file is in the \QC resource folder: \badcode # Linux and macOS @@ -127,8 +124,8 @@ C:\Users\Username\AppData\Local\QtProject\qtcreator\android\sdk_definitions.json \endcode - For example, the SDK configuration file defines the NDK version 19.2.5345600 - to be used for Qt 5.12.0 to 5.12.5 and Qt 5.13.0 to 5.13.1 versions: + For example, the SDK configuration file sets the NDK version 19.2.5345600 + for use with Qt 5.12.0 to 5.12.5 and Qt 5.13.0 to 5.13.1: \badcode "specific_qt_versions": [ @@ -150,10 +147,10 @@ Linux or \uicontrol {\QC} > \uicontrol Preferences > \uicontrol Devices > \uicontrol Android on \macos. - \image qtcreator-options-android-sdk-tools.png "Android NDK and SDK checks" + \image qtcreator-options-android-sdk-tools.png {Android NDK and SDK checks} - The locked versions were installed by the SDK Manager, and can only - be modified from the \uicontrol {Android SDK Manager} dialog. + The SDK Manager installed the locked items. You can modify them only + in the \uicontrol {Android SDK Manager} dialog. For more information, see \l{Managing Android SDK Packages}. To manually download NDKs, select \inlineimage icons/online.png @@ -173,7 +170,7 @@ tool, \l {sdkmanager}, for SDK package management. To make SDK management easier, \QC has an SDK Manager for installing, updating, and removing SDK packages. You can still use - sdkmanager for advanced SDK management. + \c sdkmanager for advanced SDK management. To view the installed Android SDK packages, select \uicontrol Edit > \uicontrol Preferences > \uicontrol Devices > \uicontrol Android > @@ -181,7 +178,7 @@ \uicontrol Preferences > \uicontrol Devices > \uicontrol Android > \uicontrol {SDK Manager} on \macos. - \image qtcreator-android-sdk-manager.png "Android SDK Manager" + \image qtcreator-android-sdk-manager.webp {Android SDK Manager} You can show packages for the release channel you select in \uicontrol {Show Packages} > \uicontrol Channel. Common channel IDs include @@ -194,27 +191,27 @@ \uicontrol {Update Installed}. Select the packages to update, and then select \uicontrol Apply. - To specify advanced sdkmanager settings, select + To specify advanced \c sdkmanager settings, select \uicontrol {Advanced Options} and enter arguments in the - \uicontrol {SDK Manager arguments} field. The available arguments are listed - and described in \uicontrol {Available arguments}. + \uicontrol {SDK Manager arguments} field. \uicontrol {Available arguments} + lists the arguments with descriptions. - \image qtcreator-android-sdk-manager-arguments.png "Android SDK Manager Arguments dialog" + \image qtcreator-android-sdk-manager-arguments.png {Android SDK Manager Arguments dialog} \section1 Managing Android Virtual Devices (AVD) - The available AVDs are listed in \uicontrol Edit > \uicontrol Preferences + To view the available AVDs, select \uicontrol Edit > \uicontrol Preferences > \uicontrol Devices on Windows and Linux or \uicontrol {\QC} > \uicontrol Preferences > \uicontrol Devices > on \macos. You can add more AVDs. - \image qtcreator-android-avd-manager.png "Android device in Devices" + \image qtcreator-android-avd-manager.png {Android device in Devices} You can see the status of the selected device in \uicontrol {Current state}. To update the status information, select \uicontrol Refresh. To start an AVD, select \uicontrol {Start AVD}. Usually, you don't need to - start AVDs separately because they are automatically started when you + start AVDs separately because \QC starts them when you select them in the \l{Building for Multiple Platforms}{kit selector} to \l{Deploying to Android}{deploy applications} to them. @@ -223,7 +220,7 @@ To specify options for starting an AVD, select \uicontrol {AVD Arguments}. - \image qtcreator-android-avd-arguments.png "Startup options for AVDs" + \image qtcreator-android-avd-arguments.png {Startup options for AVDs} Specify the options in \uicontrol {Emulator command-line startup options}. For available options, see \l{Start the emulator from the command line}. @@ -247,7 +244,7 @@ or \uicontrol {\QC} > \uicontrol Preferences > \uicontrol Devices > \uicontrol Add > \uicontrol {Android Device} on \macos to open the \uicontrol {Create New AVD} dialog. - \image qtcreator-android-create-avd.png "Create New AVD dialog" + \image qtcreator-android-create-avd.png {Create New AVD dialog} \li Set the name, definition, architecture, target API level, and SD card size of the device. \li Select \uicontrol OK to create the AVD. @@ -258,9 +255,9 @@ \section1 Debugging on Android Devices - Debugging is enabled in different ways on different Android devices. + You enable debugging in different ways on different Android devices. Look for \uicontrol {USB Debugging} under \uicontrol {Developer Options}. On - some devices \uicontrol {Developer Options} is hidden and becomes visible + some devices, \uicontrol {Developer Options} is hidden and becomes visible only when you tap the \uicontrol {Build number} field in \uicontrol Settings > \uicontrol About several times. For more information, see \l {Configure on-device developer options}. @@ -269,7 +266,7 @@ the application for debugging. \note \QC cannot debug applications on Android devices if Android Studio is - running. If the following message is displayed in \l {Application Output}, + running. If the following message appears in \l {Application Output}, close Android Studio and try again: \badcode diff --git a/doc/qtcreator/src/android/deploying-android.qdoc b/doc/qtcreator/src/android/deploying-android.qdoc index 6375140fd8c..0e1c2e7fde7 100644 --- a/doc/qtcreator/src/android/deploying-android.qdoc +++ b/doc/qtcreator/src/android/deploying-android.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -8,24 +8,25 @@ \title Deploying to Android - On Android, applications are distributed in specially structured types of - ZIP packages called Application Packages (APK) or Android App Bundles (AAB). - APK files can be downloaded to and executed on a device, whereas AAB is - intended to be interpreted by the Google Play store and is used to generate - APK files. + Android applications are packaged as ZIP files called Application Packages + (APK) or Android App Bundles (AAB). You can install and run APK files on a + device. You can upload AAB files to the Google Play store. \l{Qt for Android} has binaries for armv7a, arm64-v8a, x86, and x86-64. To support several different ABIs in your application, build an AAB that - has binaries for each of the ABIs. The Google Play store uses the - AAB to generate optimized APK packages for the devices issuing the download - request and automatically signs them with your publisher key. + has binaries for each of the ABIs. The Google Play store uses the AAB + to generate optimized APK packages for the devices that request download + and automatically signs them with your publisher key. \QC supports the following methods of deployment for Android applications: \list \li As a stand-alone, distributable application package (APK). - \li Since Qt 5.14.0, as an app bundle (AAB), intended for distribution - in the Google Play store. + \li As an app bundle (AAB) for distribution in the Google Play store. + + All Qt versions do not support AABs. Qt 6.3.0 and later support + multi-abi builds for applications that you build with CMake. For + more information, see \l{Qt for Android - Building User Projects}. \endlist \note Since \QC 4.12, Ministro is not supported. @@ -39,56 +40,27 @@ \section1 Packaging Applications - Because bundling applications as APK packages is not - trivial, Qt 5 has a deployment tool called \c androiddeployqt. - When you deploy an application using a \e {Qt for Android kit}, \QC uses - the \c androiddeployqt tool to create the necessary files and to bundle them - into an APK: - - \list - - \li Java files, which serve as the entry point into your application and - that automatically load Qt and execute the native code in your - application. - - \li AndroidManifest.xml, which has meta-information about your - application. - - \li Other XML files, which specify the dependencies of your application. - - \li Resource files. - - \li Libraries and QML files, which can be included in the project - depending on the deployment method that you select. - - \li Gradle wrappers that are needed to download and use Gradle. - - \li Gradle script that is needed by Java IDEs, such as Android Studio. - It allows the user to extend the Java part without copying our Java - sources. It also allows the IDEs to offer code completion, syntax - highlighting, and so on. - - \endlist - - The Gradle wrappers and scripts are bundled only if you use Gradle to build - the application packages. For more information, see - \l{Connecting Android Devices}. + Because bundling applications as APK packages is not trivial, Qt has the + \l {The androiddeployqt Tool}{androiddeployqt} tool. When you deploy an + application using a \e {Qt for Android kit}, \QC runs the tool to + create the necessary files and to bundle them into an APK. For more + information, see \l{Android Package Templates}. To view the packages that the \c androiddeployqt tool created, select the \uicontrol {Open package location after build} check box. \section2 Specifying Deployment Settings - The available deployment settings are listed in the \uicontrol Method field. + The \uicontrol Method field lists deployment settings. To add deployment methods for a project, select \uicontrol Add. - \image qtcreator-android-deployment-settings.png "Deployment settings" + \image qtcreator-android-deployment-settings.png {Deployment settings} To rename the current deployment method, select \uicontrol Rename. To remove the current deployment method, select \uicontrol Remove. - The packages are deployed on the Android device that you select in the + \QC deploys the packages on the Android device that you select in the \l{Building for Multiple Platforms}{kit selector}. To add devices, select \uicontrol Manage. @@ -107,14 +79,13 @@ \uicontrol Projects > \uicontrol {Build & Run} > \uicontrol Build > \uicontrol {Build Android APK} > \uicontrol Details. - \image qtcreator-android-build-apk-step.png "Build Android APK step" + \image qtcreator-build-settings-android-apk.webp {Build Android APK step} - The \c androiddeployqt tool uses the configuration information to - create APKs. For more information about the available options, see - \l{androiddeployqt}. + The \c androiddeployqt tool create APKs based on the settings. For more + information about the available options, see \l{androiddeployqt}. You can view information about what the \c androiddeployqt tool is doing in - \l {Compile Output}. To view additional information, select the + \l {Compile Output}. To view more information, select the \uicontrol {Verbose output} check box. Select \uicontrol {Add debug server} to include the debug server binary @@ -122,36 +93,31 @@ \section3 Selecting API Level - In the \uicontrol {Android build platform SDK} field, you can select the - API level to use for building the application. Usually, you should select - the highest API level available. + In the \uicontrol {Android build platform SDK} field, select the + \l{What is API Level?}{API level} to use for building the application. + Usually, you should select the highest API level available. - \note For Qt 5.12.0 to 5.12.5 and Qt 5.13.0 to 5.13.1, Android build - platform SDK 28 should be used. For more recent versions than Qt 5.13.1, - build platform SDK 29 or the most recent one should be used. - - This field does not specify the minimum supported API level nor the target - API level, which you can specify in the Android manifest. See - \l{Editing Manifest Files}. For more information about Android API levels, see - \l{What is API Level?}. + Usually, you should use the highest version of the Android SDK + build-tools for building. If necessary, select another version + in the \uicontrol {Android build-tools version} field. \section3 Building AABs For testing the application locally, use the APK format because - the package can be uploaded directly to the device and run. For - distribution to the Google Play store, create an AAB by selecting + \QC can install and run the package on the device. For distribution + to the Google Play store, create an AAB by selecting the \uicontrol {Build Android App Bundle (*.aab)} check box. When building with CMake, you can view the selected ABIs in \uicontrol {Initial Configuration} in the \uicontrol CMake section. You can set additional ABIs as values of the \c ANDROID_ABI key: - \image qtcreator-android-cmake-settings.png "CMake settings for building AABs" + \image qtcreator-android-cmake-settings.png {CMake settings for building AABs} When building with Qbs or qmake, you can select the ABIs in the \uicontrol ABIs field in the \uicontrol {Build Steps}: - \image qtcreator-android-build-steps.png "qmake settings for building AABs" + \image qtcreator-android-build-steps.png {qmake settings for building AABs} \section3 Signing Android Packages @@ -174,12 +140,12 @@ certificate has information about the algorithm that is used to sign the certificate, as well as the signature of the certificate. - The keystore is protected by a password. In addition, you can protect each + A password protects the keystore. In addition, you can protect each alias with its individual password. When you sign an Android application, you must select a keystore that - has certificates and a certificate alias from the keystore. The public - key (certificate) for the alias is embedded into the APK during signing. + has certificates and a certificate alias from the keystore. The signing + process embeds the public key (certificate) for the alias into the APK. To create a keystore and a self-signed certificate: @@ -250,8 +216,92 @@ You can use the configuration options to specify all the settings you need for the \c androiddeployqt tool. You only need an Android manifest file to specify Android-specific settings, such as the application icon. - However, the manifest file is needed when you want to publish the package - in the Play Store. + However, you need the manifest file to publish the package in the Play Store. + For more information about manifest files, see + \l {Qt Android Manifest File Configuration}. + + If you use CMake as the build system, you must specify the Android package + source directory, \c QT_ANDROID_PACKAGE_SOURCE_DIR, in the CMakeList.txt + file, as instructed in the \l{Locking Device Orientation} + {mobile device tutorial}. + + To use \QC to create an Android manifest file and to open it in the Android + Manifest Editor: + + \list 1 + + \li Select \uicontrol Projects > \uicontrol Build > + \uicontrol {Build Android APK} > \uicontrol {Create Templates}. + + \li Check the path in \uicontrol {Android package source directory}. + + \image qtcreator-android-create-template.png {Create Template dialog} + + \li Select \uicontrol {Copy the Gradle files to Android directory} if you + plan to extend the Java part of your Qt application. + + \li Select \uicontrol Finish to copy the template files to the \c android + directory and to open the manifest file for editing. + + \image qtcreator-android-manifest-editor-package.webp {Package info in Android Manifest Editor} + + \endlist + + The following table summarizes the options you can set. + + \table + \header + \li Option + \li Value + \row + \li \uicontrol {Package name} + \li A valid \l{Package Names}{package name} for the application. + For example, \c {org.example.myapplication}. + An automatically generated Java launcher that is packaged with the + application into an APK launches the application. + \row + \li \uicontrol {Version code} + \li An internal version number for the package that determines whether + one version of the application is more recent than another. + \row + \li \uicontrol {Version name} + \li The version number that is visible to users. + \row + \li \uicontrol {Minimum required SDK} + \li The minimum API level required to run the application if you set it + manually in the manifest file. + \row + \li \uicontrol {Target SDK} + \li The targeted API level of the application if you set it manually in + the manifest file. + \row + \li \uicontrol {Application name} + \li The application's name. + \row + \li \uicontrol {Activity name} + \li An activity name. + \row + \li \uicontrol {Style extraction} + \li The method that Qt uses to determine which \l{Styling}{UI style} + to use. + \row + \li \uicontrol {Screen orientation} + \li How to determine \l{Screen Orientation}{screen orientation}. + \row + \li \uicontrol {Application icon} + \li Images to use as \l{Icons}{application icons} depending on screen + resolution. + \row + \li \uicontrol {Splash screen} + \li Images to display as \l{Splash Screens}{splash screens} depending on + the screen orientation and resolution. + \row + \li \uicontrol Permissions + \li The \l{Setting Permissions}{permissions} that the application needs. + \endtable + + On the top header, select the \uicontrol {XML Source} tab to edit the file + in XML format. \section2 Package Names @@ -378,7 +428,7 @@ \li Locks the orientation to its current rotation, whatever that is. \endtable - \section2 Icons and Splash Screens + \section2 Icons You can set different images to be shown as application icons and splash screens on low, medium, high, and extra high DPI displays. The following @@ -399,16 +449,17 @@ high, and extra high DPI displays, as needed. Alternatively, set the icons for each resolution separately. - \image qtcreator-android-manifest-editor-app-icon.png "Application icons in Android Manifest Editor" + \image qtcreator-android-manifest-editor-app-icon.webp {Application icons in Android Manifest Editor} + + \section2 Splash Screens Specify settings for splash screens in the \uicontrol {Splash screen} tab. Select images to display as splash screens depending on the device orientation and screen resolution. - \image qtcreator-android-manifest-editor-splash-screen.png "Splash screens in Android Manifest Editor" + \image qtcreator-android-manifest-editor-splash-screen.webp {Splash screens in Android Manifest Editor} - By default, the splash screen is hidden automatically - when an activity is drawn. To keep it visible until + By default, drawing an activity hides the splash screen. To keep it visible until \l{https://doc.qt.io/qt-6/qnativeinterface-qandroidapplication.html#hideSplashScreen} {QNativeInterface::QAndroidApplication::hideSplashScreen()} is called, select the \uicontrol {Sticky splash screen} check box. @@ -424,102 +475,22 @@ Select \uicontrol {Clear All} to reset all settings or remove all images. - \section2 Android Manifest Editor - - If you use qmake as the build system, you can create an Android manifest - file and edit it in \QC. - - To create an Android manifest file and to open it in the Android Manifest - Editor: - - \list 1 - - \li Select \uicontrol Projects > \uicontrol Build > - \uicontrol {Build Android APK} > \uicontrol {Create Templates}. - - \li Check the path in \uicontrol {Android package source directory}. - - \image qtcreator-android-create-template.png "Create Template dialog" - - \li Select \uicontrol {Copy the Gradle files to Android directory} if you - plan to extend the Java part of your Qt application. - - \li Select \uicontrol Finish to copy the template files to the \c android - directory and to open the manifest file for editing. - - \li In the \uicontrol {Package name} field, enter a valid - \l{Package Names}{package name} for the application. - For example, \c {org.example.myapplication}. - The application is launched by an automatically generated Java launcher - that is packaged with the application into an Android package (.apk). - - \image qtcreator-android-manifest-editor-package.png "Package info in Android Manifest Editor" - - \li You can specify an internal version number for the package in the - \uicontrol {Version code} field. It is used to determine whether one version of - the application is more recent than another. In the \uicontrol {Version name} - field, specify the version number that is shown to users. - - \li In the \uicontrol {Minimum required SDK} field, select the minimum API level - required to run the application. The minimum supported API level for \QC is - android-9. However, Qt versions might have different minimum API levels, and - therefore \QC does not allow you to select an API level that the Qt version - specified for the kit does not support. - - \li In the \uicontrol {Target SDK} field, select the targeted API level of the - application. This affects the activation of some compatibility features in - the OS. The value used by the \c androiddeployqt tool by default is 14, which - means that the overflow button in the system navigation bar will not be - enabled by default. - - \li In the \uicontrol {Application name} field, set the application's name. - - \li In the \uicontrol {Activity name} field, set an activity name. - - \li In the \uicontrol {Style extraction} field, set the method that Qt - uses to \l{Styling}{determine which UI style to use}. - - \li In the \uicontrol {Screen orientation} field, select the option for - determining \l{Screen Orientation}{screen orientation}. - - \li In \uicontrol {Application icon}, specify images to use as application - icons depending on screen resolution. + \section2 Setting Permissions - \li In \uicontrol {Splash screen}, select images to display as splash - screens depending on the screen orientation and resolution. - - \li In \uicontrol {Android services}, select \uicontrol Add to add a service. - You must enter at least a service class name for a new service. If you select - \uicontrol {Run in external process}, you also need to enter a process name. - If you select \uicontrol {Run in external library}, you need to enter a library name. - Service arguments are mandatory for a service that is not run in an external - library. For more information about writing service code and structure of services, - see \l{Android Services}. - - \image qtcreator-android-manifest-editor-services.png "Android services in Android Manifest Editor" - - \li In the \uicontrol Permissions field, you can specify the permissions that your - application needs. Starting from Android 6.0 (API 23), permissions have to be - requested at runtime (see \l{QtAndroidPrivate::requestPermission()}). For - lower Android API levels, users are asked to grant the permissions when they + Starting from Android 6.0 (API 23), applications have to request permissions + at runtime (see \l{QtAndroidPrivate::requestPermission()}). For + lower Android API levels, users have to grant the permissions when they install the application. Android OS then grants the application access to the appropriate data and features. - \image qtcreator-android-manifest-editor-permissions.png "Permissions in Android Manifest Editor" + \image qtcreator-android-manifest-editor-permissions.webp {Permissions in Android Manifest Editor} - \li Select the \uicontrol {Include default permissions for Qt modules} and + Select the \uicontrol {Include default permissions for Qt modules} and \uicontrol {Include default features for Qt modules} check boxes to add the permissions needed by Qt libraries. This can be \c {android.permission.WRITE_EXTERNAL_STORAGE} for \l{Qt Core} or - \c {android.permission.ACCESS_COARSE_LOCATION} for - \l{https://doc.qt.io/qt-5.15/qtlocation-index.html}{Qt Location}. - - \li To add a permission, select it from the list, and then click \uicontrol Add. - - \endlist - - On the top header, select the \uicontrol {XML Source} tab to edit the file - in XML format. + \c {android.permission.ACCESS_BACKGROUND_LOCATION} for \l{Qt Positioning}. + To add a permission, select it from the list, and then click \uicontrol Add. */ diff --git a/doc/qtcreator/src/debugger/creator-debug-views.qdoc b/doc/qtcreator/src/debugger/creator-debug-views.qdoc index d0aa7b86da4..78ee139e3f8 100644 --- a/doc/qtcreator/src/debugger/creator-debug-views.qdoc +++ b/doc/qtcreator/src/debugger/creator-debug-views.qdoc @@ -12,7 +12,7 @@ \title Viewing Call Stack Trace - When the program being debugged is interrupted, \QC displays the nested + When the application being debugged is interrupted, \QC displays the nested function calls leading to the current position as a call stack trace. This stack trace is built up from call stack frames, each representing a particular function. For each function, \QC tries to retrieve the file name @@ -24,14 +24,17 @@ Since the call stack leading to the current position may originate or go through code for which no debug information is available, not all stack frames have corresponding source locations. Stack frames without - corresponding source locations are grayed out in the \uicontrol Stack view. + corresponding source locations are grayed out. If you click a frame with a known source location, the text editor jumps to - the corresponding location and updates the \uicontrol {Locals} and - \uicontrol {Expressions} views, making it seem like the program - was interrupted before entering the function. + the corresponding location and updates the + \l {Local Variables and Function Parameters}{Locals} and + \l {Evaluating Expressions}{Expressions} views, making it seem like the + application was interrupted before entering the function. - To find out which QML file is causing a Qt Quick 2 application to crash, + \section1 Loading QML Stack + + To find out which QML file is causing a Qt Quick application to crash, select \uicontrol {Load QML Stack} in the context menu in the \uicontrol Stack view. The debugger tries to retrieve the JavaScript stack from the stopped executable and prepends the frames to the C++ frames, @@ -66,8 +69,8 @@ \li Executing some system calls - \li Changes in a block of memory at a particular address when a - program is running + \li Changes in a block of memory at a particular address when an + application is running \li Emitting QML signals @@ -75,26 +78,30 @@ \endlist - The interruption of a program by a breakpoint can be restricted with certain - conditions. + A breakpoint interrupts the application every time the application reaches + its location unless you specify a boolean condition for it. The breakpoint + evaluates the expression each time the application passes it, and the + application stops only if the condition evaluates to \c true. + + \section1 Unclaimed and Claimed Breakpoints Breakpoints come in two varieties: \c unclaimed and \c claimed. An unclaimed breakpoint represents a task to interrupt the debugged - program and passes the control to you later. It has two states: + application and passes the control to you later. It has two states: \c pending and \c implanted. Unclaimed breakpoints are stored as a part of a session and exist - independently of whether a program is being debugged or not. They + independently of whether an application is being debugged or not. They are listed in the \uicontrol {Breakpoint Preset} view and in the editor using the \inlineimage icons/qtcreator-unclaimed-breakpoint-icon.png (\uicontrol {Unclaimed Breakpoint}) icon, when they refer to a position in code. - \image qtcreator-debugger-breakpoint-preset.png {Breakpoint Preset view} + \image qtcreator-debugger-breakpoint-preset.webp {Breakpoint Preset view} When a debugger starts, the debugging backend identifies breakpoints from the set of unclaimed breakpoints that might be handled by the - debugged program and claims them for its own exclusive use. Claimed + debugged application and claims them for its own exclusive use. Claimed breakpoints are listed in the \uicontrol {Breakpoints} view of the running debugger. This view only exists while the debugger is running. @@ -115,11 +122,11 @@ \uicontrol{Breakpoint Preset} view. When an implanted breakpoint is hit during the execution of the - debugged program, control is passed back to you. - You can then examine the state of the interrupted program, or + debugged application, control is passed back to you. + You can then examine the state of the interrupted application, or continue execution either line-by-line or continuously. - \image qtcreator-debug-breakpoints.png "Breakpoints view" + \image qtcreator-debug-breakpoints.webp {Breakpoints view} \section1 Adding Breakpoints @@ -133,7 +140,7 @@ \li In the code editor, click the left margin or press \key F9 (\key F8 on \macos) on a particular line you want the - program to stop. + application to stop. \li In the \uicontrol {Breakpoint Preset} view or the \uicontrol Breakpoints view: @@ -146,24 +153,68 @@ \endlist \li In the \uicontrol {Breakpoint type} field, select the location in the - program code where you want the program to stop. The other options - to specify depend on the selected location. - - \image qtcreator-add-breakpoint.png "Add Breakpoints" dialog - - \li In the \uicontrol Condition field, set the condition to be evaluated - before stopping at the breakpoint if the condition evaluates as - true. - - \li In the \uicontrol Ignore field, specify the number of times that the - breakpoint is ignored before the program stops. - - \li In the \uicontrol Commands field, specify the commands to execute - when the program stops; one command on a line. GDB executes the - commands in the order in which they are specified. + application code where you want the application to stop. + \image qtcreator-add-breakpoint.webp {Add Breakpoints} dialog \endlist + Deselect the \uicontrol Enabled check box to make the breakpoint temporarily + inoperative as if you had deleted it, but keep the information about the + breakpoint, so that you can enable it again later. + + The other options to specify depend on the location you select, such as file + name and line number, address, expression, or function name. The following + table summarizes the advanced options. + + \table + \header + \li Option + \li Value + \row + \li \uicontrol Condition + \li The condition to evaluate before stopping at the breakpoint if the + condition evaluates as \c true. + \row + \li \uicontrol {Ignore count} + \li The number of times to ignore the breakpoint before the application + stops. + \row + \li \uicontrol {Thread specification} + \li + \row + \li \uicontrol Path + \li Determines how to specify the path when setting breakpoints: + \list + \li \uicontrol {Use Engine Default} is the preferred setting of + the debugger engine. + \li \uicontrol {Use Full Path} passes the full path to avoid + ambiguity if several modules contain files with the same + name. This is the engine default for CDB and LLDB. + \li \uicontrol {Use File Name} passes the file name only. This is + useful when the location of the source tree does not match + the one used when building the modules. This is the engine + default for GDB as using full paths can be slow with it. + \endlist + \row + \li \uicontrol Module + \li Specify the module (base name of the library or executable) for + function or file type breakpoints to speed up debugger startup + (CDB, LLDB). + \row + \li \uicontrol Commands + \li Commands to execute when the application stops. List one command per + line. GDB executes the commands in the order in which you specify + them. + \row + \li \uicontrol {Tracepoint only} + \li A \e tracepoint lets you log information about the application + without adding log statements or otherwise modifying your code. + You can set conditions for the tracepoint. + \row + \li \uicontrol Message + \li The tracepoint message to show in \l {Application Output}. + \endtable + \if defined(qtcreator) \section1 Specifying Breakpoint Settings @@ -171,6 +222,8 @@ \uicontrol Preferences > \uicontrol Debugger. For more information, see \l{Debugger Preferences}. + \image qtcreator-debugger-general-options.png {General tab in Debugger preferences} + To use a full absolute path in breakpoints, select the \uicontrol {Set breakpoints using a full absolute path} check box. @@ -261,12 +314,12 @@ disabled breakpoint. To re-enable a breakpoint, use any of the above methods. - With the notable exception of data breakpoints, breakpoints retain their - enabled or disabled state when the debugged program is restarted. + Other than data breakpoints retain their enabled or disabled state when the + debugged application is restarted. \section1 Setting Data Breakpoints - A \e {data breakpoint} stops the program when data is read or written at the + A \e {data breakpoint} stops the application when data is read or written at the specified address. To set a data breakpoint at an address: @@ -291,8 +344,8 @@ \uicontrol {Add Data Breakpoint at Object's Address} in the context menu to set the data breakpoint. - Data breakpoints will be disabled when the debugged program exits, as it - is unlikely that the used addresses will stay the same at the next program + Data breakpoints will be disabled when the debugged application exits, as it + is unlikely that the used addresses will stay the same at the next application launch. If you really want a data breakpoint to be active again, re-enable it manually. */ @@ -313,7 +366,7 @@ \image qtcreator-locals.png {Locals view} - Whenever a program stops under the control of the debugger, it retrieves + Whenever an application stops under the control of the debugger, it retrieves information about the topmost stack frame and displays it in the \uicontrol {Locals} view. The \uicontrol Locals pane shows information about parameters of the function in that frame as well as the @@ -321,6 +374,35 @@ function after pressing \key {Shift+F11}, the \uicontrol {Return Value} pane displays the value returned by the function. + You can expand the view contents to check that your application sets a + local value correctly. + + \if defined(qtcreator) + \section1 Locals View Actions + + Right-click the \uicontrol Locals view to select the following actions: + + //! [0] + \list + \li Add and remove expression evaluators + \li Change value display format + \li Expand and collapse view contents + \li Copy view contents or expression values to the clipboard + \li Open view contents in an editor + \li Open memory editor + \li Set data breakpoints + \li Use \l{Using Debugging Helpers}{debugging helpers} + \li Show tooltips in the \uicontrol Locals view when debugging + \li Dereference pointers automatically + \li Sort members of classes and structs alphabetically + \li Use dynamic object type for display + \li Set \l{Debugger Preferences}{debugger preferences} + \endlist + //! [0] + \endif + + \section1 Selecting Object Type for Display + When using GDB, you can specify whether the dynamic or the static type of objects will be displayed. Select \uicontrol {Use dynamic object type for display} in the context menu. Keep in mind that choosing the dynamic type @@ -339,45 +421,88 @@ \title Evaluating Expressions To compute values of arithmetic expressions or function calls, use - expression evaluators in the \uicontrol Expressions view. To insert a new - expression evaluator, either double-click on an empty part of the - \uicontrol {Expressions} or \uicontrol {Locals} view, or select - \uicontrol {Add New Expression Evaluator} from the context menu, or drag and - drop an expression from the code editor. + 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 + \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. - \image qtcreator-debugger-expressions.png {Expressions view} + \image qtcreator-debugger-expressions.webp {Expressions view} + + \section1 Adding Expression Evaluators + + To add expression evaluators, drag an expression from the code editor + to the \uicontrol Expressions view. + + You can also: + + \list + \li Double-click in the \uicontrol {Expressions} or + \l {Local Variables and Function Parameters}{Locals} view. + \li Select \uicontrol {Add New Expression Evaluator} from the context + menu. + \endlist + + Enter the expression in the \uicontrol {New Evaluated Expression} dialog: + + \image qtcreator-debugger-new-evaluated-expression.webp {New Evaluated Expression dialog} + + \omit + ## Visible in the context menu, but does not currently work. + + To insert widgets into expression evaluators, select a + widget in the debugged application and then select + \uicontrol {Select Widget to Add into Expression Evaluator} + in the context menu. + \endomit + + The set of evaluated expressions is saved in your session. \note Expression evaluators are powerful, but slow down debugger operation - significantly. It is advisable to not use them excessively, and to remove - unneeded expression evaluators as soon as possible. + significantly. Use them sparingly and remove them when you no longer need + them. Expression evaluators are re-evaluated whenever the current frame changes. - Note that functions used in the expressions are called each time, even if + 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 + + \section1 JavaScript Expressions + The QML debugger can evaluate JavaScript expressions. \if defined(qtcreator) + + \section1 C and C++ Expressions + GDB, LLDB and CDB support the evaluation of simple C and C++ expressions. Functions can be called only if they are actually compiled into the debugged - executable or a library used by the executable. Most notably, inlined + executable or a library used by the executable. Inlined functions such as most \c{operator[]} implementations of standard containers are typically \e{not} available. - When using GDB or LLDB as backend, a special ranged syntax can be used to + 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]}. - Compound variables of struct or class type are displayed as expandable in - the view. Expand entries to show all members. Together with the display of - value and type, you can examine and traverse the low-level layout of object - data. + 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. 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} view to show + \uicontrol {Locals} and \uicontrol {Expressions} views to show unexpected data. The debug information from GCC does not include enough @@ -388,8 +513,6 @@ \uicontrol {not in scope}. Not all uninitialized objects, however, can be recognized as such. - \note The set of evaluated expressions is saved in your session. - \section1 Inspecting Basic Qt Objects The most powerful feature of the debugger is that the \uicontrol {Locals} @@ -416,7 +539,7 @@ You can use the \uicontrol {Locals} and \uicontrol {Expressions} view to change the contents of variables of simple data types, for example, \c int, \c float, - \c QString and \c std::string when the program is interrupted. To do so, + \c QString and \c std::string when the application is interrupted. To do so, click the \uicontrol Value column, modify the value with the inplace editor, and press \key Enter (or \key Return). 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 b97be123a3a..ab0aff0f548 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger-settings.qdoc @@ -18,12 +18,12 @@ \l{Specifying Breakpoint Settings}{specify settings for breakpoints}, and map source paths to target paths. - You can view debug output in the \uicontrol {Debugger Log} view. + You can view debug output in the \l {Debugger Log} view. However, in some Linux distributions, such as Arch Linux, debug output is sent to the system log. To override this behavior, select the \uicontrol {Force logging to console} check box. This sets \c QT_LOGGING_TO_CONSOLE=1 in the environment of the debugged - program, which effectively prevents storing debug output in + application, which effectively prevents storing debug output in system logs. \section1 Mapping Source Paths @@ -96,7 +96,7 @@ future, select the \uicontrol {Use automatic symbol cache} check box. To execute GDB commands after GDB has been started, but before the debugged - program is started or attached, and before the debugging helpers are + application is started or attached, and before the debugging helpers are initialized, enter them in the \uicontrol {Additional Startup Commands} field. diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger-setup.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger-setup.qdoc index ca68d35d377..d457abc4f97 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger-setup.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger-setup.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // ********************************************************************** @@ -15,48 +15,57 @@ \title Setting Up Debugger - The main debugger settings are associated with the - \l{glossary-buildandrun-kit}{kit} you build and run your project with. To + The main debugger preferences are associated with the + \l{Adding Kits}{kit} you build and run your project with. To specify the debugger and compiler to use for each kit, select \uicontrol Edit > \uicontrol Preferences > \uicontrol Kits. + \image qtcreator-kits.png {Kits preferences} + You need to set up the debugger only if the automatic setup fails because - the native debugger is missing (as is usually the case for the CDB debugger - on Windows, which you always must install yourself) or because the installed - version is not supported. For example, when your system does not have GDB + the native debugger is missing (for example, you must install the CDB + debugger on Windows yourself) or because \QC does not support the installed + version. For example, when your system does not have GDB installed or the installed version is outdated, and you want to use a locally installed replacement instead. - \note If you need to change the debugger to use for an automatically - detected \l{glossary-buildandrun-kit}{kit}, you can \uicontrol Clone the - kit and change the parameters in the clone. Make sure to select the cloned - kit for your project. + To change the debugger in an automatically detected kit, select + \uicontrol Edit > \uicontrol Preferences > \uicontrol Kits > + \uicontrol Clone to create a copy of the kit, and change the + parameters in the cloned kit. Make sure to enable the cloned kit + for your project. If the debugger you want to use is not automatically detected, select \uicontrol Edit > \uicontrol Preferences > \uicontrol Kits > \uicontrol Debuggers > \uicontrol Add to add it. - \note To use the debugging tools for Windows, you must install them and add - the Microsoft Symbol Server to the symbol search path of the - debugger. For more information, see \l{Setting CDB Paths on Windows}. + \image qtcreator-preferences-kits-debuggers.webp {Debuggers tab in Kits preferences} + + To use the debugging tools for Windows, you must install them. + Optionally, you can set up the Microsoft Symbol Server if you need + symbol information from Microsoft modules that is not found locally. + For more information, see \l{Setting CDB Paths on Windows}. - \note To use the Free Software Foundation (FSF) version of GDB on \macos, you - must sign it and modify your \l{glossary-buildandrun-kit}{kit} settings. + To use the Free Software Foundation (FSF) version of GDB on \macos, you + must sign it and modify your kit preferences. - This section describes the options you have for debugging C++ code and - installing the supported native debuggers. It also - applies for code in other compiled languages such as C, FORTRAN, Ada. + This section describes the options you have for debugging C++ and Python code + and installing the supported native debuggers. It also + applies to code in other compiled languages such as C, FORTRAN, and Ada. - For more information on the debugger modes, see - \l{Launching the Debugger in Different Modes}. + For more information about launching the debugger in different modes, see + \l{Debugger Operating Modes}. \section1 Supported Native Debugger Versions - \QC supports native debuggers when working with compiled code. On - most supported platforms, the GNU Symbolic Debugger GDB can be used. On - Microsoft Windows, when using the Microsoft tool chain, the Microsoft - Console Debugger CDB is needed. On \macos and Linux, the LLDB debugger - can be used. + \QC supports native debuggers for debugging compiled code. + On most supported platforms, you can use the GNU Symbolic Debugger (GDB). + On Microsoft Windows, when using the Microsoft tool chain, you need the + Microsoft Console Debugger (CDB). On \macos and Linux, you can use the LLDB + debugger. On all supported platforms, you can use PDB to debug Python source + code. + + \note You need a debugger version built with Python scripting support. The following table summarizes the support for debugging C++ code: @@ -89,28 +98,26 @@ \section2 Supported GDB Versions - Starting with version 3.1, \QC requires the Python scripting extension. GDB - builds without Python scripting are not supported anymore and will not work. - The minimum supported version is GDB 7.5 using Python version 2.7, or 3.3, - or newer. + Use GDB 7.5, or later, with the Python scripting extension and Python version + 3.3, or later. For remote debugging using GDB and GDB server, the minimum supported version of GDB server on the target \l{glossary-device}{device} is 7.0. \section2 Supported CDB Versions - All versions of CDB targeting platforms supported by Qt are supported by - \QC. + \QC supports all versions of CDB targeting platforms that Qt supports. \section2 Supported LLDB Versions The LLDB native debugger has similar functionality to the GDB debugger. LLDB - is the default debugger in Xcode on \macos for supporting C++ on the desktop. + is the default debugger in Xcode on \macos for C++ on the desktop. LLDB is typically used with the Clang compiler (even though you can use it with GCC, too). On \macos you can use the LLDB version delivered with Xcode or build from source. - The minimum supported version is LLDB 320.4. + The minimum supported version is LLDB 320.4. You need a LLDB version built + with Python support. On Linux, the minimum supported version is LLDB 3.8. @@ -182,22 +189,15 @@ the required files in \c{"%ProgramFiles%\Debugging Tools for Windows"}. - \section3 Symbol Server - - We highly recommend that you add the Microsoft Symbol Server to the - symbol search path of the debugger. The Symbol Server has debugging - information for the operating system libraries for debugging Windows - applications. For more information, see \l{Setting CDB Paths on Windows}. - \section2 Debugging Tools for \macos The Qt binary distribution has both debug and release - variants of the libraries. But you have to explicitly tell the + variants of the libraries. However, you have to explicitly tell the runtime linker that you want to use the debug libraries even if your application is compiled as debug, as release is the default library. - If you use a qmake based project in \QC, you can set a flag in + If you use a qmake based project in \QC, you can set a flag in your \l{glossary-run-config}{run configuration}, in \uicontrol Projects mode. In the run configuration, select \uicontrol{Use debug version of frameworks}. @@ -210,6 +210,27 @@ We recommend using the LLDB version that is delivered with the latest Xcode. + \section2 PDB + + \l{https://docs.python.org/3/library/pdb.html}{PDB} is a source code debugger + for Python applications. You can use it to debug projects that have a + \l {Creating Widget-Based Qt for Python Applications}{.pyproject} + configuration file. + + You must install Python and set the interpreter to use in \uicontrol Projects + > \uicontrol Run: + + \image qtcreator-run-settings-python.webp {Run settings for a Python project} + + Start debugging the \c main.py file. If you encounter problems, check the + active build target in the kit selector. + + \QC does not support mixed-mode debugging, but you can attach GDB to the + Python interpreter to debug the C++ implementation of the corresponding + Python code. For more information, see + \l{https://doc.qt.io/qtforpython-6/tutorials/debugging/qtcreator/qtcreator.html} + {Debugging PySide with Qt Creator (Linux)}. + \section1 Setting up FSF GDB for \macos To use FSF GDB on \macos, you must sign it and add it to the \QC @@ -264,7 +285,7 @@ (\c $HOME/gdb72/bin/fsfgdb, but with an explicit value for \c $HOME). - \li To use the debugger, add the kit in the \uicontrol {Build Settings} + \li To use the debugger, enable the kit in the \uicontrol {Build Settings} of the project. \endlist diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc index 17d03346c39..a5e49e3749f 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc @@ -35,7 +35,7 @@ low level virtual machine (LLVM) project, LLDB. \li Debug QML and Java code and Qt Quick applications - QML/JavaScript debugger. - \li Debug Python source code - \c pdb. + \li Debug Python source code - PDB. \endlist The following sections describe how to set up, launch, and interact with the @@ -130,44 +130,47 @@ debugger, select the \inlineimage icons/qtcreator-debug-button.png (\uicontrol {Start Debugging of Startup Project}) button or press \key F5. - \QC checks whether the compiled program is up-to-date, and rebuilds and + \QC checks whether the compiled application is up-to-date, and rebuilds and deploys it if you set the \uicontrol {Build before deploying} field to build the whole project or the application to run and select he \uicontrol {Always deploy before running} check box in \uicontrol Edit > \uicontrol Preferences > \uicontrol {Build & Run} > - \uicontrol General. To debug the program without deploying + \uicontrol General. To debug the application without deploying it, select \uicontrol Debug > \uicontrol {Start Debugging} > \uicontrol {Start Debugging Without Deployment}. - The debugger then takes over and starts the program with suitable + The debugger then takes over and starts the application with suitable parameters. When using GDB or CDB as debug backend, you can specify additional commands - to execute before and after the backend and debugged program are started or + to execute before and after the backend and debugged application are started or attached in \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger > \uicontrol GDB and \uicontrol CDB. For more information, see \l{Debugger Preferences}. - To allow reading the user's default .gdbinit file on debugger startup, + To let the debugger read the user's default .gdbinit file when it starts, select the \uicontrol {Load .gdbinit file on startup} check box in GDB settings. For more information, see \l{Specifying GDB Settings}. - \note Starting a C++ program in the debugger can take a long time, typically - in the range of several seconds to minutes if complex features are used. + \note Starting a C++ application under the control of the debugger can take + a long time. Typically, in the range of several seconds to minutes if you use + complex features. - \section1 Launching the Debugger in Different Modes + For \l {Creating Widget-Based Qt for Python Applications}{Python} projects, + start debugging the \c main.py file. If you encounter problems, check the + active build target in the \l{Building for Multiple Platforms}{kit selector}. + + \section1 Debugger Operating Modes The debugger plugin can run the native debuggers in various operating modes - depending on where and how the debugged process is started and run. Some of + depending on where and how you start and run the debugged process. Some of the modes are only available for a particular operating system or platform. In general, \key F5 and the \uicontrol {Start Debugging of Startup Project} - button are set up in a - way to start the operating mode that is commonly used in a given context. So - if the current project is set up as a C++ application using the \MinGW - toolchain targeting desktop Windows, the GDB engine will be started in Start - Internal mode. If the current project is a QML application using C++ - plugins, a "mixed" QML/C++ engine will be started, with the C++ parts being + button start the operating mode that fits the context. So, for a C++ + application that uses the \MinGW toolchain targeting desktop Windows, the GDB + engine starts in \e {start internal} mode. For a QML application that uses C++ + plugins, a \e mixed QML/C++ engine starts, with the C++ parts being handled by GDB and GDB server remote debugging. Change the run configuration parameters (such as @@ -179,24 +182,24 @@ \list - \li \b{Start Internal} to debug applications developed inside \QC such as - a Qt based GUI application. + \li \e{Start internal} to debug applications developed inside \QC, such as + a Qt Widgets-based application. - \li \b{Start External} to start and debug processes without a proper \QC + \li \e{Start external} to start and debug processes without a proper \QC project setup, either locally or on a remote machine. - \li \b{Attach} to debug processes already started and running outside + \li \e{Attach} to debug processes already started and running outside \QC, either locally or on a remote machine. - \li \b{Core} to debug crashed processes on Unix. + \li \e{Core} to debug crashed processes on Unix. - \li \b{Post-mortem} to debug crashed processes on Windows. + \li \e{Post-mortem} to debug crashed processes on Windows. \endlist - \section2 Launching in Start Internal Mode + \section2 Start Internal - Start Internal mode is the default start mode for most projects, including + Start internal mode is the default start mode for most projects, including all projects using a desktop Qt version and plain C++ projects. If you need a console window to operate your application, for example @@ -211,19 +214,19 @@ override the console set in the Windows system environment variables. Note that the native console does not prompt on application exit. - To launch the debugger in Start Internal mode, click the + To launch the debugger in start internal mode, click the \uicontrol {Start Debugging} button for the active project. You can specify breakpoints before or after launching the debugger. For more information, see \l{Setting Breakpoints}. - \section2 Launching in Start External Mode + \section2 Start External - You can debug any executable already present on your local or on a remote + You can debug any executable on your local or on a remote machine without using a project. You specify a build and run kit that identifies the device to debug the application on. - While this mode does not strictly require a project to be opened in \QC, + While this mode does not strictly require a project to be open in \QC, opening it makes setting breakpoints and stepping through the code easier. To start and debug an external application: @@ -261,7 +264,7 @@ configuration to use. \endlist - \section2 Launching in Attach Mode + \section2 Attach You can attach the debugger to applications that are already running or instruct the debugger to attach to an application when it starts. @@ -285,7 +288,7 @@ To terminate the selected process, select \uicontrol {Kill Process}. - While this mode does not strictly require a project to be opened in \QC, + While this mode does not strictly require a project to be open in \QC, opening it makes setting breakpoints and stepping through the code easier. You can specify breakpoints before or after attaching the debugger to the @@ -312,14 +315,14 @@ process to start. \endlist - \section2 Launching in Core Mode + \section2 Core - The Core mode is used to inspect \e {core} files (crash dumps) that are + Use the core mode to inspect \e {core} files (crash dumps) that are generated from crashed processes on Linux and Unix systems if the system is set up to allow this. To enable the dumping of core files on a Unix system, enter the following - command in the shell from which the application will be launched: + command in the shell from which the application is launched: \code ulimit -c unlimited @@ -350,12 +353,12 @@ the \c sysroot to use instead of the default \c sysroot. \endlist - Also in this mode, using a properly configured project that has the - sources of the crashed program is not strictly necessary, but helpful. + Even though using a properly configured project that has the sources of the + crashed application is not strictly necessary, it is helpful. - \section2 Launching in Post-Mortem Mode + \section2 Post-Mortem - The post-mortem mode is available only on Windows, if you have installed the + The post-mortem mode is available only on Windows, if you installed the debugging tools for Windows. The \QC installation program asks you whether you want to register \QC as a @@ -365,7 +368,7 @@ You can launch the debugger in the post-mortem mode if an application crashes on Windows. Click the \uicontrol {Debug in \QC} button in the error - message that is displayed by the Windows operating system. + message from the Windows operating system. */ /*! @@ -552,43 +555,35 @@ \title Debug Mode Views In the \uicontrol Debug mode, you can inspect the state of your - application while debugging. You can interact with the debugger - in many ways, including the following: + application while debugging. - \list + \image qtcreator-debugger-views.webp {Debug mode views while debugging} + + You can interact with the debugger in many ways: - \li Go through a program line-by-line or instruction-by-instruction. + \list - \li Interrupt running programs. + \li Interrupt running applications. \li Set breakpoints. + \li Step through an application line-by-line or + instruction-by-instruction. + \li Examine the contents of the call stack. \li Examine and modify contents of local and global variables. \li Examine and modify registers and memory contents of - the debugged program. + the debugged application. \li Examine the list of loaded shared libraries. \li Disassemble sections of code. \endlist - \QC displays the raw information from the native debuggers in a clear - and concise manner with the goal to simplify the debugging process as much - as possible without losing the power of the native debuggers. - - In addition to the generic IDE functionality of the stack view, views - for locals and expressions, registers, and so on, \QC includes features to - make debugging Qt-based applications easy. The debugger plugin understands - the internal layout of several Qt classes, for example, QString, the Qt - containers, and most importantly QObject (and classes derived from it), as - well as most containers of the C++ Standard Library and some GCC extensions. - It uses this deeper understanding to present objects of such classes in a - useful way. - - Interact with the program you are debugging in the following views. + The following table summarizes the \uicontrol Debug mode views with links to + more information. \table \header @@ -597,12 +592,14 @@ \li Learn More \row \li Stack - \li Examine the the nested function calls leading to the current position + \li Examine the nested function calls leading to the current position as a call stack trace. \li \l {Viewing Call Stack Trace} \row - \li Breakpoints - \li Set \e {breakpoints} with conditions make the application stop in + \li Breakpoint Preset + + Breakpoints + \li Set \e {breakpoints} with conditions to make the application stop in a controlled way. A \e {watchpoint} stops the application when the value of an expression changes. \li \l {Setting Breakpoints} @@ -635,9 +632,11 @@ \row \li Peripheral Registers \li View the current state of peripheral registers. - \li + \li \l {Peripheral Registers} \row - \li Debugger Log + \li Global Debugger Log + + Debugger Log \li View debug output to find out why the debugger does not work. The log view acts as a console, so you can send the contents @@ -645,7 +644,7 @@ native debugger. \li \l{Troubleshooting Debugger} - \l {Directly Interacting with Native Debuggers} + \l {Debugger Log} \row \li Disassembler \li View disassembled code for the current function. @@ -656,19 +655,22 @@ \li \l {Working in Edit Mode} \endtable + \note The \uicontrol Views menu shows some views only while you are + debugging. + \section1 Managing Debug Views - The availability of views depends on whether - you are debugging C++ or QML. Frequently used views are shown by - default and rarely used ones are hidden. To change the default settings, - select \uicontrol View > \uicontrol Views, and then select views to - display or hide. Alternatively, you can enable or disable views from the - context menu of the title bar of any visible debug mode view. + When you are not debugging, the \uicontrol Debug mode shows the + \uicontrol {Debugger Preset} perspective: + + \image qtcreator-debugger-views-initial.webp {Initial Debug mode views} - \image qtcreator-debugger-views.png {Debug mode views} + During debugging, the mode shows the views that you usually need to + debug C++ or QML applications. To show other views or to hide views, + select \uicontrol Views. - You can drag and drop the views in \QC to new positions on the screen. The - size and position of views are saved for future sessions. Select + You can drag the views in \QC to new positions on the screen. \QC saves the + size and position of views as a perspective for future sessions. Select \uicontrol View > \uicontrol Views > \uicontrol {Reset to Default Layout} to reset the views to their original sizes and positions. @@ -680,13 +682,18 @@ \section1 Customizing Debug Views - You can change the appearance and behavior of the debug views by specifying - settings in \uicontrol Preferences > \uicontrol Debugger. For example, you can: + To change the appearance and behavior of the debug views, set preferences + in \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger > + \uicontrol General. + + \image qtcreator-debugger-general-options.png {General tab in Debugger preferences} + + For example, you can: \list \li Use alternating row colors in debug views. \li Adopt font size changes from the main editor. - \li Have tooltips displayed in the main editor while you are debugging. + \li Show tooltips in the main editor while you are debugging. \li Close temporary source and memory views and switch to the previously used \QC mode when the debugger exits. \li Bring \QC to the foreground when the debugged application is @@ -703,17 +710,19 @@ \title Stopping Applications - Once the program starts running under the control of the debugger, it - behaves and performs as usual. You can interrupt a running C++ program by - selecting \uicontrol Debug > \uicontrol Interrupt. The program is - automatically interrupted when a breakpoint is hit. + Once the application starts running under the control of the debugger, it + behaves and performs as usual. + + To interrupt a running C++ application, select \uicontrol Debug > + \uicontrol Interrupt. The debugger automatically interrupts + the application when it hits a \l {Setting Breakpoints}{breakpoint}. - Once the program stops, \QC: + Once the application stops, \QC: \list \li Retrieves data representing the \l{Viewing Call Stack Trace} - {call stack} at the program's current position. + {call stack} at the application's current position. \li Retrieves the contents of \l{Local Variables and Function Parameters} {local variables}. @@ -725,6 +734,8 @@ {Disassembler} views if you are debugging C++ based applications. \endlist + You can \l{Examining Data}{Examine} and change variables, set or remove + breakpoints, and then continue running the application. */ /*! @@ -753,7 +764,7 @@ \li To leave the current function or subfunction, press \key {Shift+F11} (\key {Command+Shift+T} on \macos). - \li To continue running the program, press \key F5. + \li To continue running the application, press \key F5. \li To run to the line that has the cursor, press \key {Ctrl+F10} (\key {Shift+F8} on \macos). @@ -763,7 +774,7 @@ \endlist - You can continue executing the program until the current + You can continue executing the application until the current function completes or jump to an arbitrary position in the current function. \section1 Stepping Into Code @@ -849,15 +860,15 @@ \omit \section2 Creating Snapshots - A snapshot has the complete state of the debugged program at a time, + A snapshot has the complete state of the debugged application at a time, including the full memory contents. - To create snapshots of a debugged program, select \uicontrol {Create Snapshot} + To create snapshots of a debugged application, select \uicontrol {Create Snapshot} in the context menu in the \uicontrol {Debugger Perspectives} view. Double-click on entries in the \uicontrol {Debugger Perspectives} view to switch between snapshots. The debug mode views are updated to reflect the state - of the program at time of taking the snapshot. + of the application at time of taking the snapshot. \note Creating snapshots involves creating core files of the debugged process, requiring significant amount of disk space. For details, see @@ -873,10 +884,24 @@ \title Viewing Threads - If a multi-threaded program is interrupted, the \uicontrol Threads view or - the combobox named \uicontrol Threads in the debugger status bar can be used - to switch from one thread to another. The \uicontrol Stack view adjusts - itself accordingly. + An application can have more than one thread of execution that share one + address space, which means that they can examine and change the same + variables. However, each thread has its own registers, execution stack, + and possibly private memory. + + When a multi-threaded application is interrupted, you can view the threads + currently active in the application and switch between them in the + \uicontrol Threads view (1): + + \image qtcreator-debugger-threads.webp {Threads view} + + You can also select a thread in the \uicontrol Threads field (2) on the + debugger toolbar. + + This allows you to select the thread that is in the focus of the debugger. + + The \l {Viewing Call Stack Trace}{Stack} view adjusts its contents + accordingly. */ /*! @@ -887,38 +912,59 @@ \title Viewing Modules The \uicontrol Modules view displays information that the debugger plugin - has about modules included in the application that is being debugged. A - module is a dynamic link library (\c {.dll}) in Windows, a shared object - (\c {.so}) in Linux, and a dynamic shared library (\c {.dylib}) in \macos. + has about modules included in the application that is being debugged. + + A module is: + + \list + \li A dynamic link library (\c {.dll}) in Windows + \li A shared object (\c {.so}) in Linux + \li A dynamic shared library (\c {.dylib}) in \macos + \endlist + + \image qtcreator-debugger-modules.webp {Modules view} In addition, the view displays symbols within the modules and indicates - where each module was loaded. + where each module was loaded. Right-click column headers to show and + hide columns in the view. - Right-click the view to open a context menu that has menu items for: + Right-click the view to select the following actions: \list - \li Updating the module list + \li Update the module list + + \li Show source files for a module + + \li Show dependencies between modules (Windows only) - \li Loading symbols for modules + \li Load symbols for modules - \li Examining modules + \li Examine modules - \li Editing module files + \li Edit module files - \li Showing symbols in modules + \li Show symbols in modules - \li Showing dependencies between modules (Windows only) + \li Show sections in modules + + \li Set \l{Debugger Preferences}{debugger preferences} \endlist - By default, the \uicontrol Modules view is hidden. + By default, the \uicontrol Modules view is hidden. To show it, select it in + \uicontrol Views on the debugger toolbar. + + \section1 Breaking on Loading Modules in CDB When using CDB as debug backend, you can specify that the debugger should break when application modules are loaded or unloaded. To enable breaking for the specified modules, select \uicontrol Edit > \uicontrol Preferences > - \uicontrol Debugger > \uicontrol CDB. For more information, see - \l{Specifying CDB Settings}. + \uicontrol Debugger > \uicontrol CDB. + + \image qtcreator-cdb-options.png {CDB tab in Debugger preferences} + + For more information, see \l{Specifying CDB Settings}. */ /*! @@ -933,56 +979,170 @@ the source file is actually part of the project, or whether it was compiled elsewhere. The view shows the path to each file in the file system. - Right-click the view to open a context menu that has menu items for - reloading data and opening files. + \image qtcreator-debugger-source-files.webp {Source Files view} + + Right-click the view to select the following actions: + + \list + \li Reload data + \li Open the selected file + \li Set \l{Debugger Preferences}{debugger preferences} + \endlist + + By default, the \uicontrol {Source Files} view is hidden. To show it, select + it in \uicontrol Views on the debugger toolbar. + + \section1 External Sources To enable the debugger to step into the code and display the source code when using a copy of the source tree at a location different from the one at which the libraries were built, you can map source paths to target - paths. For more information, see \l{Mapping Source Paths}. + paths in \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger > + \uicontrol General: + + \image qtcreator-debugger-general-options.png {General tab in Debugger preferences} - By default, the \uicontrol {Source Files} view is hidden. + For more information, see \l{Mapping Source Paths}. */ /*! \page creator-registers-view.html \previouspage creator-expressions-view.html - \nextpage creator-debugger-log-view.html + \nextpage creator-peripheral-registers-view.html \title Viewing and Editing Register State - The \uicontrol Registers view displays the current state of the CPU registers. - Depending on the CPU type, there will be different registers available. The - values of registers that recently have changed are highlighted in red and empty - register values as well as leading zeroes are grayed out. + \e {Machine code} consists of machine language instructions that make the CPU + perform tasks, such as load or store, on units of data in the CPU's registers + or memory. + + The \uicontrol Registers view displays the current state of general-purpose + and special-purpose CPU registers. The available registers depend on the CPU + type. + + \image qtcreator-debugger-registers-view.webp {Registers view} - In addition it is possible to edit the content of registers while the program is - stopped. This applies to both General-purpose and Special-purpose registers. - Registers can be edited in the standard condensed view or in their particular parts - if the register is displayed expanded. + You can view register values when the application stops. Double-click + register values to edit them. - By default, the \uicontrol Registers view is hidden. + The values of registers that recently changed are highlighted in red. Empty + register values and leading zeroes are grayed out. + + Right-click column headers to show and hide the \uicontrol Name and + \uicontrol Value columns in the view. + + Right-click the view to select the following actions: + + \list + \li Reload register list. + \li Open \l {Examining Memory}{Memory Editor} at the selected value. + \li Open the \l {Viewing Disassembled Code}{Disassembler} view. + \li Display a value in hexadecimal, decimal, octal, or binary format. + \li Set \l{Debugger Preferences}{debugger preferences}. + \endlist + + By default, the \uicontrol Registers view is hidden. To show it, select it in + \uicontrol Views on the debugger toolbar. + + \section1 Examining Memory + + You can examine memory in many formats, independently of the application's + data types. + + To open the memory editor, select a value \uicontrol Registers view, + and then select \uicontrol {Open Memory Editor at <value>} or + \uicontrol {Open Memory View at <value>} in the context menu: + + \image qtcreator-debugger-memory-editor.webp {Memory Editor} + + Hover the mouse pointer on a value to see details as a tooltip. + + Right-click a value to: + + \list + \li Copy the selection in ASCII or hexadecimal format. + \li Set a data breakpoint on the selection. + \li Jump to the selected address in the current data view or a new one. + \endlist */ /*! - \page creator-debugger-log-view.html + \page creator-peripheral-registers-view.html \previouspage creator-registers-view.html + \nextpage creator-debugger-log-view.html + + \title Peripheral Registers + + The \uicontrol {Peripheral Registers} view displays the current state of + peripheral devices, such as a mouse, keyboard, display, printer, or USB + drive. Applications write registers to send information to the device and + read them to get information from the device. To read registers in a + peripheral device, the application accesses its I/O addresses with a load + or store instruction that the CPU issues. + + \image qtcreator-debugger-peripheral-registers-view.webp {Peripheral Registers view} + + The \uicontrol Access column shows whether the register is read-and-write + (\uicontrol RW), read-only (\uicontrol RO), or write-only (\uicontrol WO). + \uicontrol N/A means that the access type is not available. + + Right-click column headers to show and hide columns in the view. + + Right-click the view to select the following actions: + + \list + \li View register groups. + \li Set \l{Debugger Preferences}{debugger preferences}. + \endlist + + By default, the \uicontrol {Peripheral Registers} view is hidden. To show it, + select it in \uicontrol Views on the debugger toolbar. +*/ + +/*! + \page creator-debugger-log-view.html + \previouspage creator-peripheral-registers-view.html \nextpage creator-disassembler-view.html - \title Directly Interacting with Native Debuggers + \title Debugger Log + + You can view debug output in the \uicontrol {Debugger Log} view to + \l {Debugger Does Not Work}{troubleshoot the debugger}. + + \image qtcreator-debugger-log-view.webp {Debugger Log view} + + If debug output is sent to the system log, select \uicontrol Edit > + \uicontrol Preferences > \uicontrol Debugger > \uicontrol General > + \uicontrol {Force logging to console} check box. + + Right-click the view to select the following actions: + + \list + \li Copy, paste, cut, and delete log contents. + \li Undo and redo editing actions. + \li Select all log contents. + \li Clear log contents. + \li Save log contents as a file. + \li Log time stamps. + \li Reload debugging helpers after \l{Adding Custom Debugging Helpers} + {adding custom debugging helpers}. + \li Set \l{Debugger Preferences}{debugger preferences}. + \endlist + + \section1 Directly Interacting with Native Debuggers + + You can use the left pane of the \uicontrol {Debugger Log} view to directly + interact with the command line of the native debugger. - In some cases, it is convenient to directly interact with the command line - of the native debugger. In \QC, you can use the left pane of the - \uicontrol {Debugger Log} view for that purpose. When you press - \key {Ctrl+Enter}, the contents of the line under the text cursor are sent - directly to the native debugger. Alternatively, you can use the line edit at - the bottom of the view. Output is displayed in the right pane of the - \uicontrol {Debugger Log} view. + Press \key {Ctrl+Enter} to send the contents of the line under the + text cursor to the native debugger. Or, enter the command in the + \uicontrol Command field. The right side pane of the + \uicontrol {Debugger Log} view shows the command output. \note Usually, you do not need this feature because \QC offers better ways to handle the task. For example, instead of using the GDB \c print command from the command line, you can evaluate an expression in - the \uicontrol {Expressions} view. + the \l {Evaluating Expressions}{Expressions} view. */ /*! @@ -992,22 +1152,38 @@ \title Viewing Disassembled Code - The \uicontrol Disassembler view displays disassembled code for the current - function. + A \e disassembler translates machine language into assembly language for + human-readability. - The \uicontrol Disassembler view is useful for low-level commands for checking - single instructions, such as \uicontrol {Step Into} and \uicontrol {Step Over}. - By default, the \uicontrol Disassembler view is hidden. + The \uicontrol Disassembler view displays disassembled code for the current + function. It is useful for low-level commands for checking single + instructions, such as \uicontrol {Step Into} and \uicontrol {Step Over}. - To access the \uicontrol Disassembler view, check - \uicontrol Debug > \uicontrol {Operate by Instruction} while the debugger is - running. Alternatively, click the - \inlineimage icons/debugger_singleinstructionmode.png - (\uicontrol {Operate by Instruction}) tool button on the debugger tool bar. + \image qtcreator-debugger-disassembler-view.webp {Disassembler view} By default, GDB shows AT&T style disassembly. To switch to the Intel style, select \uicontrol Edit > \uicontrol Preferences > \uicontrol Debugger > \uicontrol GDB > \uicontrol {Use Intel style disassembly}. + + To open the \uicontrol Disassembler view: + + \list + \li Select \uicontrol Debug > \uicontrol {Operate by Instruction} while + the debugger is running. + \li Select the \inlineimage icons/debugger_singleinstructionmode.png + (\uicontrol {Operate by Instruction}) tool button on the debugger + toolbar. + \li In the \l {Viewing and Editing Register State}{Registers} view, + select a value, and then select \uicontrol {Open Disassembler at <value>} + in the context menu. + \endlist + + \section1 Starting Disassembler + + To start a disassembler from the \uicontrol Registers view, select + \uicontrol {Open Disassembler} and set the disassembler address: + + \image qcreator-debugger-select-start-address.webp {Select Start Address dialog} */ /*! @@ -1154,7 +1330,7 @@ The custom debugging helpers will be automatically picked up from \c personaltypes.py when you start a debugging session in \QC or select \uicontrol {Reload Debugging Helpers} from the context menu of the - \uicontrol {Debugger Log} view. + \l {Debugger Log} view. \section2 Debugging Helper Overview @@ -1700,7 +1876,7 @@ \li In the \uicontrol Debug mode, select \uicontrol View > \uicontrol Views > \uicontrol {Debugger Log} to open the - \uicontrol {Debugger Log} view. Browse the contents of the pane on + \l {Debugger Log} view. Browse the contents of the pane on the right hand side to find out what went wrong. Always attach the contents of the pane to debugger-related questions to the \QC mailing list ([email protected]) or paste them to a @@ -1758,7 +1934,7 @@ \section2 Disabling Incremental Linking - Incremental linking can affect debugging. If the debugger log has + Incremental linking can affect debugging. If the \l {Debugger Log} view shows the \e {Unable to verify checksum of module} message, disable incremental linking. diff --git a/doc/qtcreator/src/docker/creator-docker.qdoc b/doc/qtcreator/src/docker/creator-docker.qdoc index d0123a2cdd5..67604dae44a 100644 --- a/doc/qtcreator/src/docker/creator-docker.qdoc +++ b/doc/qtcreator/src/docker/creator-docker.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -25,11 +25,9 @@ {debuggers} and \l{Adding Qt Versions}{Qt versions}, in the Docker container and creates kits for the devices. - You can use images that are available locally. You can pull - images from Docker hub or other registries using the + To pull images from Docker hub or other registries, use the \l{https://docs.docker.com/engine/reference/commandline/pull/}{docker pull} - command. To check that an image is available locally, run the - \c {docker images} command in a terminal. + command. \section1 Enabling Docker Plugin @@ -54,22 +52,46 @@ \uicontrol {Docker Device} > \uicontrol {Start Wizard} to search for images in your local Docker installation. \li Select the Docker image to use, and then select \uicontrol OK. - \li In \uicontrol Devices, check and modify Docker device preferences. - \image qtcreator-preferences-devices-docker-device.webp "Docker device preferences" - \li Select \uicontrol {Run as outside user} to use the user ID - and group ID of the user running \QC in the Docker container. - \li Select \uicontrol {Do not modify entry point} to stop \QC from - modifying the entry point of the image if the image starts into - a shell. - \li In \uicontrol {Paths to mount}, specify host directories to - mount into the container, such as the project directory. - \li In \uicontrol {Search locations}, select where to search - for kit items. - \li Select \uicontrol {Auto-detect Kit Items} to find kit items and to - create kits for the Docker device. + \li In \uicontrol Devices, check and change Docker device preferences. + \image qtcreator-preferences-devices-docker-device.png "Docker device preferences" \li Select \uicontrol Apply to save your changes. \endlist + The following table summarizes the options you can set. + + \table + \header + \li Option + \li Value + \row + \li \uicontrol {Run as outside user} + \li On Linux and \macos, sets the user ID and group ID of the user + running \QC in the Docker container. This option is not available + on Windows. + \row + \li \uicontrol {Do not modify entry point} + \li Stops \QC from modifying the \l {Modifying Entry Points}{entry point} + of the image. Make sure that the entry point starts a shell. + \row + \li \uicontrol {Enable flags needed for LLDB} + \li Adds the following flags to the container to allow LLDB to run: + \badcode + --cap-add=SYS_PTRACE --security-opt seccomp=unconfined + \endcode + \row + \li \uicontrol {Clangd executable} + \li The path to a remote Clangd executable to use for a remote code + model. + \row + \li \uicontrol {Paths to mount} + \li Host directories to \l{Specifying Paths to Mount}{mount} into the + container, such as the project directory. + \row + \li \uicontrol {Search locations} + \li Where to \l{Auto-detecting Kit Items}{automatically detect} kit + items. + \endtable + The following sections describe the Docker device preferences in more detail. \section2 Selecting Docker Images diff --git a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc index 48ba10de30d..46b8781c08a 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -10,7 +10,7 @@ \QC supports both \e {code based tests} and \e {build system based tests}. Code based testing offers special handling for particular testing - frameworks that is strongly tied to the underlying code models or + frameworks that strongly ties to the underlying code models or specialized parsers. Build system based testing is independent from any testing frameworks. It retrieves information directly from the underlying build system and uses it or even the build system as such to execute the @@ -20,14 +20,14 @@ applications and libraries: \list - \li \l{https://www.boost.org/doc/libs/1_70_0/libs/test/doc/html/index.html} + \li \l{https://www.boost.org/doc/libs/1_81_0/libs/test/doc/html/index.html} {Boost.Test} \li \l{https://github.com/catchorg/Catch2}{Catch2 test framework} \li \l{https://github.com/google/googletest}{Google C++ Testing Framework} \li \l{Qt Test} framework \endlist - \QC offers additional build system based support for + In addition, \QC offers build system based support for \l{https://cmake.org/cmake/help/latest/manual/ctest.1.html}{CTest}. You can use \QC to create, build, and run code based tests for your @@ -37,7 +37,7 @@ \section1 Build System Based Tests - The handling of build system based tests is disabled by default to avoid + By default, \QC does not handle build system based tests to avoid interference with code based parsers. To enable build system based tests, select the respective test tool in \uicontrol Preferences > \uicontrol Testing > \uicontrol General. @@ -47,12 +47,12 @@ The information in the tests tree is usually more detailed when using code based tests. - If you have enabled code based and build system based tests together you + If you enable both code based and build system based tests, you may duplicate tests inside the tests tree. See also \l {Selecting Tests to Run}. \section1 Creating Tests - You can use a wizard to create projects that have tests. + Use a wizard to create projects that have tests. \section2 Creating Qt and Qt Quick Tests @@ -75,7 +75,7 @@ \li For a Qt test, select the \uicontrol {GUI Application} check box to create a Qt application. - \image qtcreator-autotests-project-qt-test.png "Autotest project wizard - Qt Test" + \image qtcreator-autotests-project-qt-test.png {Autotest project wizard - Qt Test} \li In the \uicontrol {Test case name} field, enter a name for the test case. @@ -86,15 +86,15 @@ \li For a Qt Quick test, select the \uicontrol {Generate setup code} check box to execute C++ - code before any of the QML tests are run. The testing + code before running any of the QML tests. The testing framework will call slots and invocable functions, as described in \l{Executing C++ Before QML Tests}. - \image qtcreator-autotests-project-qtquick-test.png "Autotest project wizard - Qt Quick Test" + \image qtcreator-autotests-project-qtquick-test.png {Autotest project wizard - Qt Quick Test} \li Select the \uicontrol {Generate initialization and cleanup - code} checkbox to add functions to your test that are - executed by the testing framework to initialize and clean + code} checkbox to add functions to your test that the + testing framework executes to initialize and clean up the test. \li In the \uicontrol {Build system} field, select the build @@ -159,10 +159,10 @@ \section2 Creating Boost Tests To build and run Boost tests, you must have the Boost.Test installed on the - development host. Typically, it is installed when you install Boost. You can + development host. Typically, the Boost installation includes it. You can download Boost from \l{https://www.boost.org/}{Boost.org}. - If Boost libraries can be found by the used compiler and build system, you + If the compiler and build system can find the Boost libraries, you do not need to specify the include directory when creating the test. To create a Boost test: @@ -183,28 +183,27 @@ the test case. \li In the \uicontrol {Boost include dir (optional)} field, enter the path to the directory that has files needed - by Boost.Test, such as \e version.hpp and a subfolder called - \e test that has the test header files. + by Boost.Test, such as \e version.hpp and the \e test + subfolder that contains the test header files. \li In the \uicontrol {Build system} field, select the build system to use for building the project: qmake, CMake, or Qbs. \endlist \endlist - \QC creates the test in the specified project directory. + \QC creates the test in the project directory. For more information about creating Boost tests, see - \l{https://www.boost.org/doc/libs/1_70_0/libs/test/doc/html/index.html} + \l{https://www.boost.org/doc/libs/1_81_0/libs/test/doc/html/index.html} {Boost.Test}. \section2 Creating Catch2 Tests - To build and run Catch2 tests, you either must have Catch2 libraries and - headers installed, or you can use the single include header file in the + To build and run Catch2 tests, you can either install Catch2 + libraries and headers or use the single include header file in the Catch2 repository. - If the Catch2 headers can be found by the used compiler and build system - automatically, you do not need to specify the include directory when - creating the test. + If the compiler and build system can find the Catch2 headers automatically, + you do not need to specify the include directory when creating the test. To create a basic Catch2 test: @@ -219,9 +218,9 @@ \li In the \uicontrol {Test framework} field, select \uicontrol {Catch2}. \li In the \uicontrol {Test case name} field, specify a name - to be used for the test case file. + for the test case file. \li Select the \uicontrol {Use Qt libraries} check box - to use a self defined main function and set up the project + to use a self-defined main function and set up the project to use Qt features. \li In the \uicontrol {Catch2 include directory (optional)} field, you may enter a path to the directory that has the @@ -232,36 +231,34 @@ \endlist \endlist - \QC creates the test in the specified project directory. + \QC creates the test in the project directory. For more information about creating Catch2 tests, see \l{https://github.com/catchorg/Catch2/blob/master/docs/Readme.md} {Catch2}. \section2 Creating CTest Based Tests - CTest can execute tests for CMake based projects - and is not limited to a special test framework. - You simply configure tests inside the project files, usually CMakeLists.txt. - Basically this is done by enabling testing for the project and registering - the test applications or even special commands. + CTest can execute tests for CMake based projects regardless of the test + framework. You configure tests in the project file, usually, CMakeLists.txt. + Basically, you enable testing for the project and register the test + applications or even special commands. \code enable_testing() add_test(NAME test_example COMMAND test_example) \endcode - \c test_example must of course be added as an executable before trying to - register it as test or it may be any command that can be executed including - arguments. + Add \c test_example as an executable before trying to register it as test. + It may be any executable command including arguments. For detailed information on how to use CTest see \l{https://gitlab.kitware.com/cmake/community/-/wikis/doc/ctest/Testing-With-CTest} {Testing with CTest}. \section1 Setting Up the Google C++ Testing Framework - To build and run Google tests, you must have the Google C++ Testing - framework installed and configured on the development host. You can either - clone it from Git Hub or install it from an installation package. + To build and run Google tests, install and configure the Google C++ Testing + framework on the development host. You can either clone it from Git Hub or + install it from an installation package. To configure a project to use a cloned Google testing framework, edit the \c INCLUDEPATH variable in the project file (.pro) to include the source @@ -275,8 +272,7 @@ \li \c googlemock/include \endlist - You also need to add the necessary files to the \c SOURCES variable. For - example: + Also, add the necessary files to the \c SOURCES variable. For example: \list \li \c googletest/src/gtest-all.cc @@ -320,7 +316,7 @@ \li \inlineimage icons/qtcreator-run-failed-tests.png (\uicontrol {Run Failed Tests}) to re-run the tests which failed in the last run. - Depending on the framework this may select additional tests if it + Depending on the framework, this may select more tests if it is impossible to distinguish or to fully address the test. \li \inlineimage icons/qtcreator-run-tests-in-current-file.png (\uicontrol {Run Tests for Current File}) to run the tests @@ -338,7 +334,7 @@ The functions to run tests are also available in the context menu in the \uicontrol Tests view and in \uicontrol Tools > \uicontrol Tests. - \note If you have enabled build system based and code based tests, + \note If you enable both build system based and code based tests, you may run tests twice when using \uicontrol {Run All Tests} or \uicontrol {Run Selected Tests}. This happens if the tests can be found by the code based test frameworks and are registered as test @@ -356,8 +352,8 @@ \image qtcreator-tests-view.png If a Qt Quick test case does not have a name, it is marked - \uicontrol Unnamed in the list. Unnamed test cases are executed when you - select \uicontrol {Run All Tests}. You cannot select or deselect them. + \uicontrol Unnamed in the list. \uicontrol {Run All Tests} executes + unnamed test cases. You cannot select or deselect them. \QC scans the project for tests when you open the project and updates the test list for the currently active test frameworks when you edit tests. @@ -369,8 +365,8 @@ Cleanup Functions} or \uicontrol {Show Data Functions}. Double-click a function in the list to open its source code in the code editor. - The test cases are listed in alphabetic, case insensitive order. To list - them in the order in which they are defined in the source code, + The \uicontrol Tests view lists test cases in alphabetic, case insensitive + order. To list them in the order in which they appear in the source code, select \inlineimage icons/leafsort.png (\uicontrol {Sort Naturally}). @@ -396,46 +392,52 @@ \uicontrol Edit > \uicontrol Preferences > \uicontrol {Testing} > \uicontrol General. - \image qtcreator-autotests-options.png "Testing General preferences" + \image qtcreator-preferences-testing-general.webp {General tab in Testing preferences} You can customize some settings at project level. To change settings for the current project instead of globally, select \uicontrol Projects > \uicontrol {Project Settings} > \uicontrol {Testing}. - In the \uicontrol {Active Test Frameworks} list you can select which tests - \QC will handle. To improve the performance of full scans for tests, disable - test frameworks you are not using. + In the \uicontrol {Active Test Frameworks} list, select tests for \QC to + handle. To improve the performance of full scans for tests, disable + test frameworks you do not use. To group related test cases for an active test framework, select the \uicontrol Group check box next to the framework name in the \uicontrol {Active Test Frameworks} list. - By default, tests are grouped based on the directory where they are located. + By default, \QC groups tests that are in the same directory. - Internal messages and run configuration warnings for deduced configurations - are omitted by default. To view them, deselect the \uicontrol {Omit internal - messages} and \uicontrol {Omit run configuration warnings} check boxes. + \QC omits internal messages and run configuration warnings for + deduced configurations by default. To view them, deselect the + \uicontrol {Omit internal messages} and + \uicontrol {Omit run configuration warnings} check boxes. - By default, test result output is limited to 100,000 characters. The view - is automatically scrolled down when new results are added. To display + By default, test result output shows a maximum of 100,000 characters. The + view automatically scrolls to show the latest results. To display full results, deselect the \uicontrol {Limit result output} check box. To disable automatic scrolling, deselect the \uicontrol {Automatically scroll results} check box. - Test results can be grouped by the executable path that was used to run the - tests. This is useful if you have multiple test executables and run them all - at once. To enable this functionality you need to select the - \uicontrol {Group results by application} check box. + Set the maximum number of lines in the test result tooltip and description + in \uicontrol {Limit result description}. + + To group test results by the executable path that you use to run the + tests, select \uicontrol {Group results by application}. This is useful + if you have multiple test executables and run them all at once. - It is possible to automatically run the currently available tests after - successfully building the current project. In \uicontrol {Automatically run}, - select which tests should be run after a successful build. + To automatically run tests after successfully building the current project, + select them in \uicontrol {Automatically run}. - In some special setups, \QC cannot deduce which executable or run - configuration it should use. If \QC repeatedly asks you to select the - tests to run when trying to execute tests, you can enable it to cache - your choices and use them were appropriate. The cached information is - cleared when you switch to another project, close the current one, or - select \uicontrol {Reset Cached Choices}. + Sometimes, \QC cannot deduce which executable or run configuration to use. + If \QC repeatedly asks you to select the tests to run when trying to execute + tests, you can let it cache your choices and use them where appropriate. \QC + clears the cache when you switch to another project, close the current one, + or select \uicontrol {Reset Cached Choices}. + + Select the \uicontrol {Process arguments} check box to pass arguments to the + test executable that you specify in the \l {Managing Run Configurations} + {run configuration}. This is an experimental feature that might cause the + execution of the test executable to fail. \section2 Specifying Settings for Running Qt Tests @@ -447,7 +449,7 @@ walltime, CPU tick counter, event counter, Valgrind Callgrind, and Linux Perf. For more information, see \l{Creating a Benchmark}. - \image qtcreator-autotests-options-qt.png + \image qtcreator-preferences-testing-qttest.webp {Qt Tests tab in Testing preferences} To receive verbose output when running benchmarks, select the \uicontrol {Verbose benchmarks} check box. @@ -459,13 +461,13 @@ \uicontrol {Log signals and slots} check box. To explicitly limit the maximum number of warnings in the test log, select - the \uicontrol {Limit warnings} check box and specify the intended number - inside the spin box next to it. Set the number to 0 if you want no limit - at all. The default number is 2000. + the \uicontrol {Limit warnings} check box and set the limit. Set it to 0 if + you want no limit at all. The default number is 2000. - To check for Qt Quick Tests that are derived from TestCase select the + To check for Qt Quick Tests that are derived from TestCase, select the \uicontrol {Check for derived Qt Quick tests} check box. - Note: this feature is rather expensive and will increase the + + \note This feature is rather expensive and increases the scan time significantly. \section2 Specifying Settings for Running Google Tests @@ -473,24 +475,24 @@ To specify settings for running Google tests, select \uicontrol Edit > \uicontrol Preferences > \uicontrol {Testing} > \uicontrol {Google Test}. - \image qtcreator-autotests-options-google.png + \image qtcreator-preferences-testing-googletest.webp {Gooble Test tab in Testing preferences} To run disabled tests, select the \uicontrol {Run disabled tests} check box. To run several iterations of the tests, select the \uicontrol {Repeat tests} - check box and enter the number of times the tests should be run in the + check box and enter the number of times to run the tests in the \uicontrol Iterations field. To make sure that the tests are independent and - repeatable, you can run them in a different order each time by selecting the - \uicontrol {Shuffle tests} check box. + repeatable, run them in a different order each time by selecting the + \uicontrol {Shuffle tests} check box. Set the seed for initializing the + randomizer in the \uicontrol Seed field. The value 0 generates a seed + based on the current timestamp. To turn failures into debugger breakpoints, select the - \uicontrol {Break on failure while debugging} check box. To turn assertion - failures into C++ exceptions, select the \uicontrol {Throw on failure} check - box. + \uicontrol {Break on failure while debugging} check box. To group Google tests by using a GTest filter, select \uicontrol {GTest Filter} in the \uicontrol {Group mode} field, - and specify the filter to use in the \uicontrol {Active filter} + and specify the filter in the \uicontrol {Active filter} field. For more information about GTest filters, see \l{https://github.com/google/googletest/blob/master/docs/advanced.md#running-a-subset-of-the-tests} {Running a Subset of the Tests}. @@ -501,16 +503,18 @@ \li To specify settings for running Boost tests, select \uicontrol Edit > \uicontrol Preferences > \uicontrol {Testing} > \uicontrol {Boost Test}. - \image qtcreator-autotests-options-boost.png + \image qtcreator-preferences-testing-boosttest.webp {Boost Test tab in Testing preferences} \li In the \uicontrol {Log format} field, select the error report - format to specify the type of events you want recorded in the + format to specify the type of events to record in the test report. \li In the \uicontrol {Report level} field, select the verbosity level of the test result report. Select \uicontrol No if you do not want a report. \li Select the \uicontrol Randomize check box to execute the tests in a random order, using the seed specified in the \uicontrol Seed - field for initializing the randomizer. + field for initializing the randomizer. The value 0 means no + randomization, the value 1 uses the current time, and any other + value generates a random seed. \li Select the \uicontrol {Catch system errors} check box to catch system errors. \li Select the \uicontrol {Floating point exceptions} check box to @@ -524,7 +528,7 @@ \li To specify settings for running Catch2 tests, select \uicontrol Edit > \uicontrol Preferences > \uicontrol {Testing} > \uicontrol {Catch Test}. - \image qtcreator-autotests-options-catch2.png "Catch Test preferences" + \image qtcreator-preferences-testing-catchtest.webp {Catch Test tab in Testing preferences} \li Select the \uicontrol {Show success} check box to show succeeding expressions as well. By default Catch2 will print only fails. \li Select the \uicontrol {Break on failure while debugging} check box @@ -538,16 +542,15 @@ \li Select the \uicontrol {Abort after} check box to abort the test after the number of failures specified inside the spin box. \li Select the \uicontrol {Benchmark samples} check box to specify - the number of samples to be collected while running benchmarks. + the number of samples to collect while running benchmarks. \li Select the \uicontrol {Benchmark resamples} check box to specify - the number of resamples to be used for the statistical - bootstrapping performed after the benchmarking. + the number of resamples to use for statistical bootstrapping after + benchmarking. \li Select the \uicontrol {Benchmark confidence interval} check box - to specify the confidence interval used for the statistical - bootstrapping. + to specify the confidence interval for statistical bootstrapping. \li Select the \uicontrol {Benchmark warmup time} check box to specify - the warmup time for each test before benchmarking start. - \li Select the \uicontrol {Disable analysis} check box to disable the + the warmup time for each test before benchmarking starts. + \li Select the \uicontrol {Disable analysis} check box to disable statistical analysis and bootstrapping. \endlist @@ -556,7 +559,7 @@ \li To specify settings for running CTest-based tests, select \uicontrol Edit > \uicontrol Preferences > \uicontrol {Testing} > \uicontrol {CTest}. - \image qtcreator-autotests-options-ctest.png "CTest preferences" + \image qtcreator-preferences-testing-ctest.webp {CTest tab in Testing preferences} \li Select the \uicontrol {Output on failure} check box to show test specific output if a test fails. Contrary to the CTest default this is enabled by default. @@ -570,30 +573,37 @@ \li Select \uicontrol {Repeat tests} if you want to re-run tests under certain circumstances. \li In the \uicontrol {Repetition mode} field, select the mode for - re-running tests. The maximum count for repeating a test can be - specified in the \uicontrol {Count} field. + re-running tests. Set the maximum count for repeating a test in + the \uicontrol {Count} field. \li Select \uicontrol {Run in parallel} to run the tests in parallel using the specified number of \uicontrol {Jobs}. - \li Select \uicontrol {Test load} to be able to limit the parallel + \li Select \uicontrol {Test load} to limit the parallel execution. CTest will not start a new test if it would cause the - CPU load to pass the threshold given in \uicontrol {Threshold}. + CPU load to pass the threshold set in \uicontrol {Threshold}. \endlist \section1 Viewing Test Output - The test results are displayed in \l{Viewing Output}{Test Results} - in XML format. XML can be parsed more easily and reliably than plain text. + The \l{Viewing Output}{Test Results} view shows Qt and Qt Quick test results + in XML format and other test results in plain text format. - However, if a Qt test crashes, it might not produce complete XML code that - can be parsed, which might lead to information loss. The lost information - might be retrievable when viewing the results as plain text. - To view the results of Qt tests as plain text, select \uicontrol Edit > + \section2 Qt Test Output + + XML can be parsed more easily and reliably than plain text. However, if a Qt + or Qt Quick test crashes, it might not produce complete XML + code that can be parsed, which might lead to information loss. You might see + the lost information when viewing the results as plain text. + + To view the + results of Qt and Qt Quick tests as plain text, select \uicontrol Edit > \uicontrol Preferences > \uicontrol {Testing} > \uicontrol {Qt Test}, and then deselect the \uicontrol {Use XML output} check box. Then select the \inlineimage icons/text.png (\uicontrol {Switch Between Visual and Text Display}) button in \uicontrol {Test Results} to switch to the text display. + \section2 Summary of Messages + The following table lists the messages that \uicontrol {Test Results} displays: @@ -643,6 +653,12 @@ \endtable + To view only messages of a particular type, select + \inlineimage icons/filtericon.png + (\uicontrol {Filter Test Results}), and then select the types of messages to + show. To show all messages, select \uicontrol {Check All Filters}. To + deselect all message types, select \uicontrol {Uncheck All Filters}. + Since Qt 5.4, you can add a BLACKLIST file for tests. It is mainly used internally by the Qt CI system. @@ -664,10 +680,4 @@ \li Blacklisted test case passed even though it was expected to fail. \endtable - - To view only messages of a particular type, select - \inlineimage icons/filtericon.png - (\uicontrol {Filter Test Results}), and then select the types of messages to - show. To show all messages, select \uicontrol {Check All Filters}. To - deselect all message types, select \uicontrol {Uncheck All Filters}. */ diff --git a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc index 6a883fe37af..6a1d6a12277 100644 --- a/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc +++ b/doc/qtcreator/src/howto/creator-only/qtcreator-faq.qdoc @@ -175,7 +175,7 @@ \b {How do I generate a core file in \QC?} To trigger the GDB command that generates a core file while debugging, - select \uicontrol View > \uicontrol Views > \uicontrol {Debugger Log}. + select \uicontrol View > \uicontrol Views > \l {Debugger Log}. In the \uicontrol Command field, type \c gcore and press \key Enter. The core file is created in the current working directory. You can specify another location for the file, including a relative or absolute path, as an diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-targets.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-targets.qdoc index a242e94e154..04b639f1dd3 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-targets.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-targets.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // ********************************************************************** @@ -30,11 +30,12 @@ \li \l{https://doc.qt.io/Boot2Qt/b2qt-installation-guides.html} {Boot2Qt Device} (commercial only) \li \l{Emulator}{Boot2Qt Emulator Device} (commercial only) - \li \l{Connecting Remote Linux Devices}{Remote Linux Device} + \li \l{Adding Docker Devices}{Docker Device} (experimental) \li \l{Connecting iOS Devices}{iOS Device} \li iOS Simulator \li \l{Connecting MCUs}{MCU Device} (commercial only) \li \l{Connecting QNX Devices}{QNX Device} + \li \l{Connecting Remote Linux Devices}{Remote Linux Device} \li \l{Building Applications for the Web}{WebAssembly Runtime} \endlist diff --git a/doc/qtcreator/src/qtcreator-toc.qdoc b/doc/qtcreator/src/qtcreator-toc.qdoc index d514c329c30..e2299cd05c0 100644 --- a/doc/qtcreator/src/qtcreator-toc.qdoc +++ b/doc/qtcreator/src/qtcreator-toc.qdoc @@ -175,7 +175,7 @@ \li \l{Local Variables and Function Parameters} \li \l{Evaluating Expressions} \li \l{Viewing and Editing Register State} - \li \l{Directly Interacting with Native Debuggers} + \li \l{Debugger Log} \li \l{Viewing Disassembled Code} \li \endlist diff --git a/doc/qtcreatordev/src/qtcreator-ui-text.qdoc b/doc/qtcreatordev/src/qtcreator-ui-text.qdoc index 1d053b3893b..84688a4b857 100644 --- a/doc/qtcreatordev/src/qtcreator-ui-text.qdoc +++ b/doc/qtcreatordev/src/qtcreator-ui-text.qdoc @@ -413,7 +413,7 @@ provides them with functions for managing the information. Available in \uicontrol Debug mode, for interaction with the program that is running under the control of the debugger. - \image qtcreator-debugger-views.png "Views" + \image qtcreator-debugger-views.webp "Views" \li Use descriptive names for views. \endtable diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 7c577462894..7b9b46538c1 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -21,6 +21,8 @@ set(CPACK_PACKAGE_CONTACT "None") set(CPACK_THREADS 4) set(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) set(CPACK_DEBIAN_COMPRESSION_TYPE lzma) +set(CPACK_DEBIAN_PACKAGE_RELEASE 1) +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Qt Project <[email protected]>") # Make CMAKE_INSTALL_DEFAULT_COMPONENT_NAME the first component to install get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 0efd6178768..c5abfa3e16c 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -12387,15 +12387,15 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Options</source> - <translation type="unfinished">Einstellungen</translation> + <translation>Einstellungen</translation> </message> <message> <source>Use file *.astylerc defined in project files</source> - <translation type="unfinished">Verwende Datei *.astylerc wie in Projektdateien definiert</translation> + <translation>Verwende Datei *.astylerc wie in Projektdateien definiert</translation> </message> <message> <source>Use specific config file:</source> - <translation type="unfinished">Bestimmte Konfigurationsdatei verwenden:</translation> + <translation>Bestimmte Konfigurationsdatei verwenden:</translation> </message> <message> <source>AStyle (*.astylerc)</source> @@ -12403,23 +12403,23 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Use file .astylerc or astylerc in HOME</source> - <translation type="unfinished">Verwende .astylerc oder astylerc in HOME</translation> + <translation>Verwende .astylerc oder astylerc in HOME</translation> </message> <message> <source>Use customized style:</source> - <translation type="unfinished">Verwende angepassten Stil:</translation> + <translation>Verwende angepassten Stil:</translation> </message> <message> <source>Configuration</source> - <translation type="unfinished">Konfiguration</translation> + <translation>Konfiguration</translation> </message> <message> <source>Artistic Style command:</source> - <translation type="unfinished">Ausführbare Datei von Artistic Style:</translation> + <translation>Ausführbare Datei von Artistic Style:</translation> </message> <message> <source>Restrict to MIME types:</source> - <translation type="unfinished">Auf MIME-Typen beschränken:</translation> + <translation>Auf MIME-Typen beschränken:</translation> </message> <message> <source>Artistic Style</source> @@ -12431,15 +12431,15 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Use predefined style:</source> - <translation type="unfinished">Verwende vorgegebenen Stil:</translation> + <translation>Verwende vorgegebenen Stil:</translation> </message> <message> <source>Fallback style:</source> - <translation type="unfinished">Fallback-Stil:</translation> + <translation>Fallback-Stil:</translation> </message> <message> <source>Clang Format command:</source> - <translation type="unfinished">Ausführbare Datei von Clang Format:</translation> + <translation>Ausführbare Datei von Clang Format:</translation> </message> <message> <source>Clang Format</source> @@ -12447,11 +12447,11 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Use file uncrustify.cfg defined in project files</source> - <translation type="unfinished">Verwende Datei uncrustify.cfg wie in Projektdateien definiert</translation> + <translation>Verwende Datei uncrustify.cfg wie in Projektdateien definiert</translation> </message> <message> <source>Use file specific uncrustify.cfg</source> - <translation type="unfinished">Dateispezifische uncrustify.cfg verwenden</translation> + <translation>Dateispezifische uncrustify.cfg verwenden</translation> </message> <message> <source>Uncrustify file (*.cfg)</source> @@ -12459,19 +12459,19 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Use file uncrustify.cfg in HOME</source> - <translation type="unfinished">Verwende uncrustify.cfg in HOME</translation> + <translation>Verwende uncrustify.cfg in HOME</translation> </message> <message> <source>Format entire file if no text was selected</source> - <translation type="unfinished">Formatiere die ganze Datei falls kein Text selektiert ist</translation> + <translation>Formatiere die ganze Datei, falls kein Text ausgewählt ist</translation> </message> <message> <source>For action Format Selected Text</source> - <translation type="unfinished">Für die Aktion "Formatiere selektierten Text"</translation> + <translation>Für die Aktion "Markierten Text formatieren"</translation> </message> <message> <source>Uncrustify command:</source> - <translation type="unfinished">Ausführbare Datei von Uncrustify:</translation> + <translation>Ausführbare Datei von Uncrustify:</translation> </message> <message> <source>Uncrustify</source> @@ -12487,19 +12487,19 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Enable auto format on file save</source> - <translation type="unfinished">Beim Speichern einer Datei automatisch formatieren</translation> + <translation>Beim Speichern einer Datei automatisch formatieren</translation> </message> <message> <source>Tool:</source> - <translation type="unfinished">Werkzeug:</translation> + <translation>Werkzeug:</translation> </message> <message> <source>Restrict to files contained in the current project</source> - <translation type="unfinished">Auf Dateien des aktuellen Projekts beschränken</translation> + <translation>Auf Dateien des aktuellen Projekts beschränken</translation> </message> <message> <source>Automatic Formatting on File Save</source> - <translation type="unfinished">Automatische Formatierung beim Speichern einer Datei</translation> + <translation>Automatische Formatierung beim Speichern einer Datei</translation> </message> <message> <source>General</source> @@ -12650,7 +12650,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>&Undo</source> - <translation type="unfinished">&Rückgängig</translation> + <translation>&Rückgängig</translation> </message> </context> <context> @@ -12864,7 +12864,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Build Environment</source> - <translation type="unfinished">Build-Umgebung</translation> + <translation>Build-Umgebung</translation> </message> <message> <source>Clear system environment</source> @@ -12916,7 +12916,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Base environment for the CMake configure step:</source> - <translation type="unfinished"></translation> + <translation>Basisumgebung für den CMake-Konfigurationsschritt:</translation> </message> <message> <source>System Environment</source> @@ -13044,7 +13044,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Attempt to include %1 which was already parsed.</source> - <translation type="unfinished"></translation> + <translation>Versuch, die Datei %1 einzufügen, welche schon ausgewertet wurde.</translation> </message> <message> <source>yes</source> @@ -13156,7 +13156,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Tools</source> - <translation type="unfinished">Werkzeuge</translation> + <translation>Werkzeuge</translation> </message> <message> <source>System CMake at %1</source> @@ -13279,7 +13279,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>CMakeFormatter</source> - <translation type="unfinished"></translation> + <translation>CMakeFormatter</translation> </message> <message> <source>Build "%1"</source> @@ -13319,7 +13319,7 @@ Zum Beispiel bewirkt die Angabe "Revision: 15" dass der Branch auf Rev </message> <message> <source>Show advanced options by default</source> - <translation type="unfinished"></translation> + <translation>Erweiterte Optionen standardmäßig anzeigen</translation> </message> <message> <source>General</source> @@ -13389,27 +13389,27 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans </message> <message> <source>%1 (via cmake)</source> - <translation type="unfinished"></translation> + <translation>%1 (via cmake)</translation> </message> <message> <source>cmake generator failed: %1.</source> - <translation type="unfinished"></translation> + <translation>CMake-Generator fehlgeschlagen: %1.</translation> </message> <message> <source>Kit does not have a cmake binary set</source> - <translation type="unfinished"></translation> + <translation>Das Kit hat keine ausführbare CMake-Datei gesetzt</translation> </message> <message> <source>Cannot create output directory "%1"</source> - <translation type="unfinished"></translation> + <translation>Das Ausgabeverzeichnis "%1" konnte nicht angelegt werden</translation> </message> <message> <source>No valid cmake executable</source> - <translation type="unfinished"></translation> + <translation>Keine gültige ausführbare CMake-Datei</translation> </message> <message> <source>Running in %1: %2</source> - <translation type="unfinished">Führe in %1 aus: %2 {1:?}</translation> + <translation>Führe in %1 aus: %2</translation> </message> <message> <source><No CMake Tool available></source> @@ -13445,7 +13445,7 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans </message> <message> <source>CMake version %1 is unsupported. Update to version 3.15 (with file-api) or later.</source> - <translation type="unfinished">Die CMake-Version %1 wird nicht unterstützt. Aktualisieren Sie auf Version 3.14 (mit file-api) oder neuer. {1 ?} {3.15 ?}</translation> + <translation>Die CMake-Version %1 wird nicht unterstützt. Aktualisieren Sie auf Version 3.15 (mit file-api) oder neuer.</translation> </message> <message> <source>Platform</source> @@ -13753,7 +13753,7 @@ Möchten Sie den Pfad zu den Quelldateien in die Zwischenablage kopieren?</trans </message> <message> <source>CMake project configuration failed. No CMake configuration for build type "%1" found.</source> - <translation type="unfinished"></translation> + <translation>Die CMake-Konfiguration des Projekts ist fehlgeschlagen. Es wurde keine CMake-Konfiguration für den Build-Typ "%1" gefunden.</translation> </message> <message> <source>No "%1" CMake configuration found. Available configurations: "%2". @@ -13805,45 +13805,45 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der </message> <message> <source>Format &Current File</source> - <translation type="unfinished">Aktuelle &Datei formatieren</translation> + <translation>Aktuelle &Datei formatieren</translation> </message> <message> <source>Enable auto format on file save</source> - <translation type="unfinished">Beim Speichern einer Datei automatisch formatieren</translation> + <translation>Beim Speichern einer Datei automatisch formatieren</translation> </message> <message> <source>Restrict to MIME types:</source> - <translation type="unfinished">Auf MIME-Typen beschränken:</translation> + <translation>Auf MIME-Typen beschränken:</translation> </message> <message> <source>Restrict to files contained in the current project</source> - <translation type="unfinished">Auf Dateien des aktuellen Projekts beschränken</translation> + <translation>Auf Dateien des aktuellen Projekts beschränken</translation> </message> <message> <source>%1 Command</source> - <translation type="unfinished">Ausführbare Datei für %1</translation> + <translation>Ausführbare Datei für %1</translation> </message> <message> <source>Formatter</source> - <translation type="unfinished"></translation> + <translation>Formatter</translation> </message> <message> <source>Automatic Formatting on File Save</source> - <translation type="unfinished">Automatische Formatierung beim Speichern einer Datei</translation> + <translation>Automatische Formatierung beim Speichern einer Datei</translation> </message> <message> <source>CMakeFormat command:</source> - <translation type="unfinished"></translation> + <translation>CMakeFormat-Kommando:</translation> </message> <message> <source>Install</source> <comment>ConfigWidget display name.</comment> - <translation type="unfinished">Installieren</translation> + <translation>Installieren</translation> </message> <message> <source>CMake Install</source> <comment>Display name for CMakeProjectManager::CMakeInstallStep id.</comment> - <translation type="unfinished"></translation> + <translation>Mit CMake installieren</translation> </message> </context> <context> @@ -14337,11 +14337,11 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der </message> <message> <source>Use global settings</source> - <translation type="unfinished"></translation> + <translation>Globale Einstellungen verwenden</translation> </message> <message> <source>ClangFormat settings:</source> - <translation type="unfinished"></translation> + <translation>Einstellungen für ClangFormat:</translation> </message> <message> <source>Indenting only</source> @@ -14486,7 +14486,7 @@ Ausgabe: </message> <message> <source>Analyze File...</source> - <translation type="unfinished"></translation> + <translation>Datei analysieren...</translation> </message> <message> <source>File</source> @@ -14642,15 +14642,15 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation> </message> <message> <source>Analyze Project with %1...</source> - <translation type="unfinished"></translation> + <translation>Projekt mit %1 analysieren...</translation> </message> <message> <source>Analyze Current File with %1</source> - <translation type="unfinished"></translation> + <translation>Aktuelle Datei mit %1 analysieren</translation> </message> <message> <source>%1 tool stopped by user.</source> - <translation type="unfinished"></translation> + <translation>Werkzeug %1 durch den Benutzer gestoppt.</translation> </message> <message> <source>Cannot analyze current file: No files open.</source> @@ -14856,11 +14856,11 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation> </message> <message> <source>Go to Clang-Tidy</source> - <translation type="unfinished"></translation> + <translation>Zu Clang-Tidy wechseln</translation> </message> <message> <source>Go to Clazy</source> - <translation type="unfinished"></translation> + <translation>Zu Clazy wechseln</translation> </message> <message> <source>Remove Selected</source> @@ -14900,7 +14900,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation> </message> <message> <source>Default Clang-Tidy and Clazy checks</source> - <translation type="unfinished">Vorgegebene Clang-Tidy- und Clazy-Prüfungen</translation> + <translation>Vorgegebene Clang-Tidy- und Clazy-Prüfungen</translation> </message> <message> <source>Options for %1</source> @@ -15022,7 +15022,7 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation> </message> <message> <source>ClearCase Command</source> - <translation type="unfinished">ClearCase-Befehl</translation> + <translation>Ausführbare Datei von ClearCase</translation> </message> <message> <source>Arg&uments:</source> @@ -15939,7 +15939,7 @@ Trotzdem fortfahren?</translation> </message> <message> <source>Save As...</source> - <translation>Speichern als...</translation> + <translation>Speichern unter...</translation> </message> <message> <source>&Print...</source> @@ -16555,7 +16555,7 @@ Trotzdem fortfahren?</translation> </message> <message> <source>Note: The file will be saved before this operation.</source> - <translation type="unfinished"></translation> + <translation>Hinweis: Die Datei wird vor dieser Aktion gespeichert.</translation> </message> <message> <source>There is no patch-command configured in the general "Environment" settings.</source> @@ -18196,19 +18196,19 @@ Möchten Sie sie jetzt auschecken?</translation> </message> <message> <source>Bytes</source> - <translation type="unfinished"></translation> + <translation>Bytes</translation> </message> <message> <source>KB</source> - <translation type="unfinished"></translation> + <translation>KB</translation> </message> <message> <source>GB</source> - <translation type="unfinished"></translation> + <translation>GB</translation> </message> <message> <source>TB</source> - <translation type="unfinished"></translation> + <translation>TB</translation> </message> <message> <source>Enable crash reporting</source> @@ -18373,7 +18373,7 @@ provided they were unmodified before the refactoring.</source> </message> <message> <source>unnamed</source> - <translation type="unfinished">unbenannt</translation> + <translation>unbenannt</translation> </message> <message> <source>Current theme: %1</source> @@ -18902,123 +18902,123 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation> </message> <message> <source>Logging Category Viewer</source> - <translation type="unfinished"></translation> + <translation>Protokollansicht</translation> </message> <message> <source>Save Log</source> - <translation type="unfinished"></translation> + <translation>Protokoll speichern</translation> </message> <message> <source>Clear</source> - <translation type="unfinished">Löschen</translation> + <translation>Löschen</translation> </message> <message> <source>Stop Logging</source> - <translation type="unfinished"></translation> + <translation>Protokollierung anhalten</translation> </message> <message> <source>Toggle Qt Internal Logging</source> - <translation type="unfinished"></translation> + <translation>Protokollierung von Qt-Interna umschalten</translation> </message> <message> <source>Auto Scroll</source> - <translation type="unfinished"></translation> + <translation>Automatisch scrollen</translation> </message> <message> <source>Timestamps</source> - <translation type="unfinished"></translation> + <translation>Zeitstempel</translation> </message> <message> <source>Message Types</source> - <translation type="unfinished"></translation> + <translation>Nachrichtentypen</translation> </message> <message> <source>Timestamp</source> - <translation type="unfinished">Zeitstempel</translation> + <translation>Zeitstempel</translation> </message> <message> <source>Category</source> - <translation type="unfinished"></translation> + <translation>Kategorie</translation> </message> <message> <source>Type</source> - <translation type="unfinished">Typ</translation> + <translation>Typ</translation> </message> <message> <source>Message</source> - <translation type="unfinished"></translation> + <translation>Nachricht</translation> </message> <message> <source>Start Logging</source> - <translation type="unfinished"></translation> + <translation>Protokollierung starten</translation> </message> <message> <source>Copy Selected Logs</source> - <translation type="unfinished"></translation> + <translation>Ausgewählte Protokolle kopieren</translation> </message> <message> <source>Copy All</source> - <translation type="unfinished">Alles kopieren</translation> + <translation>Alles kopieren</translation> </message> <message> <source>Save Enabled as Preset...</source> - <translation type="unfinished"></translation> + <translation>Ausgewählte als Voreinstellung speichern...</translation> </message> <message> <source>Update from Preset...</source> - <translation type="unfinished"></translation> + <translation>Voreinstellung laden...</translation> </message> <message> <source>Uncheck All</source> - <translation type="unfinished"></translation> + <translation>Alle abwählen</translation> </message> <message> <source>Save Logs As</source> - <translation type="unfinished"></translation> + <translation>Protokolle speichern als</translation> </message> <message> <source>Error</source> - <translation type="unfinished">Fehler</translation> + <translation>Fehler</translation> </message> <message> <source>Failed to write logs to "%1".</source> - <translation type="unfinished"></translation> + <translation>Schreiben der Protokolle nach "%1" fehlgeschlagen.</translation> </message> <message> <source>Failed to open file "%1" for writing logs.</source> - <translation type="unfinished"></translation> + <translation>Datei "%1" konnte nicht zum Schreiben der Protokolle geöffnet werden.</translation> </message> <message> <source>Save Enabled Categories As</source> - <translation type="unfinished"></translation> + <translation>Ausgewählte Kategorien speichern unter</translation> </message> <message> <source>Failed to write preset file "%1".</source> - <translation type="unfinished"></translation> + <translation>Schreiben der Voreinstellung nach "%1" fehlgeschlagen.</translation> </message> <message> <source>Load Enabled Categories From</source> - <translation type="unfinished"></translation> + <translation>Ausgewählte Kategorien laden</translation> </message> <message> <source>Failed to open preset file "%1" for reading</source> - <translation type="unfinished"></translation> + <translation>Datei "%1" konnte nicht zum Lesen der Voreinstellung geöffnet werden</translation> </message> <message> <source>Failed to read preset file "%1": %2</source> - <translation type="unfinished"></translation> + <translation>Lesen der Voreinstellung aus Datei "%1" fehlgeschlagen: %2</translation> </message> <message> <source>Unexpected preset file format.</source> - <translation type="unfinished"></translation> + <translation>Unerwartetes Format der Datei.</translation> </message> <message> <source>Haskell Editor</source> - <translation type="unfinished"></translation> + <translation>Haskell-Editor</translation> </message> <message> <source>Binding Editor</source> - <translation type="unfinished">Binding-Editor</translation> + <translation>Binding-Editor</translation> </message> </context> <context> @@ -19393,11 +19393,11 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation> </message> <message> <source>Find Unused Functions</source> - <translation type="unfinished"></translation> + <translation>Nicht verwendete Funktionen finden</translation> </message> <message> <source>Find Unused C/C++ Functions</source> - <translation type="unfinished"></translation> + <translation>Nicht verwendete C/C++-Funktionen finden</translation> </message> <message> <source>Open Type Hierarchy</source> @@ -19429,7 +19429,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation> </message> <message> <source>Inspect C++ Code Model...</source> - <translation>Inspiziere das C++-Codemodell...</translation> + <translation>C++-Codemodell inspizieren...</translation> </message> <message> <source>Meta+Shift+F12</source> @@ -19513,7 +19513,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation> </message> <message> <source>collecting overrides ...</source> - <translation type="unfinished">Suche überschriebene Methoden ...</translation> + <translation>Suche überschriebene Methoden ...</translation> </message> <message> <source>Additional C++ Preprocessor Directives for %1:</source> @@ -19549,7 +19549,7 @@ Doppelklicken Sie einen Eintrag um ihn zu ändern.</translation> </message> <message> <source>C++ Code Model</source> - <translation type="unfinished"></translation> + <translation>C++-Codemodell</translation> </message> <message> <source><p><b>Active Parse Context</b>:<br/>%1</p><p>Multiple parse contexts (set of defines, include paths, and so on) are available for this file.</p><p>Choose a parse context to set it as the preferred one. Clear the preference from the context menu.</p></source> @@ -20158,7 +20158,7 @@ z.B. name = "m_test_foo_": </message> <message> <source>For appropriate options, consult the GCC or Clang manual pages or the %1 GCC online documentation</a>.</source> - <translation type="unfinished"></translation> + <translation>Für passende Optionen lesen Sie das GCC- oder Clang-Handbuch oder auch die %1 GCC-Onlinedokumentation</a>.</translation> </message> <message> <source>Copy...</source> @@ -20288,15 +20288,15 @@ z.B. name = "m_test_foo_": </message> <message> <source>Checked %1 of %2 functions</source> - <translation type="unfinished"></translation> + <translation>%1 von %2 Funktionen geprüft</translation> </message> <message> <source>Finding Unused Functions</source> - <translation type="unfinished"></translation> + <translation>Nicht verwendete Funktionen finden</translation> </message> <message> <source>C++ Indexer: Skipping file "%1" because its path matches the ignore pattern.</source> - <translation type="unfinished"></translation> + <translation>C++-Indexer: Überspringe Datei "%1", weil ihr Pfad dem Muster der zu ignorierenden Pfade entspricht.</translation> </message> <message> <source>The project contains C source files, but the currently active kit has no C compiler. The code model will not be fully functional.</source> @@ -20336,11 +20336,11 @@ z.B. name = "m_test_foo_": </message> <message> <source>Ignore files</source> - <translation type="unfinished"></translation> + <translation>Dateien ignorieren</translation> </message> <message> <source><html><head/><body><p>Ignore files that match these wildcard patterns, one wildcard per line.</p></body></html></source> - <translation type="unfinished"></translation> + <translation><html><head/><body><p>Dateien ignorieren, die diesen Platzhalter-Filtern entsprechen. Ein Filter pro Zeile.</p></body></html></translation> </message> <message> <source>Ignore precompiled headers</source> @@ -20457,15 +20457,16 @@ die vom selben Clangd-Prozess verwaltet werden sollen, fügen Sie diese hier hin <message> <source>You are trying to rename a symbol declared in the generated file "%1". This is normally not a good idea, as the file will likely get overwritten during the build process.</source> - <translation type="unfinished"></translation> + <translation>Sie versuchen, ein Symbol in der generierten Datei "%1" umzubenennen. +Dies ist normalerweise nicht empfehlenswert, da die Datei wahrscheinlich während des Erstellungsprozesses überschrieben wird.</translation> </message> <message> <source>Do you want to edit "%1" instead?</source> - <translation type="unfinished"></translation> + <translation>Möchten Sie stattdessen "%1" bearbeiten?</translation> </message> <message> <source>Open %1</source> - <translation type="unfinished"></translation> + <translation>%1 öffnen</translation> </message> <message> <source>&Refactor</source> @@ -20567,79 +20568,79 @@ This is normally not a good idea, as the file will likely get overwritten during </message> <message> <source>Member Function Implementations</source> - <translation type="unfinished"></translation> + <translation>Implementationen von Memberfunktionen</translation> </message> <message> <source>None</source> - <translation type="unfinished">Keine</translation> + <translation>Keine</translation> </message> <message> <source>Inline</source> - <translation type="unfinished"></translation> + <translation>Inline</translation> </message> <message> <source>Outside Class</source> - <translation type="unfinished"></translation> + <translation>Außerhalb der Klasse</translation> </message> <message> <source>Default implementation location:</source> - <translation type="unfinished"></translation> + <translation>Vorgabe für Ort der Implementation:</translation> </message> <message> <source>Getters and Setters</source> - <translation type="unfinished"></translation> + <translation>Getter und Setter</translation> </message> <message> <source>Member</source> - <translation type="unfinished"></translation> + <translation>Member</translation> </message> <message> <source>Getter</source> - <translation type="unfinished"></translation> + <translation>Getter</translation> </message> <message> <source>Setter</source> - <translation type="unfinished"></translation> + <translation>Setter</translation> </message> <message> <source>Signal</source> - <translation type="unfinished">Signal</translation> + <translation>Signal</translation> </message> <message> <source>Reset</source> - <translation type="unfinished">Zurücksetzen</translation> + <translation>Zurücksetzen</translation> </message> <message> <source>QProperty</source> - <translation type="unfinished"></translation> + <translation>QProperty</translation> </message> <message> <source>Constant QProperty</source> - <translation type="unfinished"></translation> + <translation>Konstante QProperty</translation> </message> <message> <source>Create getters for all members</source> - <translation type="unfinished"></translation> + <translation>Getter für alle Member erzeugen</translation> </message> <message> <source>Create setters for all members</source> - <translation type="unfinished"></translation> + <translation>Setter für alle Member erzeugen</translation> </message> <message> <source>Create signals for all members</source> - <translation type="unfinished"></translation> + <translation>Signale für alle Member erzeugen</translation> </message> <message> <source>Create Q_PROPERTY for all members</source> - <translation type="unfinished"></translation> + <translation>Q_PROPERTY für alle Member erzeugen</translation> </message> <message> <source>Select the getters and setters to be created.</source> - <translation type="unfinished"></translation> + <translation>Wählen Sie die zu erzeugenden Getter und Setter aus.</translation> </message> <message> <source>Definitions Outside Class</source> - <translation type="unfinished"></translation> + <translation>Definitionen außerhalb der Klasse</translation> </message> <message> <source>Initialize in Constructor</source> @@ -20660,20 +20661,21 @@ This is normally not a good idea, as the file will likely get overwritten during </message> <message> <source>Constructor</source> - <translation type="unfinished"></translation> + <translation>Konstruktor</translation> </message> <message> <source>Parameters without default value must come before parameters with default value.</source> - <translation type="unfinished"></translation> + <translation>Parameter ohne Standardwert müssen vor Parametern mit Standardwert deklariert werden.</translation> </message> <message> <source>Initialize all members</source> - <translation type="unfinished"></translation> + <translation>Alle Member initialisieren</translation> </message> <message> <source>Select the members to be initialized in the constructor. Use drag and drop to change the order of the parameters.</source> - <translation type="unfinished"></translation> + <translation>Wählen Sie die Member aus, die im Konstruktor initialisiert werden sollen. +Ziehen Sie Eintrage mit der Maus, um die Reihenfolge der Parameter zu ändern.</translation> </message> <message> <source>Quick Fix settings are saved in a file. Existing settings file "%1" found. Should this file be used or a new one be created?</source> @@ -20873,7 +20875,7 @@ Flags: %3</translation> </message> <message> <source>Cppcheck Run Configuration</source> - <translation type="unfinished"></translation> + <translation>Ausführungskonfiguration für Cppcheck</translation> </message> <message> <source>Analyze</source> @@ -20897,7 +20899,7 @@ Flags: %3</translation> </message> <message> <source>Cppcheck Diagnostics</source> - <translation type="unfinished"></translation> + <translation>Meldungen von Cppcheck</translation> </message> </context> <context> @@ -21109,23 +21111,23 @@ Do you want to display them anyway?</source> </message> <message> <source>Error</source> - <translation type="unfinished">Fehler</translation> + <translation>Fehler</translation> </message> <message> <source>Failed to copy core file to device: %1</source> - <translation type="unfinished"></translation> + <translation>Core-Datei konnte nicht auf das Gerät kopiert werden: %1</translation> </message> <message> <source>Failed to copy symbol file to device: %1</source> - <translation type="unfinished"></translation> + <translation>Symbol-Datei konnte nicht auf das Gerät kopiert werden: %1</translation> </message> <message> <source>Copying files to device... %1/%2</source> - <translation type="unfinished"></translation> + <translation>Kopiere Dateien auf Gerät... %1/%2</translation> </message> <message> <source>Copying files to device...</source> - <translation type="unfinished"></translation> + <translation>Kopiere Dateien auf Gerät...</translation> </message> <message> <source>Kit:</source> @@ -22219,7 +22221,7 @@ was generated. In such situations the breakpoint is shifted to the next source code line for which code was actually generated. This option reflects such temporary change by moving the breakpoint markers in the source code editor.</source> - <translation>Nicht alle Quellcode-Zeilen bewirken die Erzeugung von ausführbarem Code. Wenn man auf solche Zeilen einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre. Das Aktivieren der Einstellung 'Positionen der Haltepunkte korrigieren' bewirkt, dass der Haltepunkt-Marker in so einem Fall auf die Stelle des resultierenden Haltepunkts verschoben wird.</translation> + <translation>Nicht alle Quellcode-Zeilen bewirken die Erzeugung von ausführbarem Code. Wenn man dort einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre. Das Aktivieren der Einstellung 'Positionen der Haltepunkte korrigieren' bewirkt, dass der Haltepunkt-Marker in so einem Fall auf die Stelle des resultierenden Haltepunkts verschoben wird.</translation> </message> <message> <source>Allows or inhibits reading the user's default @@ -22260,7 +22262,7 @@ markers in the source code editor.</source> </message> <message> <source>The options below give access to advanced<br>or experimental functions of GDB.<p>Enabling them may negatively impact<br>your debugging experience.</source> - <translation type="unfinished"></translation> + <translation>Die untenstehenden Einstellungen betreffen spezielle<br>oder experimentelle Funktionalität von GDB.<p>Ihre Verwendung kann das Debuggen<br>negativ beeinflussen.</translation> </message> <message> <source>Additional Attach Commands</source> @@ -23164,11 +23166,11 @@ Installieren Sie das Paket "Qt Debug Information Files" für diese Qt- </message> <message> <source>Debugger Start Failed</source> - <translation type="unfinished"></translation> + <translation>Start des Debuggers schlug fehl</translation> </message> <message> <source>The system prevents loading of %1 which is required for debugging. Make sure that your antivirus solution is up to date and if that does not work consider to add an exception for %1.</source> - <translation type="unfinished"></translation> + <translation>Das System verhindert das Laden von %1, welches für das Debuggen erforderlich ist. Stellen Sie sicher, dass Ihr Virenschutzprogramm aktuell ist. Falls dies nicht hilft, ziehen Sie in Betracht, eine Ausnahme für %1 hinzuzufügen.</translation> </message> <message> <source>Value %1 obtained from evaluating the condition of breakpoint %2, stopping.</source> @@ -23592,7 +23594,7 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie </message> <message> <source>&Attach to Process</source> - <translation type="unfinished">&An Prozess anhängen</translation> + <translation>&An Prozess anhängen</translation> </message> <message> <source>Edit Breakpoint...</source> @@ -23600,11 +23602,11 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie </message> <message> <source>Start</source> - <translation type="unfinished"></translation> + <translation>Starten</translation> </message> <message> <source>Stop</source> - <translation type="unfinished">Anhalten</translation> + <translation>Anhalten</translation> </message> <message> <source>F8</source> @@ -24573,7 +24575,7 @@ Bitte wählen Sie einen 64-bit-Debugger in den Kit-Einstellungen für dieses Kit </message> <message> <source>Debugger Location</source> - <translation type="unfinished"></translation> + <translation>Position des Debuggers</translation> </message> <message> <source>The memory contents cannot be shown as no viewer plugin for binary data has been loaded.</source> @@ -25091,7 +25093,7 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl </message> <message> <source><p>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint.</source> - <translation type="unfinished"></translation> + <translation><p>Nicht aus allen Quellcode-Zeilen wird ausführbarer Code erzeugt. Wenn man dort einen Haltepunkt setzt, verhält er sich so, als ob er auf die nächste Zeile gesetzt worden wäre, aus der Maschinencode erzeugt wurde. Das Aktivieren der Einstellung 'Positionen der Haltepunkte korrigieren' bewirkt, dass der Haltepunkt-Marker in so einem Fall an die Stelle des resultierenden Haltepunkts verschoben wird.</translation> </message> <message> <source>Stopping and stepping in the debugger will automatically open views associated with the current location.</source> @@ -25530,7 +25532,7 @@ Weiterführende Informationen befinden sich in /etc/sysctl.d/10-ptrace.conf </message> <message> <source>Debugger Value</source> - <translation type="unfinished"></translation> + <translation>Debugger-Wert</translation> </message> </context> <context> @@ -25607,7 +25609,7 @@ Bitte prüfen Sie die #include-Anweisungen.</translation> </message> <message> <source>Cannot rename UI symbol "%1" in C++ files: %2</source> - <translation type="unfinished"></translation> + <translation>UI-Symbol "%1" konnte in den C++-Dateien nicht umbenannt werden: %2</translation> </message> <message> <source>Error finding/adding a slot.</source> @@ -25625,31 +25627,31 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation> </message> <message> <source>File "%1" not found in project.</source> - <translation type="unfinished"></translation> + <translation>Datei "%1" wurde nicht im Projekt gefunden.</translation> </message> <message> <source>No active target.</source> - <translation type="unfinished"></translation> + <translation>Kein Ziel aktiv.</translation> </message> <message> <source>No active build system.</source> - <translation type="unfinished"></translation> + <translation>Kein Build-System aktiv.</translation> </message> <message> <source>Failed to find the ui header.</source> - <translation type="unfinished"></translation> + <translation>UI-Header-Datei konnte nicht gefunden werden.</translation> </message> <message> <source>Renaming via the property editor cannot be synced with C++ code; see QTCREATORBUG-19141. This message will not be repeated.</source> - <translation type="unfinished"></translation> + <translation>Umbenennungen über den Eigenschaften-Editor können nicht mit C++-Code synchronisiert werden; siehe auch QTCREATORBUG-19141. Diese Nachricht wird nicht erneut angezeigt.</translation> </message> <message> <source>Failed to retrieve ui header contents.</source> - <translation type="unfinished"></translation> + <translation>Inhalt des UI-Headers konnte nicht abgerufen werden.</translation> </message> <message> <source>Failed to locate corresponding symbol in ui header.</source> - <translation type="unfinished"></translation> + <translation>Das entsprechende Symbol konnte im UI-Header nicht ausfindig gemacht werden.</translation> </message> <message> <source>Widget box</source> @@ -25800,7 +25802,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation> </message> <message> <source>Diff</source> - <translation type="unfinished">Diff</translation> + <translation>Diff</translation> </message> <message> <source>&Diff</source> @@ -25927,7 +25929,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation> </message> <message> <source>Rendering diff</source> - <translation type="unfinished"></translation> + <translation>Generiere Diff</translation> </message> <message> <source>[%1] %2</source> @@ -27807,7 +27809,7 @@ Jetzt Commit ausführen?</translation> </message> <message> <source>Waiting for data...</source> - <translation type="unfinished">Warte auf Daten...</translation> + <translation>Warte auf Daten...</translation> </message> <message> <source>Cannot run "%1" in "%2": %3</source> @@ -28128,10 +28130,8 @@ Jetzt Commit ausführen?</translation> <message numerus="yes"> <source>Cannot commit %n files</source> <translation> - <numerusform>Commit schlug für eine Datei fehl -</numerusform> - <numerusform>Commit schlug für %n Dateien fehl -</numerusform> + <numerusform>Commit schlug für eine Datei fehl</numerusform> + <numerusform>Commit schlug für %n Dateien fehl</numerusform> </translation> </message> <message> @@ -28404,11 +28404,11 @@ wenn es außerhalb von git bash aufgerufen wird.</translation> </message> <message> <source>Add instant blame annotations to editor</source> - <translation type="unfinished"></translation> + <translation>Annotationen für "Blame" im Editor anzeigen</translation> </message> <message> <source>Directly annotate each line in the editor when scrolling through the document.</source> - <translation type="unfinished"></translation> + <translation>Annotationen für Zeilen im Editor direkt beim Scrollen durch das Dokument anzeigen.</translation> </message> <message> <source>Git</source> @@ -28416,7 +28416,7 @@ wenn es außerhalb von git bash aufgerufen wird.</translation> </message> <message> <source>Instant Blame</source> - <translation type="unfinished"></translation> + <translation>Instant Blame</translation> </message> <message> <source>Use the patience algorithm for calculating the differences.</source> @@ -29533,7 +29533,7 @@ Leer lassen, um das Dateisystem zu durchsuchen.</translation> </message> <message> <source>Git Blame</source> - <translation type="unfinished"></translation> + <translation>Git Blame</translation> </message> <message> <source>Diff of "%1"</source> @@ -29563,20 +29563,20 @@ Leer lassen, um das Dateisystem zu durchsuchen.</translation> <message> <source>Instant Blame Current Line</source> <comment>Avoid translating "Blame"</comment> - <translation type="unfinished"></translation> + <translation>Instant Blame für aktuelle Zeile</translation> </message> <message> <source>Instant Blame for "%1"</source> <comment>Avoid translating "Blame"</comment> - <translation type="unfinished"></translation> + <translation>Instant Blame für "%1"</translation> </message> <message> <source>Meta+G,Meta+I</source> - <translation type="unfinished"></translation> + <translation>Meta+G,Meta+I</translation> </message> <message> <source>Alt+G,Alt+I</source> - <translation type="unfinished"></translation> + <translation>Alt+G,Alt+I</translation> </message> <message> <source>Diff Current Project</source> @@ -29711,7 +29711,7 @@ Leer lassen, um das Dateisystem zu durchsuchen.</translation> </message> <message> <source>You</source> - <translation type="unfinished"></translation> + <translation>Sie selbst</translation> </message> <message> <source>Amend %1</source> @@ -29751,39 +29751,39 @@ Leer lassen, um das Dateisystem zu durchsuchen.</translation> </message> <message> <source>&Reviewers:</source> - <translation type="unfinished">&Reviewer:</translation> + <translation>&Reviewer:</translation> </message> <message> <source>&Draft/private</source> - <translation type="unfinished">&Entwurf/privat</translation> + <translation>&Entwurf/privat</translation> </message> <message> <source>&Work-in-progress</source> - <translation type="unfinished">&In Arbeit</translation> + <translation>&In Arbeit</translation> </message> <message> <source>Pushes the selected commit and all dependent commits.</source> - <translation type="unfinished">Push des ausgewählten Commit und aller abhängigen Commits.</translation> + <translation>Push des ausgewählten Commit und aller abhängigen Commits.</translation> </message> <message> <source>&Topic:</source> - <translation type="unfinished">&Topic:</translation> + <translation>&Topic:</translation> </message> <message> <source>Push:</source> - <translation type="unfinished">Push:</translation> + <translation>Push:</translation> </message> <message> <source>Commits:</source> - <translation type="unfinished">Commits:</translation> + <translation>Commits:</translation> </message> <message> <source>To:</source> - <translation type="unfinished">Bis:</translation> + <translation>Nach:</translation> </message> <message> <source>Number of commits</source> - <translation type="unfinished">Anzahl der Commits</translation> + <translation>Anzahl der Commits</translation> </message> <message> <source>Comma-separated list of reviewers. @@ -29791,7 +29791,7 @@ Leer lassen, um das Dateisystem zu durchsuchen.</translation> Reviewers can be specified by nickname or email address. Spaces not allowed. Partial names can be used if they are unambiguous.</source> - <translation type="unfinished">Kommaseparierte Liste der Reviewer. + <translation>Kommaseparierte Liste der Reviewer. Reviewer können mit Benutzernamen oder E-Mail-Adresse angegeben werden. Leerzeichen sind nicht erlaubt. @@ -29799,13 +29799,13 @@ Teilnamen können verwendet werden, sofern sie eindeutig sind.</translation> </message> <message> <source>Certificate Error</source> - <translation type="unfinished">Zertifikatsfehler</translation> + <translation>Zertifikatsfehler</translation> </message> <message> <source>Server certificate for %1 cannot be authenticated. Do you want to disable SSL verification for this server? Note: This can expose you to man-in-the-middle attack.</source> - <translation type="unfinished">Server-Zertifikat für %1 kann nicht authentifiziert werden. + <translation>Server-Zertifikat für %1 kann nicht authentifiziert werden. Möchten Sie die SSL-Verifikation für diesen Server abschalten? Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe.</translation> </message> @@ -30654,78 +30654,78 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe.</translation> </message> <message> <source>New Folder</source> - <translation type="unfinished">Neues Verzeichnis</translation> + <translation>Neues Verzeichnis</translation> </message> <message> <source>Bookmark:</source> - <translation type="unfinished">Lesezeichen:</translation> + <translation>Lesezeichen:</translation> </message> <message> <source>Add in folder:</source> - <translation type="unfinished">Im Verzeichnis:</translation> + <translation>In Verzeichnis hinzufügen:</translation> </message> <message> <source>Delete Folder</source> - <translation type="unfinished">Verzeichnis löschen</translation> + <translation>Verzeichnis löschen</translation> </message> <message> <source>Rename Folder</source> - <translation type="unfinished">Verzeichnis umbenennen</translation> + <translation>Verzeichnis umbenennen</translation> </message> <message> <source>Show Bookmark</source> - <translation type="unfinished">Lesezeichen anzeigen</translation> + <translation>Lesezeichen anzeigen</translation> </message> <message> <source>Show Bookmark as New Page</source> - <translation type="unfinished">Lesezeichen in neuem Reiter anzeigen</translation> + <translation>Lesezeichen in neuem Reiter anzeigen</translation> </message> <message> <source>Delete Bookmark</source> - <translation type="unfinished">Lesezeichen löschen</translation> + <translation>Lesezeichen löschen</translation> </message> <message> <source>Rename Bookmark</source> - <translation type="unfinished">Lesezeichen umbenennen</translation> + <translation>Lesezeichen umbenennen</translation> </message> <message> <source>Deleting a folder also removes its content.<br>Do you want to continue?</source> - <translation type="unfinished">Beim Löschen eines Verzeichnisses wird auch dessen Inhalt gelöscht.<br>Möchten Sie trotzdem fortsetzen?</translation> + <translation>Beim Löschen eines Verzeichnisses wird auch dessen Inhalt gelöscht.<br>Möchten Sie trotzdem fortfahren?</translation> </message> </context> <context> <name>QtC::ImageViewer</name> <message> <source>Export</source> - <translation type="unfinished">Export</translation> + <translation>Exportieren</translation> </message> <message> <source>Set as Default</source> - <translation type="unfinished">Als Vorgabe setzen</translation> + <translation>Als Vorgabe setzen</translation> </message> <message> <source>on</source> - <translation type="unfinished">an</translation> + <translation>an</translation> </message> <message> <source>off</source> - <translation type="unfinished">aus</translation> + <translation>aus</translation> </message> <message> <source>Use the current settings for background, outline, and fitting to screen as the default for new image viewers. Current default:</source> - <translation type="unfinished"></translation> + <translation>Die aktuellen Einstellungen für Hintergrund, Kontur und an den Bildschirm anpassen als Voreinstellung speichern. Aktuelle Voreinstellung:</translation> </message> <message> <source>Background: %1</source> - <translation type="unfinished"></translation> + <translation>Hintergrund: %1</translation> </message> <message> <source>Outline: %1</source> - <translation type="unfinished"></translation> + <translation>Kontur: %1</translation> </message> <message> <source>Fit to Screen: %1</source> - <translation type="unfinished"></translation> + <translation>An Bildschirm anpassen: %1</translation> </message> <message> <source>Image Viewer</source> @@ -30737,35 +30737,35 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe.</translation> </message> <message> <source>Ctrl+=</source> - <translation type="unfinished">Ctrl+=</translation> + <translation>Ctrl+=</translation> </message> <message> <source>Switch Background</source> - <translation type="unfinished">Hintergrund umschalten</translation> + <translation>Hintergrund umschalten</translation> </message> <message> <source>Ctrl+[</source> - <translation type="unfinished">Ctrl+[</translation> + <translation>Ctrl+[</translation> </message> <message> <source>Switch Outline</source> - <translation type="unfinished">Umriss umschalten</translation> + <translation>Kontur umschalten</translation> </message> <message> <source>Ctrl+]</source> - <translation type="unfinished">Ctrl+]</translation> + <translation>Ctrl+]</translation> </message> <message> <source>Toggle Animation</source> - <translation type="unfinished">Animation umschalten</translation> + <translation>Animation umschalten</translation> </message> <message> <source>Export Multiple Images</source> - <translation type="unfinished">Mehrere Bilder exportieren</translation> + <translation>Mehrere Bilder exportieren</translation> </message> <message> <source>Copy as Data URL</source> - <translation type="unfinished"></translation> + <translation>Als Daten-URL kopieren</translation> </message> <message> <source>Play Animation</source> @@ -31706,19 +31706,19 @@ Ablaufdatum: %3</translation> </message> <message> <source>Symbols in Current Document</source> - <translation type="unfinished"></translation> + <translation>Symbole im aktuellen Dokument</translation> </message> <message> <source>Symbols in Workspace</source> - <translation type="unfinished"></translation> + <translation>Symbole im Arbeitsbereich</translation> </message> <message> <source>Classes and Structs in Workspace</source> - <translation type="unfinished"></translation> + <translation>Klassen und Strukturen im Arbeitsbereich</translation> </message> <message> <source>Functions and Methods in Workspace</source> - <translation type="unfinished"></translation> + <translation>Funktionen und Methoden im Arbeitsbereich</translation> </message> <message> <source>Unexpectedly finished. Restarting in %1 seconds.</source> @@ -31730,19 +31730,19 @@ Ablaufdatum: %3</translation> </message> <message> <source>Show available quick fixes</source> - <translation type="unfinished"></translation> + <translation>Zur Verfügung stehende Quick Fixes anzeigen</translation> </message> <message> <source>Restart %1</source> - <translation type="unfinished"></translation> + <translation>%1 neu starten</translation> </message> <message> <source>Inspect Language Clients</source> - <translation type="unfinished"></translation> + <translation>Language Clients inspizieren</translation> </message> <message> <source>Manage...</source> - <translation type="unfinished">Verwalten...</translation> + <translation>Verwalten...</translation> </message> <message> <source>Name:</source> @@ -31763,7 +31763,8 @@ Ablaufdatum: %3</translation> <message> <source>List of file patterns. Example: *.cpp%1*.h</source> - <translation type="unfinished"></translation> + <translation>Liste von Datei-Mustern. +Beispiel: *.cpp%1*.h</translation> </message> <message> <source>Startup behavior:</source> @@ -31771,15 +31772,15 @@ Example: *.cpp%1*.h</source> </message> <message> <source>Initialization options:</source> - <translation type="unfinished"></translation> + <translation>Initialisierungseinstellungen:</translation> </message> <message> <source>Failed to parse JSON at %1: %2</source> - <translation type="unfinished"></translation> + <translation>JSON konnte bei %1 nicht ausgewertet werden: %2</translation> </message> <message> <source>Language server-specific JSON to pass via "initializationOptions" field of "initialize" request.</source> - <translation type="unfinished"></translation> + <translation>Language Server-abhängiges JSON, das über das "initializationOptions"-Feld der "initialize"-Anfrage übergeben werden soll.</translation> </message> <message> <source>Executable:</source> @@ -31791,7 +31792,7 @@ Example: *.cpp%1*.h</source> </message> <message> <source>JSON Error</source> - <translation type="unfinished"></translation> + <translation>JSON-Fehler</translation> </message> <message> <source>&Add</source> @@ -31815,31 +31816,31 @@ Example: *.cpp%1*.h</source> </message> <message> <source>%1 for %2</source> - <translation type="unfinished"></translation> + <translation>%1 für %2</translation> </message> <message> <source>uninitialized</source> - <translation type="unfinished"></translation> + <translation>nicht initialisiert</translation> </message> <message> <source>initialize requested</source> - <translation type="unfinished"></translation> + <translation>Initialisierung angefordert</translation> </message> <message> <source>initialized</source> - <translation type="unfinished"></translation> + <translation>initialisiert</translation> </message> <message> <source>shutdown requested</source> - <translation type="unfinished"></translation> + <translation>Abschaltung angefordert</translation> </message> <message> <source>shutdown</source> - <translation type="unfinished"></translation> + <translation>abgeschaltet</translation> </message> <message> <source>error</source> - <translation type="unfinished"></translation> + <translation>Fehler</translation> </message> <message> <source>Cannot send data to unstarted server %1</source> @@ -31851,68 +31852,69 @@ Example: *.cpp%1*.h</source> </message> <message> <source>Renaming is not supported with %1</source> - <translation type="unfinished"></translation> + <translation>Umbenennen wird von %1 nicht unterstützt</translation> </message> <message> <source>Invalid parameter in "%1": %2</source> - <translation type="unfinished"></translation> + <translation>Ungültiger Parameter in "%1": +%2</translation> </message> <message> <source>Language Server "%1" Initialize Error</source> - <translation type="unfinished">Fehler bei Initialisierung von Language Server "%1"</translation> + <translation>Fehler beim Initialisieren von Language Server "%1"</translation> </message> <message> <source>Initialize error: </source> - <translation type="unfinished">Fehler bei Initialisierung: </translation> + <translation>Fehler bei Initialisierung: </translation> </message> <message> <source>Initialize result is invalid.</source> - <translation type="unfinished"></translation> + <translation>Ergebnis der Initialisierung ist ungültig.</translation> </message> <message> <source>Server Info is invalid.</source> - <translation type="unfinished"></translation> + <translation>Serverinformation ist ungültig.</translation> </message> <message> <source>No initialize result.</source> - <translation type="unfinished">Initialisierung ohne Ergebnis.</translation> + <translation>Initialisierung ohne Ergebnis.</translation> </message> <message> <source>Copy to Clipboard</source> - <translation type="unfinished">In die Zwischenablage kopieren</translation> + <translation>In die Zwischenablage kopieren</translation> </message> <message> <source>Cannot handle MIME type of message %1</source> - <translation type="unfinished"></translation> + <translation>MIME type %1 der Nachricht kann nicht verarbeitet werden</translation> </message> <message> <source>Generic StdIO Language Server</source> - <translation type="unfinished"></translation> + <translation>Generischer StdIO Language Server</translation> </message> <message> <source>Inspect Language Clients...</source> - <translation type="unfinished"></translation> + <translation>Language Clients inspizieren...</translation> </message> <message> <source>Always On</source> - <translation type="unfinished"></translation> + <translation>Immer an</translation> </message> <message> <source>Requires an Open File</source> - <translation type="unfinished"></translation> + <translation>Benötigt eine offene Datei</translation> </message> <message> <source>Start Server per Project</source> - <translation type="unfinished"></translation> + <translation>Server pro Projekt starten</translation> </message> <message> <source>Search Again to update results and re-enable Replace</source> - <translation type="unfinished"></translation> + <translation>Suchen Sie erneut, um die Ergebnisse zu aktualisieren und das Ersetzen wieder zu aktivieren</translation> </message> <message numerus="yes"> <source>Re&name %n files</source> - <translation type="unfinished"> + <translation> <numerusform>Eine Datei umbe&nennen</numerusform> <numerusform>%n Dateien umbe&nennen</numerusform> </translation> @@ -31920,84 +31922,84 @@ Example: *.cpp%1*.h</source> <message> <source>Files: %1</source> - <translation type="unfinished">Dateien: + <translation>Dateien: %1</translation> </message> <message> <source>%1 is not reachable anymore.</source> - <translation type="unfinished"></translation> + <translation>%1 ist nicht mehr erreichbar.</translation> </message> <message> <source>Matches all symbols from the current document, based on a language server.</source> - <translation type="unfinished"></translation> + <translation>Filtert alle Symbole im aktuellen Dokument, basierend auf einem Language Server.</translation> </message> <message> <source>Expand All</source> - <translation type="unfinished">Alle aufklappen</translation> + <translation>Alle aufklappen</translation> </message> <message> <source>Client Message</source> - <translation type="unfinished"></translation> + <translation>Client-Nachricht</translation> </message> <message> <source>Messages</source> - <translation type="unfinished"></translation> + <translation>Nachrichten</translation> </message> <message> <source>Server Message</source> - <translation type="unfinished"></translation> + <translation>Server-Nachricht</translation> </message> <message> <source>Log File</source> - <translation type="unfinished">Logdatei</translation> + <translation>Logdatei</translation> </message> <message> <source>Capabilities:</source> - <translation type="unfinished">Fähigkeiten:</translation> + <translation>Fähigkeiten:</translation> </message> <message> <source>Dynamic Capabilities:</source> - <translation type="unfinished"></translation> + <translation>Dynamische Fähigkeiten:</translation> </message> <message> <source>Method:</source> - <translation type="unfinished">Methode:</translation> + <translation>Methode:</translation> </message> <message> <source>Options:</source> - <translation type="unfinished"></translation> + <translation>Einstellungen:</translation> </message> <message> <source>Server Capabilities</source> - <translation type="unfinished"></translation> + <translation>Server-Fähigkeiten</translation> </message> <message> <source>Language Client Inspector</source> - <translation type="unfinished"></translation> + <translation>Language Client Inspektor</translation> </message> <message> <source>Log</source> - <translation type="unfinished">Log</translation> + <translation>Log</translation> </message> <message> <source>Capabilities</source> - <translation type="unfinished"></translation> + <translation>Fähigkeiten</translation> </message> <message> <source>Clear</source> - <translation type="unfinished">Löschen</translation> + <translation>Löschen</translation> </message> <message> <source>Incoming</source> - <translation type="unfinished"></translation> + <translation>Eingehend</translation> </message> <message> <source>Outgoing</source> - <translation type="unfinished"></translation> + <translation>Ausgehend</translation> </message> <message> <source>Call Hierarchy</source> - <translation type="unfinished"></translation> + <translation>Aufrufhierarchie</translation> </message> </context> <context> @@ -32020,11 +32022,11 @@ Example: *.cpp%1*.h</source> </message> <message> <source>Could not parse JSON message "%1".</source> - <translation type="unfinished">Die JSON-Nachricht konnte nicht ausgewertet werden: "%1".</translation> + <translation>Die JSON-Nachricht konnte nicht ausgewertet werden: "%1".</translation> </message> <message> <source>Expected a JSON object, but got a JSON "%1" value.</source> - <translation type="unfinished"></translation> + <translation>Ein JSON-Objekt wurde erwartet, aber ein JSON "%1"-Wert wurde gefunden.</translation> </message> </context> <context> @@ -34539,7 +34541,7 @@ You might find further explanations in the Application Output view.</source> </message> <message> <source>The build step was ended forcefully.</source> - <translation type="unfinished"></translation> + <translation>Der Build-Schritt wurde gestoppt.</translation> </message> <message> <source>The process "%1" exited normally.</source> @@ -35655,7 +35657,7 @@ Bitte versuchen Sie es erneut.</translation> </message> <message> <source>Run Generator</source> - <translation type="unfinished"></translation> + <translation>Generator ausführen</translation> </message> <message> <source>Rebuild Without Dependencies</source> @@ -36524,31 +36526,31 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein </message> <message> <source>Ready to use</source> - <translation type="unfinished"></translation> + <translation>Einsatzbereit</translation> </message> <message> <source>Connected</source> - <translation type="unfinished">Verbunden</translation> + <translation>Verbunden</translation> </message> <message> <source>Disconnected</source> - <translation type="unfinished"></translation> + <translation>Getrennt</translation> </message> <message> <source>Unknown</source> - <translation type="unfinished">Unbekannt</translation> + <translation>Unbekannt</translation> </message> <message> <source>localSource() not implemented for this device type.</source> - <translation type="unfinished"></translation> + <translation>localSource() ist für diesen Gerätetyp nicht implementiert.</translation> </message> <message> <source>No device for given path: "%1".</source> - <translation type="unfinished"></translation> + <translation>Kein Gerät für den angegebenen Pfad: "%1".</translation> </message> <message> <source>Device for path "%1" does not support killing processes.</source> - <translation type="unfinished"></translation> + <translation>Das Beenden von Prozessen wird von dem Gerät für den Pfad "%1" nicht unterstützt.</translation> </message> <message> <source>Filter</source> @@ -37848,7 +37850,7 @@ Bitte schließen Sie alle laufenden Instanzen Ihrer Anwendung vor dem Erstellen. </message> <message> <source>Add QML_ELEMENT</source> - <translation type="unfinished"></translation> + <translation>QML_ELEMENT einfügen</translation> </message> <message> <source>Creates a widget-based Qt application that contains a Qt Designer-based main window. @@ -38084,19 +38086,19 @@ Benutzen Sie dies nur für Prototypen. Sie können damit keine vollständige Anw </message> <message> <source>Create a project that you can open in Qt Design Studio</source> - <translation type="unfinished"></translation> + <translation>Erstellt ein Projekt, das in Qt Design Studio geöffnet werden kann</translation> </message> <message> <source>Create a project with a structure that is compatible both with Qt Design Studio (via .qmlproject) and with Qt Creator (via CMakeLists.txt). It contains a .ui.qml form that you can visually edit in Qt Design Studio.</source> - <translation type="unfinished"></translation> + <translation>Erstellt ein Projekt mit einer Struktur, die sowohl mit Qt Design Studio (via qmlproject) als auch mit Qt Creator (via CMakeLists.txt) kompatibel ist. Es enthält ein .ui.qml-Formular, das in Qt Design Studio visuell bearbeitet werden kann.</translation> </message> <message> <source>The minimum version of Qt you want to build the application for</source> - <translation type="unfinished"></translation> + <translation>Die niedrigste Qt-Version, die Sie zum Bauen der Anwendung benutzen wollen</translation> </message> <message> <source>Creates a Qt Quick application that contains an empty window. Optionally, you can create a Qt Design Studio project.</source> - <translation type="unfinished"></translation> + <translation>Erstellt eine Qt Quick-Anwendung, die ein leeres Fenster enthält. Optional kann ein Qt Design Studio-Projekt erstellt werden.</translation> </message> <message> <source>Creates a CMake-based test project for which a code snippet can be entered.</source> @@ -38107,7 +38109,10 @@ Benutzen Sie dies nur für Prototypen. Sie können damit keine vollständige Anw { return 0; }</source> - <translation type="unfinished"></translation> + <translation>int main(int argc, char *argv[]) +{ + return 0; +}</translation> </message> <message> <source>Code:</source> @@ -38784,57 +38789,57 @@ Benutzen Sie dies nur für Prototypen. Sie können damit keine vollständige Anw <message> <source>%1: Name.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Name.</translation> </message> <message> <source>%1: Full path to main file.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Vollständiger Pfad zur Hauptdatei.</translation> </message> <message> <source>%1: The name the active kit.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Der Name des aktiven Kits.</translation> </message> <message> <source>%1: Name of the active build configuration.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Name der aktiven Build-Konfiguration.</translation> </message> <message> <source>%1: Type of the active build configuration.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Typ der aktiven Build-Konfiguration.</translation> </message> <message> <source>%1: Full build path of active build configuration.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Vollständiges Build-Verzeichnis der aktiven Build-Konfiguration.</translation> </message> <message> <source>%1: Variables in the active build environment.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Variablen in der aktiven Build-Umgebung.</translation> </message> <message> <source>%1: Name of the active run configuration.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Name der aktiven Ausführungskonfiguration.</translation> </message> <message> <source>%1: Executable of the active run configuration.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Ausführbare Datei der aktiven Ausführungskonfiguration.</translation> </message> <message> <source>%1: Variables in the environment of the active run configuration.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Variablen in der Umgebung der aktiven Ausführungskonfiguration.</translation> </message> <message> <source>%1: Working directory of the active run configuration.</source> <extracomment>%1 is something like "Active project"</extracomment> - <translation type="unfinished"></translation> + <translation>%1: Arbeitsverzeichnis der aktiven Ausführungskonfiguration.</translation> </message> <message> <source>Target Settings</source> @@ -39055,11 +39060,11 @@ Sie werden erhalten.</numerusform> </message> <message> <source>Taskhub Error</source> - <translation type="unfinished"></translation> + <translation>Taskhub-Fehler</translation> </message> <message> <source>Taskhub Warning</source> - <translation type="unfinished"></translation> + <translation>Taskhub-Warnung</translation> </message> <message> <source>Build Issue</source> @@ -39103,15 +39108,15 @@ Sie werden erhalten.</numerusform> </message> <message> <source>&Configure Project</source> - <translation type="unfinished"></translation> + <translation>Projekt &Konfigurieren</translation> </message> <message> <source>Enable Kit for Project "%1"</source> - <translation type="unfinished">Kit für das Projekt "%2" aktivieren {1"?}</translation> + <translation>Kit für das Projekt "%1" aktivieren</translation> </message> <message> <source>Disable Kit for Project "%1"</source> - <translation type="unfinished">Kit für das Projekt "%2" deaktivieren {1"?}</translation> + <translation>Kit für das Projekt "%1" deaktivieren</translation> </message> <message> <source>Cancel Build and Disable Kit in This Project</source> @@ -39308,11 +39313,11 @@ Was soll %1 tun?</translation> </message> <message> <source>X11 Forwarding:</source> - <translation type="unfinished"></translation> + <translation>X11-Weiterleitung:</translation> </message> <message> <source>Forward to local display</source> - <translation type="unfinished">Auf lokalen Bildschirm weiterleiten</translation> + <translation>Auf lokalen Bildschirm weiterleiten</translation> </message> <message> <source>Make arguments:</source> @@ -39650,7 +39655,7 @@ Was soll %1 tun?</translation> </message> <message> <source>Falling back to use the cached environment for "%1" after:</source> - <translation type="unfinished"></translation> + <translation>Auf die gespeicherte Umgebung für "%1" zurückgreifen nach:</translation> </message> <message> <source><empty></source> @@ -40103,16 +40108,16 @@ fails because Clang does not understand the target architecture.</source> </message> <message> <source>No device for path "%1"</source> - <translation type="unfinished"></translation> + <translation>Kein Gerät für Pfad "%1"</translation> </message> <message> <source>Profile</source> <extracomment>The name of the profile build configuration created by default for a qmake project.</extracomment> - <translation type="unfinished">Profile</translation> + <translation>Profile</translation> </message> <message> <source>Profiling</source> - <translation type="unfinished">Profiling</translation> + <translation>Profiling</translation> </message> </context> <context> @@ -44420,7 +44425,7 @@ wirklich löschen?</translation> </message> <message> <source>"%1" produced no output: %2.</source> - <translation type="unfinished"></translation> + <translation>"%1" hat keine Ausgabe generiert: %2.</translation> </message> <message> <source>qmake "%1" is not an executable.</source> @@ -44428,7 +44433,7 @@ wirklich löschen?</translation> </message> <message> <source>No QML utility installed.</source> - <translation type="unfinished"></translation> + <translation>Kein QML-Werkzeug installiert.</translation> </message> <message> <source>Desktop</source> @@ -44458,7 +44463,7 @@ wirklich löschen?</translation> </message> <message> <source>qmake path:</source> - <translation type="unfinished"></translation> + <translation>Pfad zu qmake:</translation> </message> <message> <source>Register documentation:</source> @@ -44498,7 +44503,7 @@ wirklich löschen?</translation> </message> <message> <source>qmake Path</source> - <translation type="unfinished"></translation> + <translation>Pfad zu qmake</translation> </message> <message> <source>Qt version %1 for %2</source> @@ -44546,7 +44551,7 @@ wirklich löschen?</translation> </message> <message> <source>Linking with a Qt installation automatically registers Qt versions and kits, and other tools that were installed with that Qt installer, in this Qt Creator installation. Other Qt Creator installations are not affected.</source> - <translation type="unfinished"></translation> + <translation>Das Verknüpfen mit einer Qt-Installation registriert Qt-Versionen, Kits und andere mit dem Qt-Installationsprogramm installierte Werkzeuge automatisch in dieser Qt Creator-Installation. Dies hat keine Auswirkung auf andere Qt Creator-Installationen.</translation> </message> <message> <source>%1's resource directory is not writable.</source> @@ -44554,11 +44559,11 @@ wirklich löschen?</translation> </message> <message> <source>Error Linking With Qt</source> - <translation type="unfinished"></translation> + <translation>Fehler beim Verknüpfen mit Qt</translation> </message> <message> <source>Could not write to "%1".</source> - <translation type="unfinished"></translation> + <translation>Schreiben nach "%1" ist fehlgeschlagen.</translation> </message> <message> <source>%1 is currently linked to "%2".</source> @@ -44720,35 +44725,35 @@ wirklich löschen?</translation> </message> <message> <source>Name:</source> - <translation type="unfinished">Name:</translation> + <translation>Name:</translation> </message> <message> <source>Invalid Qt version</source> - <translation type="unfinished">Ungültige Qt-Version</translation> + <translation>Ungültige Qt-Version</translation> </message> <message> <source>ABI:</source> - <translation type="unfinished">ABI:</translation> + <translation>ABI:</translation> </message> <message> <source>Source:</source> - <translation type="unfinished">Quelle:</translation> + <translation>Quelle:</translation> </message> <message> <source>mkspec:</source> - <translation type="unfinished">mkspec:</translation> + <translation>mkspec:</translation> </message> <message> <source>qmake:</source> - <translation type="unfinished">qmake:</translation> + <translation>qmake:</translation> </message> <message> <source>Default:</source> - <translation type="unfinished">Vorgabe:</translation> + <translation>Vorgabe:</translation> </message> <message> <source>Version:</source> - <translation type="unfinished">Version:</translation> + <translation>Version:</translation> </message> <message> <source>Qt version</source> @@ -44776,11 +44781,11 @@ wirklich löschen?</translation> </message> <message> <source>The host location of the current Qt version.</source> - <translation type="unfinished"></translation> + <translation>Ort der aktuellen Qt-Version auf dem Host.</translation> </message> <message> <source>The installation location of the current Qt version's internal host executable files.</source> - <translation type="unfinished"></translation> + <translation>Das Installationsverzeichnis für interne ausführbare Dateien für den Host der aktuellen Qt-Version.</translation> </message> <message> <source>The installation location of the current Qt version's header files.</source> @@ -44800,7 +44805,7 @@ wirklich löschen?</translation> </message> <message> <source>The installation location of the current Qt version's internal executable files.</source> - <translation type="unfinished"></translation> + <translation>Das Installationsverzeichnis für interne ausführbare Dateien der aktuellen Qt-Version.</translation> </message> <message> <source>The installation location of the current Qt version's plugins.</source> @@ -44844,27 +44849,27 @@ wirklich löschen?</translation> </message> <message> <source>Timeout running "%1".</source> - <translation type="unfinished"></translation> + <translation>Zeitüberschreitung bei Ausführung von "%1".</translation> </message> <message> <source>No Qt version.</source> - <translation type="unfinished">Keine Qt-Version.</translation> + <translation>Keine Qt-Version.</translation> </message> <message> <source>Invalid Qt version.</source> - <translation type="unfinished">Ungültige Qt-Version.</translation> + <translation>Ungültige Qt-Version.</translation> </message> <message> <source>Requires Qt 5.0.0 or newer.</source> - <translation type="unfinished">Erfordert Qt 5.0.0 oder neuer.</translation> + <translation>Erfordert Qt 5.0.0 oder neuer.</translation> </message> <message> <source>Requires Qt 5.3.0 or newer.</source> - <translation type="unfinished">Erfordert Qt 5.3.0 oder neuer.</translation> + <translation>Erfordert Qt 5.3.0 oder neuer.</translation> </message> <message> <source>This Qt Version does not contain Qt Quick Compiler.</source> - <translation type="unfinished">Diese Qt-Version enthält keinen Qt Quick Compiler.</translation> + <translation>Diese Qt-Version enthält keinen Qt Quick Compiler.</translation> </message> <message> <source>The Qt library to use for all projects using this kit.<br>A Qt version is required for qmake-based projects and optional when using other build systems.</source> @@ -44888,11 +44893,11 @@ wirklich löschen?</translation> </message> <message> <source>QML debugging and profiling:</source> - <translation type="unfinished"></translation> + <translation>QML-Debuggen und -Profiling:</translation> </message> <message> <source>Might make your application vulnerable.<br/>Only use in a safe environment.</source> - <translation type="unfinished"></translation> + <translation>Kann Ihre Anwendung angreifbar machen.<br/>Verwenden Sie dies nur in einer sicheren Umgebung.</translation> </message> <message> <source>Qt Quick Compiler:</source> @@ -44904,7 +44909,7 @@ wirklich löschen?</translation> </message> <message> <source>If you plan to provide translations for your project's user interface via the Qt Linguist tool, please select a language here. A corresponding translation (.ts) file will be generated for you.</source> - <translation type="unfinished"></translation> + <translation>Falls Sie planen, Übersetzungen für die Benutzeroberfläche Ihres Projekts über das Qt Linguist-Werkzeug bereit zu stellen, wählen Sie hier eine Sprache. Eine zugehörige Übersetzungsdatei (.ts) wird für Sie erzeugt.</translation> </message> <message> <source><none></source> @@ -44928,31 +44933,31 @@ wirklich löschen?</translation> </message> <message> <source>Link with a Qt installation to automatically register Qt versions and kits? To do this later, select Edit > Preferences > Kits > Qt Versions > Link with Qt.</source> - <translation type="unfinished"></translation> + <translation>Wollen Sie eine Qt-Installation verknüpfen, um Qt-Versionen und Kits automatisch zu registrieren? Dies geht auch später unter Bearbeiten > Einstellungen > Kits > Qt-Versionen > Mit Qt verknüpfen.</translation> </message> <message> <source>Full path to the host bin directory of the Qt version in the active kit of the project containing the current document.</source> - <translation type="unfinished"></translation> + <translation>Vollständiger Pfad zum Host-"bin"-Verzeichnis der Qt-Version des aktiven Kits des Projekts des aktuellen Dokuments.</translation> </message> <message> <source>Full path to the target bin directory of the Qt version in the active kit of the project containing the current document.<br>You probably want %1 instead.</source> - <translation type="unfinished"></translation> + <translation>Vollständiger Pfad zum Ziel-"bin"-Verzeichnis der Qt-Version des aktiven Kits des Projekts des aktuellen Dokuments.<br>Wahrscheinlich sollten Sie stattdessen %1 nutzen.</translation> </message> <message> <source>Full path to the host libexec directory of the Qt version in the active kit of the project containing the current document.</source> - <translation type="unfinished"></translation> + <translation>Vollständiger Pfad zum Host-"libexec"-Verzeichnis der Qt-Version des aktiven Kits des Projekts des aktuellen Dokuments.</translation> </message> <message> <source>Full path to the host bin directory of the Qt version in the active kit of the active project.</source> - <translation type="unfinished"></translation> + <translation>Vollständiger Pfad zum Host-"bin"-Verzeichnis der Qt-Version des aktiven Kits des aktiven Projekts.</translation> </message> <message> <source>Full path to the target bin directory of the Qt version in the active kit of the active project.<br>You probably want %1 instead.</source> - <translation type="unfinished"></translation> + <translation>Vollständiger Pfad zum Ziel-"bin"-Verzeichnis der Qt-Version des aktiven Kits des aktiven Projekts.<br>Wahrscheinlich sollten Sie stattdessen %1 nutzen.</translation> </message> <message> <source>Full path to the libexec bin directory of the Qt version in the active kit of the active project.</source> - <translation type="unfinished"></translation> + <translation>Vollständiger Pfad zum Host-"libexec"-Verzeichnis der Qt-Version des aktiven Kits des aktiven Projekts.</translation> </message> <message> <source>[Inexact] </source> @@ -44962,17 +44967,17 @@ wirklich löschen?</translation> <message> <source>Boot2Qt</source> <comment>Qt version is used for Boot2Qt development</comment> - <translation type="unfinished">Boot2Qt</translation> + <translation>Boot2Qt</translation> </message> <message> <source>Featured</source> <comment>Category for highlighted examples</comment> - <translation type="unfinished"></translation> + <translation>Empfohlen</translation> </message> <message> <source>Other</source> <comment>Category for all other examples</comment> - <translation type="unfinished">Andere</translation> + <translation>Andere</translation> </message> </context> <context> @@ -45843,19 +45848,19 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e </message> <message> <source>Add Files</source> - <translation type="unfinished">Dateien hinzufügen</translation> + <translation>Dateien hinzufügen</translation> </message> <message> <source>Remove</source> - <translation type="unfinished"></translation> + <translation>Entfernen</translation> </message> <message> <source>Alias:</source> - <translation type="unfinished">Aliasname:</translation> + <translation>Aliasname:</translation> </message> <message> <source>Properties</source> - <translation type="unfinished">Eigenschaften</translation> + <translation>Eigenschaften</translation> </message> <message> <source>Invalid file location</source> @@ -47642,55 +47647,55 @@ Failed to open file "%1"</source> </message> <message> <source>Waiting for data...</source> - <translation type="unfinished">Warte auf Daten...</translation> + <translation>Warte auf Daten...</translation> </message> <message> <source>Subversion Command</source> - <translation type="unfinished">Subversion-Kommando</translation> + <translation>Subversion-Kommando</translation> </message> <message> <source>Subversion command:</source> - <translation type="unfinished">Subversion-Kommando:</translation> + <translation>Subversion-Kommando:</translation> </message> <message> <source>Username:</source> - <translation type="unfinished"></translation> + <translation>Benutzername:</translation> </message> <message> <source>Password:</source> - <translation type="unfinished">Passwort:</translation> + <translation>Passwort:</translation> </message> <message> <source>Ignore whitespace changes in annotation</source> - <translation type="unfinished">Änderungen der Leerzeichen bei Annotation weglassen</translation> + <translation>Änderungen der Leerzeichen bei Annotation weglassen</translation> </message> <message> <source>Log count:</source> - <translation type="unfinished">Log-Anzeige beschränken auf:</translation> + <translation>Log-Anzeige beschränken auf:</translation> </message> <message> <source>Timeout:</source> - <translation type="unfinished">Zeitlimit:</translation> + <translation>Zeitlimit:</translation> </message> <message> <source>s</source> - <translation type="unfinished">s</translation> + <translation>s</translation> </message> <message> <source>Subversion</source> - <translation type="unfinished">Subversion</translation> + <translation>Subversion</translation> </message> <message> <source>Configuration</source> - <translation type="unfinished">Konfiguration</translation> + <translation>Konfiguration</translation> </message> <message> <source>Authentication</source> - <translation type="unfinished">Authentifizierung</translation> + <translation>Authentifizierung</translation> </message> <message> <source>Miscellaneous</source> - <translation type="unfinished">Sonstige Einstellungen</translation> + <translation>Sonstige Einstellungen</translation> </message> </context> <context> @@ -48778,7 +48783,7 @@ Bestimmt das Verhalten bezüglich der Einrückung von Fortsetzungszeilen. </message> <message> <source>Unused variable</source> - <translation>Unbenutzte Variable</translation> + <translation>Nicht verwendete Variable</translation> </message> <message> <source>Diff Against Current File</source> @@ -49660,7 +49665,7 @@ Wird benutzt um die Funktion zu markieren, die ein gesuchtes Symbol benutzt.</tr </message> <message> <source>Occurrences of unused variables.</source> - <translation>Vorkommen unbenutzter Variablen.</translation> + <translation>Vorkommen nicht verwendeter Variablen.</translation> </message> <message> <source>Renaming Occurrence</source> @@ -50576,7 +50581,7 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>%1 and other updates are available. Check the <a %2>Qt blog</a> for details.</source> - <translation type="unfinished"></translation> + <translation>%1 und andere Aktualisierungen sind verfügbar. Details finden Sie im <a %2>Qt Blog</a>.</translation> </message> <message> <source>New updates are available. Start the update?</source> @@ -50685,7 +50690,7 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>Update</source> - <translation type="unfinished">Aktualisieren</translation> + <translation>Aktualisierung</translation> </message> <message> <source>Qt Maintenance Tool</source> @@ -50762,11 +50767,11 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>Local</source> - <translation type="unfinished"></translation> + <translation>Lokal</translation> </message> <message> <source>Remote</source> - <translation type="unfinished"></translation> + <translation>Entfernt</translation> </message> <message> <source>Choose...</source> @@ -50850,7 +50855,7 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>Directory "%1" will be created.</source> - <translation type="unfinished"></translation> + <translation>Verzeichnis "%1" wird erstellt.</translation> </message> <message> <source>The project already exists.</source> @@ -51107,35 +51112,35 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>copyFile is not implemented for "%1"</source> - <translation type="unfinished"></translation> + <translation>copyFile ist für "%1" nicht implementiert</translation> </message> <message> <source>Cannot copy from %1, it is not a directory.</source> - <translation type="unfinished"></translation> + <translation>%1 kann nicht kopiert werden, da es kein Verzeichnis ist.</translation> </message> <message> <source>Cannot copy %1 to %2, it is not a writable directory.</source> - <translation type="unfinished"></translation> + <translation>%1 kann nicht nach %2 kopiert werden, da es kein schreibbares Verzeichnis ist.</translation> </message> <message> <source>Failed to copy recursively from "%1" to "%2" while trying to create tar archive from source: %3</source> - <translation type="unfinished"></translation> + <translation>Rekursives Kopieren von "%1" nach "%2" beim Erstellen des Tar-Archivs der Quelle fehlgeschlagen: %3</translation> </message> <message> <source>Failed to copy recursively from "%1" to "%2" while trying to extract tar archive to target: %3</source> - <translation type="unfinished"></translation> + <translation>Rekursives Kopieren von "%1" nach "%2" beim Auspacken des Tar-Archivs am Ziel fehlgeschlagen: %3</translation> </message> <message> <source>fileContents is not implemented for "%1"</source> - <translation type="unfinished"></translation> + <translation>fileContents ist für "%1" nicht implementiert</translation> </message> <message> <source>writeFileContents is not implemented for "%1"</source> - <translation type="unfinished"></translation> + <translation>writeFileContents ist für "%1" nicht implementiert</translation> </message> <message> <source>createTempFile is not implemented for "%1"</source> - <translation type="unfinished"></translation> + <translation>createTempFile ist für "%1" nicht implementiert</translation> </message> <message> <source>Refusing to remove root directory.</source> @@ -51155,51 +51160,51 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>Failed to copy file "%1" to "%2".</source> - <translation type="unfinished"></translation> + <translation>Kopieren der Datei "%1" nach "%2" ist fehlgeschlagen.</translation> </message> <message> <source>File "%1" does not exist</source> - <translation type="unfinished"></translation> + <translation>Datei "%1" existiert nicht</translation> </message> <message> <source>Could not open File "%1"</source> - <translation type="unfinished"></translation> + <translation>Die Datei "%1" konnte nicht geöffnet werden</translation> </message> <message> <source>Cannot read "%1": %2</source> - <translation type="unfinished"></translation> + <translation>"%1" kann nicht gelesen werden: %2</translation> </message> <message> <source>Could not open file "%1" for writing</source> - <translation type="unfinished"></translation> + <translation>Die Datei "%1" konnte nicht zum Schreiben geöffnet werden</translation> </message> <message> <source>Could not write to file "%1" (only %2 of %3 bytes written)</source> - <translation type="unfinished"></translation> + <translation>Die Datei "%1" konnte nicht geschrieben werden (es wurden nur %2 von %3 Bytes geschrieben)</translation> </message> <message> <source>Could not create temporary file in "%1" (%2)</source> - <translation type="unfinished"></translation> + <translation>Es konnte keine temporäre Datei in "%1" erstellt werden (%2)</translation> </message> <message> <source>Failed to copy file "%1" to "%2": %3</source> - <translation type="unfinished">Die Datei "%1" konnte nicht nach "%2" kopiert werden: %3. {1"?} {2"?} {3?}</translation> + <translation>Die Datei "%1" konnte nicht nach "%2" kopiert werden: %3</translation> </message> <message> <source>Failed reading file "%1": %2</source> - <translation type="unfinished"></translation> + <translation>Die Datei "%1" konnte nicht gelesen werden: %2</translation> </message> <message> <source>Failed writing file "%1": %2</source> - <translation type="unfinished"></translation> + <translation>Die Datei "%1" konnte nicht geschrieben werden: %2</translation> </message> <message> <source>Failed creating temporary file "%1": %2</source> - <translation type="unfinished"></translation> + <translation>Die temporäre Datei "%1" konnte nicht erstellt werden: %2</translation> </message> <message> <source>Failed creating temporary file "%1" (too many tries)</source> - <translation type="unfinished"></translation> + <translation>Die temporäre Datei "%1" konnte nicht erstellt werden (zu viele Versuche)</translation> </message> <message> <source>Failed to create directory "%1".</source> @@ -51211,28 +51216,29 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>Cannot Save Workspace</source> - <translation type="unfinished"></translation> + <translation>Arbeitsbereich kann nicht gespeichert werden</translation> </message> <message> <source>Could not save workspace to file %1</source> - <translation type="unfinished"></translation> + <translation>Arbeitsbereich konnte nicht in der Datei %1 gespeichert werden</translation> </message> <message> <source>Delete Workspace</source> - <translation type="unfinished"></translation> + <translation>Arbeitsbereich löschen</translation> </message> <message> <source>Delete Workspaces</source> - <translation type="unfinished"></translation> + <translation>Arbeitsbereiche löschen</translation> </message> <message> <source>Delete workspace %1?</source> - <translation type="unfinished"></translation> + <translation>Arbeitsbereich %1 löschen?</translation> </message> <message> <source>Delete these workspaces? %1</source> - <translation type="unfinished"></translation> + <translation>Diese Arbeitsbereiche löschen? + %1</translation> </message> <message> <source>File Error</source> @@ -51240,11 +51246,11 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>Cannot Restore Workspace</source> - <translation type="unfinished"></translation> + <translation>Arbeitsbereich kann nicht wiederhergestellt werden</translation> </message> <message> <source>Could not restore workspace %1</source> - <translation type="unfinished"></translation> + <translation>Der Arbeitsbereich %1 konnte nicht wiederhergestellt werden</translation> </message> <message> <source>Cannot write file %1: %2</source> @@ -51290,19 +51296,19 @@ Die Trace-Daten sind verloren.</translation> </message> <message> <source>Error while trying to copy file: %1</source> - <translation type="unfinished"></translation> + <translation>Fehler beim Versuch die Datei zu kopieren: %1</translation> </message> <message> <source>Could not copy file: %1</source> - <translation type="unfinished"></translation> + <translation>Die Datei konnte nicht kopiert werden: %1</translation> </message> <message> <source>Could not set permissions on "%1"</source> - <translation type="unfinished"></translation> + <translation>Die Berechtigungen für "%1" konnten nicht gesetzt werden</translation> </message> <message> <source>No "localSource" device hook set.</source> - <translation type="unfinished"></translation> + <translation>Keine Geräteimplementation für "localSource" gesetzt.</translation> </message> <message> <source>Out of memory.</source> @@ -51767,11 +51773,11 @@ in "%2" aus. </message> <message> <source>Failed to retrieve clangd version: Unexpected clangd output.</source> - <translation type="unfinished">Konnte Clangd-Version nicht bestimmen. Unerwartete Ausgabe.</translation> + <translation>Konnte Clangd-Version nicht bestimmen. Unerwartete Ausgabe.</translation> </message> <message> <source>The clangd version is %1, but %2 or greater is required.</source> - <translation type="unfinished">Die Clangd-Version ist %1, aber %2 oder neuer wird benötigt.</translation> + <translation>Die Clangd-Version ist %1, aber %2 oder neuer wird benötigt.</translation> </message> </context> <context> diff --git a/share/qtcreator/translations/qtcreator_zh_TW.ts b/share/qtcreator/translations/qtcreator_zh_TW.ts index 9f7596be027..7c1e032342f 100644 --- a/share/qtcreator/translations/qtcreator_zh_TW.ts +++ b/share/qtcreator/translations/qtcreator_zh_TW.ts @@ -9,7 +9,7 @@ </message> <message> <source>Unable to send command line arguments to the already running instance. It appears to be not responding. Do you want to start a new instance of Creator?</source> - <translation>無法傳送命令列參數到正在執行中的實體。該實體似乎無法回應。您要重新啟動一個 Creator 的實體嗎?</translation> + <translation>無法傳送命令列引數到正在執行中的實體。該實體似乎無法回應。您要重新啟動一個 Creator 的實體嗎?</translation> </message> <message> <source>Could not send message</source> @@ -166,11 +166,11 @@ </message> <message> <source>New Configuration</source> - <translation>新設置</translation> + <translation>新組態</translation> </message> <message> <source>New configuration name:</source> - <translation>新設置名稱:</translation> + <translation>新組態名稱:</translation> </message> <message> <source>Run cmake</source> @@ -178,7 +178,7 @@ </message> <message> <source>Reconfigure project:</source> - <translation>重新設置專案:</translation> + <translation>重新組態專案:</translation> </message> <message> <source>&Change</source> @@ -190,7 +190,7 @@ </message> <message> <source>Arguments:</source> - <translation>參數:</translation> + <translation>引數:</translation> </message> <message> <source>Select Working Directory</source> @@ -214,7 +214,7 @@ </message> <message> <source>Base environment for this runconfiguration:</source> - <translation>本次執行設置的基本環境變數:</translation> + <translation>本次執行組態的基本環境變數:</translation> </message> <message> <source>Clean Environment</source> @@ -238,7 +238,7 @@ </message> <message> <source>Generator:</source> - <translation>建立器:</translation> + <translation>產生器:</translation> </message> <message> <source>Run CMake</source> @@ -246,23 +246,23 @@ </message> <message> <source>The directory %1 already contains a cbp file, which is recent enough. You can pass special arguments or change the used tool chain here and rerun CMake. Or simply finish the wizard directly.</source> - <translation type="obsolete">目錄 %1 已存在一份足夠新的 cbp 檔。您可以在此傳送特殊參數,或是變更所使用的工具鍊,然後重新執行 CMake。或者您也可以直接結束此精靈。</translation> + <translation type="obsolete">目錄 %1 已存在一份足夠新的 cbp 檔。您可以在此傳送特殊引數,或是變更所使用的工具鍊,然後重新執行 CMake。或者您也可以直接結束此精靈。</translation> </message> <message> <source>The directory %1 does not contain a cbp file. Qt Creator needs to create this file by running CMake. Some projects require command line arguments to the initial CMake call.</source> - <translation>目錄 %1 中沒有 cbp 檔。Qt Creator 需要執行 CMake 以建立此檔案。某些專案需要命令列參數來初始化 CMake 的呼叫。</translation> + <translation>目錄 %1 中沒有 cbp 檔。Qt Creator 需要執行 CMake 以建立此檔案。某些專案需要命令列引數來初始化 CMake 的呼叫。</translation> </message> <message> <source>The directory %1 contains an outdated .cbp file. Qt Creator needs to update this file by running CMake. If you want to add additional command line arguments, add them below. Note that CMake remembers command line arguments from the previous runs.</source> - <translation>目錄 %1 包含了一個過期的 .cbp 檔。Qt Creator需要執行 CMake 以更新此檔案。如果您想新增額外的命令列參數,請新增在下面。注意 CMake 會記住上次執行時的命令列參數。</translation> + <translation>目錄 %1 包含了一個過期的 .cbp 檔。Qt Creator需要執行 CMake 以更新此檔案。如果您想新增額外的命令列引數,請新增在下面。注意 CMake 會記住上次執行時的命令列引數。</translation> </message> <message> <source>The directory %1 specified in a build-configuration, does not contain a cbp file. Qt Creator needs to recreate this file, by running CMake. Some projects require command line arguments to the initial CMake call. Note that CMake remembers command line arguments from the previous runs.</source> - <translation>在建置設置中指定的目錄 %1 中未包含 cbp 檔案。Qt Creator 需要執行 CMake 以重新建立此檔案。某些專案需要命令列參數來初始化 CMake 的呼叫。如果您想新增額外的命令列參數,請新增在下面。注意 CMake 會記住上次執行時的命令列參數。</translation> + <translation>在建置組態中指定的目錄 %1 中未包含 cbp 檔案。Qt Creator 需要執行 CMake 以重新建立此檔案。某些專案需要命令列引數來初始化 CMake 的呼叫。如果您想新增額外的命令列引數,請新增在下面。注意 CMake 會記住上次執行時的命令列引數。</translation> </message> <message> <source>Qt Creator needs to run CMake in the new build directory. Some projects require command line arguments to the initial CMake call.</source> - <translation>Qt Creator 需要在新的建置目錄下執行 CMake。某些專案需要命令列參數來初始化 CMake 的呼叫。</translation> + <translation>Qt Creator 需要在新的建置目錄下執行 CMake。某些專案需要命令列引數來初始化 CMake 的呼叫。</translation> </message> <message> <source>Refreshing cbp file in %1.</source> @@ -270,15 +270,15 @@ </message> <message> <source>MinGW Generator (%1)</source> - <translation type="obsolete">MinGW 建立器 (%1)</translation> + <translation type="obsolete">MinGW 產生器 (%1)</translation> </message> <message> <source>Unix Generator (%1)</source> - <translation type="obsolete">Unix 建立器 (%1)</translation> + <translation type="obsolete">Unix 產生器 (%1)</translation> </message> <message> <source>No generator selected.</source> - <translation>沒有選擇建立器。</translation> + <translation>沒有選擇產生器。</translation> </message> <message> <source>CMake exited with errors. Please check CMake output.</source> @@ -286,7 +286,7 @@ </message> <message> <source>NMake Generator (%1)</source> - <translation type="obsolete">NMake 建立器(%1)</translation> + <translation type="obsolete">NMake 產生器(%1)</translation> </message> <message> <source>No valid cmake executable specified.</source> @@ -302,7 +302,7 @@ </message> <message> <source>Additional arguments:</source> - <translation>額外的參數:</translation> + <translation>額外的引數:</translation> </message> <message> <source>Targets:</source> @@ -1251,7 +1251,7 @@ </message> <message> <source>Debugging complex shell commands in a terminal is currently not supported.</source> - <translation>目前不支援在終端機中對複雜的 shell 指令除錯。</translation> + <translation>目前不支援在終端機中對複雜的 shell 命令除錯。</translation> </message> <message> <source>Quoting error in terminal command.</source> @@ -1259,7 +1259,7 @@ </message> <message> <source>Terminal command may not be a shell command.</source> - <translation>終端機指令可能不是一個 shell 指令。</translation> + <translation>終端機命令可能不是一個 shell 命令。</translation> </message> <message> <source>Cannot start the terminal emulator '%1'.</source> @@ -1652,7 +1652,7 @@ </message> <message> <source>Code Style</source> - <translation>源碼樣式</translation> + <translation>程式碼樣式</translation> </message> <message> <source>File Naming</source> @@ -1744,7 +1744,7 @@ </message> <message> <source>Generate a <i>brief</i> command with an initial description for the corresponding declaration</source> - <translation>對相關的宣告產生一個<i>簡易</i>的指令與初始的描述</translation> + <translation>對相關的宣告產生一個<i>簡易</i>的命令與初始的描述</translation> </message> <message> <source>Generate brief description</source> @@ -2010,7 +2010,7 @@ For more details, see/etc/sysctl.d/10-ptrace.conf </message> <message> <source>Command:</source> - <translation>指令:</translation> + <translation>命令:</translation> </message> <message> <source>Message:</source> @@ -2103,7 +2103,7 @@ For more details, see/etc/sysctl.d/10-ptrace.conf </message> <message> <source>Breakpoint on QML Signal Handler</source> - <translation type="obsolete">在 QML 信號處理器的中斷點</translation> + <translation type="obsolete">在 QML 訊號處理器的中斷點</translation> </message> <message> <source>Breakpoint at JavaScript throw</source> @@ -2152,7 +2152,7 @@ For more details, see/etc/sysctl.d/10-ptrace.conf </message> <message> <source>Additional &arguments:</source> - <translation>額外的參數(&A):</translation> + <translation>額外的引數(&A):</translation> </message> <message> <source>Debugger Paths</source> @@ -2212,7 +2212,7 @@ For more details, see/etc/sysctl.d/10-ptrace.conf </message> <message> <source><html><head/><body><p>The debugger is not configured to use the public <a href="%1">Microsoft Symbol Server</a>. This is recommended for retrieval of the symbols of the operating system libraries.</p><p><i>Note:</i> A fast internet connection is required for this to work smoothly. Also, a delay might occur when connecting for the first time.</p><p>Would you like to set it up?</p></br></body></html></source> - <translation type="obsolete"><html><head/><body><p> 除錯工具沒有被設置成使用公開的<a href="%1">微軟符號伺服器</a>。建議您使用符號伺服器,以便取得作業系統函式庫中的符號。</p><p><i>注意:</i>此項工作需要一個快速的網際網路連線,才能讓此工作較順暢。同時,第一次連結可能造成延遲。</p><p>您要設置符號伺服器嗎?</p></br></body></html></translation> + <translation type="obsolete"><html><head/><body><p> 除錯工具沒有被組態成使用公開的<a href="%1">微軟符號伺服器</a>。建議您使用符號伺服器,以便取得作業系統函式庫中的符號。</p><p><i>注意:</i>此項工作需要一個快速的網際網路連線,才能讓此工作較順暢。同時,第一次連結可能造成延遲。</p><p>您要設置符號伺服器嗎?</p></br></body></html></translation> </message> <message> <source>Symbol Server</source> @@ -2244,7 +2244,7 @@ For more details, see/etc/sysctl.d/10-ptrace.conf </message> <message> <source>Show a Message Box When Receiving a Signal</source> - <translation>當接收到信號時顯示訊息盒</translation> + <translation>當接收到訊號時顯示訊息盒</translation> </message> <message> <source>Log Time Stamps</source> @@ -2534,7 +2534,7 @@ For more details, see/etc/sysctl.d/10-ptrace.conf <source>The gdb process has not responded to a command within %n second(s). This could mean it is stuck in an endless loop or taking longer than expected to perform the operation. You can choose between waiting longer or abort debugging.</source> <translation type="obsolete"> - <numerusform>GDB 行程在 %n 秒之內未回應指令。這可能表示程式陷入無窮迴圈,或執行操作的時間超過預期。 + <numerusform>GDB 行程在 %n 秒之內未回應命令。這可能表示程式陷入無窮迴圈,或執行操作的時間超過預期。 您可以選擇繼續等待或中止除錯。</numerusform> </translation> </message> @@ -2552,7 +2552,7 @@ You can choose between waiting longer or abort debugging.</source> </message> <message> <source>Application exited after receiving signal %1</source> - <translation>應用程式接收到信號 %1 後退出</translation> + <translation>應用程式接收到訊號 %1 後退出</translation> </message> <message> <source>Application exited normally</source> @@ -2666,7 +2666,7 @@ Try: %2</source> </message> <message> <source>Processing queued commands</source> - <translation>處理佇列中的指令中</translation> + <translation>處理佇列中的命令中</translation> </message> <message numerus="yes"> <source>The gdb process has not responded to a command within %n second(s). This could mean it is stuck in an endless loop or taking longer than expected to perform the operation. @@ -2932,16 +2932,16 @@ on slow machines. In this case, the value should be increased.</source> for less noisy debugging. For example, the atomic reference counting code is skipped, and a single 'Step Into' for a signal emission ends up directly in the slot connected to it.</source> - <translation type="obsolete">允許「單步進入」將多個步驟合併到一個步驟,以減少除錯時的冗餘情況。例如,最小參考計算(atomic reference counting)代碼就會被跳過,一個發射信號的「單步進入」會直接跳到它的信號槽等等。</translation> + <translation type="obsolete">允許「單步進入」將多個步驟合併到一個步驟,以減少除錯時的冗餘情況。例如,最小參考計算(atomic reference counting)代碼就會被跳過,一個發射訊號的「單步進入」會直接跳到它的槽等等。</translation> </message> <message> <source>Show a message box when receiving a signal</source> - <translation>當收到信號時顯示訊息盒</translation> + <translation>當收到訊號時顯示訊息盒</translation> </message> <message> <source>This will show a message box as soon as your application receives a signal like SIGSEGV during debugging.</source> - <translation type="obsolete">在您的應用程式除錯時,若收到系統信號,如 SIGSEGV,會立即顯示一個訊息盒。</translation> + <translation type="obsolete">在您的應用程式除錯時,若收到系統訊號,如 SIGSEGV,會立即顯示一個訊息盒。</translation> </message> <message> <source>The number of seconds Qt Creator will wait before it terminates @@ -3068,7 +3068,7 @@ at debugger startup.</source> </message> <message> <source>Additional Startup Commands</source> - <translation>額外的啟動指令</translation> + <translation>額外的啟動命令</translation> </message> <message> <source><html><head/><body><p>GDB commands entered here will be executed after GDB has been started and the debugging helpers have been initialized.</p><p>You can add commands to load further debugging helpers here, or modify existing ones.</p><p>To execute arbitrary Python scripts, use <i>python execfile('/path/to/script.py')</i>.</p></body></html></source> @@ -3288,7 +3288,7 @@ at debugger startup.</source> </message> <message> <source>&Arguments:</source> - <translation type="obsolete">參數(&A):</translation> + <translation type="obsolete">引數(&A):</translation> </message> <message> <source>&Tool chain:</source> @@ -3830,7 +3830,7 @@ Rebuilding the project might help.</source> </message> <message> <source>Signals && Slots Editor</source> - <translation>信號與信號槽編輯器</translation> + <translation>訊號與槽編輯器</translation> </message> <message> <source>Widget box</source> @@ -3846,7 +3846,7 @@ Rebuilding the project might help.</source> </message> <message> <source>Edit Signals/Slots</source> - <translation>編輯信號/信號槽</translation> + <translation>編輯訊號/槽</translation> </message> <message> <source>Edit Buddies</source> @@ -3888,7 +3888,7 @@ Please verify the #include-directives.</source> </message> <message> <source>Error finding/adding a slot.</source> - <translation>尋找/新增信號槽時發生錯誤。</translation> + <translation>尋找/新增槽時發生錯誤。</translation> </message> <message> <source>Internal error: No project could be found for %1.</source> @@ -4102,7 +4102,7 @@ Reason: %3</source> <message numerus="yes"> <source>%n lines filtered</source> <translation> - <numerusform>已過濾 %n 行</numerusform> + <numerusform>已篩選 %n 行</numerusform> </translation> </message> <message> @@ -4165,7 +4165,7 @@ Reason: %3</source> </message> <message> <source>Argument must be positive: %1=%2</source> - <translation>參數必須為正值:%1=%2</translation> + <translation>引數必須為正值:%1=%2</translation> </message> <message> <source>General</source> @@ -4306,11 +4306,11 @@ Reason: %3</source> <name>FilterNameDialogClass</name> <message> <source>Add Filter Name</source> - <translation>新增過濾器名稱</translation> + <translation>新增篩選器名稱</translation> </message> <message> <source>Filter Name:</source> - <translation>過濾器名稱:</translation> + <translation>篩選器名稱:</translation> </message> </context> <context> @@ -4468,11 +4468,11 @@ Reason: %3</source> </message> <message> <source>New Configuration</source> - <translation>新設置</translation> + <translation>新組態</translation> </message> <message> <source>New configuration name:</source> - <translation>新設置名稱:</translation> + <translation>新組態名稱:</translation> </message> <message> <source>Build directory:</source> @@ -4596,7 +4596,7 @@ Reason: %3</source> </message> <message> <source>Selected directory is not a Git repository</source> - <translation>選擇的目錄並非 Git 主目錄</translation> + <translation>選擇的目錄並非 Git 儲存庫</translation> </message> <message> <source>Working directory:</source> @@ -4651,7 +4651,7 @@ Reason: %3</source> </message> <message> <source>Cannot determine the repository for "%1".</source> - <translation>無法決定 "%1" 的主目錄。</translation> + <translation>無法決定 "%1" 的儲存庫。</translation> </message> <message> <source>Cannot parse the file output.</source> @@ -4787,11 +4787,11 @@ Reason: %3</source> </message> <message> <source>The repository "%1" is not initialized.</source> - <translation>主目錄(Repository) "%1" 還沒有被初始化。</translation> + <translation>儲存庫 "%1" 還沒有被初始化。</translation> </message> <message> <source>Cannot retrieve last commit data of repository "%1".</source> - <translation>無法取得主目錄 "%1" 上次提交的資料。</translation> + <translation>無法取得儲存庫 "%1" 上次提交的資料。</translation> </message> <message numerus="yes"> <source>Amended "%1" (%n file(s)). @@ -4825,7 +4825,7 @@ Reason: %3</source> </message> <message> <source>The command 'git pull --rebase' failed, aborting rebase.</source> - <translation>指令 'git pull --rebase' 失敗,中止執行 rebase。</translation> + <translation>命令 'git pull --rebase' 失敗,中止執行 rebase。</translation> </message> <message> <source>Git SVN Log</source> @@ -4946,7 +4946,7 @@ Reason: %3</source> <message> <source>Undo all pending changes to the repository %1?</source> - <translation type="obsolete">是否要復原主目錄 + <translation type="obsolete">是否要復原儲存庫 %1 的所有暫停的變更?</translation> </message> @@ -4972,7 +4972,7 @@ Reason: %3</source> </message> <message> <source>Repository Clean</source> - <translation>主目錄 (Repository) 清理</translation> + <translation>儲存庫清理</translation> </message> <message> <source>Choose Patch</source> @@ -5088,11 +5088,11 @@ Reason: %3</source> </message> <message> <source>Create Repository...</source> - <translation>建立主目錄...</translation> + <translation>建立儲存庫...</translation> </message> <message> <source>Saves the current state of your work and resets the repository.</source> - <translation>儲存您工作的目前狀態,並重置主目錄。</translation> + <translation>儲存您工作的目前狀態,並重置儲存庫。</translation> </message> <message> <source>Stashes...</source> @@ -5116,7 +5116,7 @@ Reason: %3</source> </message> <message> <source>The repository is clean.</source> - <translation>主目錄已清理乾淨。</translation> + <translation>儲存庫已清理乾淨。</translation> </message> <message> <source>Patches (*.patch *.diff)</source> @@ -5208,11 +5208,11 @@ Reason: %3</source> </message> <message> <source>Repository:</source> - <translation>主目錄:</translation> + <translation>儲存庫:</translation> </message> <message> <source>repository</source> - <translation>主目錄</translation> + <translation>儲存庫</translation> </message> <message> <source>Branch:</source> @@ -5284,7 +5284,7 @@ Reason: %3</source> </message> <message> <source>Arguments:</source> - <translation>參數:</translation> + <translation>引數:</translation> </message> <message> <source>Git needs to find Perl in the environment.</source> @@ -5296,7 +5296,7 @@ Reason: %3</source> </message> <message> <source>Configuration</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Prepend to PATH:</source> @@ -5308,7 +5308,7 @@ Reason: %3</source> </message> <message> <source>Command:</source> - <translation type="unfinished">指令:</translation> + <translation type="unfinished">命令:</translation> </message> </context> <context> @@ -5363,27 +5363,27 @@ Reason: %3</source> </message> <message> <source>Filters</source> - <translation>過濾器</translation> + <translation>篩選器</translation> </message> <message> <source>Unfiltered</source> - <translation>未過濾</translation> + <translation>未篩選</translation> </message> <message> <source>No user defined filters available or no filter selected.</source> - <translation>沒有使用者定義的過濾器可使用,或者未選取過濾器。</translation> + <translation>沒有使用者定義的篩選器可使用,或者未選取篩選器。</translation> </message> <message> <source>The filter "%1" will show every documentation file available, as no attributes are specified.</source> - <translation>當沒有指定任何屬性時,過濾器 "%1" 會顯示所有可用的文件檔。</translation> + <translation>當沒有指定任何屬性時,篩選器 "%1" 會顯示所有可用的文件檔。</translation> </message> <message> <source>The filter "%1" will only show documentation files that have the attribute %2 specified.</source> - <translation>過濾器 "%1" 只會顯示包含屬性 %2 的文件檔。</translation> + <translation>篩選器 "%1" 只會顯示包含屬性 %2 的文件檔。</translation> </message> <message> <source>The filter "%1" will only show documentation files that have the attributes %2 specified.</source> - <translation>過濾器 "%1" 只會顯示包含屬性 %2 的文件檔。</translation> + <translation>篩選器 "%1" 只會顯示包含屬性 %2 的文件檔。</translation> </message> <message> <source><html><body> @@ -5392,7 +5392,7 @@ Add, modify, and remove document filters, which determine the documentation set </p></body></html></source> <translation type="obsolete"><html><body> <p> -新增,變更與移除文件過濾器。它決定在說明模式中要顯示的文件集。屬性是在文件中定義的。選擇屬性可以顯示相關文件的集合。請注意,某些屬性會在多個文件檔中被定義。 +新增,變更與移除文件篩選器。它決定在說明模式中要顯示的文件集。屬性是在文件中定義的。選擇屬性可以顯示相關文件的集合。請注意,某些屬性會在多個文件檔中被定義。 </p></body></html></translation> </message> <message> @@ -5580,7 +5580,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Filtered by:</source> - <translation>過濾方式:</translation> + <translation>篩選方式:</translation> </message> <message> <source>Indexing</source> @@ -5885,7 +5885,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Repository Log</source> - <translation>主目錄紀錄</translation> + <translation>儲存庫紀錄</translation> </message> <message> <source>&Undo</source> @@ -5946,7 +5946,7 @@ Add, modify, and remove document filters, which determine the documentation set <message> <source>Error running "where" on %1: %2</source> <extracomment>Failed to run p4 "where" to resolve a Perforce file name to a local file system name.</extracomment> - <translation>在 %1 執行 "where" 指令時發生錯誤:%2</translation> + <translation>在 %1 執行 "where" 命令時發生錯誤:%2</translation> </message> <message> <source>The file is not mapped</source> @@ -5955,11 +5955,11 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Perforce repository: %1</source> - <translation>Perforce 主目錄: %1</translation> + <translation>Perforce 儲存庫: %1</translation> </message> <message> <source>Perforce: Unable to determine the repository: %1</source> - <translation>Perforce:無法決定主目錄:%1</translation> + <translation>Perforce:無法決定儲存庫:%1</translation> </message> <message> <source>The process terminated abnormally.</source> @@ -5975,7 +5975,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Could not start perforce '%1'. Please check your settings in the preferences.</source> - <translation>無法啟動 perforce '%1'。請檢查喜好設定中的設置。</translation> + <translation>無法啟動 perforce '%1'。請檢查偏好設定中的設置。</translation> </message> <message> <source>Perforce did not respond within timeout limit (%1 ms).</source> @@ -5987,16 +5987,16 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Perforce is not correctly configured.</source> - <translation>Perforce 未正確設置。</translation> + <translation>Perforce 未正確組態。</translation> </message> <message> <source>p4 diff %1</source> - <translatorcomment>指令,還是說明?</translatorcomment> + <translatorcomment>命令,還是說明?</translatorcomment> <translation>p4 diff %1</translation> </message> <message> <source>p4 describe %1</source> - <translatorcomment>指令,還是說明?</translatorcomment> + <translatorcomment>命令,還是說明?</translatorcomment> <translation>p4 describe %1</translation> </message> <message> @@ -6037,7 +6037,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Configuration</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Miscellaneous</source> @@ -6061,7 +6061,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>P4 command:</source> - <translation>P4 指令:</translation> + <translation>P4 命令:</translation> </message> <message> <source>P4 client:</source> @@ -6093,7 +6093,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Perforce Command</source> - <translation>Perforce 指令</translation> + <translation>Perforce 命令</translation> </message> <message> <source>Change:</source> @@ -6131,7 +6131,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>The option %1 requires an argument.</source> - <translation>選項 %1 需要參數。</translation> + <translation>選項 %1 需要引數。</translation> </message> <message> <source>Failed Plugins</source> @@ -6325,7 +6325,7 @@ Add, modify, and remove document filters, which determine the documentation set <message> <source>Filter: %1 %2</source> - <translation>過濾器:%1 + <translation>篩選器:%1 %2</translation> </message> <message> @@ -6342,7 +6342,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Edit build configuration:</source> - <translation>編輯建置設定:</translation> + <translation>編輯建置組態:</translation> </message> <message> <source>Rename...</source> @@ -6350,20 +6350,20 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>New name for build configuration <b>%1</b>:</source> - <translation>建置設置的新名稱 <b>%1</b>:</translation> + <translation>建置組態的新名稱 <b>%1</b>:</translation> </message> <message> <source>Clone Configuration</source> <extracomment>Title of a the cloned BuildConfiguration window, text of the window</extracomment> - <translation>複製設置</translation> + <translation>複製組態</translation> </message> <message> <source>New configuration name:</source> - <translation>新設置名稱:</translation> + <translation>新組態名稱:</translation> </message> <message> <source>Cancel Build && Remove Build Configuration</source> - <translation>取消建置並移除建置設置</translation> + <translation>取消建置並移除建置組態</translation> </message> <message> <source>Do Not Remove</source> @@ -6371,23 +6371,23 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Remove Build Configuration %1?</source> - <translation>要移除建置設置 %1 嗎?</translation> + <translation>要移除建置組態 %1 嗎?</translation> </message> <message> <source>The build configuration <b>%1</b> is currently being built.</source> - <translation>建置設置 <b>%1</b> 正在建置中。</translation> + <translation>建置組態 <b>%1</b> 正在建置中。</translation> </message> <message> <source>Do you want to cancel the build process and remove the Build Configuration anyway?</source> - <translation>您想要取消建置動作並移除建置設置嗎?</translation> + <translation>您想要取消建置動作並移除建置組態嗎?</translation> </message> <message> <source>Remove Build Configuration?</source> - <translation>要移除建置設置嗎?</translation> + <translation>要移除建置組態嗎?</translation> </message> <message> <source>Do you really want to delete build configuration <b>%1</b>?</source> - <translation>您確定要刪除此建置設置 <b>%1</b> 嗎?</translation> + <translation>您確定要刪除此建置組態 <b>%1</b> 嗎?</translation> </message> <message> <source>Build Steps</source> @@ -6427,7 +6427,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Base environment for this run configuration:</source> - <translation type="obsolete">執行設置的基礎環境:</translation> + <translation type="obsolete">執行組態的基礎環境:</translation> </message> <message> <source>Editor settings:</source> @@ -6522,7 +6522,7 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Command:</source> - <translation>指令:</translation> + <translation>命令:</translation> </message> <message> <source>Working directory:</source> @@ -6530,11 +6530,11 @@ Add, modify, and remove document filters, which determine the documentation set </message> <message> <source>Command arguments:</source> - <translation type="obsolete">指令參數:</translation> + <translation type="obsolete">命令引數:</translation> </message> <message> <source>Arguments:</source> - <translation type="unfinished">參數:</translation> + <translation type="unfinished">引數:</translation> </message> <message> <source>Project File Factory</source> @@ -6570,7 +6570,7 @@ to project '%2'.</source> </message> <message> <source>A version control system repository could not be created in '%1'.</source> - <translation>在 %1 裡無法建立版本控制系統主目錄。</translation> + <translation>在 %1 裡無法建立版本控制系統儲存庫。</translation> </message> <message> <source>Failed to add '%1' to the version control system.</source> @@ -6602,7 +6602,7 @@ to project '%2'.</source> </message> <message> <source>Filter Tree</source> - <translation>過濾樹狀圖</translation> + <translation>篩選樹狀圖</translation> </message> <message> <source>Summary</source> @@ -6642,7 +6642,7 @@ to project '%2'.</source> </message> <message> <source>Run configuration:</source> - <translation>執行設置:</translation> + <translation>執行組態:</translation> </message> <message> <source>Run Settings</source> @@ -6662,43 +6662,43 @@ to project '%2'.</source> </message> <message> <source>Remove Run Configuration?</source> - <translation>要移除執行設置嗎?</translation> + <translation>要移除執行組態嗎?</translation> </message> <message> <source>Do you really want to delete the run configuration <b>%1</b>?</source> - <translation>您確定要刪除此執行設置 <b>%1</b> 嗎?</translation> + <translation>您確定要刪除此執行組態 <b>%1</b> 嗎?</translation> </message> <message> <source>New name for run configuration <b>%1</b>:</source> - <translation>執行設置 <b>%1</b> 的新名稱:</translation> + <translation>執行組態 <b>%1</b> 的新名稱:</translation> </message> <message> <source>Cancel Build && Remove Deploy Configuration</source> - <translation>取消建置並移除佈署設置</translation> + <translation>取消建置並移除佈署組態</translation> </message> <message> <source>Remove Deploy Configuration %1?</source> - <translation>要移除佈署設置 %1 嗎?</translation> + <translation>要移除佈署組態 %1 嗎?</translation> </message> <message> <source>The deploy configuration <b>%1</b> is currently being built.</source> - <translation>佈署設置 <b>%1</b> 正在建置中。</translation> + <translation>佈署組態 <b>%1</b> 正在建置中。</translation> </message> <message> <source>Do you want to cancel the build process and remove the Deploy Configuration anyway?</source> - <translation>您想要取消建置並移除佈署設置嗎?</translation> + <translation>您想要取消建置並移除佈署組態嗎?</translation> </message> <message> <source>Remove Deploy Configuration?</source> - <translation>要移除佈署設置嗎?</translation> + <translation>要移除佈署組態嗎?</translation> </message> <message> <source>Do you really want to delete deploy configuration <b>%1</b>?</source> - <translation>您確定要刪除此佈署設置 <b>%1</b> 嗎?</translation> + <translation>您確定要刪除此佈署組態 <b>%1</b> 嗎?</translation> </message> <message> <source>New name for deploy configuration <b>%1</b>:</source> - <translation>佈署設置 <b>%1</b> 的新名稱:</translation> + <translation>佈署組態 <b>%1</b> 的新名稱:</translation> </message> <message> <source>File not found: %1</source> @@ -6710,7 +6710,7 @@ to project '%2'.</source> </message> <message> <source>Filter by categories</source> - <translation>依分類過濾</translation> + <translation>依分類篩選</translation> </message> <message> <source>Show Warnings</source> @@ -6882,7 +6882,7 @@ to project '%2'.</source> </message> <message> <source>The target '%1' for the project '%2' has no active run configuration.</source> - <translation>專案 '%2' 的目標 '%1' 沒有作用中的執行設置。</translation> + <translation>專案 '%2' 的目標 '%1' 沒有作用中的執行組態。</translation> </message> <message> <source>Cannot run '%1'.</source> @@ -7055,7 +7055,7 @@ Do you want to ignore them?</source> <message> <source>The project %1 is not configured, skipping it. </source> - <translation>專案 %1 尚未設置,將跳過。</translation> + <translation>專案 %1 尚未組態,將跳過。</translation> </message> <message> <source>No project loaded.</source> @@ -7067,7 +7067,7 @@ Do you want to ignore them?</source> </message> <message> <source>The project %1 is not configured.</source> - <translation>專案 %1 尚未設置。</translation> + <translation>專案 %1 尚未組態。</translation> </message> <message> <source>Project has no build settings.</source> @@ -7543,11 +7543,11 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>Qt4 Run Configuration</source> - <translation>Qt4 執行設置</translation> + <translation>Qt4 執行組態</translation> </message> <message> <source>Arguments:</source> - <translation>參數:</translation> + <translation>引數:</translation> </message> <message> <source>Select Working Directory</source> @@ -7563,7 +7563,7 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>Base environment for this run configuration:</source> - <translation>此執行設置的基礎環境:</translation> + <translation>此執行組態的基礎環境:</translation> </message> <message> <source>Run Environment</source> @@ -7592,11 +7592,11 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>Qt Creator needs a build configuration set up to build. Configure a tool chain in Project mode.</source> - <translation type="obsolete">Qt Creator 需要先設定建置設置才能執行建置。請在專案模式下設定工具鍊。</translation> + <translation type="obsolete">Qt Creator 需要先設定建置組態才能執行建置。請在專案模式下組態工具鍊。</translation> </message> <message> <source>Qt Creator needs a tool chain set up to build. Configure a tool chain in Project mode.</source> - <translation type="obsolete">Qt Creator 需要設置一個工具鍊才能建置。請在專案模式下設定工具鍊。</translation> + <translation type="obsolete">Qt Creator 需要設置一個工具鍊才能建置。請在專案模式下組態工具鍊。</translation> </message> <message> <source>Cannot find Makefile. Check your build settings.</source> @@ -7604,7 +7604,7 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>Configuration is faulty. Check the Issues view for details.</source> - <translation>設置錯誤。請在錯誤檢視中看詳情。</translation> + <translation>組態錯誤。請在錯誤檢視中看詳情。</translation> </message> <message> <source>Override %1:</source> @@ -7624,7 +7624,7 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>No Qt4 build configuration.</source> - <translation type="obsolete">沒有 Qt4 建置設置。</translation> + <translation type="obsolete">沒有 Qt4 建置組態。</translation> </message> <message> <source><b>Make:</b> %1 not found in the environment.</source> @@ -7641,11 +7641,11 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>Configuration is faulty, please check the Issues view for details.</source> - <translation>設置錯誤。請在錯誤檢視中看詳情。</translation> + <translation>組態錯誤。請在錯誤檢視中看詳情。</translation> </message> <message> <source>Configuration unchanged, skipping qmake step.</source> - <translation>設置沒有改變,將跳過 qmake 步驟。</translation> + <translation>組態沒有改變,將跳過 qmake 步驟。</translation> </message> <message> <source>No Qt version.</source> @@ -7803,7 +7803,7 @@ Preselects a desktop Qt for building the application if available.</source> <name>QtC::Core</name> <message> <source>Filter Configuration</source> - <translation>過濾器設置</translation> + <translation>篩選器組態</translation> </message> <message> <source>Limit to prefix</source> @@ -7815,7 +7815,7 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>Generic Directory Filter</source> - <translation>一般目錄過濾</translation> + <translation>一般目錄篩選</translation> </message> <message> <source>Select Directory</source> @@ -7824,16 +7824,16 @@ Preselects a desktop Qt for building the application if available.</source> <message numerus="yes"> <source>%1 filter update: %n files</source> <translation> - <numerusform>%1 過濾器更新:%n 個檔案</numerusform> + <numerusform>%1 篩選器更新:%n 個檔案</numerusform> </translation> </message> <message> <source>%1 filter update: 0 files</source> - <translation>%1 過濾器更新:0 個檔案</translation> + <translation>%1 篩選器更新:0 個檔案</translation> </message> <message> <source>%1 filter update: canceled</source> - <translation>%1 過濾器更新:已取消</translation> + <translation>%1 篩選器更新:已取消</translation> </message> <message> <source>Name:</source> @@ -7841,7 +7841,7 @@ Preselects a desktop Qt for building the application if available.</source> </message> <message> <source>Specify file name filters, separated by comma. Filters may contain wildcards.</source> - <translation>指定檔案名稱過濾器,用逗號分隔。過濾器可以包含萬用字元符。</translation> + <translation>指定檔案名稱篩選器,用逗號分隔。篩選器可以包含萬用字元符。</translation> </message> <message> <source>Remove</source> @@ -7871,7 +7871,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Filter configuration</source> - <translation type="obsolete">過濾器設置</translation> + <translation type="obsolete">篩選器組態</translation> </message> <message> <source>Include hidden files</source> @@ -7879,7 +7879,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Filter:</source> - <translation>過濾器:</translation> + <translation>篩選器:</translation> </message> <message> <source>Add Filter Configuration</source> @@ -7887,7 +7887,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Available filters</source> - <translation>可使用的過濾器</translation> + <translation>可使用的篩選器</translation> </message> <message> <source>Ctrl+K</source> @@ -7911,7 +7911,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Configure...</source> - <translation>設置...</translation> + <translation>組態...</translation> </message> <message> <source>Locate...</source> @@ -7931,7 +7931,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Configure Filters</source> - <translation>過濾器設置</translation> + <translation>篩選器組態</translation> </message> <message> <source> min</source> @@ -8001,7 +8001,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Configuration</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Miscellaneous</source> @@ -8029,7 +8029,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Subversion command:</source> - <translation>Subversion 指令:</translation> + <translation>Subversion 命令:</translation> </message> <message> <source>Username:</source> @@ -8037,7 +8037,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Subversion Command</source> - <translation>Subversion 指令</translation> + <translation>Subversion 命令</translation> </message> <message> <source>&Subversion</source> @@ -8165,7 +8165,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Revert Repository...</source> - <translation>復原主目錄...</translation> + <translation>復原儲存庫...</translation> </message> <message> <source>Commit</source> @@ -8193,7 +8193,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Revert repository</source> - <translation>復原主目錄</translation> + <translation>復原儲存庫</translation> </message> <message> <source>Revert failed: %1</source> @@ -8217,19 +8217,19 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Diff Repository</source> - <translation>比較主目錄</translation> + <translation>比較儲存庫</translation> </message> <message> <source>Repository Status</source> - <translation>主目錄狀態</translation> + <translation>儲存庫狀態</translation> </message> <message> <source>Log Repository</source> - <translation>主目錄紀錄</translation> + <translation>儲存庫紀錄</translation> </message> <message> <source>Update Repository</source> - <translation>更新主目錄</translation> + <translation>更新儲存庫</translation> </message> <message> <source>Diff &Selected Files</source> @@ -8237,7 +8237,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>Revert all pending changes to the repository?</source> - <translation>是否要復原主目錄的所有暫停的變更?</translation> + <translation>是否要復原儲存庫的所有暫停的變更?</translation> </message> <message> <source>There are no modified files.</source> @@ -8268,7 +8268,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t </message> <message> <source>List of comma separated wildcard filters</source> - <translation>以逗號分隔的萬用字元符過濾器列表</translation> + <translation>以逗號分隔的萬用字元符篩選器列表</translation> </message> <message> <source>untitled</source> @@ -9255,7 +9255,7 @@ Will not be applied to whitespace in comments and strings.</source> <name>QtC::Help</name> <message> <source>Filter</source> - <translation>過濾器</translation> + <translation>篩選器</translation> </message> <message> <source>Choose a topic for <b>%1</b>:</source> @@ -9376,7 +9376,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Configuration</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Miscellaneous</source> @@ -9400,7 +9400,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>CVS command:</source> - <translation>CVS 指令:</translation> + <translation>CVS 命令:</translation> </message> <message> <source>CVS root:</source> @@ -9520,15 +9520,15 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Repository</source> - <translation>主目錄</translation> + <translation>儲存庫</translation> </message> <message> <source>Choose a repository of the project '%1'.</source> - <translation>請為專案 '%1' 選擇一個主目錄。</translation> + <translation>請為專案 '%1' 選擇一個儲存庫。</translation> </message> <message> <source>Mainline Repositories</source> - <translation>主線使用的主目錄</translation> + <translation>主線使用的儲存庫</translation> </message> <message> <source>Clones</source> @@ -9536,15 +9536,15 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Baseline Repositories</source> - <translation>基線使用的主目錄</translation> + <translation>基線使用的儲存庫</translation> </message> <message> <source>Shared Project Repositories</source> - <translation>共享專案使用的主目錄</translation> + <translation>共享專案使用的儲存庫</translation> </message> <message> <source>Personal Repositories</source> - <translation>個人主目錄</translation> + <translation>個人儲存庫</translation> </message> </context> <context> @@ -9879,14 +9879,14 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Preferences</source> - <translation>喜好設定</translation> + <translation>偏好設定</translation> </message> </context> <context> <name>QtC::CodePaster</name> <message> <source>No Server defined in the CodePaster preferences.</source> - <translation>在 CodePaster 喜好設定中沒有定義伺服器。</translation> + <translation>在 CodePaster 偏好設定中沒有定義伺服器。</translation> </message> <message> <source>No Server defined in the CodePaster options.</source> @@ -9956,7 +9956,7 @@ Will not be applied to whitespace in comments and strings.</source> <name>QtC::CVS</name> <message> <source>Checks out a CVS repository and tries to load the contained project.</source> - <translation>從 CVS 主目錄中取出,並試著載入裡面包含的專案。</translation> + <translation>從 CVS 儲存庫中取出,並試著載入裡面包含的專案。</translation> </message> <message> <source>CVS Checkout</source> @@ -9968,11 +9968,11 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Specify repository and path.</source> - <translation>請指定主目錄與路徑。</translation> + <translation>請指定儲存庫與路徑。</translation> </message> <message> <source>Repository:</source> - <translation>主目錄:</translation> + <translation>儲存庫:</translation> </message> <message> <source>Parsing of the log output failed</source> @@ -10036,7 +10036,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Cannot find repository for '%1'</source> - <translation>找不到 '%1' 的主目錄</translation> + <translation>找不到 '%1' 的儲存庫</translation> </message> <message> <source>Meta+C,Meta+D</source> @@ -10096,7 +10096,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Unedit Repository</source> - <translation>未編輯主目錄</translation> + <translation>未編輯儲存庫</translation> </message> <message> <source>Project Status</source> @@ -10132,23 +10132,23 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Diff Repository</source> - <translation>比較主目錄</translation> + <translation>比較儲存庫</translation> </message> <message> <source>Repository Status</source> - <translation>主目錄狀態</translation> + <translation>儲存庫狀態</translation> </message> <message> <source>Repository Log</source> - <translation>主目錄紀錄</translation> + <translation>儲存庫紀錄</translation> </message> <message> <source>Update Repository</source> - <translation>更新主目錄</translation> + <translation>更新儲存庫</translation> </message> <message> <source>Revert Repository...</source> - <translation>復原主目錄...</translation> + <translation>復原儲存庫...</translation> </message> <message> <source>Commit</source> @@ -10184,11 +10184,11 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Revert repository</source> - <translation>復原主目錄</translation> + <translation>復原儲存庫</translation> </message> <message> <source>Revert all pending changes to the repository?</source> - <translation>是否要復原主目錄的所有暫停的變更?</translation> + <translation>是否要復原儲存庫的所有暫停的變更?</translation> </message> <message> <source>Revert failed: %1</source> @@ -10208,7 +10208,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Would you like to discard your changes to the repository '%1'?</source> - <translation>您要丟棄您對主目錄 '%1' 的變更嗎?</translation> + <translation>您要丟棄您對儲存庫 '%1' 的變更嗎?</translation> </message> <message> <source>Would you like to discard your changes to the file '%1'?</source> @@ -10220,7 +10220,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Repository status</source> - <translation>主目錄狀態</translation> + <translation>儲存庫狀態</translation> </message> <message> <source>The initial revision %1 cannot be described.</source> @@ -10248,7 +10248,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>CVS Command</source> - <translation>CVS 指令</translation> + <translation>CVS 命令</translation> </message> </context> <context> @@ -10281,11 +10281,11 @@ Will not be applied to whitespace in comments and strings.</source> <name>QtC::Git</name> <message> <source>Clones a Git repository and tries to load the contained project.</source> - <translation>複製一個 Git 主目錄,並試著載入裡面包含的專案。</translation> + <translation>複製一個 Git 儲存庫,並試著載入裡面包含的專案。</translation> </message> <message> <source>Git Repository Clone</source> - <translation>Git 主目錄複製</translation> + <translation>Git 儲存庫複製</translation> </message> <message> <source>Location</source> @@ -10293,7 +10293,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Specify repository URL, checkout directory and path.</source> - <translation>請指定主目錄網址、取出目錄與路徑。</translation> + <translation>請指定儲存庫網址、取出目錄與路徑。</translation> </message> <message> <source>Clone URL:</source> @@ -10305,7 +10305,7 @@ Will not be applied to whitespace in comments and strings.</source> </message> <message> <source>Delete the master branch after checking out the repository.</source> - <translation>取出主目錄時刪除 master 分支。</translation> + <translation>取出儲存庫時刪除 master 分支。</translation> </message> </context> <context> @@ -10327,11 +10327,11 @@ Will not be applied to whitespace in comments and strings.</source> <name>Gitorious::Internal::GitoriousCloneWizard</name> <message> <source>Clones a Gitorious repository and tries to load the contained project.</source> - <translation>複製一個 Gitorious 主目錄,並試著載入裡面包含的專案。</translation> + <translation>複製一個 Gitorious 儲存庫,並試著載入裡面包含的專案。</translation> </message> <message> <source>Gitorious Repository Clone</source> - <translation>Gitorious 主目錄複製</translation> + <translation>Gitorious 儲存庫複製</translation> </message> </context> <context> @@ -10616,11 +10616,11 @@ Reason: %2</source> </message> <message> <source>New Configuration</source> - <translation>新設置</translation> + <translation>新組態</translation> </message> <message> <source>New configuration name:</source> - <translation>新設置名稱:</translation> + <translation>新組態名稱:</translation> </message> <message> <source>%1 Debug</source> @@ -10647,7 +10647,7 @@ Reason: %2</source> <name>QtC::Subversion</name> <message> <source>Checks out a Subversion repository and tries to load the contained project.</source> - <translation>從 Subversion 主目錄中取出,並試著載入裡面包含的專案。</translation> + <translation>從 Subversion 儲存庫中取出,並試著載入裡面包含的專案。</translation> </message> <message> <source>Subversion Checkout</source> @@ -10659,11 +10659,11 @@ Reason: %2</source> </message> <message> <source>Specify repository URL, checkout directory and path.</source> - <translation>請指定主目錄網址、取出目錄與路徑。</translation> + <translation>請指定儲存庫網址、取出目錄與路徑。</translation> </message> <message> <source>Repository:</source> - <translation>主目錄:</translation> + <translation>儲存庫:</translation> </message> </context> <context> @@ -10822,7 +10822,7 @@ Reason: %2</source> </message> <message> <source>Generic Project Configuration File</source> - <translation>一般專案設置檔</translation> + <translation>一般專案組態檔</translation> </message> <message> <source>Perforce submit template</source> @@ -11028,11 +11028,11 @@ Reason: %2</source> </message> <message> <source>Repository:</source> - <translation>主目錄:</translation> + <translation>儲存庫:</translation> </message> <message> <source>repository</source> - <translation>主目錄</translation> + <translation>儲存庫</translation> </message> <message> <source>Branch:</source> @@ -11060,11 +11060,11 @@ Reason: %2</source> </message> <message> <source>Configuration</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Command:</source> - <translation>指令:</translation> + <translation>命令:</translation> </message> <message> <source>User</source> @@ -11202,7 +11202,7 @@ Reason: %2</source> </message> <message> <source>The executable is not built by the current build configuration</source> - <translation>這個可執行檔不是使用目前的建置設置製作出來的</translation> + <translation>這個可執行檔不是使用目前的建置組態製作出來的</translation> </message> <message> <source> (disabled)</source> @@ -11246,7 +11246,7 @@ Reason: %2</source> <name>QtC::Mercurial</name> <message> <source>Clones a Mercurial repository and tries to load the contained project.</source> - <translation>複製一個 Mercurial 主目錄,並試著載入裡面包含的專案。</translation> + <translation>複製一個 Mercurial 儲存庫,並試著載入裡面包含的專案。</translation> </message> <message> <source>Mercurial Clone</source> @@ -11258,7 +11258,7 @@ Reason: %2</source> </message> <message> <source>Specify repository URL, checkout directory and path.</source> - <translation>請指定主目錄網址、取出目錄與路徑。</translation> + <translation>請指定儲存庫網址、取出目錄與路徑。</translation> </message> <message> <source>Clone URL:</source> @@ -11418,7 +11418,7 @@ Reason: %2</source> </message> <message> <source>Create Repository...</source> - <translation>建立主目錄...</translation> + <translation>建立儲存庫...</translation> </message> <message> <source>Pull Source</source> @@ -11482,7 +11482,7 @@ Reason: %2</source> </message> <message> <source>Mercurial Command</source> - <translation>Mercurial 指令</translation> + <translation>Mercurial 命令</translation> </message> </context> <context> @@ -11518,7 +11518,7 @@ Reason: %2</source> </message> <message> <source>The repository "%1" does not exist.</source> - <translation>主目錄 "%1" 不存在。</translation> + <translation>儲存庫 "%1" 不存在。</translation> </message> </context> <context> @@ -11577,7 +11577,7 @@ Reason: %2</source> </message> <message> <source>Unconfigured Project</source> - <translation type="obsolete">未設置專案</translation> + <translation type="obsolete">未組態專案</translation> </message> </context> <context> @@ -11627,11 +11627,11 @@ Reason: %2</source> </message> <message> <source><No repository></source> - <translation><沒有主目錄></translation> + <translation><沒有儲存庫></translation> </message> <message> <source>Repository: %1</source> - <translation>主目錄:%1</translation> + <translation>儲存庫:%1</translation> </message> <message> <source>Do you want to delete all stashes?</source> @@ -11658,12 +11658,12 @@ Reason: %2</source> </message> <message> <source>Repository Modified</source> - <translation>主目錄已變更</translation> + <translation>儲存庫已變更</translation> </message> <message> <source>%1 cannot be restored since the repository is modified. You can choose between stashing the changes or discarding them.</source> - <translation>%1 無法還原,因為主目錄已被變更。 + <translation>%1 無法還原,因為儲存庫已被變更。 您可以選擇要暫存或是丟棄變更。</translation> </message> <message> @@ -11788,7 +11788,7 @@ You can choose between stashing the changes or discarding them.</source> </message> <message> <source>There were errors when cleaning the repository %1:</source> - <translation>清除主目錄 %1 時發生錯誤:</translation> + <translation>清除儲存庫 %1 時發生錯誤:</translation> </message> <message> <source>Delete...</source> @@ -11796,7 +11796,7 @@ You can choose between stashing the changes or discarding them.</source> </message> <message> <source>Repository: %1</source> - <translation>主目錄:%1</translation> + <translation>儲存庫:%1</translation> </message> <message numerus="yes"> <source>%n bytes, last modified %1</source> @@ -11877,7 +11877,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>Filter</source> - <translation>過濾器</translation> + <translation>篩選器</translation> </message> <message> <source>Clear text</source> @@ -12036,7 +12036,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour <name>QtC::Core</name> <message> <source>Command</source> - <translation>指令</translation> + <translation>命令</translation> </message> <message> <source>Label</source> @@ -12085,7 +12085,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>CVS Command Log Editor</source> - <translation>CVS 指令紀錄編輯器</translation> + <translation>CVS 命令紀錄編輯器</translation> </message> <message> <source>CVS File Log Editor</source> @@ -12101,7 +12101,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>Git Command Log Editor</source> - <translation>Git 指令紀錄編輯器</translation> + <translation>Git 命令紀錄編輯器</translation> </message> <message> <source>Git File Log Editor</source> @@ -12121,7 +12121,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>Mercurial Command Log Editor</source> - <translation>Mercurial 指令紀錄編輯器</translation> + <translation>Mercurial 命令紀錄編輯器</translation> </message> <message> <source>Mercurial File Log Editor</source> @@ -12145,7 +12145,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>Perforce CommandLog Editor</source> - <translation>Perforce 指令紀錄編輯器</translation> + <translation>Perforce 命令紀錄編輯器</translation> </message> <message> <source>Perforce Log Editor</source> @@ -12165,7 +12165,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>Subversion Command Log Editor</source> - <translation>Subversion 指令紀錄編輯器</translation> + <translation>Subversion 命令紀錄編輯器</translation> </message> <message> <source>Subversion File Log Editor</source> @@ -12181,7 +12181,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>Bazaar Command Log Editor</source> - <translation>Bazaar 指令紀錄編輯器</translation> + <translation>Bazaar 命令紀錄編輯器</translation> </message> <message> <source>Bazaar File Log Editor</source> @@ -12246,7 +12246,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour <name>QtC::FakeVim</name> <message> <source>Ex Command Mapping</source> - <translation>Ex 指令映射</translation> + <translation>Ex 命令映射</translation> </message> <message> <source>Ex Trigger Expression</source> @@ -12292,11 +12292,11 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source>Configuration is faulty. Check the Issues view for details.</source> - <translation type="unfinished">設置錯誤。請在錯誤檢視中看詳情。</translation> + <translation>組態錯誤。請在錯誤檢視中看詳情。</translation> </message> <message> <source>Make arguments:</source> - <translation>Make 參數:</translation> + <translation>Make 引數:</translation> </message> <message> <source>Targets:</source> @@ -12650,7 +12650,7 @@ For qmlproject projects, use the importPaths property to add import paths.</sour </message> <message> <source><style type=text/css>a:link {color: rgb(128, 128, 255, 240);}</style>The project <b>%1</b> is not yet configured<br/><br/>You can configure it in the <a href="projectmode">Projects mode</a><br/></source> - <translation><style type=text/css>a:link {color: rgb(128, 128, 255, 240);}</style>專案 <b>%1</b> 尚未設置。<br/><br/>您可以在<a href="projectmode">專案模式</a>中設置。<br/></translation> + <translation><style type=text/css>a:link {color: rgb(128, 128, 255, 240);}</style>專案 <b>%1</b> 尚未組態。<br/><br/>您可以在<a href="projectmode">專案模式</a>中組態。<br/></translation> </message> <message> <source>Targets</source> @@ -13232,7 +13232,7 @@ Requires <b>Qt 4.7.4</b> or newer.</source> <name>QtC::RemoteLinux</name> <message> <source>Could not find make command '%1' in the build environment</source> - <translation type="obsolete">在建置環境中找不到 make 指令 '%1'</translation> + <translation type="obsolete">在建置環境中找不到 make 命令 '%1'</translation> </message> <message> <source>Package Modified</source> @@ -13423,7 +13423,7 @@ Requires <b>Qt 4.7.4</b> or newer.</source> </message> <message> <source>The "Open C/C++ plugin" is not installed in the Symbian SDK or the Symbian SDK path is misconfigured</source> - <translation type="obsolete">"開啟 C/C++ 外掛程式" 沒有安裝到 Symbian SDK,或是 Symbian SDK 路徑設定不正確</translation> + <translation type="obsolete">"開啟 C/C++ 外掛程式" 沒有安裝到 Symbian SDK,或是 Symbian SDK 路徑組態不正確</translation> </message> <message> <source>SBS was not found.</source> @@ -13508,7 +13508,7 @@ Requires <b>Qt 4.7.4</b> or newer.</source> </message> <message> <source><html><head/><body><p><span style=" font-weight:600;">No valid Qt versions found.</span></p><p>Please add a Qt version in <span style=" font-style:italic;">Tools &gt; Options &gt; Build &amp; Run</span> (<span style=" font-style:italic;">Qt Creator &gt; Preferences &gt; Build &amp; Run</span> on Mac OS) or via the maintenance tool of the SDK.</p></body></html></source> - <translation type="obsolete"><html><head/><body><p><span style=" font-weight:600;">找不到正確的 Qt 版本。</span></p><p>請在<span style=" font-style:italic;">「工具」 &gt; 「選項」 &gt; 「建置並執行」</span>(在 MacOS 上則是<span style=" font-style:italic;">「Qt Creator」 &gt; 「喜好設定」 &gt; 「建置並執行」</span>)裡新增 Qt 版本,或是透過 SDK 的維護工具來新增。</p></body></html></translation> + <translation type="obsolete"><html><head/><body><p><span style=" font-weight:600;">找不到正確的 Qt 版本。</span></p><p>請在<span style=" font-style:italic;">「工具」 &gt; 「選項」 &gt; 「建置並執行」</span>(在 MacOS 上則是<span style=" font-style:italic;">「Qt Creator」 &gt; 「偏好設定」 &gt; 「建置並執行」</span>)裡新增 Qt 版本,或是透過 SDK 的維護工具來新增。</p></body></html></translation> </message> <message> <source>Qt Unit Test</source> @@ -13538,7 +13538,7 @@ Requires <b>Qt 4.7.4</b> or newer.</source> </message> <message> <source>Choose Repository Directory</source> - <translation>請選擇主目錄的存放目錄</translation> + <translation>請選擇儲存庫的存放目錄</translation> </message> <message> <source>The directory '%1' is already managed by a version control system (%2). Would you like to specify another directory?</source> @@ -13550,11 +13550,11 @@ Requires <b>Qt 4.7.4</b> or newer.</source> </message> <message> <source>Repository Created</source> - <translation>主目錄建立成功</translation> + <translation>儲存庫建立成功</translation> </message> <message> <source>Repository Creation Failed</source> - <translation>主目錄建立失敗</translation> + <translation>儲存庫建立失敗</translation> </message> <message> <source>Error: Executable timed out after %1s.</source> @@ -13562,7 +13562,7 @@ Requires <b>Qt 4.7.4</b> or newer.</source> </message> <message> <source>There is no patch-command configured in the common 'Version Control' settings.</source> - <translation>在「版本控制」設定中沒有設定修補指令。</translation> + <translation>在「版本控制」設定中沒有組態修補命令。</translation> </message> <message> <source>Unable to launch '%1': %2</source> @@ -13582,11 +13582,11 @@ Requires <b>Qt 4.7.4</b> or newer.</source> </message> <message> <source>A version control repository has been created in %1.</source> - <translation>已在 %1 建立版本控制系統主目錄。</translation> + <translation>已在 %1 建立版本控制系統儲存庫。</translation> </message> <message> <source>A version control repository could not be created in %1.</source> - <translation>無法在 %1 建立版本控制系統主目錄。</translation> + <translation>無法在 %1 建立版本控制系統儲存庫。</translation> </message> </context> <context> @@ -13641,7 +13641,7 @@ with a password, which you can enter below.</source> </message> <message> <source>Please configure a path.</source> - <translation>請設置一個路徑。</translation> + <translation>請組態一個路徑。</translation> </message> <message> <source>Pasted: %1</source> @@ -13653,7 +13653,7 @@ with a password, which you can enter below.</source> </message> <message> <source>%1 - Configuration Error</source> - <translation>%1 - 設置錯誤</translation> + <translation>%1 - 組態錯誤</translation> </message> <message> <source>Settings...</source> @@ -13786,7 +13786,7 @@ with a password, which you can enter below.</source> <message> <source>The qmake command "%1" was not found or is not executable.</source> <extracomment>%1: Path to qmake executable</extracomment> - <translation>找不到 qmake 指令 "%1",或該指令無法執行。</translation> + <translation>找不到 qmake 命令 "%1",或該命令無法執行。</translation> </message> </context> <context> @@ -14456,7 +14456,7 @@ Ids must begin with a lowercase letter.</source> <name>QtC::Core</name> <message> <source>Unfiltered</source> - <translation>未過濾</translation> + <translation>未篩選</translation> </message> </context> <context> @@ -14616,7 +14616,7 @@ Ids must begin with a lowercase letter.</source> <name>QtC::Help</name> <message> <source>Filter configuration</source> - <translation type="obsolete">過濾器設置</translation> + <translation type="obsolete">篩選器組態</translation> </message> <message> <source>Prefix:</source> @@ -14851,23 +14851,23 @@ Ids must begin with a lowercase letter.</source> <name>QtC::Utils</name> <message> <source>The command '%1' finished successfully.</source> - <translation>指令 '%1' 已成功完成。</translation> + <translation>命令 '%1' 已成功完成。</translation> </message> <message> <source>The command '%1' terminated with exit code %2.</source> - <translation>指令 '%1' 已結束,離開代碼 %2。</translation> + <translation>命令 '%1' 已結束,離開代碼 %2。</translation> </message> <message> <source>The command '%1' terminated abnormally.</source> - <translation>指令 '%1' 異常結束。</translation> + <translation>命令 '%1' 異常結束。</translation> </message> <message> <source>The command '%1' could not be started.</source> - <translation>指令 '%1' 無法啟動。</translation> + <translation>命令 '%1' 無法啟動。</translation> </message> <message> <source>The command '%1' did not respond within the timeout limit (%2 ms).</source> - <translation>指令 '%1' 在時限 (%2毫秒) 內未回應。</translation> + <translation>命令 '%1' 在時限 (%2毫秒) 內未回應。</translation> </message> <message> <source>Process not Responding</source> @@ -14906,7 +14906,7 @@ Ids must begin with a lowercase letter.</source> </message> <message> <source>Configuration is faulty. Check the Issues view for details.</source> - <translation type="unfinished">設置錯誤。請在錯誤檢視中看詳情。</translation> + <translation>組態錯誤。請在錯誤檢視中看詳情。</translation> </message> </context> <context> @@ -15079,7 +15079,7 @@ Flags: %3</source> </message> <message> <source>Break on QML signal handler</source> - <translation type="obsolete">在 QML 信號處理器中斷</translation> + <translation type="obsolete">在 QML 訊號處理器中斷</translation> </message> <message> <source>Break when JavaScript exception is thrown</source> @@ -15095,8 +15095,8 @@ debugger start-up times (CDB, LLDB).</source> <message> <source>Debugger command to be executed when the breakpoint is hit. GDB allows for specifying a sequence of commands separated by the delimiter '\n'.</source> - <translation type="obsolete">當遇到中斷點時要執行的除錯器指令。 -GDB 允許使用 '\n' 來區隔多個指令序列。</translation> + <translation type="obsolete">當遇到中斷點時要執行的除錯器命令。 +GDB 允許使用 '\n' 來區隔多個命令序列。</translation> </message> <message> <source><html><head/><body><p>Determines how the path is specified when setting breakpoints:</p><ul><li><i>Use Engine Default</i>: Preferred setting of the debugger engine.</li><li><i>Use Full Path</i>: Pass full path, avoiding ambiguities should files of the same name exist in several modules. This is the engine default for CDB and LLDB.</li><li><i>Use File Name</i>: Pass the file name only. This is useful when using a source tree whose location does not match the one used when building the modules. It is the engine default for GDB as using full paths can be slow with this engine.</li></ul></body></html></source> @@ -15160,7 +15160,7 @@ GDB 允許使用 '\n' 來區隔多個指令序列。</translation> </message> <message> <source>&Command:</source> - <translation type="obsolete">指令(&C):</translation> + <translation type="obsolete">命令(&C):</translation> </message> <message> <source>Use Engine Default</source> @@ -15393,7 +15393,7 @@ This feature is only available for GDB.</source> </message> <message> <source>Stopped: %1 (Signal %2).</source> - <translation>已停止:%1 (信號 %2)。</translation> + <translation>已停止:%1 (訊號 %2)。</translation> </message> <message> <source>Stopped in thread %1 by: %2.</source> @@ -15415,11 +15415,11 @@ This feature is only available for GDB.</source> </message> <message> <source><p>The inferior stopped because it received a signal from the Operating System.<p><table><tr><td>Signal name : </td><td>%1</td></tr><tr><td>Signal meaning : </td><td>%2</td></tr></table></source> - <translation><p>底層由於接收到作業系統的信號而停止。<p><table><tr><td>信號名稱: </td><td>%1</td></tr><tr><td>信號意義:</td><td>%2</td></tr></table></translation> + <translation><p>底層由於接收到作業系統的訊號而停止。<p><table><tr><td>訊號名稱: </td><td>%1</td></tr><tr><td>訊號意義:</td><td>%2</td></tr></table></translation> </message> <message> <source>Signal received</source> - <translation>接收到信號</translation> + <translation>接收到訊號</translation> </message> <message> <source><p>The inferior stopped because it triggered an exception.<p>%1</source> @@ -15483,11 +15483,11 @@ This feature is only available for GDB.</source> </message> <message> <source>The debugger engine '%1' required for debugging binaries of the type '%2' is not configured correctly.</source> - <translation type="obsolete">除錯型態 '%2' 的執行檔需要使用除錯引擎 '%1',但是設置不正確。</translation> + <translation type="obsolete">除錯型態 '%2' 的執行檔需要使用除錯引擎 '%1',但是組態不正確。</translation> </message> <message> <source>None of the debugger engines '%1' capable of debugging binaries of the type '%2' is configured correctly.</source> - <translation type="obsolete">型態 '%2' 的執行檔適用的除錯引擎 '%1' 設置都不正確。</translation> + <translation type="obsolete">型態 '%2' 的執行檔適用的除錯引擎 '%1' 組態都不正確。</translation> </message> <message> <source>The preferred debugger engine for debugging binaries of type '%1' is not available. @@ -15838,7 +15838,7 @@ instead of its installation directory when run outside git bash.</source> <message> <source>Deploy Configuration</source> <extracomment>Display name of the default deploy configuration</extracomment> - <translation>佈署設置</translation> + <translation>佈署組態</translation> </message> <message> <source>Application Still Running</source> @@ -15984,7 +15984,7 @@ instead of its installation directory when run outside git bash.</source> </message> <message> <source>Filter properties</source> - <translation type="obsolete">過濾器屬性</translation> + <translation type="obsolete">篩選器屬性</translation> </message> </context> <context> @@ -16474,7 +16474,7 @@ Reason: %2</source> <message> <source>Running command: %1 </source> - <translation type="obsolete">執行指令:%1</translation> + <translation type="obsolete">執行命令:%1</translation> </message> <message> <source>Recipe %1 failed with exit code %2.</source> @@ -16732,7 +16732,7 @@ Please check the directory's access rights.</source> </message> <message> <source>Filter tree</source> - <translation>過濾樹狀圖</translation> + <translation>篩選樹狀圖</translation> </message> <message> <source>Outline</source> @@ -16824,7 +16824,7 @@ The new branch will depend on the availability of the source branch for all oper </message> <message> <source>Do not use a shared repository, even if available.</source> - <translation>即使可以使用,也不要使用共享主目錄。</translation> + <translation>即使可以使用,也不要使用共享儲存庫。</translation> </message> <message> <source>Switch the checkout in the current directory to the new branch.</source> @@ -16847,11 +16847,11 @@ The new branch will depend on the availability of the source branch for all oper </message> <message> <source>Configuration</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Command:</source> - <translation>指令:</translation> + <translation>命令:</translation> </message> <message> <source>User</source> @@ -17021,7 +17021,7 @@ Local pulls are not applied to the master branch.</source> </message> <message> <source>Arguments:</source> - <translation>參數:</translation> + <translation>引數:</translation> </message> <message> <source>Working directory:</source> @@ -17108,7 +17108,7 @@ Local pulls are not applied to the master branch.</source> </message> <message> <source>Preferences</source> - <translation>喜好設定</translation> + <translation>偏好設定</translation> </message> <message> <source>Name</source> @@ -17712,7 +17712,7 @@ Local pulls are not applied to the master branch.</source> </message> <message> <source>Create Repository...</source> - <translation>建立主目錄...</translation> + <translation>建立儲存庫...</translation> </message> <message> <source>Update</source> @@ -17786,7 +17786,7 @@ Local pulls are not applied to the master branch.</source> </message> <message> <source>Specify repository URL, clone directory and path.</source> - <translation>請指定主目錄網址、複製目錄與路徑。</translation> + <translation>請指定儲存庫網址、複製目錄與路徑。</translation> </message> <message> <source>Clone URL:</source> @@ -17804,7 +17804,7 @@ Local pulls are not applied to the master branch.</source> <name>QtC::Bazaar</name> <message> <source>Bazaar Command</source> - <translation>Bazaar 指令</translation> + <translation>Bazaar 命令</translation> </message> </context> <context> @@ -18329,7 +18329,7 @@ to version control (%2) </message> <message> <source>Error evaluating command line arguments: %1</source> - <translation>計算命令列參數時發生錯誤:%1</translation> + <translation>計算命令列引數時發生錯誤:%1</translation> </message> <message> <source>Start Debugging</source> @@ -18977,7 +18977,7 @@ Do you want to retry?</source> </message> <message> <source>The following tool chain was already configured:<br>&nbsp;%1<br>It was not configured again.</source> - <translation type="obsolete">已設置以下工具鍊:<br>&nbsp;%1<br>因此未再次設置。</translation> + <translation type="obsolete">已組態以下工具鍊:<br>&nbsp;%1<br>因此未再次組態。</translation> </message> <message> <source>Duplicate Tool Chains detected</source> @@ -18985,7 +18985,7 @@ Do you want to retry?</source> </message> <message> <source>The following tool chains were already configured:<br>&nbsp;%1<br>They were not configured again.</source> - <translation type="obsolete">已設置以下工具鍊:<br>&nbsp;%1<br>因此未再次設置。</translation> + <translation type="obsolete">已組態以下工具鍊:<br>&nbsp;%1<br>因此未再次組態。</translation> </message> </context> <context> @@ -19008,7 +19008,7 @@ Do you want to retry?</source> <message> <source><Filter></source> <comment>Library search input hint text</comment> - <translation><過濾器></translation> + <translation><篩選器></translation> </message> </context> <context> @@ -19183,7 +19183,7 @@ Error: %2</source> </message> <message> <source>Arguments:</source> - <translation>參數:</translation> + <translation>引數:</translation> </message> <message> <source>Main QML file:</source> @@ -19519,7 +19519,7 @@ Your application will also be rejected by Nokia Store QA if you choose an unrele </message> <message> <source>Build Configuration</source> - <translation type="obsolete">建置設置</translation> + <translation type="obsolete">建置組態</translation> </message> <message> <source>Project File Checks</source> @@ -19566,7 +19566,7 @@ Your application will also be rejected by Nokia Store QA if you choose an unrele </message> <message> <source>Create build configurations:</source> - <translation type="obsolete">建立建置設置:</translation> + <translation type="obsolete">建立建置組態:</translation> </message> <message> <source>For Each Qt Version One Debug And One Release</source> @@ -20395,7 +20395,7 @@ if (a && </message> <message> <source>Valgrind Command</source> - <translation>Valgrind 指令</translation> + <translation>Valgrind 命令</translation> </message> <message> <source>Valgrind Suppression Files</source> @@ -20526,11 +20526,11 @@ With cache simulation, further event counters are enabled: <name>QtC::VcsBase</name> <message> <source>Configuration</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Please configure <b>%1</b> now.</source> - <translation>請現在設置 <b>%1</b>。</translation> + <translation>請現在組態 <b>%1</b>。</translation> </message> </context> <context> @@ -20736,15 +20736,15 @@ Would you like to overwrite them?</source> </message> <message> <source>Command</source> - <translation>指令</translation> + <translation>命令</translation> </message> <message> <source>User command #%1</source> - <translation>使用者指令 #%1</translation> + <translation>使用者命令 #%1</translation> </message> <message> <source>User Command Mapping</source> - <translation>使用者指令映射</translation> + <translation>使用者命令映射</translation> </message> </context> <context> @@ -20755,7 +20755,7 @@ Would you like to overwrite them?</source> </message> <message> <source>Apply Filter</source> - <translation>套用過濾器</translation> + <translation>套用篩選器</translation> </message> <message> <source>Generating file list... @@ -20854,7 +20854,7 @@ These files are preserved.</source> </message> <message> <source>Re-run this run-configuration</source> - <translation>重新執行此執行設置</translation> + <translation>重新執行此執行組態</translation> </message> <message> <source>Application Output</source> @@ -20866,7 +20866,7 @@ These files are preserved.</source> </message> <message> <source>Code Style Settings</source> - <translation type="obsolete">代碼風格設定</translation> + <translation type="obsolete">程式碼樣式設定</translation> </message> <message> <source>Code Style</source> @@ -20877,7 +20877,7 @@ These files are preserved.</source> <name>CodeStyleSettingsPanel</name> <message> <source>Code Style Settings</source> - <translation type="obsolete">代碼風格設定</translation> + <translation type="obsolete">程式碼樣式設定</translation> </message> <message> <source>Code Style</source> @@ -21069,7 +21069,7 @@ These files are preserved.</source> <name>QtC::QmlJSTools</name> <message> <source>Code Style</source> - <translation>代碼風格</translation> + <translation>程式碼樣式</translation> </message> <message> <source>Qt Quick</source> @@ -21166,7 +21166,7 @@ Please use the stop button instead.</source> The Qt version configured in your active build configuration is too old. Do you want to continue?</source> <translation>QML 效能分析器需要 Qt 4.7.4 或之後的版本。 -您目前作用中的建置設置的 Qt 版本太舊了。 +您目前作用中的建置組態的 Qt 版本太舊了。 您要繼續嗎?</translation> </message> <message> @@ -21366,7 +21366,7 @@ Do you want to retry?</source> </message> <message> <source>Qt Creator is waiting for the CODA application to connect.<br>Please make sure the application is running on your mobile phone and the right IP address and/or port are configured in the project settings.</source> - <translation type="obsolete">Qt Creator 正在等待 CODA 應用連接.<br>你確保你手機上應用正在執行並且IP 地址或連接埠已經設置正確.</translation> + <translation type="obsolete">Qt Creator 正在等待 CODA 應用連接.<br>你確保你手機上應用正在執行並且IP 地址或連接埠已經組態正確.</translation> </message> <message> <source>Canceled. @@ -21420,7 +21420,7 @@ Do you want to retry?</source> </message> <message> <source>Choose a build configuration:</source> - <translation type="obsolete">選擇一個建置設置:</translation> + <translation type="obsolete">選擇一個建置組態:</translation> </message> <message> <source>Choose a tool chain:</source> @@ -21670,7 +21670,7 @@ Do you want to retry?</source> </message> <message> <source>New Generic Linux Device Configuration Setup</source> - <translation>新的通用型 Linux 裝置設定</translation> + <translation>新的通用型 Linux 裝置組態</translation> </message> <message> <source>Connection Data</source> @@ -21687,7 +21687,7 @@ Do you want to retry?</source> <message> <source>The new device configuration will now be created. In addition, device connectivity will be tested.</source> - <translation>將建立新的裝置設置。 + <translation>將建立新的裝置組態。 此外,也會測試裝置的連線。</translation> </message> <message> @@ -21696,7 +21696,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>Device Configuration Wizard Selection</source> - <translation type="obsolete">裝置設置精靈選擇</translation> + <translation type="obsolete">裝置組態精靈選擇</translation> </message> <message> <source>Available device types:</source> @@ -21770,7 +21770,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>No active build configuration.</source> - <translation>沒有作用中的建置設置。</translation> + <translation>沒有作用中的建置組態。</translation> </message> <message> <source>Don't know what to run.</source> @@ -21809,7 +21809,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source><a href="%1">Manage device configurations</a></source> - <translation type="obsolete"><a href="%1">管理裝置設置</a></translation> + <translation type="obsolete"><a href="%1">管理裝置組態</a></translation> </message> <message> <source><a href="%1">Set Debugger</a></source> @@ -21825,7 +21825,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>Use this command instead</source> - <translation>用這個指令代替</translation> + <translation>用這個命令代替</translation> </message> <message> <source>Alternate executable on device:</source> @@ -21833,7 +21833,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>Arguments:</source> - <translation>參數:</translation> + <translation>引數:</translation> </message> <message> <source><default></source> @@ -21845,7 +21845,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>Base environment for this run configuration:</source> - <translation>執行設置的基礎環境:</translation> + <translation>執行組態的基礎環境:</translation> </message> <message> <source>Cancel Fetch Operation</source> @@ -22008,7 +22008,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>Filter...</source> - <translation>過濾器...</translation> + <translation>篩選器...</translation> </message> <message> <source>Profiling aborted.</source> @@ -22114,7 +22114,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>Error Filter</source> - <translation>錯誤過濾</translation> + <translation>錯誤篩選</translation> </message> <message> <source>Internal Error</source> @@ -22344,7 +22344,7 @@ In addition, device connectivity will be tested.</source> </message> <message> <source>Command-line arguments: %1</source> - <translation>命令列參數:%1</translation> + <translation>命令列引數:%1</translation> </message> <message> <source>** Analyzing finished ** @@ -22379,7 +22379,7 @@ In addition, device connectivity will be tested.</source> <name>QtC::VcsBase</name> <message> <source>Command used for reverting diff chunks</source> - <translation>回復差異區塊的指令</translation> + <translation>回復差異區塊的命令</translation> </message> </context> <context> @@ -22941,7 +22941,7 @@ To compile QML Observer, go to the Qt Versions page, select the current Qt versi </message> <message> <source>Handling Signal</source> - <translation>信號處理中</translation> + <translation>訊號處理中</translation> </message> </context> <context> @@ -23138,7 +23138,7 @@ To compile QML Observer, go to the Qt Versions page, select the current Qt versi </message> <message> <source>Open Command Prompt Here</source> - <translation>在此開啟指令提示</translation> + <translation>在此開啟命令提示</translation> </message> <message> <source>Open Terminal Here</source> @@ -23533,7 +23533,7 @@ Qt Creator 知道一個相似的URI.</translation> </message> <message> <source>No device configuration set.</source> - <translation>沒有設定裝置設置。</translation> + <translation>沒有設定裝置組態。</translation> </message> <message> <source>Connecting to device...</source> @@ -23657,11 +23657,11 @@ Is the device connected and set up for network access?</source> </message> <message> <source>Linux Device Configurations</source> - <translation type="obsolete">Linux 裝置設置</translation> + <translation type="obsolete">Linux 裝置組態</translation> </message> <message> <source>&Configuration:</source> - <translation type="obsolete">設置(&C):</translation> + <translation type="obsolete">組態(&C):</translation> </message> <message> <source>General</source> @@ -23789,7 +23789,7 @@ Is the device connected and set up for network access?</source> </message> <message> <source>Run custom remote command</source> - <translation>執行自訂的遠端指令</translation> + <translation>執行自訂的遠端命令</translation> </message> <message> <source>No command line given.</source> @@ -23797,7 +23797,7 @@ Is the device connected and set up for network access?</source> </message> <message> <source>Starting remote command '%1'...</source> - <translation>啟動遠端指令 '%1'......</translation> + <translation>啟動遠端命令 '%1'...</translation> </message> <message> <source>Remote process failed to start.</source> @@ -23805,7 +23805,7 @@ Is the device connected and set up for network access?</source> </message> <message> <source>Remote process was killed by a signal.</source> - <translation>遠端行程被信號強行終結。</translation> + <translation>遠端行程被訊號強行終結。</translation> </message> <message> <source>Remote process finished with exit code %1.</source> @@ -23813,7 +23813,7 @@ Is the device connected and set up for network access?</source> </message> <message> <source>Remote command finished successfully.</source> - <translation>遠端指令成功完成。</translation> + <translation>遠端命令成功完成。</translation> </message> <message> <source>Deploy to Remote Linux Host</source> @@ -23877,7 +23877,7 @@ Remote stderr was: %1</source> </message> <message> <source>Device Configurations</source> - <translation type="obsolete">裝置設置</translation> + <translation type="obsolete">裝置組態</translation> </message> <message> <source>Could not start remote process: %1</source> @@ -23899,7 +23899,7 @@ Remote error output was: %1</source> </message> <message> <source>SSH Key Configuration</source> - <translation type="obsolete">SSH 金鑰設置</translation> + <translation type="obsolete">SSH 金鑰組態</translation> </message> <message> <source>Options</source> @@ -23999,7 +23999,7 @@ Remote error output was: %1</source> </message> <message> <source>Running command: %1</source> - <translation type="obsolete">執行指令:%1</translation> + <translation type="obsolete">執行命令:%1</translation> </message> <message> <source>Packaging finished successfully.</source> @@ -24070,19 +24070,19 @@ Remote error output was: %1</source> <name>QtC::TextEditor</name> <message> <source>Edit Code Style</source> - <translation>編輯代碼風格</translation> + <translation>編輯程式碼樣式</translation> </message> <message> <source>Code style name:</source> - <translation>代碼風格名稱:</translation> + <translation>程式碼樣式名稱:</translation> </message> <message> <source>You cannot save changes to a built-in code style. Copy it first to create your own version.</source> - <translation>您不能儲存內建代碼風格的變更。請先複製以建立您自己的版本。</translation> + <translation>您不能儲存內建程式碼樣式的變更。請先複製以建立您自己的版本。</translation> </message> <message> <source>Copy Built-in Code Style</source> - <translation>複製內建代碼風格</translation> + <translation>複製內建程式碼樣式</translation> </message> <message> <source>%1 (Copy)</source> @@ -24090,23 +24090,23 @@ Remote error output was: %1</source> </message> <message> <source>Copy Code Style</source> - <translation>複製代碼風格</translation> + <translation>複製程式碼樣式</translation> </message> <message> <source>Delete Code Style</source> - <translation>刪除代碼風格</translation> + <translation>刪除程式碼樣式</translation> </message> <message> <source>Are you sure you want to delete this code style permanently?</source> - <translation>您確定要永久刪除這個代碼風格嗎?</translation> + <translation>您確定要永久刪除這個程式碼樣式嗎?</translation> </message> <message> <source>Import Code Style</source> - <translation>匯入代碼風格</translation> + <translation>匯入程式碼樣式</translation> </message> <message> <source>Code styles (*.xml);;All files (*)</source> - <translation>代碼風格 (*.xml);;所有檔案(*)</translation> + <translation>程式碼樣式 (*.xml);;所有檔案(*)</translation> </message> <message> <source>Cannot import code style from "%1".</source> @@ -24114,11 +24114,11 @@ Remote error output was: %1</source> </message> <message> <source>Cannot import code style</source> - <translation type="obsolete">無法匯入代碼風格</translation> + <translation type="obsolete">無法匯入程式碼樣式</translation> </message> <message> <source>Export Code Style</source> - <translation>匯出代碼風格</translation> + <translation>匯出程式碼樣式</translation> </message> <message> <source>%1 [proxy: %2]</source> @@ -24142,7 +24142,7 @@ Filter: %2 %3</source> <extracomment>%3 is filled by BaseFileFind::runNewSearch</extracomment> <translation>路徑:%1 -過濾器:%2 +篩選器:%2 %3</translation> </message> <message> @@ -24259,7 +24259,7 @@ Filter: %2 </message> <message> <source>Arguments:</source> - <translation type="obsolete">參數:</translation> + <translation type="obsolete">引數:</translation> </message> <message> <source>Working directory:</source> @@ -24270,7 +24270,7 @@ Filter: %2 <name>QtC::Core</name> <message> <source>Command Mappings</source> - <translation>指令映射</translation> + <translation>命令映射</translation> </message> <message> <source>Target</source> @@ -24695,15 +24695,15 @@ p, li { white-space: pre-wrap; } <name>QtC::QmakeProjectManager</name> <message> <source>Make arguments:</source> - <translation>Make 參數:</translation> + <translation>Make 引數:</translation> </message> <message> <source>qmake build configuration:</source> - <translation>qmake 建置設置:</translation> + <translation>qmake 建置組態:</translation> </message> <message> <source>Additional arguments:</source> - <translation>額外的參數:</translation> + <translation>額外的引數:</translation> </message> <message> <source>Link QML debugging library:</source> @@ -24883,7 +24883,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>The name to identify this configuration:</source> - <translation>用於辨認此設置的名稱:</translation> + <translation>用於辨認此組態的名稱:</translation> </message> <message> <source>The device's host name or IP address:</source> @@ -24919,11 +24919,11 @@ p, li { white-space: pre-wrap; } </message> <message> <source>Device configuration:</source> - <translation type="obsolete">裝置設置:</translation> + <translation type="obsolete">裝置組態:</translation> </message> <message> <source><a href="irrelevant">Manage device configurations</a></source> - <translation type="obsolete"><a href="irrelevant">管理裝置設置</a></translation> + <translation type="obsolete"><a href="irrelevant">管理裝置組態</a></translation> </message> <message> <source>These show the INSTALLS settings from the project file(s).</source> @@ -24939,7 +24939,7 @@ p, li { white-space: pre-wrap; } </message> <message> <source>&Filter by process name:</source> - <translation type="obsolete">依行程名稱過濾(&F):</translation> + <translation type="obsolete">依行程名稱篩選(&F):</translation> </message> <message> <source>&Update List</source> @@ -25336,7 +25336,7 @@ Influences the indentation of continuation lines. </pre> </li> -<li>伴隨規則縮排: 在原設置上使用 tab 或 空格進行對齊。 +<li>伴隨規則縮排: 在原組態上使用 tab 或 空格進行對齊。 <pre> (tab)int i = foo(a, b (tab)(tab)(tab) c, d); @@ -25404,11 +25404,11 @@ Influences the indentation of continuation lines. </message> <message> <source>Repository</source> - <translation>主目錄</translation> + <translation>儲存庫</translation> </message> <message> <source>The remote repository to check out.</source> - <translation>要取出的遠端主目錄。</translation> + <translation>要取出的遠端儲存庫。</translation> </message> <message> <source>Branch:</source> @@ -25416,11 +25416,11 @@ Influences the indentation of continuation lines. </message> <message> <source>The development branch in the remote repository to check out.</source> - <translation>要取出的遠端主目錄中的開發分支。</translation> + <translation>要取出的遠端儲存庫中的開發分支。</translation> </message> <message> <source>Retrieve list of branches in repository.</source> - <translation>取得主目錄中的分支列表。</translation> + <translation>取得儲存庫中的分支列表。</translation> </message> <message> <source>...</source> @@ -25448,7 +25448,7 @@ Influences the indentation of continuation lines. </message> <message> <source>Clean Repository</source> - <translation>清除主目錄</translation> + <translation>清除儲存庫</translation> </message> <message> <source>Wrap submit message at:</source> @@ -25460,7 +25460,7 @@ Influences the indentation of continuation lines. </message> <message> <source>An executable which is called with the submit message in a temporary file as first argument. It should return with an exit != 0 and a message on standard error to indicate failure.</source> - <translation type="unfinished">一個可執行檔,以儲存在臨時檔案中的提交訊息為首參數。當提交失敗時以非零值退出並在標準錯誤中輸出訊息。</translation> + <translation>一個可執行檔,以儲存在臨時檔案中的提交訊息為第一個引數。當提交失敗時以非零值退出並在標準錯誤中輸出訊息。</translation> </message> <message> <source>Submit message &check script:</source> @@ -25474,7 +25474,7 @@ name <email> alias <email></source> </message> <message> <source>User/&alias configuration file:</source> - <translation type="unfinished">使用者/別名設置檔案(&a):</translation> + <translation>使用者/別名組態檔案(&a):</translation> </message> <message> <source>A simple file containing lines with field names like "Reviewed-By:" which will be added below the submit editor.</source> @@ -25482,25 +25482,25 @@ name <email> alias <email></source> </message> <message> <source>User &fields configuration file:</source> - <translation type="unfinished">使用者字段設置檔案(&f):</translation> + <translation>使用者字段組態檔案(&f):</translation> </message> <message> <source>&Patch command:</source> - <translation>修補指令(&P):</translation> + <translation>修補命令(&P):</translation> </message> <message> <source>Specifies a command that is executed to graphically prompt for a password, should a repository require SSH-authentication (see documentation on SSH and the environment variable SSH_ASKPASS).</source> - <translation type="unfinished">指定一條執行圖形化提示密碼的命令, -會在代碼倉函式庫要求 SSH 身份驗證的時候用到。(查看 SSH 和環境變數 SSH_ASKPASS 的相關文檔)。</translation> + <translation>指定一條執行圖形化提示密碼的命令, +會在儲存庫要求 SSH 身份驗證的時候用到。(查看 SSH 和環境變數 SSH_ASKPASS 的相關文檔)。</translation> </message> <message> <source>&SSH prompt command:</source> - <translation>SSH 提示指令(&S):</translation> + <translation>SSH 提示命令(&S):</translation> </message> <message> <source>Configure...</source> - <translation type="obsolete">設置...</translation> + <translation type="obsolete">組態...</translation> </message> </context> <context> @@ -25936,11 +25936,11 @@ should a repository require SSH-authentication (see documentation on SSH and the </message> <message> <source>Do you really want to delete the configuration <b>%1</b>?</source> - <translation>您確定要刪除此設置 <b>%1</b> 嗎?</translation> + <translation>您確定要刪除此組態 <b>%1</b> 嗎?</translation> </message> <message> <source>New name for configuration <b>%1</b>:</source> - <translation>設置 <b>%1</b> 的新名稱:</translation> + <translation>組態 <b>%1</b> 的新名稱:</translation> </message> <message> <source>Rename...</source> @@ -25964,11 +25964,11 @@ should a repository require SSH-authentication (see documentation on SSH and the </message> <message> <source>Process killed by signal</source> - <translation type="obsolete">行程被信號強行中止</translation> + <translation type="obsolete">行程被訊號強行中止</translation> </message> <message> <source>Server sent invalid signal '%1'</source> - <translation type="obsolete">伺服器送出無效的信號 '%1'</translation> + <translation type="obsolete">伺服器送出無效的訊號 '%1'</translation> </message> </context> <context> @@ -26046,11 +26046,11 @@ should a repository require SSH-authentication (see documentation on SSH and the </message> <message> <source>Configuration unchanged, skipping autogen step.</source> - <translation>設置未變更,跳過 autogen 步驟。</translation> + <translation>組態未變更,跳過 autogen 步驟。</translation> </message> <message> <source>Arguments:</source> - <translation>參數:</translation> + <translation>引數:</translation> </message> <message> <source>Autogen</source> @@ -26068,7 +26068,7 @@ should a repository require SSH-authentication (see documentation on SSH and the </message> <message> <source>Configuration unchanged, skipping autoreconf step.</source> - <translation>設置未變更,跳過 autoreconf 步驟。</translation> + <translation>組態未變更,跳過 autoreconf 步驟。</translation> </message> <message> <source>Autoreconf</source> @@ -26081,11 +26081,11 @@ should a repository require SSH-authentication (see documentation on SSH and the </message> <message> <source>New Configuration</source> - <translation>新增設置</translation> + <translation>新增組態</translation> </message> <message> <source>New configuration name:</source> - <translation>新設置名稱:</translation> + <translation>新組態名稱:</translation> </message> <message> <source>Build directory:</source> @@ -26127,20 +26127,20 @@ should a repository require SSH-authentication (see documentation on SSH and the <message> <source>Configure</source> <comment>Display name for AutotoolsProjectManager::ConfigureStep id.</comment> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Configure</source> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Configuration unchanged, skipping configure step.</source> - <translation>設置未變更,跳過設置步驟。</translation> + <translation>組態未變更,跳過組態步驟。</translation> </message> <message> <source>Configure</source> <comment>AutotoolsProjectManager::ConfigureStepConfigWidget display name.</comment> - <translation>設置</translation> + <translation>組態</translation> </message> <message> <source>Parsing %1 in directory %2</source> @@ -26165,7 +26165,7 @@ should a repository require SSH-authentication (see documentation on SSH and the </message> <message> <source>Configuration is faulty. Check the Issues view for details.</source> - <translation type="unfinished">設置錯誤。請在錯誤檢視中看詳情。</translation> + <translation>組態錯誤。請在錯誤檢視中看詳情。</translation> </message> <message> <source>Make</source> @@ -26416,7 +26416,7 @@ should a repository require SSH-authentication (see documentation on SSH and the <message> <source>Previous command is still running ('%1'). Do you want to kill it?</source> - <translation>前一個指令仍然在執行中 ('%1')。 + <translation>前一個命令仍然在執行中 ('%1')。 您要強行結束它嗎?</translation> </message> <message> @@ -26437,11 +26437,11 @@ Do you want to kill it?</source> </message> <message> <source>Starting command '%1'</source> - <translation>啟動指令 '%1' 中</translation> + <translation>啟動命令 '%1' 中</translation> </message> <message> <source>Execute Custom Commands</source> - <translation>執行自訂指令</translation> + <translation>執行自訂命令</translation> </message> </context> <context> @@ -26603,7 +26603,7 @@ references to elements in other files, loops, etc.)</source> </message> <message> <source>Signal</source> - <translation>信號</translation> + <translation>訊號</translation> </message> <message> <source>Part of binding loop</source> @@ -26634,7 +26634,7 @@ references to elements in other files, loops, etc.)</source> <name>QtC::QmakeProjectManager</name> <message> <source>Configure Project</source> - <translation>設置專案</translation> + <translation>組態專案</translation> </message> <message> <source>The project <b>%1</b> is not yet configured.<br/>Qt Creator cannot parse the project, because no kit has been set up.</source> @@ -26650,7 +26650,7 @@ references to elements in other files, loops, etc.)</source> </message> <message> <source><p>The project <b>%1</b> is not yet configured.</p><p>Qt Creator uses the Qt version: <b>%2</b> and the tool chain: <b>%3</b> to parse the project. You can edit these in the <b><a href="edit">options.</a></b></p></source> - <translation type="obsolete"><p>專案 <b>%1</b>還沒設置。</p><p>Qt Creator 使用的 Qt 版本: <b>%2</b> 和工具鍊: <b>%3</b> 來解析專案。 你可以編輯這些 <b><a href="edit">選項.</a></b></p></translation> + <translation type="obsolete"><p>專案 <b>%1</b>還沒組態。</p><p>Qt Creator 使用的 Qt 版本: <b>%2</b> 和工具鍊: <b>%3</b> 來解析專案。 你可以編輯這些 <b><a href="edit">選項.</a></b></p></translation> </message> <message> <source>Qt Version:</source> @@ -26829,7 +26829,7 @@ references to elements in other files, loops, etc.)</source> <name>QSsh::SshKeyCreationDialog</name> <message> <source>SSH Key Configuration</source> - <translation type="unfinished">SSH 金鑰設置</translation> + <translation>SSH 金鑰組態</translation> </message> <message> <source>Options</source> @@ -27266,11 +27266,11 @@ This option is useful when you want to try your application on devices which don </message> <message> <source>Configuration</source> - <translation type="unfinished">設置</translation> + <translation>組態</translation> </message> <message> <source>&Command:</source> - <translation type="unfinished">指令(&C):</translation> + <translation type="unfinished">命令(&C):</translation> </message> <message> <source>Diff</source> @@ -27402,7 +27402,7 @@ This option is useful when you want to try your application on devices which don <name>QtC::ProjectExplorer</name> <message> <source>Device Configuration Wizard Selection</source> - <translation type="unfinished">裝置設置精靈選擇</translation> + <translation>裝置組態精靈選擇</translation> </message> <message> <source>Available device types:</source> @@ -27410,7 +27410,7 @@ This option is useful when you want to try your application on devices which don </message> <message> <source>Linux Device Configurations</source> - <translation type="unfinished">Linux 裝置設置</translation> + <translation>Linux 裝置組態</translation> </message> <message> <source>General</source> @@ -27519,7 +27519,7 @@ This option is useful when you want to try your application on devices which don </message> <message> <source>The name to identify this configuration:</source> - <translation type="unfinished">用於辨認此設置的名稱:</translation> + <translation>用於辨認此組態的名稱:</translation> </message> <message> <source>The device's host name or IP address:</source> @@ -27809,11 +27809,11 @@ This option is useful when you want to try your application on devices which don <name>QSsh::Internal::SshRemoteProcessPrivate</name> <message> <source>Process killed by signal</source> - <translation type="unfinished">行程被信號強行中止</translation> + <translation>行程被訊號強行中止</translation> </message> <message> <source>Server sent invalid signal '%1'</source> - <translation type="unfinished">伺服器送出無效的信號 '%1'</translation> + <translation>伺服器送出無效的訊號 '%1'</translation> </message> </context> <context> @@ -27965,7 +27965,7 @@ This option is useful when you want to try your application on devices which don </message> <message> <source>Arguments:</source> - <translation type="unfinished">參數:</translation> + <translation type="unfinished">引數:</translation> </message> <message> <source>Working directory:</source> @@ -28030,7 +28030,7 @@ Please install an SDK of at least API version %1.</source> </message> <message> <source>Packaging Error: Command '%1 %2' failed.</source> - <translation type="unfinished">打包錯誤:指令 '%1' 失敗。 {1 %2'?}</translation> + <translation type="unfinished">打包錯誤:命令 '%1' 失敗。 {1 %2'?}</translation> </message> <message> <source> Reason: %1</source> @@ -28720,15 +28720,15 @@ Please choose a valid package name for your application (e.g. "org.example. </message> <message> <source>NMake Generator (%1)</source> - <translation type="unfinished">NMake 建立器(%1)</translation> + <translation>NMake 產生器 (%1)</translation> </message> <message> <source>MinGW Generator (%1)</source> - <translation type="unfinished">MinGW 建立器 (%1)</translation> + <translation>MinGW 產生器 (%1)</translation> </message> <message> <source>Unix Generator (%1)</source> - <translation type="unfinished">Unix 建立器 (%1)</translation> + <translation>Unix 產生器 (%1)</translation> </message> </context> <context> @@ -29135,7 +29135,7 @@ Please choose a valid package name for your application (e.g. "org.example. </message> <message> <source>Running command: %1</source> - <translation type="unfinished">執行指令:%1</translation> + <translation type="unfinished">執行命令:%1</translation> </message> <message> <source>Connection error: %1</source> @@ -29849,7 +29849,7 @@ Do you want to add them to the project?</html></source> </message> <message> <source>Filter</source> - <translation type="unfinished">過濾器</translation> + <translation>篩選器</translation> </message> <message> <source>&Update List</source> @@ -29997,7 +29997,7 @@ Remote stderr was: %1</source> </message> <message> <source>Unconfigured</source> - <translation type="unfinished">未設置</translation> + <translation>未組態</translation> </message> <message> <source>The root directory of the system image to use.<br>Leave empty when building for the desktop.</source> @@ -30226,11 +30226,11 @@ Qt Creator 知道一個相似的URI.</translation> <name>QtC::QtSupport</name> <message> <source>Command:</source> - <translation type="unfinished">指令:</translation> + <translation type="unfinished">命令:</translation> </message> <message> <source>Arguments:</source> - <translation type="unfinished">參數:</translation> + <translation type="unfinished">引數:</translation> </message> <message> <source>Working directory:</source> diff --git a/src/libs/tracing/qml/CategoryLabel.qml b/src/libs/tracing/qml/CategoryLabel.qml index 4226195cbba..58704aa175a 100644 --- a/src/libs/tracing/qml/CategoryLabel.qml +++ b/src/libs/tracing/qml/CategoryLabel.qml @@ -174,9 +174,10 @@ Item { id: dragger property int visualIndex: labelContainer.visualIndex width: labelContainer.width - height: 0 + height: labelContainer.height color: Theme.color(Theme.PanelStatusBarBackgroundColor) opacity: 0.5 + visible: Drag.active anchors.left: parent.left // anchor to top so that it reliably snaps back after dragging @@ -184,16 +185,13 @@ Item { Drag.active: dragArea.drag.active Drag.onActiveChanged: { - // We don't want height or text to be changed when reordering occurs, so we don't make - // them properties. + // We don't want text to be changed when reordering occurs, so we don't make + // it a property draggerText.text = txt.text; - if (Drag.active) { - height = labelContainer.height; + if (Drag.active) labelContainer.dragStarted(); - } else { - height = 0; + else labelContainer.dragStopped(); - } } states: [ diff --git a/src/libs/utils/deviceshell.cpp b/src/libs/utils/deviceshell.cpp index e8675745c08..35b2a9ad82d 100644 --- a/src/libs/utils/deviceshell.cpp +++ b/src/libs/utils/deviceshell.cpp @@ -62,7 +62,6 @@ DeviceShell::~DeviceShell() */ RunResult DeviceShell::runInShell(const CommandLine &cmd, const QByteArray &stdInData) { - QTC_ASSERT(m_shellProcess, return {}); Q_ASSERT(QThread::currentThread() != &m_thread); return run(cmd, stdInData); @@ -75,7 +74,7 @@ QStringList DeviceShell::missingFeatures() const { return m_missingFeatures; } RunResult DeviceShell::run(const CommandLine &cmd, const QByteArray &stdInData) { // If the script failed to install, use QtcProcess directly instead. - bool useProcess = m_shellScriptState == State::NoScript; + bool useProcess = m_shellScriptState == State::Failed; // Transferring large amounts of stdInData is slow via the shell script. // Use QtcProcess directly if the size exceeds 100kb. @@ -198,10 +197,7 @@ bool DeviceShell::start() return false; } - if (!installShellScript()) { - if (m_shellScriptState == State::FailedToStart) - closeShellProcess(); - } else { + if (installShellScript()) { connect(m_shellProcess.get(), &QtcProcess::readyReadStandardOutput, m_shellProcess.get(), @@ -214,6 +210,10 @@ bool DeviceShell::start() qCWarning(deviceShellLog) << "Received unexpected output on stderr:" << stdErr; }); + } else if (m_shellProcess->isRunning()) { + m_shellProcess->kill(); + m_shellProcess.reset(); + return false; } connect(m_shellProcess.get(), &QtcProcess::done, m_shellProcess.get(), [this] { @@ -248,7 +248,7 @@ bool DeviceShell::checkCommand(const QByteArray &command) } QByteArray out = m_shellProcess->readAllRawStandardOutput(); if (out.contains("<missing>")) { - m_shellScriptState = State::NoScript; + m_shellScriptState = State::Failed; qCWarning(deviceShellLog) << "Command" << command << "was not found"; m_missingFeatures.append(QString::fromUtf8(command)); return false; @@ -260,7 +260,7 @@ bool DeviceShell::checkCommand(const QByteArray &command) bool DeviceShell::installShellScript() { if (m_forceFailScriptInstallation) { - m_shellScriptState = State::NoScript; + m_shellScriptState = State::Failed; return false; } @@ -291,15 +291,19 @@ bool DeviceShell::installShellScript() } QByteArray out = m_shellProcess->readAllRawStandardError(); - if (out.contains("SCRIPT_INSTALLED")) { + if (out.contains("SCRIPT_INSTALLED") && !out.contains("ERROR_INSTALL_SCRIPT")) { m_shellScriptState = State::Succeeded; return true; } if (out.contains("ERROR_INSTALL_SCRIPT")) { - m_shellScriptState = State::NoScript; + m_shellScriptState = State::Failed; qCWarning(deviceShellLog) << "Failed installing device shell script"; return false; } + if (!out.isEmpty()) { + qCWarning(deviceShellLog) + << "Unexpected output while installing device shell script:" << out; + } } return true; diff --git a/src/libs/utils/deviceshell.h b/src/libs/utils/deviceshell.h index 713f9f09e2e..83af1db365e 100644 --- a/src/libs/utils/deviceshell.h +++ b/src/libs/utils/deviceshell.h @@ -28,7 +28,7 @@ class QTCREATOR_UTILS_EXPORT DeviceShell : public QObject Q_OBJECT public: - enum class State { FailedToStart = -1, Unknown = 0, Succeeded = 1, NoScript = 2 }; + enum class State { Failed = -1, Unknown = 0, Succeeded = 1 }; enum class ParseType { StdOut, diff --git a/src/libs/utils/scripts/deviceshell.sh b/src/libs/utils/scripts/deviceshell.sh index 7281d550171..6ed7014d79a 100644 --- a/src/libs/utils/scripts/deviceshell.sh +++ b/src/libs/utils/scripts/deviceshell.sh @@ -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 -FINAL_OUT=$(mktemp -u) -mkfifo "$FINAL_OUT" +FINAL_OUT=$(mktemp -u) || exit 2 +mkfifo "$FINAL_OUT" || exit 3 finalOutput() { local fileInputBuffer diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index b707b81cc6f..6346c47d7eb 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -646,6 +646,7 @@ void AndroidDeviceManager::setupDevicesWatcher() const CommandLine command = CommandLine(m_androidConfig.adbToolPath(), {"track-devices"}); m_adbDeviceWatcherProcess->setCommand(command); + m_adbDeviceWatcherProcess->setWorkingDirectory(command.executable().parentDir()); m_adbDeviceWatcherProcess->setEnvironment(AndroidConfigurations::toolsEnvironment(m_androidConfig)); m_adbDeviceWatcherProcess->start(); diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index ed7e0da9c82..ac382c4005d 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -2285,9 +2285,9 @@ void CdbEngine::parseOutputLine(QString line) CheckableMessageBox::doNotShowAgainInformation( Core::ICore::dialogParent(), Tr::tr("Debugger Start Failed"), - Tr::tr("The system prevents loading of %1 which is required for debugging. " + Tr::tr("The system prevents loading of %1, which is required for debugging. " "Make sure that your antivirus solution is up to date and if that does not work " - "consider to add an exception for %1.") + "consider adding an exception for %1.") .arg(m_extensionFileName), Core::ICore::settings(), "SecureInfoCdbextCannotBeLoaded"); diff --git a/src/plugins/languageclient/callhierarchy.cpp b/src/plugins/languageclient/callhierarchy.cpp index c372705e810..a05922cbe5e 100644 --- a/src/plugins/languageclient/callhierarchy.cpp +++ b/src/plugins/languageclient/callhierarchy.cpp @@ -56,7 +56,7 @@ public: return QVariant(); const Position start = m_item.selectionRange().start(); return QVariant::fromValue( - Link(m_client->serverUriToHostPath(m_item.uri()), start.line(), start.character())); + Link(m_client->serverUriToHostPath(m_item.uri()), start.line() + 1, start.character())); } case AnnotationRole: if (const std::optional<QString> detail = m_item.detail()) diff --git a/src/plugins/mcusupport/mcukitmanager.cpp b/src/plugins/mcusupport/mcukitmanager.cpp index 793e02b3230..61f268f0215 100644 --- a/src/plugins/mcusupport/mcukitmanager.cpp +++ b/src/plugins/mcusupport/mcukitmanager.cpp @@ -31,6 +31,7 @@ #include <QMessageBox> #include <QPushButton> +#include <QRegularExpression> using CMakeProjectManager::CMakeConfig; using CMakeProjectManager::CMakeConfigItem; @@ -721,5 +722,68 @@ void removeOutdatedKits() KitManager::deregisterKit(kit); } +/* +* using kitQmlImportPath of kit found in profile.xml to get the path to Qul +* installation where description file (.json) of the kit is located. +*/ +static const FilePaths kitsFiles(const Kit *kit) +{ + const FilePath qulRoot = kitDependencyPath(kit, Legacy::Constants::QUL_CMAKE_VAR); + return kitsPath(qulRoot).dirEntries(Utils::FileFilter({"*.json"}, QDir::Files)); +} + +/* +* When file description (.json) of a kit exists in the Qul installation that means +* target is installed. +*/ +static bool anyKitDescriptionFileExists(const FilePaths &jsonFiles, + const QStringList &kitsProperties) +{ + static const QRegularExpression re("(\\w+)-(\\w+)-(.+)\\.json"); + for (const FilePath &jsonFile : jsonFiles) { + const QRegularExpressionMatch match = re.match(jsonFile.fileName()); + QStringList kitsPropertiesFromFileName; + if (match.hasMatch()) { + const QString toolchain = match.captured(1).replace( + "gnu", "gcc"); // kitFileName contains gnu while profiles.xml contains gcc + const QString vendor = match.captured(2); + const QString device = match.captured(3); + + kitsPropertiesFromFileName << toolchain << vendor << device; + } + + if (kitsPropertiesFromFileName == kitsProperties) + return true; + } + return false; +} + +const QList<Kit *> findUninstalledTargetsKits() +{ + QList<Kit *> uninstalledTargetsKits; + for (Kit *kit : KitManager::kits()) { + if (!kit->hasValue(Constants::KIT_MCUTARGET_KITVERSION_KEY)) + continue; + + const QStringList kitsProperties = { + kit->value(Constants::KIT_MCUTARGET_TOOLCHAIN_KEY).toString().toLower(), + kit->value(Constants::KIT_MCUTARGET_VENDOR_KEY).toString().toLower(), + kit->value(Constants::KIT_MCUTARGET_MODEL_KEY).toString().toLower(), + }; + + const FilePaths kitsDescriptionFiles = kitsFiles(kit); + if (!anyKitDescriptionFileExists(kitsDescriptionFiles, kitsProperties)) + uninstalledTargetsKits << kit; + } + + return uninstalledTargetsKits; +} + +void removeUninstalledTargetsKits(const QList<Kit *> uninstalledTargetsKits) +{ + for (const auto &kit : uninstalledTargetsKits) + KitManager::deregisterKit(kit); +} + } // namespace McuKitManager } // namespace McuSupport::Internal diff --git a/src/plugins/mcusupport/mcukitmanager.h b/src/plugins/mcusupport/mcukitmanager.h index 6a82033e9e3..7e949d589c1 100644 --- a/src/plugins/mcusupport/mcukitmanager.h +++ b/src/plugins/mcusupport/mcukitmanager.h @@ -56,6 +56,10 @@ void fixExistingKits(const SettingsHandler::Ptr &); // Outdated kits: void removeOutdatedKits(); +// kits for uninstalled targets: +const QList<ProjectExplorer::Kit *> findUninstalledTargetsKits(); +void removeUninstalledTargetsKits(const QList<ProjectExplorer::Kit *> uninstalledTargetsKits); + } // namespace McuKitManager } // namespace McuSupport::Internal diff --git a/src/plugins/mcusupport/mcusupportplugin.cpp b/src/plugins/mcusupport/mcusupportplugin.cpp index 6d33e0481a4..8c1d2ea35f6 100644 --- a/src/plugins/mcusupport/mcusupportplugin.cpp +++ b/src/plugins/mcusupport/mcusupportplugin.cpp @@ -135,6 +135,7 @@ void McuSupportPlugin::extensionsInitialized() McuKitManager::createAutomaticKits(dd->m_settingsHandler); McuKitManager::fixExistingKits(dd->m_settingsHandler); askUserAboutMcuSupportKitsSetup(); + askUserAboutRemovingUninstalledTargetsKits(); }); } @@ -188,4 +189,34 @@ void McuSupportPlugin::askUserAboutMcuSupportKitsUpgrade(const SettingsHandler:: ICore::infoBar()->addInfo(info); } -} // McuSupport::Internal +void McuSupportPlugin::askUserAboutRemovingUninstalledTargetsKits() +{ + const char removeUninstalledKits[] = "RemoveUninstalledKits"; + QList<Kit *> uninstalledTargetsKits; + + if (!ICore::infoBar()->canInfoBeAdded(removeUninstalledKits) + || (uninstalledTargetsKits = McuKitManager::findUninstalledTargetsKits()).isEmpty()) + return; + + Utils::InfoBarEntry + info(removeUninstalledKits, + Tr::tr("Detected %n uninstalled MCU target(s). Remove corresponding kits?", + nullptr, + uninstalledTargetsKits.size()), + Utils::InfoBarEntry::GlobalSuppression::Enabled); + + info.addCustomButton(Tr::tr("Keep"), [removeUninstalledKits] { + ICore::infoBar()->removeInfo(removeUninstalledKits); + }); + + info.addCustomButton(Tr::tr("Remove"), [removeUninstalledKits, uninstalledTargetsKits] { + ICore::infoBar()->removeInfo(removeUninstalledKits); + QTimer::singleShot(0, [uninstalledTargetsKits]() { + McuKitManager::removeUninstalledTargetsKits(uninstalledTargetsKits); + }); + }); + + ICore::infoBar()->addInfo(info); +} + +} // namespace McuSupport::Internal diff --git a/src/plugins/mcusupport/mcusupportplugin.h b/src/plugins/mcusupport/mcusupportplugin.h index 08cfc61f890..cb27b138464 100644 --- a/src/plugins/mcusupport/mcusupportplugin.h +++ b/src/plugins/mcusupport/mcusupportplugin.h @@ -24,6 +24,7 @@ public: void askUserAboutMcuSupportKitsSetup(); static void askUserAboutMcuSupportKitsUpgrade(const SettingsHandler::Ptr &settingsHandler); + static void askUserAboutRemovingUninstalledTargetsKits(); }; } // McuSupport::Internal diff --git a/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h b/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h index 116018d46f1..983b1fb4aae 100644 --- a/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h +++ b/src/plugins/mcusupport/test/ghs_rh850_d1m1a_baremetal_json.h @@ -5,7 +5,7 @@ constexpr auto ghs_rh850_d1m1a_baremetal_json = R"( { - "qulVersion": "2.3.0", + "qulVersion": "2.4.0", "compatVersion": "1", "platform": { "id": "RH850-D1M1A-BAREMETAL", @@ -19,17 +19,16 @@ constexpr auto ghs_rh850_d1m1a_baremetal_json = R"( "setting": "FlashProgrammerPath", "label": "Renesas Flash Programmer", "type": "path", - "setting": "RenesasFlashProgrammer", "cmakeVar": "RENESAS_FLASH_PROGRAMMER_PATH", "defaultValue": { - "windows": "%{Env:PROGRAMFILES}/Renesas Electronics/Programming Tools/Renesas Flash Programmer V3.09", - "linux": "%{Env:HOME}" + "linux": "", + "windows": "%{Env:PROGRAMFILES(x86)}/Renesas Electronics/Programming Tools/Renesas Flash Programmer V3.09" }, "detectionPath": { "windows": "rfp-cli.exe", "linux": "rfp-cli" }, - "envVar": "RENESAS_FLASH_PROGRAMMER_PATH", + "envVar": "RenesasFlashProgrammer_PATH", "optional": true, "addToSystemPath": true } @@ -45,6 +44,10 @@ constexpr auto ghs_rh850_d1m1a_baremetal_json = R"( "setting": "GHSToolchain", "label": "Green Hills Compiler", "type": "path", + "defaultValue": { + "linux": "", + "windows": "C:/ghs/comp_201815" + }, "optional": false, "versionDetection": { "filePattern": { @@ -71,12 +74,16 @@ constexpr auto ghs_rh850_d1m1a_baremetal_json = R"( "envVar": "RGL_DIR", "setting": "RGL_DIR", "versions": [ + "2.0.0", "2.0.0a" ], "label": "Renesas Graphics Library", "cmakeVar": "QUL_BOARD_SDK_DIR", "type": "path", - "defaultValue": "/Renesas_Electronics/D1x_RGL/rgl_ghs_D1Mx_obj_V.2.0.0a", + "defaultValue": { + "linux": "", + "windows": "%{Env:PROGRAMFILES(x86)}/Renesas_Electronics/D1x_RGL/rgl_ghs_D1Mx_obj_V.2.0.0a" + }, "versionDetection": { "regex": "\\d+\\.\\d+\\.\\w+" }, diff --git a/src/plugins/mcusupport/test/ghs_tviic2d4m_baremetal_json.h b/src/plugins/mcusupport/test/ghs_tviic2d4m_baremetal_json.h index d4a41cad38a..6d6bd57cb06 100644 --- a/src/plugins/mcusupport/test/ghs_tviic2d4m_baremetal_json.h +++ b/src/plugins/mcusupport/test/ghs_tviic2d4m_baremetal_json.h @@ -5,7 +5,7 @@ constexpr auto ghs_tviic2d4m_baremetal_json = R"( { - "qulVersion": "2.3.0", + "qulVersion": "2.4.0", "compatVersion": "1", "platform": { "id": "TVIIC2D4M-BAREMETAL", @@ -16,9 +16,10 @@ constexpr auto ghs_tviic2d4m_baremetal_json = R"( "cmakeEntries": [ { "id": "INFINEON_AUTO_FLASH_UTILITY_DIR", - "setting": "CypressAutoFlashUtil", - "label": "Cypress Auto Flash Utility", + "setting": "InfineonAutoFlashUtil", + "label": "Infineon Auto Flash Utility", "type": "path", + "defaultValue": "%{Env:PROGRAMFILES(x86)}/Infineon/Auto Flash Utility 1.2", "cmakeVar": "INFINEON_AUTO_FLASH_UTILITY_DIR", "detectionPath": "bin/openocd.exe", "optional": false, @@ -36,8 +37,8 @@ constexpr auto ghs_tviic2d4m_baremetal_json = R"( "label": "Green Hills Compiler for ARM", "cmakeVar": "QUL_TARGET_TOOLCHAIN_DIR", "setting": "GHSArmToolchain", - "detectionPath": "cxarm.exe", "type": "path", + "defaultValue": "C:/ghs/comp_201954", "optional": false, "versionDetection": { "filePattern": "gversion.exe", @@ -59,15 +60,17 @@ constexpr auto ghs_tviic2d4m_baremetal_json = R"( "envVar": "TVII_GRAPHICS_DRIVER_DIR", "setting": "TVII_GRAPHICS_DRIVER_DIR", "versions": [ - "V1e.1.0" + "V1.2.0" ], "id": "TVII_GRAPHICS_DRIVER_DIR", "label": "Graphics Driver for Traveo II Cluster Series", "cmakeVar": "QUL_BOARD_SDK_DIR", "type": "path", + "defaultValue": "C:/TVII-GraphicsDriver", "optional": false, "versionDetection": { - "regex": "V\\w+\\.\\d+\\.\\d+" + "regex": "V\\d+\\.\\d+\\.\\d+" + } } } )"; diff --git a/src/plugins/mcusupport/test/ghs_tviic2d6m_baremetal_json.h b/src/plugins/mcusupport/test/ghs_tviic2d6m_baremetal_json.h index 5e1ff21e2b0..f34065b6321 100644 --- a/src/plugins/mcusupport/test/ghs_tviic2d6m_baremetal_json.h +++ b/src/plugins/mcusupport/test/ghs_tviic2d6m_baremetal_json.h @@ -5,7 +5,7 @@ constexpr auto ghs_tviic2d6m_baremetal_json = R"( { - "qulVersion": "2.3.0", + "qulVersion": "2.4.0", "compatVersion": "1", "platform": { "id": "TVIIC2D6M-BAREMETAL", @@ -16,9 +16,10 @@ constexpr auto ghs_tviic2d6m_baremetal_json = R"( "cmakeEntries": [ { "id": "INFINEON_AUTO_FLASH_UTILITY_DIR", - "setting": "CypressAutoFlashUtil", - "label": "Cypress Auto Flash Utility", + "setting": "InfineonAutoFlashUtil", + "label": "Infineon Auto Flash Utility", "type": "path", + "defaultValue": "%{Env:PROGRAMFILES(x86)}/Infineon/Auto Flash Utility 1.2", "cmakeVar": "INFINEON_AUTO_FLASH_UTILITY_DIR", "detectionPath": "bin/openocd.exe", "optional": false, @@ -36,8 +37,8 @@ constexpr auto ghs_tviic2d6m_baremetal_json = R"( "label": "Green Hills Compiler for ARM", "cmakeVar": "QUL_TARGET_TOOLCHAIN_DIR", "setting": "GHSArmToolchain", - "detectionPath": "cxarm.exe", "type": "path", + "defaultValue": "C:/ghs/comp_201954", "optional": false, "versionDetection": { "filePattern": "gversion.exe", @@ -59,15 +60,17 @@ constexpr auto ghs_tviic2d6m_baremetal_json = R"( "envVar": "TVII_GRAPHICS_DRIVER_DIR", "setting": "TVII_GRAPHICS_DRIVER_DIR", "versions": [ - "V1e.1.0" + "V2e.1.0" ], "id": "TVII_GRAPHICS_DRIVER_DIR", "label": "Graphics Driver for Traveo II Cluster Series", "cmakeVar": "QUL_BOARD_SDK_DIR", "type": "path", + "defaultValue": "C:/TVII-GraphicsDriver", "optional": false, "versionDetection": { - "regex": "V\\w+\\.\\d+\\.\\d+" + "regex": "V\\d+e\\.\\d+\\.\\d+" + } } } )"; diff --git a/src/plugins/mcusupport/test/iar_tviic2d4m_baremetal_json.h b/src/plugins/mcusupport/test/iar_tviic2d4m_baremetal_json.h new file mode 100644 index 00000000000..e9e0a56348f --- /dev/null +++ b/src/plugins/mcusupport/test/iar_tviic2d4m_baremetal_json.h @@ -0,0 +1,77 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#pragma once + +constexpr auto iar_tviic2d6m_baremetal_json = R"( +{ + "qulVersion": "2.4.0", + "compatVersion": "1", + "platform": { + "id": "TVIIC2D4M-BAREMETAL", + "vendor": "CYPRESS", + "colorDepths": [ + 32 + ], + "cmakeEntries": [ + { + "id": "INFINEON_AUTO_FLASH_UTILITY_DIR", + "setting": "InfineonAutoFlashUtil", + "label": "Infineon Auto Flash Utility", + "type": "path", + "defaultValue": "%{Env:PROGRAMFILES(x86)}/Infineon/Auto Flash Utility 1.2", + "cmakeVar": "INFINEON_AUTO_FLASH_UTILITY_DIR", + "detectionPath": "bin/openocd.exe", + "optional": false, + "addToSystemPath": true + } + ] + }, + "toolchain": { + "id": "iar", + "versions": [ + "8.22.3" + ], + "compiler": { + "id": "IARToolchain", + "setting": "IARToolchain", + "envVar": "IAR_ARM_COMPILER_DIR", + "label": "IAR ARM Compiler", + "cmakeVar": "QUL_TARGET_TOOLCHAIN_DIR", + "type": "path", + "versionDetection": { + "filePattern": "bin/iccarm.exe", + "executableArgs": "--version", + "regex": "\\bV(\\d+\\.\\d+\\.\\d+)\\.\\d+\\b" + }, + "detectionPath": "bin/iccarm.exe", + "defaultValue": "%{Env:PROGRAMFILES(x86)}/IAR Systems/Embedded Workbench 8.0 EWARM FS 8.22.3/arm", + "optional": false + }, + "file": { + "id": "IAR_CMAKE_TOOLCHAIN_FILE", + "cmakeVar": "CMAKE_TOOLCHAIN_FILE", + "type": "file", + "defaultValue": "%{Qul_ROOT}/lib/cmake/Qul/toolchain/iar.cmake", + "visible": false, + "optional": false + } + }, + "boardSdk": { + "envVar": "TVII_GRAPHICS_DRIVER_DIR", + "setting": "TVII_GRAPHICS_DRIVER_DIR", + "versions": [ + "V1.2.0" + ], + "id": "TVII_GRAPHICS_DRIVER_DIR", + "label": "Graphics Driver for Traveo II Cluster Series", + "cmakeVar": "QUL_BOARD_SDK_DIR", + "type": "path", + "defaultValue": "C:/TVII-GraphicsDriver", + "optional": false, + "versionDetection": { + "regex": "V\\d+\\.\\d+\\.\\d+" + } + } +} +)"; diff --git a/src/plugins/mcusupport/test/iar_tviic2d6m_baremetal_json.h b/src/plugins/mcusupport/test/iar_tviic2d6m_baremetal_json.h index ce4c56fb2da..58f46bf7922 100644 --- a/src/plugins/mcusupport/test/iar_tviic2d6m_baremetal_json.h +++ b/src/plugins/mcusupport/test/iar_tviic2d6m_baremetal_json.h @@ -5,7 +5,7 @@ constexpr auto iar_tviic2d6m_baremetal_json = R"( { - "qulVersion": "2.3.0", + "qulVersion": "2.4.0", "compatVersion": "1", "platform": { "id": "TVIIC2D6M-BAREMETAL", @@ -16,9 +16,10 @@ constexpr auto iar_tviic2d6m_baremetal_json = R"( "cmakeEntries": [ { "id": "INFINEON_AUTO_FLASH_UTILITY_DIR", - "setting": "CypressAutoFlashUtil", - "label": "Cypress Auto Flash Utility", + "setting": "InfineonAutoFlashUtil", + "label": "Infineon Auto Flash Utility", "type": "path", + "defaultValue": "%{Env:PROGRAMFILES(x86)}/Infineon/Auto Flash Utility 1.2", "cmakeVar": "INFINEON_AUTO_FLASH_UTILITY_DIR", "detectionPath": "bin/openocd.exe", "optional": false, @@ -39,14 +40,12 @@ constexpr auto iar_tviic2d6m_baremetal_json = R"( "cmakeVar": "QUL_TARGET_TOOLCHAIN_DIR", "type": "path", "versionDetection": { - "filePattern": { - "windows": "bin/iccarm.exe", - "linux": "bin/iccarm" - }, + "filePattern": "bin/iccarm.exe", "executableArgs": "--version", "regex": "\\bV(\\d+\\.\\d+\\.\\d+)\\.\\d+\\b" }, "detectionPath": "bin/iccarm.exe", + "defaultValue": "%{Env:PROGRAMFILES(x86)}/IAR Systems/Embedded Workbench 8.0 EWARM FS 8.22.3/arm", "optional": false }, "file": { @@ -62,15 +61,17 @@ constexpr auto iar_tviic2d6m_baremetal_json = R"( "envVar": "TVII_GRAPHICS_DRIVER_DIR", "setting": "TVII_GRAPHICS_DRIVER_DIR", "versions": [ - "V1e.1.0" + "V2e.1.0" ], "id": "TVII_GRAPHICS_DRIVER_DIR", "label": "Graphics Driver for Traveo II Cluster Series", "cmakeVar": "QUL_BOARD_SDK_DIR", "type": "path", + "defaultValue": "C:/TVII-GraphicsDriver", "optional": false, "versionDetection": { - "regex": "V\\w+\\.\\d+\\.\\d+" + "regex": "V\\d+e\\.\\d+\\.\\d+" + } } } )"; diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp index 88812d49c8c..f51a0607bd1 100644 --- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp @@ -284,6 +284,7 @@ void DeviceSettingsWidget::updateDeviceFromUi() void DeviceSettingsWidget::saveSettings() { + updateDeviceFromUi(); ICore::settings()->setValueWithDefault(LastDeviceIndexKey, currentIndex(), 0); DeviceManager::replaceInstance(); } diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp index a0a53e4e1c5..d0c7cc1edc4 100644 --- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp +++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp @@ -265,6 +265,7 @@ void GenericLinuxDeviceConfigurationWidget::updateDeviceFromUi() timeoutEditingFinished(); sourceProfileCheckingChanged(m_sourceProfileCheckBox->isChecked()); linkDeviceChanged(m_linkDeviceComboBox->currentIndex()); + qmlRuntimeEditingFinished(); } void GenericLinuxDeviceConfigurationWidget::updatePortsWarningLabel() diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index e8b7d30eecd..615ac56f4c7 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -220,7 +220,9 @@ void SshSharedConnection::emitConnected() void SshSharedConnection::emitError(QProcess::ProcessError error, const QString &errorString) { m_state = QProcess::NotRunning; - ProcessResultData resultData = m_masterProcess->resultData(); + ProcessResultData resultData{-1, QProcess::CrashExit, QProcess::UnknownError, {}}; + if (m_masterProcess) + resultData = m_masterProcess->resultData(); resultData.m_error = error; resultData.m_errorString = errorString; emit disconnected(resultData); diff --git a/src/plugins/texteditor/formattexteditor.cpp b/src/plugins/texteditor/formattexteditor.cpp index 7066e249409..ae25a574796 100644 --- a/src/plugins/texteditor/formattexteditor.cpp +++ b/src/plugins/texteditor/formattexteditor.cpp @@ -215,7 +215,7 @@ void updateEditorText(QPlainTextEdit *editor, const QString &text) } } } - cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, d.text.size()); + cursor.setPosition(cursor.position() + d.text.size(), QTextCursor::KeepAnchor); cursor.removeSelectedText(); break; } @@ -223,7 +223,7 @@ void updateEditorText(QPlainTextEdit *editor, const QString &text) case Diff::Equal: // Adjust cursor position charactersInfrontOfCursor -= d.text.size(); - cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, d.text.size()); + cursor.setPosition(cursor.position() + d.text.size(), QTextCursor::MoveAnchor); break; } } @@ -329,3 +329,56 @@ void formatEditorAsync(TextEditorWidget *editor, const Command &command, int sta } } // namespace TextEditor + +#ifdef WITH_TESTS +#include "texteditorplugin.h" +#include <QTest> + +namespace TextEditor::Internal { + +void TextEditorPlugin::testFormatting_data() +{ + QTest::addColumn<QString>("code"); + QTest::addColumn<QString>("result"); + + { + QString code { + "import QtQuick\n\n" + " Item {\n" + " property string cat: [\"👩🏽🚒d👩🏽🚒d👩🏽🚒\"]\n" + " property string dog: cat\n" + "}\n" + }; + + QString result { + "import QtQuick\n\n" + "Item {\n" + " property string cat: [\"👩🏽🚒\"]\n" + " property string dog: cat\n" + "}\n" + }; + + QTest::newRow("unicodeCharacterInFormattedCode") << code << result; + } +} + +void TextEditorPlugin::testFormatting() +{ + QFETCH(QString, code); + QFETCH(QString, result); + + QScopedPointer<TextEditorWidget> editor(new TextEditorWidget); + QVERIFY(editor.get()); + + QSharedPointer<TextDocument> doc(new TextDocument); + doc->setPlainText(code); + editor->setTextDocument(doc); + + TextEditor::updateEditorText(editor.get(), result); + + QCOMPARE(editor->toPlainText(), result); +} + +} // namespace TextEditor::Internal + +#endif diff --git a/src/plugins/texteditor/texteditorplugin.h b/src/plugins/texteditor/texteditorplugin.h index 067e4e96314..3df46c0b578 100644 --- a/src/plugins/texteditor/texteditorplugin.h +++ b/src/plugins/texteditor/texteditorplugin.h @@ -37,6 +37,9 @@ private slots: void testIndentationClean_data(); void testIndentationClean(); + + void testFormatting_data(); + void testFormatting(); #endif }; diff --git a/src/share/3rdparty/package-manager/auto-setup.cmake b/src/share/3rdparty/package-manager/auto-setup.cmake index ff57ac8d0eb..4689cc98049 100644 --- a/src/share/3rdparty/package-manager/auto-setup.cmake +++ b/src/share/3rdparty/package-manager/auto-setup.cmake @@ -46,6 +46,8 @@ macro(qtc_auto_setup_conan) message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}") endif() + string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}") + set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp") file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp) @@ -68,6 +70,9 @@ macro(qtc_auto_setup_conan) if (do_conan_installation) message(STATUS "Qt Creator: conan package manager auto-setup. " "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.") + + file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/") + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" " set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") @@ -77,17 +82,39 @@ macro(qtc_auto_setup_conan) "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") endif() - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " - cmake_minimum_required(VERSION 3.15) - project(conan-setup) - include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") - conan_cmake_run( - CONANFILE \"${conanfile_txt}\" - INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" - GENERATORS cmake_paths json - BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} - ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" - )") + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " + cmake_minimum_required(VERSION 3.15) + + unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) + project(conan-setup) + + if (${conan_version} VERSION_GREATER_EQUAL 2.0) + include(\"${CMAKE_CURRENT_LIST_DIR}/conan_support.cmake\") + conan_profile_detect_default() + detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") + + conan_install( + -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" + --build=${QT_CREATOR_CONAN_BUILD_POLICY} + -s build_type=${CMAKE_BUILD_TYPE} + -g CMakeDeps) + if (CONAN_INSTALL_SUCCESS) + file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" + list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + \") + endif() + else() + include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") + conan_cmake_run( + CONANFILE \"${conanfile_txt}\" + INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" + GENERATORS cmake_paths cmake_find_package json + BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} + ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" + ) + endif() + ") execute_process(COMMAND ${CMAKE_COMMAND} -S "${CMAKE_BINARY_DIR}/conan-dependencies/" diff --git a/src/share/3rdparty/package-manager/conan_support.cmake b/src/share/3rdparty/package-manager/conan_support.cmake new file mode 100644 index 00000000000..f1dbccf2aaf --- /dev/null +++ b/src/share/3rdparty/package-manager/conan_support.cmake @@ -0,0 +1,211 @@ +# https://github.com/conan-io/cmake-conan/blob/develop2/conan_support.cmake +# commit: 3e088cd3e1d9d69e04b5250d565c1b8b55b0400b +# +# The MIT License (MIT) +# +# Copyright (c) 2019 JFrog +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +function(detect_os OS) + # it could be cross compilation + message(STATUS "Conan-cmake: cmake_system_name=${CMAKE_SYSTEM_NAME}") + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set(${OS} Macos PARENT_SCOPE) + elseif(${CMAKE_SYSTEM_NAME} STREQUAL "QNX") + set(${OS} Neutrino PARENT_SCOPE) + else() + set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) + endif() + endif() +endfunction() + + +function(detect_cxx_standard CXX_STANDARD) + set(${CXX_STANDARD} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) + if (CMAKE_CXX_EXTENSIONS) + set(${CXX_STANDARD} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) + endif() +endfunction() + + +function(detect_compiler COMPILER COMPILER_VERSION) + if(DEFINED CMAKE_CXX_COMPILER_ID) + set(_COMPILER ${CMAKE_CXX_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) + else() + if(NOT DEFINED CMAKE_C_COMPILER_ID) + message(FATAL_ERROR "C or C++ compiler not defined") + endif() + set(_COMPILER ${CMAKE_C_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION}) + endif() + + message(STATUS "Conan-cmake: CMake compiler=${_COMPILER}") + message(STATUS "Conan-cmake: CMake cmpiler version=${_COMPILER_VERSION}") + + if(_COMPILER MATCHES MSVC) + set(_COMPILER "msvc") + string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION) + elseif(_COMPILER MATCHES AppleClang) + set(_COMPILER "apple-clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES Clang) + set(_COMPILER "clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES GNU) + set(_COMPILER "gcc") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + endif() + + message(STATUS "Conan-cmake: [settings] compiler=${_COMPILER}") + message(STATUS "Conan-cmake: [settings] compiler.version=${_COMPILER_VERSION}") + + set(${COMPILER} ${_COMPILER} PARENT_SCOPE) + set(${COMPILER_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE) +endfunction() + +function(detect_build_type BUILD_TYPE) + if(NOT CMAKE_CONFIGURATION_TYPES) + # Only set when we know we are in a single-configuration generator + # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined + set(${BUILD_TYPE} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) + endif() +endfunction() + + +function(detect_host_profile output_file) + detect_os(MYOS) + detect_compiler(MYCOMPILER MYCOMPILER_VERSION) + detect_cxx_standard(MYCXX_STANDARD) + detect_build_type(MYBUILD_TYPE) + + set(PROFILE "") + string(APPEND PROFILE "include(default)\n") + string(APPEND PROFILE "[settings]\n") + if(MYOS) + string(APPEND PROFILE os=${MYOS} "\n") + endif() + if(MYCOMPILER) + string(APPEND PROFILE compiler=${MYCOMPILER} "\n") + endif() + if(MYCOMPILER_VERSION) + string(APPEND PROFILE compiler.version=${MYCOMPILER_VERSION} "\n") + endif() + if(MYCXX_STANDARD) + string(APPEND PROFILE compiler.cppstd=${MYCXX_STANDARD} "\n") + endif() + if(MYBUILD_TYPE) + string(APPEND PROFILE "build_type=${MYBUILD_TYPE}\n") + endif() + + if(NOT DEFINED output_file) + set(_FN "${CMAKE_BINARY_DIR}/profile") + else() + set(_FN ${output_file}) + endif() + + string(APPEND PROFILE "[conf]\n") + string(APPEND PROFILE "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") + + message(STATUS "Conan-cmake: Creating profile ${_FN}") + file(WRITE ${_FN} ${PROFILE}) + message(STATUS "Conan-cmake: Profile: \n${PROFILE}") +endfunction() + + +function(conan_profile_detect_default) + message(STATUS "Conan-cmake: Checking if a default profile exists") + execute_process(COMMAND conan profile path default + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + if(NOT ${return_code} EQUAL "0") + message(STATUS "Conan-cmake: The default profile doesn't exist, detecting it.") + execute_process(COMMAND conan profile detect + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() +endfunction() + + +function(conan_install) + cmake_parse_arguments(ARGS CONAN_ARGS ${ARGN}) + set(CONAN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/conan) + # Invoke "conan install" with the provided arguments + set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER}) + message(STATUS "CMake-conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}") + execute_process(COMMAND conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + else() + # the files are generated in a folder that depends on the layout used, if + # one if specified, but we don't know a priori where this is. + # TODO: this can be made more robust if Conan can provide this in the json output + string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder) + # message("conan stdout: ${conan_stdout}") + message(STATUS "CMake-conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}") + set(CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}" PARENT_SCOPE) + set(CONAN_INSTALL_SUCCESS TRUE CACHE BOOL "Conan install has been invoked and was successful") + endif() +endfunction() + + +function(conan_provide_dependency package_name) + if(NOT CONAN_INSTALL_SUCCESS) + message(STATUS "CMake-conan: first find_package() found. Installing dependencies with Conan") + conan_profile_detect_default() + detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) + if(NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "CMake-conan: Installing single configuration ${CMAKE_BUILD_TYPE}") + conan_install(-pr ${CMAKE_BINARY_DIR}/conan_host_profile --build=missing -g CMakeDeps) + else() + message(STATUS "CMake-conan: Installing both Debug and Release") + conan_install(-pr ${CMAKE_BINARY_DIR}/conan_host_profile -s build_type=Release --build=missing -g CMakeDeps) + conan_install(-pr ${CMAKE_BINARY_DIR}/conan_host_profile -s build_type=Debug --build=missing -g CMakeDeps) + endif() + if (CONAN_INSTALL_SUCCESS) + set(CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}" CACHE PATH "Conan generators folder") + endif() + else() + message(STATUS "CMake-conan: find_package(${package_name}) found, 'conan install' aready ran") + endif() + + if (CONAN_GENERATORS_FOLDER) + list(PREPEND CMAKE_PREFIX_PATH "${CONAN_GENERATORS_FOLDER}") + endif() + + find_package(${ARGN} BYPASS_PROVIDER) +endfunction() diff --git a/src/shared/qbs b/src/shared/qbs -Subproject 1a6cfb0af220926f8b00219c5dd7feb36bcaa0d +Subproject 0319b0acc7a11f9ba84d8708d8e88575470ca75 diff --git a/src/tools/perfparser b/src/tools/perfparser -Subproject 630828ad26f4c3ffbddc10daba547919ff40451 +Subproject 5444f96207616f922f3093e9d64bd6000f168c5 diff --git a/tests/auto/utils/deviceshell/tst_deviceshell.cpp b/tests/auto/utils/deviceshell/tst_deviceshell.cpp index a0d8a9cfcc9..1d95bde4091 100644 --- a/tests/auto/utils/deviceshell/tst_deviceshell.cpp +++ b/tests/auto/utils/deviceshell/tst_deviceshell.cpp @@ -354,7 +354,7 @@ private slots: QFETCH(CommandLine, cmdLine); TestShell shell(cmdLine, true); - QCOMPARE(shell.state(), DeviceShell::State::NoScript); + QCOMPARE(shell.state(), DeviceShell::State::Failed); const RunResult result = shell.runInShell({"echo", {"Hello"}}); QCOMPARE(result.exitCode, 0); diff --git a/tests/manual/conan/conanfile.txt b/tests/manual/conan/conanfile.txt index bd1e4f8722d..fa99ef469bb 100644 --- a/tests/manual/conan/conanfile.txt +++ b/tests/manual/conan/conanfile.txt @@ -1,4 +1,2 @@ [requires] -fmt/8.0.0 -[generators] -cmake_find_package +fmt/9.1.0 diff --git a/tests/system/shared/build_utils.py b/tests/system/shared/build_utils.py index 2e96dd9ba5d..300b0ed8ba4 100644 --- a/tests/system/shared/build_utils.py +++ b/tests/system/shared/build_utils.py @@ -1,10 +1,37 @@ # Copyright (C) 2016 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +def toggleIssuesFilter(filterName, checked): + try: + toggleFilter = waitForObject("{type='QToolButton' toolTip='Filter by categories' " + "window=':Qt Creator_Core::Internal::MainWindow'}") + clickButton(toggleFilter) + filterMenu = waitForObject("{type='QMenu' unnamed='1' visible='1'}") + waitFor("filterMenu.visible", 1000) + + filterCategory = waitForObjectItem(filterMenu, filterName) + waitFor("filterCategory.visible", 2000) + if filterCategory.checked == checked: + test.log("Filter '%s' has already check state %s - not toggling." + % (filterName, checked)) + clickButton(toggleFilter) # close the menu again + else: + activateItem(filterCategory) + test.log("Filter '%s' check state changed to %s." % (filterName, checked)) + except: + t,v = sys.exc_info()[:2] + test.log("Exception while toggling filter '%s'" % filterName, + "%s(%s)" % (str(t), str(v))) + def getBuildIssues(): ensureChecked(":Qt Creator_Issues_Core::Internal::OutputPaneToggleButton") model = waitForObject(":Qt Creator.Issues_QListView").model() - return dumpBuildIssues(model) + # filter out possible code model issues present inside the Issues pane + toggleIssuesFilter("Clang Code Model", False) + result = dumpBuildIssues(model) + # reset the filter + toggleIssuesFilter("Clang Code Model", True) + return result # this method checks the last build (if there's one) and logs the number of errors, warnings and # lines within the Issues output diff --git a/tests/system/shared/debugger.py b/tests/system/shared/debugger.py index d337ac497fd..4dbc13fcaaf 100644 --- a/tests/system/shared/debugger.py +++ b/tests/system/shared/debugger.py @@ -57,7 +57,7 @@ def setBreakpointsForCurrentProject(filesAndLines): "window=':Qt Creator_Core::Internal::MainWindow'}") breakPointList = [] for current in filesAndLines: - for curFile,curLine in current.iteritems(): + for curFile,curLine in current.items(): if not openDocument(curFile): return None editor = getEditorForFileSuffix(curFile, True) @@ -239,7 +239,7 @@ def __logDebugResult__(): def verifyBreakPoint(bpToVerify): if isinstance(bpToVerify, dict): - fileName = bpToVerify.keys()[0] + fileName = list(bpToVerify.keys())[0] editor = getEditorForFileSuffix(fileName) if editor: test.compare(waitForObject(":DebugModeWidget_QComboBox").toolTip, fileName, diff --git a/tests/system/shared/editor_utils.py b/tests/system/shared/editor_utils.py index 0933253c2a8..642cdb41ba0 100644 --- a/tests/system/shared/editor_utils.py +++ b/tests/system/shared/editor_utils.py @@ -168,7 +168,7 @@ def __handleTextTips__(textTip, expectedVals, alternativeVals): if not expFail: test.passes("TextTip verified") else: - for key,val in eResult.iteritems(): + for key,val in eResult.items(): if val == False: if aResult and aResult.get(key): test.passes("Property '%s' does not match expected, but alternative value" % key) @@ -240,7 +240,7 @@ def verifyProperties(properties, expectedProps): test.warning("Wrong usage - both parameter must be of type dict") return {} result = {} - for key,val in expectedProps.iteritems(): + for key,val in expectedProps.items(): foundVal = properties.get(key, None) if foundVal != None: result[key] = val == foundVal diff --git a/tests/system/shared/utils.py b/tests/system/shared/utils.py index ced96b5bb2c..7397fad5ed6 100644 --- a/tests/system/shared/utils.py +++ b/tests/system/shared/utils.py @@ -342,7 +342,7 @@ def getConfiguredKits(): # update collected Qt versions with their configured device and version iterateKits(False, True, __setQtVersionForKit__, kitsWithQtVersionName) # merge defined target names with their configured Qt versions and devices - for kit, qtVersion in kitsWithQtVersionName.iteritems(): + for kit, qtVersion in kitsWithQtVersionName.items(): if qtVersion in qtVersionNames: result.append(kit) else: diff --git a/tests/system/suite_WELP/tst_WELP01/test.py b/tests/system/suite_WELP/tst_WELP01/test.py index 23e974b9a75..b64edcd2b7f 100644 --- a/tests/system/suite_WELP/tst_WELP01/test.py +++ b/tests/system/suite_WELP/tst_WELP01/test.py @@ -19,11 +19,14 @@ def clickItemVerifyHelpCombo(button, expectedHelpComboRegex, testDetails): "Verifying: '%s' button is being displayed." % getStarted) def buttonActive(button): # colors of the default theme for active button on Welcome page - (activeRed, activeGreen, activeBlue) = (69, 206, 85) + defaultActiveRGB = (69, 206, 85) + # colors of the dark theme for active button on Welcome page + darkActiveRGB = (54, 193, 72) # QPalette::Window (used background color of Welcome page buttons) enumQPaletteWindow = 10 color = button.palette.color(enumQPaletteWindow) - return color.red == activeRed and color.green == activeGreen and color.blue == activeBlue + current = (color.red, color.green, color.blue) + return current == defaultActiveRGB or current == darkActiveRGB def waitForButtonsState(projectsActive, examplesActive, tutorialsActive, timeout=5000): projButton = getWelcomeScreenSideBarButton('Projects')[0] diff --git a/tests/system/suite_debugger/tst_qml_locals/Tree.py b/tests/system/suite_debugger/tst_qml_locals/Tree.py index 2290081c6aa..2499f28f34e 100644 --- a/tests/system/suite_debugger/tst_qml_locals/Tree.py +++ b/tests/system/suite_debugger/tst_qml_locals/Tree.py @@ -51,7 +51,7 @@ class Tree: def countChildOccurrences(self, name): if not self.__children__: return 0 - return map(lambda x: x.getName(), self.__children__).count(name) + return list(map(lambda x: x.getName(), self.__children__)).count(name) # internal functions def __repr__(self): diff --git a/tests/system/suite_debugger/tst_qml_locals/test.py b/tests/system/suite_debugger/tst_qml_locals/test.py index 57ba361784b..70256ee2d44 100644 --- a/tests/system/suite_debugger/tst_qml_locals/test.py +++ b/tests/system/suite_debugger/tst_qml_locals/test.py @@ -136,7 +136,7 @@ def checkForExpectedValues(items, expectedChildren, expectedProperties): properties = items.getChild("Properties") if properties: children = properties.getChildren() - for property,value in expectedProperties.iteritems(): + for property,value in expectedProperties.items(): foundProperty = getProperty(property, children) if foundProperty: test.compare(foundProperty.getValue(), value, "Verifying value for %s" % property) diff --git a/tests/system/suite_debugger/tst_simple_debug/test.py b/tests/system/suite_debugger/tst_simple_debug/test.py index aa1bbf9a273..e6301f941c5 100644 --- a/tests/system/suite_debugger/tst_simple_debug/test.py +++ b/tests/system/suite_debugger/tst_simple_debug/test.py @@ -45,6 +45,10 @@ def main(): if platform.system() in ('Microsoft' 'Windows'): switchViewTo(ViewConstants.PROJECTS) switchToBuildOrRunSettingsFor(kit, ProjectSettings.BUILD) + detailsWidget = waitForObject("{type='Utils::DetailsWidget' unnamed='1' visible='1' " + "summaryText~='^<b>Configure:</b>.+'}") + detailsButton = getChildByClass(detailsWidget, "QToolButton") + ensureChecked(detailsButton) buildDir = os.path.join(str(waitForObject(":Qt Creator_Utils::BuildDirectoryLineEdit").text), "debug") switchViewTo(ViewConstants.EDIT) diff --git a/tests/system/suite_editors/tst_rename_macros/test.py b/tests/system/suite_editors/tst_rename_macros/test.py index e0a26fdd114..0ad013cc9a2 100644 --- a/tests/system/suite_editors/tst_rename_macros/test.py +++ b/tests/system/suite_editors/tst_rename_macros/test.py @@ -113,7 +113,7 @@ def performMacroRenaming(newMacroName): def verifyChangedContent(origTexts, replacedSymbol, replacement): global cppEditorStr successfullyCompared = [] - for fileName,text in origTexts.iteritems(): + for fileName,text in origTexts.items(): if openDocument(fileName): successfullyCompared.append(test.compare(waitForObject(cppEditorStr).plainText, text.replace(replacedSymbol, replacement), diff --git a/tests/system/suite_editors/tst_revert_changes/test.py b/tests/system/suite_editors/tst_revert_changes/test.py index bc666dd8c0b..6ad06b11243 100644 --- a/tests/system/suite_editors/tst_revert_changes/test.py +++ b/tests/system/suite_editors/tst_revert_changes/test.py @@ -29,7 +29,7 @@ def main(): "testfiles.Headers.testfile\\.h":__modifyHeader__, "testfiles.Sources.testfile\\.cpp":__modifySource__, "testfiles.Sources.main\\.cpp":None} - for fileName, modification in fileModifications.iteritems(): + for fileName, modification in fileModifications.items(): __modifyFile__(fileName, modification) test.log("Reverting all files...") fileModifications = dict(zip(fileModifications.keys(), @@ -84,7 +84,7 @@ def __modifySource__(): type(cppEditorStr, "<Delete>") def revertChanges(files): - for f,canRevert in files.iteritems(): + for f,canRevert in files.items(): simpleName = simpleFileName(f) test.log("Trying to revert changes for '%s'" % simpleName) if openDocument(f): diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py index 83c7171388d..5eacc517f9b 100644 --- a/tests/system/suite_general/tst_default_settings/test.py +++ b/tests/system/suite_general/tst_default_settings/test.py @@ -260,10 +260,10 @@ def __compareCompilers__(foundCompilers, expectedCompilers): for currentExp in expectedCompilers: if isString(currentExp): continue - key = currentExp.keys()[0] + key = list(currentExp.keys())[0] # the regex .*? is used for the different possible version strings of the WinSDK # if it's present a regex will be validated otherwise simple string comparison - if (((".*?" in key and re.match(key, currentFound.keys()[0], flags)) + if (((".*?" in key and re.match(key, list(currentFound.keys())[0], flags)) or currentFound.keys() == currentExp.keys())): if ((isWin and os.path.abspath(currentFound.values()[0].lower()) == os.path.abspath(currentExp.values()[0].lower())) @@ -322,8 +322,8 @@ def __checkCreatedSettings__(settingsFolder): test.verify(os.path.isdir(f), "Verifying whether folder '%s' has been created." % os.path.basename(f)) for f in files: - fName = f.keys()[0] - fMinSize = f.values()[0] + fName = list(f.keys())[0] + fMinSize = list(f.values())[0] text = "created non-empty" if fMinSize > 0: text = "modified" diff --git a/tests/system/suite_qtquick/tst_qml_outline/test.py b/tests/system/suite_qtquick/tst_qml_outline/test.py index 1508dc9aaa8..fb3662b8057 100644 --- a/tests/system/suite_qtquick/tst_qml_outline/test.py +++ b/tests/system/suite_qtquick/tst_qml_outline/test.py @@ -109,7 +109,7 @@ def retrieveData(record): def verifyOutline(outlinePseudoTree, datasetFileName): fileName = datasetFileName[:datasetFileName.index("_")] - expected = map(retrieveData, testData.dataset(datasetFileName)) + expected = list(map(retrieveData, testData.dataset(datasetFileName))) if len(expected) != len(outlinePseudoTree): test.fail("Mismatch in length of expected and found elements of outline. Skipping " "verification of nodes.", diff --git a/tests/system/suite_tools/tst_git_local/test.py b/tests/system/suite_tools/tst_git_local/test.py index 7b83947e88a..07208367fdb 100644 --- a/tests/system/suite_tools/tst_git_local/test.py +++ b/tests/system/suite_tools/tst_git_local/test.py @@ -89,7 +89,7 @@ def __clickCommit__(count): {"Author: %s, %s" % (id, time): True}, {"Committer: %s, %s" % (id, time): True}] for line, exp in zip(show.splitlines(), expected): - expLine = exp.keys()[0] + expLine = list(exp.keys())[0] isRegex = exp.values()[0] if isRegex: test.verify(re.match(expLine, line), "Verifying commit header line '%s'" % line) |