diff options
47 files changed, 658 insertions, 396 deletions
@@ -8,7 +8,7 @@ The standalone binary packages support the following platforms: * Windows 7 or later * (K)Ubuntu Linux 16.04 (64-bit) or later -* macOS 10.10 or later +* macOS 10.11 or later ## Compiling Qt Creator diff --git a/dist/changes-4.7.1.md b/dist/changes-4.7.1.md new file mode 100644 index 0000000000..27a79d8aa0 --- /dev/null +++ b/dist/changes-4.7.1.md @@ -0,0 +1,66 @@ +Qt Creator version 4.7.1 contains bug fixes. + +The most important changes are listed in this document. For a complete +list of changes, see the Git log for the Qt Creator sources that +you can check out from the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v4.7.0..v4.7.1 + +Editing + +* Fixed that generic highlighting could use unreadable colors + (QTCREATORBUG-20919) + +Qbs Projects + +* Fixed C++ version passed to code model (QTCREATORBUG-20909) + +C++ Support + +* Clang Code Model + * Fixed include order for Clang headers + +Debugging + +* Fixed remote debugging command line argument (QTCREATORBUG-20928) +* GDB + * Fixed GDB built-in pretty printer handling (QTCREATORBUG-20770) +* CDB + * Fixed pretty printing of enums +* QML + * Fixed re-enabling breakpoints (QTCREATORBUG-20795) + * Fixed `Attach to QML Port` (QTCREATORBUG-20168) + +Platform Specific + +Windows + +* Improved resource consumption of MSVC detection, which prompted some + Anti-Virus software to block Qt Creator (QTCREATORBUG-20829) +* Fixed that Qt Creator forced use of ANGLE on user applications + (QTCREATORBUG-20808) +* Fixed MSVC toolchain detection for Windows SKD 7 (QTCREATORBUG-18328) + +Remote Linux + +* Switched SSH support to use Botan 2 (QTCREATORBUG-18802) + +Credits for these changes go to: +Andre Hartmann +André Pönitz +Christian Kandeler +Christian Stenger +David Schulz +Eike Ziller +Hannes Domani +Ivan Donchevskii +Leena Miettinen +Marco Benelli +Orgad Shaneh +Robert Löhning +scootergrisen +Sergey Belyashov +Thomas Hartmann +Tobias Hunger +Ulf Hermann diff --git a/doc/config/qtcreator-project.qdocconf b/doc/config/qtcreator-project.qdocconf index 983fc3e895..58fceb2740 100644 --- a/doc/config/qtcreator-project.qdocconf +++ b/doc/config/qtcreator-project.qdocconf @@ -51,6 +51,8 @@ include(macros.qdocconf) include(qt-cpp-ignore.qdocconf) include(qt-defines.qdocconf) +defines += qtcreator + sources.fileextensions = "*.qdoc" qhp.projects = QtCreator diff --git a/doc/src/android/androiddev.qdoc b/doc/src/android/androiddev.qdoc index d4f3421d5b..e2317d7617 100644 --- a/doc/src/android/androiddev.qdoc +++ b/doc/src/android/androiddev.qdoc @@ -26,9 +26,13 @@ /*! \contentspage index.html - \previouspage creator-connecting-mobile.html \page creator-developing-android.html + \previouspage creator-connecting-mobile.html + \if defined(qtdesignstudio) + \nextpage creator-developing-generic-linux.html + \else \nextpage creator-developing-baremetal.html + \endif \title Connecting Android Devices diff --git a/doc/src/debugger/creator-debugger-common.qdocinc b/doc/src/debugger/creator-debugger-common.qdocinc new file mode 100644 index 0000000000..b867818cbe --- /dev/null +++ b/doc/src/debugger/creator-debugger-common.qdocinc @@ -0,0 +1,361 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Creator documentation. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** +****************************************************************************/ + +/*! + +//! [debugger-breakpoints] + + \section1 Setting Breakpoints + + A breakpoint represents a position or sets of positions in the code that, + when executed, interrupts the program being debugged and passes the control + to you. You can then examine the state of the interrupted program, or + continue execution either line-by-line or continuously. + + \QC shows breakpoints in the \uicontrol Breakpoints view which is enabled + by default. The \uicontrol Breakpoints view is also accessible when the + debugger and the program being debugged is not running. + + \image qtcreator-debug-breakpoints.png "Breakpoints view" + + You can associate breakpoints with: + + \list + + \li Source code files and lines + + \li Functions + + \li Addresses + + \li Throwing and catching exceptions + + \li Executing and forking processes + + \li Executing some system calls + + \li Changes in a block of memory at a particular address when a + program is running + + \li Emitting QML signals + + \li Throwing JavaScript exceptions + + \endlist + + The interruption of a program by a breakpoint can be restricted with certain + conditions. + + You can set and delete breakpoints before the program starts running or + while it is running under the debugger's control. Breakpoints are saved + together with a session. + + \section2 Adding Breakpoints + + To add breakpoints: + + \list 1 + + \li Add a new breakpoint in one of the following ways: + + \list + + \li In the code editor, click the left margin or press \key F9 + (\key F8 for \macos) at a particular line you want the + program to stop. + + \li In the \uicontrol Breakpoints view, double-click in the empty + part of the view. + + \li In the \uicontrol Breakpoints view, select + \uicontrol {Add Breakpoint} in the context menu. + + \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. + + \endlist + + For more information on breakpoints, see + \l{http://sourceware.org/gdb/onlinedocs/gdb/Breakpoints.html#Breakpoints} + {Breakpoints, Watchpoints, and Catchpoints} in GDB documentation. + + \section2 Moving Breakpoints + + To move the breakpoint, drag and drop a breakpoint marker to another line. + + \section2 Deleting Breakpoints + + To delete breakpoints: + + \list + + \li Click the breakpoint marker in the text editor. + + \li Select the breakpoint in the \uicontrol Breakpoints view and press + \key Delete. + + \li Select \uicontrol {Delete Breakpoint} in the context menu in the + \uicontrol Breakpoints view. + + \endlist + + \section2 Enabling and Disabling Breakpoints + + To temporarily disable a breakpoint without deleting it and losing associated + data like conditions and commands: + + \list + + \li Right-click the breakpoint marker in the text editor and select + \uicontrol{Disable Breakpoint}. + + \li Select the breakpoint in the \uicontrol Breakpoints view and press + \key Space. + + \li Select \uicontrol {Disabled Breakpoint} in the context menu in the + \uicontrol Breakpoints view. + + \endlist + + A disabled breakpoint is marked with a hollow read circle in the + text editor and the \uicontrol Breakpoint view. + + To re-enable a temporarily disabled breakpoint: + + \list + + \li Right-click the marker of a disabled breakpoint in the text editor and + select \uicontrol{Enable Breakpoint}. + + \li Select a disabled breakpoint in the \uicontrol Breakpoints view and press + \key Space. + + \li Select \uicontrol {Disabled Breakpoint} in the context menu in the + \uicontrol Breakpoints view. + + \endlist + + With the notable exception of data breakpoints, breakpoints retain their + enabled or disabled state when the debugged program is restarted. + + \section2 Setting Data Breakpoints + + A \e {data breakpoint} stops the program when data is read or written at the + specified address. + + To set a data breakpoint at an address: + + \list 1 + + \li Right-click in the \uicontrol Breakpoints view to open the context + menu, and select \uicontrol {Add Breakpoint}. + + \li In the \uicontrol {Breakpoint type} field, select + \uicontrol {Break on data access at fixed address}. + + \li In the \uicontrol Address field, specify the address of the memory + block. + + \li Select \uicontrol OK. + + \endlist + + If the address is displayed in the \uicontrol {Locals} or + \uicontrol {Expressions} view, you can select + \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 + launch. If you really want a data breakpoint to be active again, re-enable + it manually. + +//! [debugger-breakpoints] + +//! [debugger-call-stack-trace] + + \section1 Viewing Call Stack Trace + + When the program 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 + and line number of the corresponding source file. This data is shown in the + \uicontrol Stack view. + + \image qtcreator-debug-stack.png + + 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. + + 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. + + To find out which QML file is causing a Qt Quick 2 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, + should it find any. You can click a frame in the QML stack to open the QML + file in the editor. + +//! [debugger-call-stack-trace] + +//! [debugger-locals] + + \section1 Local Variables and Function Parameters + + The Locals view consists of the \uicontrol Locals pane and the + \uicontrol {Return Value} pane (hidden when empty). + + \image qtcreator-locals.png "Locals view" + + Whenever a program 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 + local variables. If the last operation in the debugger was returning from a + function after pressing \key {Shift+F11}, the \uicontrol {Return Value} + pane displays the value returned by the function. + +//! [debugger-locals] + +//! [debugger-expressions] + + \section1 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. + + \image qtcreator-debugger-expressions.png + + \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. + + Expression evaluators are re-evaluated whenever the current frame changes. + Note that functions used in the expressions are called each time, even if + they have side-effects. + + All backends support 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 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 + 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. + + \table + \row + \li \b{Note:} + + \row + \li 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 + unexpected data. + \row + \li The debug information provided by GCC does not include enough + information about the time when a variable is initialized. + Therefore, \QC can not tell whether the contents of a local + variable contains "real data", or "initial noise". If a QObject + appears uninitialized, its value is reported as + \uicontrol {not in scope}. Not all uninitialized objects, + however, can be recognized as such. + \endtable + + The \uicontrol {Locals} and \uicontrol {Expressions} views also provide access + to the most powerful feature of the debugger: comprehensive display of data + belonging to Qt's basic objects. For example, in case of QObject, instead of + displaying a pointer to some private data structure, you see a list of + children, signals and slots. + + Similarly, instead of displaying many pointers and integers, \QC's debugger + displays the contents of a QHash or QMap in an orderly manner. Also, the + debugger displays access data for QFileInfo and provides access to the + "real" contents of QVariant. + + Right-click in the \uicontrol {Locals} or the \uicontrol {Expressions} view + to open a context menu that provides additional options for viewing data. The + available options depend on the type of the current items, and are provided + by the \l{Using Debugging Helpers}{Debugging Helpers}. Typically, + string-like data, such as \c{QByteArray} and \c{std::string}, offer a + selection of encodings, as well as the possibility to use a full editor + window. Map-like data, such as \c{QMap}, \c{QHash}, and \c{std::map}, offer + a compact option using the \c{name} column for keys, resulting in a concise + display of containers with short keys, such as numbers or short strings. For + example, to expand all the values of QMap, select + \uicontrol {Change Value Display Format} > \uicontrol Compact. + + 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, + click the \uicontrol Value column, modify the value with the inplace editor, + and press \key Enter (or \key Return). + + To change the complete contents of QVector or \c std::vector values, type + all values separated by commas into the \uicontrol Value column of the main + entry. + + You can enable tooltips in the main editor displaying this information. + For more information, see \l{Showing Tooltips in Debug Mode}. + + \note The set of evaluated expressions is saved in your session. + +//! [debugger-expressions] + +*/ diff --git a/doc/src/debugger/creator-debugger.qdoc b/doc/src/debugger/creator-debugger.qdoc index 2fcad93e12..194e17e835 100644 --- a/doc/src/debugger/creator-debugger.qdoc +++ b/doc/src/debugger/creator-debugger.qdoc @@ -353,9 +353,14 @@ /*! \contentspage index.html - \previouspage creator-debugger-operating-modes.html \page creator-debug-mode.html + \if defined(qtdesignstudio) + \previouspage studio-debugging.html + \nextpage creator-debugging-qml.html + \else + \previouspage creator-debugger-operating-modes.html \nextpage creator-debugging-helpers.html + \endif \title Interacting with the Debugger @@ -472,321 +477,10 @@ It is also possible to continue executing the program until the current function completes or jump to an arbitrary position in the current function. - \section1 Setting Breakpoints - - A breakpoint represents a position or sets of positions in the code that, - when executed, interrupts the program being debugged and passes the control - to you. You can then examine the state of the interrupted program, or - continue execution either line-by-line or continuously. - - \QC shows breakpoints in the \uicontrol Breakpoints view which is enabled - by default. The \uicontrol Breakpoints view is also accessible when the - debugger and the program being debugged is not running. - - \image qtcreator-debug-breakpoints.png "Breakpoints view" - - You can associate breakpoints with: - - \list - - \li Source code files and lines - - \li Functions - - \li Addresses - - \li Throwing and catching exceptions - - \li Executing and forking processes - - \li Executing some system calls - - \li Changes in a block of memory at a particular address when a - program is running - - \endlist - - The interruption of a program by a breakpoint can be restricted with certain - conditions. - - You can set and delete breakpoints before the program starts running or - while it is running under the debugger's control. Breakpoints are saved - together with a session. - - \section2 Adding Breakpoints - - To add breakpoints: - - \list 1 - - \li Add a new breakpoint in one of the following ways: - - \list - - \li In the code editor, click the left margin or press \key F9 - (\key F8 for \macos) at a particular line you want the - program to stop. - - \li In the \uicontrol Breakpoints view, double-click in the empty - part of the view. - - \li In the \uicontrol Breakpoints view, select - \uicontrol {Add Breakpoint} in the context menu. - - \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. - - \endlist - - For more information on breakpoints, see - \l{http://sourceware.org/gdb/onlinedocs/gdb/Breakpoints.html#Breakpoints} - {Breakpoints, Watchpoints, and Catchpoints} in GDB documentation. - - \section2 Moving Breakpoints - - To move the breakpoint, drag and drop a breakpoint marker to another line. - - \section2 Deleting Breakpoints - - To delete breakpoints: - - \list - - \li Click the breakpoint marker in the text editor. - - \li Select the breakpoint in the \uicontrol Breakpoints view and press - \key Delete. - - \li Select \uicontrol {Delete Breakpoint} in the context menu in the - \uicontrol Breakpoints view. - - \endlist - - \section2 Enabling and Disabling Breakpoints - - To temporarily disable a breakpoint without deleting it and losing associated - data like conditions and commands: - - \list - - \li Right-click the breakpoint marker in the text editor and select - \uicontrol{Disable Breakpoint}. - - \li Select the breakpoint in the \uicontrol Breakpoints view and press - \key Space. - - \li Select \uicontrol {Disabled Breakpoint} in the context menu in the - \uicontrol Breakpoints view. - - \endlist - - A disabled breakpoint is marked with a hollow read circle in the - text editor and the \uicontrol Breakpoint view. - - To re-enable a temporarily disabled breakpoint: - - \list - - \li Right-click the marker of a disabled breakpoint in the text editor and - select \uicontrol{Enable Breakpoint}. - - \li Select a disabled breakpoint in the \uicontrol Breakpoints view and press - \key Space. - - \li Select \uicontrol {Disabled Breakpoint} in the context menu in the - \uicontrol Breakpoints view. - - \endlist - - With the notable exception of data breakpoints, breakpoints retain their - enabled or disabled state when the debugged program is restarted. - - \section2 Setting Data Breakpoints - - A \e {data breakpoint} stops the program when data is read or written at the - specified address. - - To set a data breakpoint at an address: - - \list 1 - - \li Right-click in the \uicontrol Breakpoints view to open the context - menu, and select \uicontrol {Add Breakpoint}. - - \li In the \uicontrol {Breakpoint type} field, select - \uicontrol {Break on data access at fixed address}. - - \li In the \uicontrol Address field, specify the address of the memory - block. - - \li Select \uicontrol OK. - - \endlist - - If the address is displayed in the \uicontrol {Locals} or - \uicontrol {Expressions} view, you can select - \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 - launch. If you really want a data breakpoint to be active again, re-enable - it manually. - - \section1 Viewing Call Stack Trace - - When the program 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 - and line number of the corresponding source file. This data is shown in the - \uicontrol Stack view. - - \image qtcreator-debug-stack.png - - 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. - - 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. - - To find out which QML file is causing a Qt Quick 2 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, - should it find any. You can click a frame in the QML stack to open the QML - file in the editor. - - \section1 Local Variables and Function Parameters - - The Locals view consists of the \uicontrol Locals pane and the - \uicontrol {Return Value} pane (hidden when empty). - - \image qtcreator-locals.png "Locals view" - - Whenever a program 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 - local variables. If the last operation in the debugger was returning from a - function after pressing \key {Shift+F11}, the \uicontrol {Return Value} - pane displays the value returned by the function. - - - \section1 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. - - \image qtcreator-debugger-expressions.png - - \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. - - Expression evaluators are re-evaluated whenever the current frame changes. - Note that functions used in the expressions are called each time, even if - they have side-effects. - - All backends support 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 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 - 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. - - - \table - \row - \li \b{Note:} - - \row - \li 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 - unexpected data. - \row - \li The debug information provided by GCC does not include enough - information about the time when a variable is initialized. - Therefore, \QC can not tell whether the contents of a local - variable contains "real data", or "initial noise". If a QObject - appears uninitialized, its value is reported as - \uicontrol {not in scope}. Not all uninitialized objects, - however, can be recognized as such. - \endtable - - - The \uicontrol {Locals} and \uicontrol {Expressions} views also provide access - to the most powerful feature of the debugger: comprehensive display of data - belonging to Qt's basic objects. For example, in case of QObject, instead of - displaying a pointer to some private data structure, you see a list of - children, signals and slots. - - Similarly, instead of displaying many pointers and integers, \QC's debugger - displays the contents of a QHash or QMap in an orderly manner. Also, the - debugger displays access data for QFileInfo and provides access to the - "real" contents of QVariant. - - Right-click in the \uicontrol {Locals} or the \uicontrol {Expressions} view - to open a context menu that provides additional options for viewing data. The - available options depend on the type of the current items, and are provided - by the \l{Using Debugging Helpers}{Debugging Helpers}. Typically, - string-like data, such as \c{QByteArray} and \c{std::string}, offer a - selection of encodings, as well as the possibility to use a full editor - window. Map-like data, such as \c{QMap}, \c{QHash}, and \c{std::map}, offer - a compact option using the \c{name} column for keys, resulting in a concise - display of containers with short keys, such as numbers or short strings. For - example, to expand all the values of QMap, select - \uicontrol {Change Value Display Format} > \uicontrol Compact. - - 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, - click the \uicontrol Value column, modify the value with the inplace editor, - and press \key Enter (or \key Return). - - To change the complete contents of QVector or \c std::vector values, type - all values separated by commas into the \uicontrol Value column of the main - entry. - - You can enable tooltips in the main editor displaying this information. - For more information, see \l{Showing Tooltips in Debug Mode}. - - \note The set of evaluated expressions is saved in your session. + \include creator-debugger-common.qdocinc debugger-breakpoints + \include creator-debugger-common.qdocinc debugger-call-stack-trace + \include creator-debugger-common.qdocinc debugger-locals + \include creator-debugger-common.qdocinc debugger-expressions \section1 Directly Interacting with Native Debuggers diff --git a/doc/src/debugger/qtquick-debugger-example.qdoc b/doc/src/debugger/qtquick-debugger-example.qdoc index 5643fc3f82..1e1288a5bd 100644 --- a/doc/src/debugger/qtquick-debugger-example.qdoc +++ b/doc/src/debugger/qtquick-debugger-example.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-debugging-example.html \page creator-qml-debugging-example.html + \if defined(qtdesignstudio) + \previouspage creator-debugging-qml.html + \nextpage creator-qml-performance-monitor.html + \else + \previouspage creator-debugging-example.html \nextpage creator-troubleshooting-debugging.html + \endif \title Debugging a Qt Quick Example Application diff --git a/doc/src/debugger/qtquick-debugging.qdoc b/doc/src/debugger/qtquick-debugging.qdoc index 5686bb44c6..2bdbb7a8a7 100644 --- a/doc/src/debugger/qtquick-debugging.qdoc +++ b/doc/src/debugger/qtquick-debugging.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-debugging-helpers.html \page creator-debugging-qml.html + \if defined(qtdesignstudio) + \previouspage studio-debugging.html + \nextpage creator-qml-debugging-example.html + \else + \previouspage creator-debugging-helpers.html \nextpage creator-debugging-example.html + \endif \title Debugging Qt Quick Projects @@ -153,6 +158,13 @@ \endlist + \if defined(qtdesignstudio) + \include creator-debugger-common.qdocinc debugger-breakpoints + \include creator-debugger-common.qdocinc debugger-call-stack-trace + \include creator-debugger-common.qdocinc debugger-locals + \include creator-debugger-common.qdocinc debugger-expressions + \endif + \section1 Executing JavaScript Expressions When the application is interrupted by a breakpoint, you can use the diff --git a/doc/src/editors/creator-coding.qdoc b/doc/src/editors/creator-coding.qdoc index 234d203ea4..2f0608f1c4 100644 --- a/doc/src/editors/creator-coding.qdoc +++ b/doc/src/editors/creator-coding.qdoc @@ -31,8 +31,13 @@ /*! \contentspage index.html - \previouspage creator-usability.html \page creator-coding.html + \if defined(qtdesignstudio) + \previouspage creator-keyboard-shortcuts.html + \nextpage + \else + \previouspage creator-usability.html + \endif \nextpage creator-editor-functions.html \title Coding diff --git a/doc/src/editors/creator-editors-options-text.qdoc b/doc/src/editors/creator-editors-options-text.qdoc index 63401f25b1..4ef6e256fa 100644 --- a/doc/src/editors/creator-editors-options-text.qdoc +++ b/doc/src/editors/creator-editors-options-text.qdoc @@ -31,9 +31,13 @@ /*! \contentspage index.html - \previouspage creator-editor-options.html \page creator-editor-options-text.html + \previouspage creator-editor-options.html + \if defined(qtdesignstudio) + \nextpage studio-javascript.html + \else \nextpage creator-editor-fakevim.html + \endif \title Specifying Text Editor Settings diff --git a/doc/src/howto/creator-keyboard-shortcuts.qdoc b/doc/src/howto/creator-keyboard-shortcuts.qdoc index 4a6ba7b056..5a02d1a783 100644 --- a/doc/src/howto/creator-keyboard-shortcuts.qdoc +++ b/doc/src/howto/creator-keyboard-shortcuts.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-cli.html \page creator-keyboard-shortcuts.html + \if defined(qtdesignstudio) + \previouspage studio-advanced.html + \nextpage creator-coding.html + \else + \previouspage creator-cli.html \nextpage creator-editor-external.html + \endif \title Keyboard Shortcuts diff --git a/doc/src/linux-mobile/creator-deployment-embedded-linux.qdoc b/doc/src/linux-mobile/creator-deployment-embedded-linux.qdoc index 346f48a42a..7733fa62c0 100644 --- a/doc/src/linux-mobile/creator-deployment-embedded-linux.qdoc +++ b/doc/src/linux-mobile/creator-deployment-embedded-linux.qdoc @@ -31,9 +31,13 @@ /*! \contentspage index.html - \previouspage creator-deploying-android.html \page creator-deployment-embedded-linux.html + \previouspage creator-deploying-android.html + \if defined(qtdesignstudio) + \nextpage creator-connecting-mobile.html + \else \nextpage creator-deployment-qnx.html + \endif \title Deploying Applications to Embedded Linux Devices diff --git a/doc/src/linux-mobile/linuxdev.qdoc b/doc/src/linux-mobile/linuxdev.qdoc index f323e488a7..2f35517fdc 100644 --- a/doc/src/linux-mobile/linuxdev.qdoc +++ b/doc/src/linux-mobile/linuxdev.qdoc @@ -26,9 +26,14 @@ /*! \contentspage index.html - \previouspage creator-developing-baremetal.html \page creator-developing-generic-linux.html + \if defined(qtdesignstudio) + \previouspage creator-developing-android.html + \nextpage creator-build-process-customizing.html + \else + \previouspage creator-developing-baremetal.html \nextpage creator-developing-ios.html + \endif \title Connecting Embedded Linux Devices diff --git a/doc/src/overview/creator-deployment-overview.qdoc b/doc/src/overview/creator-deployment-overview.qdoc index 86fbaa5488..7335591580 100644 --- a/doc/src/overview/creator-deployment-overview.qdoc +++ b/doc/src/overview/creator-deployment-overview.qdoc @@ -55,10 +55,14 @@ When you deploy the application to a generic Linux-based device, \QC copies the application files to the connected device. You can test and debug the application on the device. + + \if defined(qtcreator) \li \l{Deploying Applications to QNX Neutrino Devices} When you deploy the application to a QNX Neutrino device, \QC copies the application files to the connected device. You can test and debug the application on the device. + \endif + \endlist */ diff --git a/doc/src/overview/creator-help-overview.qdoc b/doc/src/overview/creator-help-overview.qdoc index cb36664bc9..70eba62c41 100644 --- a/doc/src/overview/creator-help-overview.qdoc +++ b/doc/src/overview/creator-help-overview.qdoc @@ -31,8 +31,12 @@ /*! \contentspage index.html - \previouspage creator-task-lists.html \page creator-help-overview.html + \if defined(qtdesignstudio) + \previouspage creator-qml-performance-monitor.html + \else + \previouspage creator-task-lists.html + \endif \nextpage creator-help.html \title Getting Help diff --git a/doc/src/overview/creator-mobile-targets.qdoc b/doc/src/overview/creator-mobile-targets.qdoc index ae7aa0a284..899323b368 100644 --- a/doc/src/overview/creator-mobile-targets.qdoc +++ b/doc/src/overview/creator-mobile-targets.qdoc @@ -31,8 +31,12 @@ /*! \contentspage index.html - \previouspage creator-deployment-qnx.html \page creator-connecting-mobile.html + \if defined(qtdesignstudio) + \previouspage creator-deployment-embedded-linux.html + \else + \previouspage creator-deployment-qnx.html + \endif \nextpage creator-developing-android.html \title Connecting Devices @@ -59,10 +63,12 @@ 2.3.3, or later. You must install a Qt version targeting Android and the Android SDK and NDK to develop for Android devices. + \if defined(qtcreator) \li \l{Connecting Bare Metal Devices} You can connect bare metal devices to the development PC and use \QC to debug applications on them with GDB or a hardware debugger. + \endif \li \l{Connecting Embedded Linux Devices} @@ -70,6 +76,7 @@ Linux devices installed on the development PC, you can add it and the device to \QC. + \if defined(qtcreator) \li \l{Connecting iOS Devices} You use the tools delivered with Xcode to connect devices to \QC. @@ -82,9 +89,11 @@ debug applications on them from within \QC. This is currently only supported for QNX Neutrino devices, and requires the QNX SDK to be installed on the development PC. + \endif \endlist + \if defined(qtcreator) \section1 Related Topics \list @@ -97,4 +106,5 @@ local Linux PC, remote generic SSH Linux targets, or \l{Embedded Devices}{embedded devices}. \endlist + \endif */ diff --git a/doc/src/overview/creator-supported-platforms.qdoc b/doc/src/overview/creator-supported-platforms.qdoc index 8334f9a800..d6b95f7760 100644 --- a/doc/src/overview/creator-supported-platforms.qdoc +++ b/doc/src/overview/creator-supported-platforms.qdoc @@ -97,7 +97,7 @@ \endlist - \li \macos 10.10 or later with the following: + \li \macos 10.11 or later with the following: \list diff --git a/doc/src/projects/creator-projects-builds-customizing.qdoc b/doc/src/projects/creator-projects-builds-customizing.qdoc index c59182e2f9..08e894f919 100644 --- a/doc/src/projects/creator-projects-builds-customizing.qdoc +++ b/doc/src/projects/creator-projects-builds-customizing.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-developing-qnx.html \page creator-build-process-customizing.html + \if defined(qtdesignstudio) + \previouspage creator-developing-generic-linux.html + \nextpage studio-advanced.html + \else + \previouspage creator-developing-qnx.html \nextpage creator-testing.html + \endif \title Customizing the Build Process diff --git a/doc/src/projects/creator-projects-running.qdoc b/doc/src/projects/creator-projects-running.qdoc index 5e794f9bfb..57f3a1419f 100644 --- a/doc/src/projects/creator-projects-running.qdoc +++ b/doc/src/projects/creator-projects-running.qdoc @@ -31,8 +31,12 @@ /*! \contentspage index.html - \previouspage creator-building-targets.html \page creator-running-targets.html + \if defined(qtdesignstudio) + \previouspage studio-live-preview.html + \else + \previouspage creator-building-targets.html + \endif \nextpage creator-deployment.html \title Running on Multiple Platforms @@ -76,5 +80,8 @@ \l{Specifying Run Settings}. \include linux-mobile/creator-projects-running-generic-linux.qdocinc running on embedded linux + + \if defined(qtcreator) \include qnx/creator-projects-running-qnx.qdocinc running on qnx + \endif */ diff --git a/doc/src/projects/creator-projects-settings-dependencies.qdoc b/doc/src/projects/creator-projects-settings-dependencies.qdoc index fe6ffe9a01..e576ac9fee 100644 --- a/doc/src/projects/creator-projects-settings-dependencies.qdoc +++ b/doc/src/projects/creator-projects-settings-dependencies.qdoc @@ -31,9 +31,13 @@ /*! \contentspage index.html - \previouspage creator-code-style-settings.html \page creator-build-dependencies.html + \previouspage creator-code-style-settings.html + \if defined(qtdesignstudio) + \nextpage studio-designing.html + \else \nextpage creator-sharing-project-settings.html + \endif \title Specifying Dependencies diff --git a/doc/src/qtquick/qtquick-components.qdoc b/doc/src/qtquick/qtquick-components.qdoc index d0ec40ad07..718d46ca51 100644 --- a/doc/src/qtquick/qtquick-components.qdoc +++ b/doc/src/qtquick/qtquick-components.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-using-qt-quick-designer.html \page quick-components.html + \if defined(qtdesignstudio) + \previouspage studio-designing.html + \nextpage qtquick-navigator.html + \else + \previouspage creator-using-qt-quick-designer.html \nextpage quick-buttons.html + \endif \title Creating Components diff --git a/doc/src/qtquick/qtquick-connection-editor-bindings.qdoc b/doc/src/qtquick/qtquick-connection-editor-bindings.qdoc index 614a3841ea..2f5c1ec54b 100644 --- a/doc/src/qtquick/qtquick-connection-editor-bindings.qdoc +++ b/doc/src/qtquick/qtquick-connection-editor-bindings.qdoc @@ -25,9 +25,13 @@ /*! \contentspage {Qt Creator Manual} - \previouspage quick-dynamic-properties.html \page quick-property-bindings.html + \previouspage quick-dynamic-properties.html + \if defined(qtdesignstudio) + \nextpage quick-states.html + \else \nextpage quick-connections-backend.html + \endif \title Adding Bindings Between Properties diff --git a/doc/src/qtquick/qtquick-designer.qdoc b/doc/src/qtquick/qtquick-designer.qdoc index cedbea745f..10aff2aabc 100644 --- a/doc/src/qtquick/qtquick-designer.qdoc +++ b/doc/src/qtquick/qtquick-designer.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-quick-ui-forms.html \page creator-using-qt-quick-designer.html + \if defined(qtdesignstudio) + \previouspage studio-tutorials.html + \nextpage studio-preview-example.html + \else + \previouspage creator-quick-ui-forms.html \nextpage quick-components.html + \endif \title Editing QML Files in Design Mode diff --git a/doc/src/qtquick/qtquick-iso-icon-browser.qdoc b/doc/src/qtquick/qtquick-iso-icon-browser.qdoc index c4ea2de21d..efc216a7f6 100644 --- a/doc/src/qtquick/qtquick-iso-icon-browser.qdoc +++ b/doc/src/qtquick/qtquick-iso-icon-browser.qdoc @@ -25,9 +25,14 @@ /*! \contentspage index.html - \previouspage quick-states.html \page qtquick-iso-icon-browser.html + \if defined(qtdesignstudio) + \previouspage qmldesigner-pathview-editor.html + \nextpage creator-quick-ui-forms.html + \else + \previouspage quick-states.html \nextpage quick-export-to-qml.html + \endif \title Browsing ISO 7000 Icons diff --git a/doc/src/qtquick/qtquick-navigator.qdoc b/doc/src/qtquick/qtquick-navigator.qdoc index 1b4f211ff5..e61e517bac 100644 --- a/doc/src/qtquick/qtquick-navigator.qdoc +++ b/doc/src/qtquick/qtquick-navigator.qdoc @@ -25,8 +25,12 @@ /*! \contentspage {Qt Creator Manual} - \previouspage quick-scalable-image.html \page qtquick-navigator.html + \if defined(qtdesignstudio) + \previouspage quick-components.html + \else + \previouspage quick-scalable-image.html + \endif \nextpage qtquick-properties.html \title Managing Item Hierarchy diff --git a/doc/src/qtquick/qtquick-pathview-editor.qdoc b/doc/src/qtquick/qtquick-pathview-editor.qdoc index 9ac6ffba6c..872cd4cd8e 100644 --- a/doc/src/qtquick/qtquick-pathview-editor.qdoc +++ b/doc/src/qtquick/qtquick-pathview-editor.qdoc @@ -25,9 +25,14 @@ /*! \contentspage index.html - \previouspage qtquick-properties.html \page qmldesigner-pathview-editor.html + \if defined(qtdesignstudio) + \previouspage studio-fonts.html + \nextpage qtquick-iso-icon-browser.html + \else + \previouspage qtquick-properties.html \nextpage qmldesigner-connections.html + \endif \title Editing PathView Properties diff --git a/doc/src/analyze/qtquick-profiler.qdoc b/doc/src/qtquick/qtquick-profiler.qdoc index 1b0c5fb333..f87f429ea4 100644 --- a/doc/src/analyze/qtquick-profiler.qdoc +++ b/doc/src/qtquick/qtquick-profiler.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-analyze-mode.html \page creator-qml-performance-monitor.html + \if defined(qtdesignstudio) + \previouspage creator-qml-debugging-example.html + \nextpage creator-help-overview.html + \else + \previouspage creator-analyze-mode.html \nextpage creator-valgrind-overview.html + \endif \title Profiling QML Applications diff --git a/doc/src/qtquick/qtquick-properties.qdoc b/doc/src/qtquick/qtquick-properties.qdoc index 95b5e41f12..4c78f25cfe 100644 --- a/doc/src/qtquick/qtquick-properties.qdoc +++ b/doc/src/qtquick/qtquick-properties.qdoc @@ -25,9 +25,13 @@ /*! \contentspage {Qt Creator Manual} - \previouspage qtquick-navigator.html \page qtquick-properties.html + \previouspage qtquick-navigator.html + \if defined(qtdesignstudio) + \nextpage studio-timeline.html + \else \nextpage qmldesigner-pathview-editor.html + \endif \title Specifying Item Properties diff --git a/doc/src/qtquick/qtquick-states.qdoc b/doc/src/qtquick/qtquick-states.qdoc index d9a6ba95e4..e03355a0a5 100644 --- a/doc/src/qtquick/qtquick-states.qdoc +++ b/doc/src/qtquick/qtquick-states.qdoc @@ -25,9 +25,14 @@ /*! \contentspage {Qt Creator Manual} - \previouspage quick-connections-backend.html \page quick-states.html + \if defined(qtdesignstudio) + \previouspage quick-property-bindings.html + \nextpage studio-fonts.html + \else + \previouspage quick-connections-backend.html \nextpage qtquick-iso-icon-browser.html + \endif \title Adding States diff --git a/doc/src/qtquick/qtquick-ui-forms.qdoc b/doc/src/qtquick/qtquick-ui-forms.qdoc index 09c82ed400..8a320061db 100644 --- a/doc/src/qtquick/qtquick-ui-forms.qdoc +++ b/doc/src/qtquick/qtquick-ui-forms.qdoc @@ -32,9 +32,14 @@ /*! \contentspage index.html - \previouspage quick-projects.html \page creator-quick-ui-forms.html + \if defined(qtdesignstudio) + \previouspage qtquick-iso-icon-browser.html + \nextpage studio-live-preview.html + \else + \previouspage quick-projects.html \nextpage creator-using-qt-quick-designer.html + \endif \title Qt Quick UI Forms diff --git a/doc/src/vcs/creator-vcs-git.qdoc b/doc/src/vcs/creator-vcs-git.qdoc index a8c1559748..1909b1ae43 100644 --- a/doc/src/vcs/creator-vcs-git.qdoc +++ b/doc/src/vcs/creator-vcs-git.qdoc @@ -31,9 +31,14 @@ /*! \contentspage index.html - \previouspage creator-vcs-cvs.html \page creator-vcs-git.html + \if defined(qtdesignstudio) + \previouspage studio-projects.html + \nextpage studio-designing.html + \else + \previouspage creator-vcs-cvs.html \nextpage creator-vcs-mercurial.html + \endif \title Using Git diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 7e46132096..45ea4d6d76 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -2928,6 +2928,8 @@ class DumperBase: return str(simple) if self.ldisplay is not None: return self.ldisplay + if self.type.code == TypeCodeEnum: + return self.displayEnum() #if self.ldata is not None: # if sys.version_info[0] == 2 and isinstance(self.ldata, buffer): # return bytes(self.ldata).encode('hex') diff --git a/src/app/main.cpp b/src/app/main.cpp index 1c7c394760..c498db3759 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -379,7 +379,7 @@ int main(int argc, char **argv) { #ifdef Q_OS_WIN if (!qEnvironmentVariableIsSet("QT_OPENGL")) - qputenv("QT_OPENGL", "angle"); + QCoreApplication::setAttribute(Qt::AA_UseOpenGLES); #endif if (qEnvironmentVariableIsSet("QTCREATOR_DISABLE_NATIVE_MENUBAR") diff --git a/src/libs/botan/botan.pro b/src/libs/botan/botan.pro index 48b3b2ea35..2f238e5d03 100644 --- a/src/libs/botan/botan.pro +++ b/src/libs/botan/botan.pro @@ -28,9 +28,10 @@ mingw { OTHER_FLAGS += --without-stack-protector } BOTAN_CXX_FLAGS = -msvc: BOTAN_CXX_FLAGS += /wd4127 /wd4244 /wd4250 /wd4267 /wd4334 /wd4702 /wd4996 +msvc: BOTAN_CXX_FLAGS += /wd4127 /wd4244 /wd4250 /wd4267 /wd4334 /wd4702 /wd4996 \ + /D_ENABLE_EXTENDED_ALIGNED_STORAGE else: BOTAN_CXX_FLAGS += -Wno-unused-parameter -macos: BOTAN_CXX_FLAGS += -mmacosx-version-min=$$QMAKE_MACOSX_DEPLOYMENT_TARGET -isysroot $$shell_quote($$QMAKE_MAC_SDK.macosx.Path) +macos: BOTAN_CXX_FLAGS += -mmacosx-version-min=$$QMAKE_MACOSX_DEPLOYMENT_TARGET -isysroot $$shell_quote($$QMAKE_MAC_SDK_PATH) unix: BOTAN_CXX_FLAGS += -fPIC !isEmpty(BOTAN_CXX_FLAGS): OTHER_FLAGS += --cxxflags=$$shell_quote($$BOTAN_CXX_FLAGS) win32: OTHER_FLAGS += --link-method=hardlink @@ -44,7 +45,7 @@ configure.output = $$BOTAN_BUILD_DIR/Makefile configure.variable_out = BOTAN_MAKEFILE configure.commands = cd $$BOTAN_BUILD_DIR_FOR_SHELL && \ python $$CONFIGURE_FILE_PATH_FOR_SHELL \ - --cc=$$BOTAN_CC_TYPE --cc-bin=$$QMAKE_CXX \ + --cc=$$BOTAN_CC_TYPE --cc-bin=$$shell_quote($$QMAKE_CXX) \ $$BOTAN_ARCH_SWITCH $$BOTAN_OS_SWITCH $$OTHER_FLAGS QMAKE_EXTRA_COMPILERS += configure diff --git a/src/libs/botan/botan.qbs b/src/libs/botan/botan.qbs index 3872e900ad..65aa6ebb96 100644 --- a/src/libs/botan/botan.qbs +++ b/src/libs/botan/botan.qbs @@ -44,7 +44,7 @@ Product { var cxxFlags = []; if (product.qbs.toolchain.contains("msvc")) { cxxFlags.push("/wd4127", "/wd4244", "/wd4250", "/wd4267", "/wd4334", "/wd4702", - "/wd4996"); + "/wd4996", "/D_ENABLE_EXTENDED_ALIGNED_STORAGE"); } else if (product.qbs.toolchain.contains("gcc")) cxxFlags.push("-Wno-unused-parameter"); diff --git a/src/libs/utils/mimetypes/mimeprovider.cpp b/src/libs/utils/mimetypes/mimeprovider.cpp index 3d14b971ce..d444aa899c 100644 --- a/src/libs/utils/mimetypes/mimeprovider.cpp +++ b/src/libs/utils/mimetypes/mimeprovider.cpp @@ -50,6 +50,7 @@ #include <QDebug> #include <QDateTime> #include <QtEndian> +#include <QtGlobal> using namespace Utils; using namespace Utils::Internal; diff --git a/src/plugins/autotest/testresultspane.cpp b/src/plugins/autotest/testresultspane.cpp index 3047e6d710..66701a0aa4 100644 --- a/src/plugins/autotest/testresultspane.cpp +++ b/src/plugins/autotest/testresultspane.cpp @@ -547,7 +547,7 @@ void TestResultsPane::onCustomContextMenuRequested(const QPoint &pos) connect(action, &QAction::triggered, this, &TestResultsPane::onSaveWholeTriggered); menu.addAction(action); - const auto correlatingItem = clicked ? clicked->findTestTreeItem() : nullptr; + const auto correlatingItem = (enabled && clicked) ? clicked->findTestTreeItem() : nullptr; action = new QAction(tr("Run This Test"), &menu); action->setEnabled(correlatingItem && correlatingItem->canProvideTestConfiguration()); connect(action, &QAction::triggered, this, [this, clicked] { diff --git a/src/plugins/coreplugin/locator/locatorwidget.cpp b/src/plugins/coreplugin/locator/locatorwidget.cpp index 33a66f77ec..efddf72a73 100644 --- a/src/plugins/coreplugin/locator/locatorwidget.cpp +++ b/src/plugins/coreplugin/locator/locatorwidget.cpp @@ -514,6 +514,13 @@ bool CompletionList::eventFilter(QObject *watched, QEvent *event) return true; } break; + case Qt::Key_P: + case Qt::Key_N: + if (ke->modifiers() == Qt::KeyboardModifiers(Utils::HostOsInfo::controlModifier())) { + event->accept(); + return true; + } + break; } } return Utils::TreeView::eventFilter(watched, event); diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp index 07ff03be6a..1b6abf740c 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.cpp +++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp @@ -378,10 +378,7 @@ FolderNavigationWidget::FolderNavigationWidget(QWidget *parent) : QWidget(parent connect(m_listView->selectionModel(), &QItemSelectionModel::currentChanged, this, - [this](const QModelIndex ¤t, const QModelIndex &previous) { - setCrumblePath(m_sortProxyModel->mapToSource(current), - m_sortProxyModel->mapToSource(previous)); - }, + &FolderNavigationWidget::setCrumblePath, Qt::QueuedConnection); connect(m_crumbLabel, &Utils::FileCrumbLabel::pathClicked, [this](const Utils::FileName &path) { const QModelIndex rootIndex = m_sortProxyModel->mapToSource(m_listView->rootIndex()); @@ -618,13 +615,15 @@ void FolderNavigationWidget::selectFile(const Utils::FileName &filePath) // Use magic timer for scrolling. m_listView->setCurrentIndex(fileIndex); QTimer::singleShot(200, this, [this, filePath] { - const QModelIndex fileIndex = m_fileSystemModel->index(filePath.toString()); + const QModelIndex fileIndex = m_sortProxyModel->mapFromSource( + m_fileSystemModel->index(filePath.toString())); if (fileIndex == m_listView->rootIndex()) { m_listView->horizontalScrollBar()->setValue(0); m_listView->verticalScrollBar()->setValue(0); } else { m_listView->scrollTo(fileIndex); } + setCrumblePath(fileIndex); }); } } @@ -700,11 +699,12 @@ void FolderNavigationWidget::createNewFolder(const QModelIndex &parent) m_listView->edit(index); } -void FolderNavigationWidget::setCrumblePath(const QModelIndex &index, const QModelIndex &) +void FolderNavigationWidget::setCrumblePath(const QModelIndex &index) { + const QModelIndex sourceIndex = m_sortProxyModel->mapToSource(index); const int width = m_crumbLabel->width(); const int previousHeight = m_crumbLabel->immediateHeightForWidth(width); - m_crumbLabel->setPath(Utils::FileName::fromString(m_fileSystemModel->filePath(index))); + m_crumbLabel->setPath(Utils::FileName::fromString(m_fileSystemModel->filePath(sourceIndex))); const int currentHeight = m_crumbLabel->immediateHeightForWidth(width); const int diff = currentHeight - previousHeight; if (diff != 0 && m_crumbLabel->isVisible()) { diff --git a/src/plugins/projectexplorer/foldernavigationwidget.h b/src/plugins/projectexplorer/foldernavigationwidget.h index 8f428863eb..f10f69d595 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.h +++ b/src/plugins/projectexplorer/foldernavigationwidget.h @@ -131,7 +131,7 @@ private: QStringList projectsInDirectory(const QModelIndex &index) const; void openProjectsInDirectory(const QModelIndex &index); void createNewFolder(const QModelIndex &parent); - void setCrumblePath(const QModelIndex &index, const QModelIndex &); + void setCrumblePath(const QModelIndex &index); Core::IContext *m_context = nullptr; Utils::NavigationTreeView *m_listView = nullptr; diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 9ac49187ba..06414bff07 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -1339,6 +1339,7 @@ void tst_Dumpers::dumper() "\n\n" + data.includes + "\n\n" + (data.useQHash ? "\n#include <QByteArray>" + "\n#include <QtGlobal>" "\n#if QT_VERSION >= 0x050900" "\n#include <QHash>" "\nvoid initHashSeed() { qSetGlobalQHashSeed(0); }" @@ -6836,12 +6837,14 @@ void tst_Dumpers::dumper_data() QTest::newRow("Internal2") - << Data("struct Foo { int bar = 15; }; \n" + << Data("enum E { V1, V2 };\n" + "struct Foo { int bar = 15; E e = V1; };\n" "struct QtcDumperTest_PointerArray {\n" " Foo *foos = new Foo[10];\n" "};\n\n", "QtcDumperTest_PointerArray tc; unused(&tc);\n") + Check("tc.0.bar", "15", "int") + + Check("tc.0.e", "V1 (0)", "E") + Check("tc.1.bar", "15", "int") + Check("tc.2.bar", "15", "int") + Check("tc.3.bar", "15", "int"); diff --git a/tests/auto/debugger/tst_offsets.cpp b/tests/auto/debugger/tst_offsets.cpp index 5dca246bcf..8bba5fd529 100644 --- a/tests/auto/debugger/tst_offsets.cpp +++ b/tests/auto/debugger/tst_offsets.cpp @@ -37,6 +37,8 @@ #endif #endif +#include <QtGlobal> + #include <private/qdatetime_p.h> #include <private/qfile_p.h> #include <private/qfileinfo_p.h> diff --git a/tests/helper/qmlapplicationviewer/qmlapplicationviewer.cpp b/tests/helper/qmlapplicationviewer/qmlapplicationviewer.cpp index 0a87431867..5c63c4e432 100644 --- a/tests/helper/qmlapplicationviewer/qmlapplicationviewer.cpp +++ b/tests/helper/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -42,6 +42,7 @@ #include <QtCore/QDir> #include <QtCore/QFileInfo> +#include <QtCore/QtGlobal> #include <QtDeclarative/QDeclarativeComponent> #include <QtDeclarative/QDeclarativeEngine> #include <QtDeclarative/QDeclarativeContext> diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py index cd6facb6ca..c4be96bed8 100644 --- a/tests/system/shared/classes.py +++ b/tests/system/shared/classes.py @@ -44,7 +44,7 @@ class Targets: @staticmethod def availableTargetClasses(): - availableTargets = list(Targets.ALL_TARGETS) + availableTargets = set(Targets.ALL_TARGETS) if platform.system() in ('Windows', 'Microsoft'): availableTargets.remove(Targets.EMBEDDED_LINUX) elif platform.system() == 'Darwin': @@ -54,8 +54,7 @@ class Targets: @staticmethod def desktopTargetClasses(): desktopTargets = Targets.availableTargetClasses() - if Targets.EMBEDDED_LINUX in desktopTargets: - desktopTargets.remove(Targets.EMBEDDED_LINUX) + desktopTargets.discard(Targets.EMBEDDED_LINUX) return desktopTargets @staticmethod @@ -64,10 +63,7 @@ class Targets: @staticmethod def getTargetsAsStrings(targets): - if not isinstance(targets, (tuple,list)): - test.fatal("Wrong usage... This function handles only tuples or lists.") - return None - return map(Targets.getStringForTarget, targets) + return set(map(Targets.getStringForTarget, targets)) @staticmethod def getIdForTargetName(targetName): diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index a8305e11a4..3afc7fc2a7 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -155,8 +155,8 @@ def __createProjectHandleQtQuickSelection__(minimumQtVersion): # withoutQt4 if True Qt4 will get unchecked / not selected while checking the targets def __selectQtVersionDesktop__(checks, available=None, withoutQt4=False): wanted = Targets.desktopTargetClasses() - if withoutQt4 and Targets.DESKTOP_4_8_7_DEFAULT in wanted: - wanted.remove(Targets.DESKTOP_4_8_7_DEFAULT) + if withoutQt4: + wanted.discard(Targets.DESKTOP_4_8_7_DEFAULT) checkedTargets = __chooseTargets__(wanted, available) if checks: for target in checkedTargets: @@ -197,8 +197,7 @@ def __modifyAvailableTargets__(available, requiredQt, asStrings=False): toBeRemoved = Targets.EMBEDDED_LINUX if asStrings: toBeRemoved = Targets.getStringForTarget(toBeRemoved) - if toBeRemoved in available: - available.remove(toBeRemoved) + available.discard(toBeRemoved) for currentItem in tmp: if asStrings: item = currentItem @@ -207,7 +206,7 @@ def __modifyAvailableTargets__(available, requiredQt, asStrings=False): found = versionFinder.search(item) if found: if Qt5Path.toVersionTuple(found.group(1)) < Qt5Path.toVersionTuple(requiredQt): - available.remove(currentItem) + available.discard(currentItem) # Creates a Qt GUI project # param path specifies where to create the project @@ -398,14 +397,14 @@ def __chooseTargets__(targets, availableTargets=None, additionalFunc=None): else: # following targets depend on the build environment - added for further/later tests available = Targets.availableTargetClasses() - checkedTargets = [] + checkedTargets = set() for current in available: mustCheck = current in targets try: ensureChecked("{type='QCheckBox' text='%s' visible='1'}" % Targets.getStringForTarget(current), mustCheck, 3000) if mustCheck: - checkedTargets.append(current) + checkedTargets.add(current) # perform additional function on detailed kits view if additionalFunc: @@ -517,26 +516,26 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False): version = None if templateName.startswith("Qt Quick Application - "): if templateName == "Qt Quick Application - Empty": - result = [Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT] + result = set([Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT]) else: - result = [Targets.DESKTOP_5_10_1_DEFAULT] + result = set([Targets.DESKTOP_5_10_1_DEFAULT]) elif 'Supported Platforms' in text: supports = text[text.find('Supported Platforms'):].split(":")[1].strip().split(" ") - result = [] + result = set() if 'Desktop' in supports: if (version == None or version < "5.0"): - result.append(Targets.DESKTOP_4_8_7_DEFAULT) + result.add(Targets.DESKTOP_4_8_7_DEFAULT) if platform.system() in ("Linux", "Darwin"): - result.append(Targets.EMBEDDED_LINUX) - result.extend([Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT]) + result.add(Targets.EMBEDDED_LINUX) + result = result.union(set([Targets.DESKTOP_5_6_1_DEFAULT, Targets.DESKTOP_5_10_1_DEFAULT])) if platform.system() != 'Darwin': - result.append(Targets.DESKTOP_5_4_1_GCC) + result.add(Targets.DESKTOP_5_4_1_GCC) elif 'Platform independent' in text: result = Targets.desktopTargetClasses() else: test.warning("Returning None (__getSupportedPlatforms__())", "Parsed text: '%s'" % text) - return [], None + return set(), None if getAsStrings: result = Targets.getTargetsAsStrings(result) return result, version diff --git a/tests/system/suite_CCOM/tst_CCOM01/test.py b/tests/system/suite_CCOM/tst_CCOM01/test.py index 432c916cb8..d468dca06a 100755 --- a/tests/system/suite_CCOM/tst_CCOM01/test.py +++ b/tests/system/suite_CCOM/tst_CCOM01/test.py @@ -41,7 +41,7 @@ def main(): return # open example project, supports only Qt 5 targets = Targets.desktopTargetClasses() - targets.remove(Targets.DESKTOP_4_8_7_DEFAULT) + targets.discard(Targets.DESKTOP_4_8_7_DEFAULT) openQmakeProject(examplePath, targets) # build and wait until finished - on all build configurations availableConfigs = iterateBuildConfigs() diff --git a/tests/system/suite_general/tst_create_proj_wizard/test.py b/tests/system/suite_general/tst_create_proj_wizard/test.py index 34878b9566..cefb8d3844 100644 --- a/tests/system/suite_general/tst_create_proj_wizard/test.py +++ b/tests/system/suite_general/tst_create_proj_wizard/test.py @@ -87,23 +87,20 @@ def main(): def verifyKitCheckboxes(kits, displayedPlatforms): waitForObject("{type='QLabel' unnamed='1' visible='1' text='Kit Selection'}") - availableCheckboxes = filter(visibleCheckBoxExists, kits.keys()) + availableCheckboxes = frozenset(filter(visibleCheckBoxExists, kits.keys())) # verification whether expected, found and configured match - for t in kits: - if t in displayedPlatforms: - if t in availableCheckboxes: - test.passes("Found expected kit '%s' on 'Kit Selection' page." % t) - availableCheckboxes.remove(t) - else: - test.fail("Expected kit '%s' missing on 'Kit Selection' page." % t) - else: - if t in availableCheckboxes: - test.fail("Kit '%s' found on 'Kit Selection' page - but was not expected!" % t) - else: - test.passes("Irrelevant kit '%s' not found on 'Kit Selection' page." % t) - if len(availableCheckboxes) != 0: - test.fail("Found unexpected additional kit(s) %s on 'Kit Selection' page." - % str(availableCheckboxes)) + + expectedShownKits = availableCheckboxes.intersection(displayedPlatforms) + unexpectedShownKits = availableCheckboxes.difference(displayedPlatforms) + missingKits = displayedPlatforms.difference(availableCheckboxes) + + test.log("Expected kits shown on 'Kit Selection' page:\n%s" % "\n".join(expectedShownKits)) + if len(unexpectedShownKits): + test.fail("Kits found on 'Kit Selection' page but not expected:\n%s" + % "\n".join(unexpectedShownKits)) + if len(missingKits): + test.fail("Expected kits missing on 'Kit Selection' page:\n%s" + % "\n".join(missingKits)) def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms, specialHandlingFunc = None, *args): |