forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.14'
Change-Id: I9d1931b7862f4541ac7a064ff987128afd835cbe
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
set(IDE_VERSION "4.13.84") # The IDE version.
|
||||
set(IDE_VERSION_COMPAT "4.13.84") # The IDE Compatibility version.
|
||||
set(IDE_VERSION_DISPLAY "4.14.0-rc1") # The IDE display version.
|
||||
set(IDE_VERSION "4.14.0") # The IDE version.
|
||||
set(IDE_VERSION_COMPAT "4.14.0") # The IDE Compatibility version.
|
||||
set(IDE_VERSION_DISPLAY "4.14.0") # The IDE display version.
|
||||
set(IDE_COPYRIGHT_YEAR "2020") # The IDE current copyright year.
|
||||
|
||||
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.
|
||||
|
@@ -33,7 +33,7 @@
|
||||
\page creator-editor-external.html
|
||||
\if defined(qtdesignstudio)
|
||||
\previouspage creator-qml-performance-monitor.html
|
||||
\nextpage studio-help.html
|
||||
\nextpage creator-telemetry.html
|
||||
\else
|
||||
\previouspage creator-keyboard-shortcuts.html
|
||||
\nextpage creator-task-lists.html
|
||||
|
@@ -24,9 +24,14 @@
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\previouspage creator-task-lists.html
|
||||
\page creator-telemetry.html
|
||||
\if defined(qtdesignstudio)
|
||||
\previouspage creator-editor-external.html
|
||||
\nextpage studio-help.html
|
||||
\else
|
||||
\previouspage creator-task-lists.html
|
||||
\nextpage creator-help-overview.html
|
||||
\endif
|
||||
|
||||
\title Managing Data Collection Settings
|
||||
|
||||
@@ -42,22 +47,28 @@
|
||||
|
||||
\section1 Principles of Data Collection
|
||||
|
||||
No personal data, such as names, IP addresses, MAC addresses, or project
|
||||
and path names are collected. However, QUuid objects are used to identify
|
||||
data records that belong to one user. The objects cannot be converted
|
||||
back to the actual values from which they were generated.
|
||||
|
||||
For more information about Qt privacy policy, select
|
||||
\l{https://www.qt.io/terms-conditions/#privacy}
|
||||
{Legal Notice and Privacy Policy}.
|
||||
|
||||
\section1 Collecting Usage Statistics
|
||||
|
||||
The Telemetry plugin uses the
|
||||
\l{https://api.kde.org/frameworks/kuserfeedback/html/index.html}
|
||||
{KUserFeedback} framework to collect the usage data. The library
|
||||
has been designed from the user data privacy point of view and
|
||||
\QC respects the same privacy rules.
|
||||
|
||||
No personal data, such as names, IP addresses, MAC addresses, or project
|
||||
and path names are collected. However, QUuid objects are used to identify
|
||||
data records that belong to one user. The objects cannot be converted
|
||||
back to the actual values from which they were generated.
|
||||
|
||||
The data is transmitted to the backend storage using an encrypted
|
||||
connection. The storage is located in the same Heroku backend as the
|
||||
Qt installer backend. Physically, data is stored in the Amazon cloud.
|
||||
|
||||
\section1 Specifying Telemetry Settings
|
||||
\section2 Specifying Telemetry Settings
|
||||
|
||||
To determine what data is transmitted to the backend storage:
|
||||
|
||||
@@ -67,12 +78,31 @@
|
||||
\image qtcreator-telemetry-settings.png
|
||||
\li In the \uicontrol {Telemetry mode} list, select the mode that
|
||||
determines what kind of data is collected.
|
||||
\li In the \uicontrol {Data sources} list, select entries to view
|
||||
\li In the \uicontrol {Data} list, select entries to view
|
||||
exactly what data is collected. Deselect check boxes for data
|
||||
that you do not want to transmit to the backend storage.
|
||||
\endlist
|
||||
|
||||
For more information about Qt privacy policy, select
|
||||
\l{https://www.qt.io/terms-conditions/#privacy}
|
||||
{Legal Notice and Privacy Policy}.
|
||||
\if defined(qtdesignstudio)
|
||||
\section1 Reporting Crashes
|
||||
|
||||
You can enable \QDS to report crashes automatically. \QDS uses Google
|
||||
Crashpad to collect crashes and report them to the Sentry backend storage
|
||||
for processing. The purpose of Crashpad is to capture application state in
|
||||
sufficient detail to allow developers to diagnose and, where possible, fix
|
||||
the issue causing the crash. Crashpad may capture arbitrary contents from
|
||||
the memory of a crashed process, including user sensitive information, URLs,
|
||||
and other content provided by the users. The collected reports are used for
|
||||
the sole purpose of fixing bugs. For more information on Crashpad, see the
|
||||
\l {https://chromium.googlesource.com/crashpad/crashpad/+/master/doc/overview_design.md}
|
||||
{documentation} by Google. For more information on processing and storing
|
||||
of the collected data, see \l {https://sentry.io/security/}
|
||||
{Security & Compliance} by Sentry.
|
||||
|
||||
To enable sending crash reports, select \uicontrol Tools > \uicontrol
|
||||
Options > \uicontrol Environment > \uicontrol System
|
||||
(\uicontrol {Qt Design Studio} > \uicontrol Preferences > \uicontrol
|
||||
Environment > \uicontrol System on \macos), and then select
|
||||
\uicontrol {Enable crash reporting}.
|
||||
\endif
|
||||
*/
|
@@ -44,9 +44,11 @@
|
||||
\row
|
||||
\li Anchors
|
||||
\li \l{Setting Anchors and Margins}
|
||||
\if defined(qtdesignstudio)
|
||||
\row
|
||||
\li Group
|
||||
\li \l Group
|
||||
\endif
|
||||
\row
|
||||
\li Position
|
||||
\li \l{Using Positioners}
|
||||
@@ -59,9 +61,11 @@
|
||||
\row
|
||||
\li Timeline
|
||||
\li \l{Creating Timelines}
|
||||
\if defined(qtdesignstudio)
|
||||
\row
|
||||
\li Event List
|
||||
\li \l{Simulating Events}
|
||||
\endif
|
||||
\row
|
||||
\li Edit Color
|
||||
\li \l{Editing Properties Inline}
|
||||
|
@@ -202,35 +202,6 @@
|
||||
}
|
||||
\endcode
|
||||
|
||||
|
||||
\li You can use the Qt \c foreach loop in non-time-critical code with a Qt
|
||||
container. It is a nice way to keep line noise down and to give the
|
||||
loop variable a proper name:
|
||||
|
||||
\code
|
||||
foreach (QWidget *widget, container)
|
||||
doSomething(widget);
|
||||
|
||||
-NOT-
|
||||
|
||||
Container::iterator end = container.end();
|
||||
for (Container::iterator it = container.begin(); it != end; ++it)
|
||||
doSomething(*it);
|
||||
\endcode
|
||||
|
||||
Make the loop variable const, if possible. This might prevent
|
||||
unnecessary detaching of shared data:
|
||||
|
||||
\code
|
||||
foreach (const QString &name, someListOfNames)
|
||||
doSomething(name);
|
||||
|
||||
- NOT -
|
||||
|
||||
foreach (QString name, someListOfNames)
|
||||
doSomething(name);
|
||||
\endcode
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Formatting
|
||||
|
@@ -473,7 +473,7 @@
|
||||
|
||||
\section2 Setting Up Documentation Builds
|
||||
|
||||
You can run \c qmake from an installed Qt to build documentation.
|
||||
You can configure documentation builds using CMake or qmake.
|
||||
|
||||
\note Since \QC version 4.12, only Qt 5.14.0 or later is supported
|
||||
for building documentation.
|
||||
@@ -500,67 +500,145 @@
|
||||
for publishing on the web
|
||||
\endlist
|
||||
|
||||
\note To have the correct fonts loaded for the online version, you must be
|
||||
running it on a web server.
|
||||
|
||||
\note If the styles look wrong to you when reading help files in \QC or \QA,
|
||||
you might be looking at them in the QTextBrowser instead of the Qt WebEngine
|
||||
browser. This happens if you do not have Qt WebEngine installed.
|
||||
you might be using the QTextBrowser as the help engine backend instead of
|
||||
litehtml. For more information, see
|
||||
\l {https://doc.qt.io/qtcreator/creator-help.html#selecting-the-help-viewer-backend}
|
||||
{Selecting the Help Viewer Backend}.
|
||||
|
||||
\section2 Documentation Build Commands
|
||||
To build documentation for the sources from the \c qtcreator master branch,
|
||||
use build scripts defined in the doc.pri file. You can build the docs
|
||||
using either the offline or online style. The offline style is used for
|
||||
generating HTML files included in help files (.qch), whereas the online
|
||||
style is used at \l{https://doc.qt.io/qtcreator/index.html}{doc.qt.io}.
|
||||
|
||||
To build documentation for the sources from the qtcreator master branch, use
|
||||
build scripts defined in the doc.pri file. To build the docs in the
|
||||
HTML format and to create help files (.qch), enter the following build
|
||||
commands from the project folder (after running qmake):
|
||||
\section3 Using CMake
|
||||
|
||||
\list
|
||||
\li \c {nmake docs} (on Windows)
|
||||
When using CMake, the docs are built in the \QC \e {build folder} or a
|
||||
separate doc build folder, not in the project folder.
|
||||
|
||||
\li \c {make docs} (on Linux and \macos)
|
||||
To get the correct product name and version when building \QDS Manual, you
|
||||
must run CMake with the branding option. The branding data is located in
|
||||
the \QDS (private) repository, \c tqtc-plugin-qtquickdesigner.
|
||||
|
||||
To build docs with CMake in a separate doc build folder:
|
||||
|
||||
\list 1
|
||||
\li Create a folder for the built docs and switch to it. For example,
|
||||
\c {C:\dev\qtc-doc-build}.
|
||||
\li In the doc build folder, enter the following command:
|
||||
\badcode
|
||||
cmake -DWITH_DOCS=ON "-DCMAKE_PREFIX_PATH=<path_to_qt>" <path_to_qtcreator_src>
|
||||
\endcode
|
||||
For example (all on one line):
|
||||
\badcode
|
||||
C:\dev\qtc-doc-build>cmake -DWITH_DOCS=ON
|
||||
"-DCMAKE_PREFIX_PATH=C:\Qt\5.15.1\msvc2019_64"
|
||||
C:\dev\qtc-super\qtcreator
|
||||
\endcode
|
||||
\li To also build Extending \QC Manual, add the following option:
|
||||
\c {-DBUILD_DEVELOPER_DOCS=ON}
|
||||
\li To also build the \QDS Manual, add the following option:
|
||||
\c {"-DCMAKE_MODULE_PATH=<absolute_path_to_qtquickdesignerrepo>/studiodata/branding/"}
|
||||
|
||||
For example:
|
||||
\badcode
|
||||
C:\dev\qtc-doc-build>cmake -DWITH_DOCS=ON -DBUILD_DEVELOPER_DOCS=ON
|
||||
"-DCMAKE_MODULE_PATH=C:\dev\tqtc-plugin-qtquickdesigner\studiodata\branding"
|
||||
"-DCMAKE_PREFIX_PATH=C:\Qt\5.15.1\msvc2019_64"
|
||||
C:\dev\qtc-super\qtcreator
|
||||
\endcode
|
||||
\li To build the docs using the online style, use the following option
|
||||
instead of \c {-DWITH_DOCS=ON}:
|
||||
\c {-DWITH_ONLINE_DOCS=ON}
|
||||
|
||||
For example:
|
||||
\badcode
|
||||
C:\dev\qtc-doc-build>cmake -DWITH_ONLINE_DOCS=ON
|
||||
-DBUILD_DEVELOPER_DOCS=ON
|
||||
"-DCMAKE_MODULE_PATH=C:\dev\tqtc-plugin-qtquickdesigner\studiodata\branding"
|
||||
"-DCMAKE_PREFIX_PATH=C:\Qt\5.15.1\msvc2019_64"
|
||||
C:\dev\qtc-super\qtcreator
|
||||
\endcode
|
||||
\note If you already ran CMake \c {-DWITH_DOCS=ON} in a folder and
|
||||
want to switch to only online docs in that folder, you need to turn
|
||||
the offline docs off again:
|
||||
\badcode
|
||||
cmake -DWITH_DOCS=OFF -DWITH_ONLINE_DOCS=ON
|
||||
\endcode
|
||||
\li Enter the following doc build command to build both HTML docs and
|
||||
the help files (.qch):
|
||||
\badcode
|
||||
cmake --build . --target docs
|
||||
\endcode
|
||||
\li Alternatively, to build only the HTML docs, enter:
|
||||
\badcode
|
||||
cmake --build . --target html_docs
|
||||
\endcode
|
||||
\endlist
|
||||
|
||||
The HTML documentation is generated in the following folders:
|
||||
\note You can enter \c cmake-gui to open the graphical CMake configuration
|
||||
tool, where you can select build options.
|
||||
|
||||
The HTML files for the documentation are generated in the following
|
||||
folders:
|
||||
|
||||
\list
|
||||
\li \c doc/html/qtcreator
|
||||
\li \c doc/html/qtcreatordev
|
||||
\li \c doc/html/qtcreator-dev
|
||||
\li \c doc/html/qtdesignstudio
|
||||
\li \c doc/html/qtcreator-online
|
||||
\li \c doc/html/qtcreator-dev-online
|
||||
\li \c doc/html/qtdesignstudio-online
|
||||
\endlist
|
||||
|
||||
The help files (\c {.qch}) are generated in the
|
||||
\c {share/doc/qtcreator} directory in the \QC build directory on Windows and
|
||||
Linux, and in the \c {bin/Qt Creator.app/Contents/Resources/app} directory
|
||||
The help files (\c {.qch}) are generated in the \c {share/doc/qtcreator}
|
||||
folder or in the \c {<application_name>.app/Contents/Resources/doc\} folder
|
||||
on \macos.
|
||||
|
||||
You can view the HTML files in a browser and the help files in
|
||||
the \QC \uicontrol Help mode. For more information about adding the help
|
||||
files to \QC, see
|
||||
the \QC \uicontrol Help mode. For more information about adding
|
||||
the help files to \QC, see
|
||||
\l{http://doc.qt.io/qtcreator/creator-help.html#adding-external-documentation}
|
||||
{Adding External Documentation}.
|
||||
|
||||
Besides \c docs, you have the following options for building a particular
|
||||
document in a particular format:
|
||||
\section3 Using qmake
|
||||
|
||||
\list
|
||||
\li \c html_docs_qtcreator - build \QC Manual in help format, but do not
|
||||
generate a help file
|
||||
To build offline documentation using qmake:
|
||||
|
||||
\li \c html_docs_qtcreator-dev - build Extending \QC Manual in help
|
||||
format, but do not generate a help file
|
||||
|
||||
\li \c qch_docs_qtcreator - build \QC Manual in help format and generate
|
||||
a help file (.qch)
|
||||
|
||||
\li \c qch_docs_qtcreator-dev - build Extending \QC Manual in help format
|
||||
and generate a help file (.qch)
|
||||
\list 1
|
||||
\li In the project folder, run \c qmake from an installed Qt.
|
||||
For example:
|
||||
\badcode
|
||||
C:\dev\qtc-super\qtcreator>..\..\..\Qt\5.15.1\msvc2019_64\bin\qmake.exe
|
||||
\endcode
|
||||
\li Enter the following doc build command:
|
||||
\list
|
||||
\li On Windows: \c {nmake docs}
|
||||
\li On Linux and \macos: \c {make docs}
|
||||
\endlist
|
||||
\endlist
|
||||
|
||||
\section3 Building the \QDS Manual
|
||||
To build online documentation using qmake:
|
||||
|
||||
To get the correct product name and version, you must run \c {qmake -r} on
|
||||
\c {qtcreator.pro} with the \c IDE_BRANDING_PRI option set to the absolute
|
||||
path of \c {ide_branding.pri} in the \QDS (private) repository.
|
||||
\list 1
|
||||
\li In the project folder, run \c qmake from an installed Qt with the
|
||||
online configuration option. For example:
|
||||
\badcode
|
||||
C:\dev\qtc-super\qtcreator>..\..\..\Qt\5.15.1\msvc2019_64\bin\qmake.exe
|
||||
"CONFIG+=build_online_docs"
|
||||
\endcode
|
||||
\li Enter the following doc build command:
|
||||
\list
|
||||
\li On Windows: \c {nmake html_docs}
|
||||
\li On Linux and \macos: \c {make html_docs}
|
||||
\endlist
|
||||
\endlist
|
||||
|
||||
To get the correct product name and version when building the \QDS
|
||||
Manual, you must run \c {qmake -r} on \c {qtcreator.pro} with the
|
||||
\c IDE_BRANDING_PRI option set to the absolute path of
|
||||
\c {ide_branding.pri} in the \QDS (private) repository.
|
||||
|
||||
For example, on Windows enter (all on one line):
|
||||
|
||||
@@ -570,16 +648,71 @@
|
||||
IDE_BRANDING_PRI=C:\dev\tqtc-plugin-qtquickdesigner\studiodata\branding\ide_branding.pri
|
||||
\endcode
|
||||
|
||||
To build the \QDS Manual:
|
||||
To use the offline style to build the \QDS help with qmake:
|
||||
|
||||
\list 1
|
||||
\li Run \c qmake from Qt 5.14.0, or later with the path to the branding
|
||||
information as an option (all on one line):
|
||||
|
||||
\c {<relative_path_to>/qmake.exe
|
||||
qtcreator.pro -r
|
||||
IDE_BRANDING_PRI=<absolute_path_to>ide_branding.pri}
|
||||
\li In the \c {doc/qtdesignstudio} folder, run \c qmake from Qt 5.14.0,
|
||||
or later with the path to the branding information as an option
|
||||
(all on one line):
|
||||
\badcode
|
||||
<relative_path_to>/qmake.exe qtcreator.pro -r
|
||||
IDE_BRANDING_PRI=<absolute_path_to>/ide_branding.pri
|
||||
\endcode
|
||||
\li Run \c {make docs} on Linux and macOS or \c {nmake docs}
|
||||
on Windows.
|
||||
\endlist
|
||||
|
||||
To use the online style to build the \QDS Manual with qmake:
|
||||
|
||||
\list 1
|
||||
\li In the \c {doc/qtdesignstudio} folder, run \c qmake from Qt 5.14.0,
|
||||
or later with the path to the branding information as an option
|
||||
(all on one line):
|
||||
\badcode
|
||||
<relative_path_to>/qmake.exe qtcreator.pro -r
|
||||
IDE_BRANDING_PRI=<absolute_path_to>/ide_branding.pri
|
||||
\endcode
|
||||
\li Run \c {make html_docs} on Linux and macOS or \c {nmake html_docs}
|
||||
on Windows.
|
||||
\endlist
|
||||
|
||||
The HTML files for the offline documentation are generated in the following
|
||||
folders:
|
||||
|
||||
\list
|
||||
\li \c doc/html/qtcreator
|
||||
\li \c doc/html/qtcreator-dev
|
||||
\li \c doc/qtdesignstudio/doc/html/qtdesignstudio
|
||||
\endlist
|
||||
|
||||
The help files (\c {.qch}) are generated in the
|
||||
\c {share/doc/qtcreator} directory in the \QC build directory on Windows and
|
||||
Linux, and in the \c {bin/Qt Creator.app/Contents/Resources/app} directory
|
||||
on \macos.
|
||||
|
||||
The HTML files for the online documentation are generated in the following
|
||||
folders:
|
||||
|
||||
\list
|
||||
\li \c doc/html/qtcreator-online
|
||||
\li \c doc/html/qtcreator-dev-online
|
||||
\li \c doc/qtdesignstudio/doc/html/qtdesignstudio-online
|
||||
\endlist
|
||||
|
||||
\section2 Additional Build Commands
|
||||
|
||||
Besides \c docs and \c html_docs, you can use the following build targets:
|
||||
|
||||
\list
|
||||
\li \c html_docs_<doc_config_file_name> - build the document (qtcreator/
|
||||
qtcreator-dev/qtdesignstudio) in help format, but do not generate a
|
||||
help file (.qch)
|
||||
|
||||
\li \c html_docs_<doc_config_file_name>-online - build the document
|
||||
(qtcreator/qtcreator-dev/qtdesignstudio) in online format
|
||||
|
||||
\li \c qch_docs_<doc_config_file_name> - build the document (qtcreator/
|
||||
qtcreator-dev/qtdesignstudio) in help format and generate a
|
||||
help file
|
||||
\endlist
|
||||
*/
|
||||
|
@@ -87,5 +87,11 @@
|
||||
editor for your system, and the \c sort tool are preconfigured for
|
||||
use. You can change their default configurations and configure new
|
||||
tools.
|
||||
\li \l{Managing Data Collection Settings}
|
||||
|
||||
You can enable \QC to report crashes automatically. If you agreed to
|
||||
pseudonymous user statistics collection during the \QC installation,
|
||||
you can turn it on and determine what type of data is collected and
|
||||
transmitted to the backend storage.
|
||||
\endlist
|
||||
*/
|
||||
|
@@ -25,7 +25,7 @@
|
||||
|
||||
/*!
|
||||
\page studio-help.html
|
||||
\previouspage creator-editor-external.html
|
||||
\previouspage creator-telemetry.html
|
||||
\nextpage {Examples and Tutorials}
|
||||
|
||||
\title Help
|
||||
|
@@ -38,9 +38,15 @@
|
||||
\QDS is available in binary packages for the following operating systems:
|
||||
|
||||
\list
|
||||
\li \macOS 10.13 and 10.14.x
|
||||
\li Ubuntu Linux 18.04
|
||||
\li Windows 10
|
||||
\li \macOS 10.15
|
||||
\li Linux:
|
||||
\list
|
||||
\li CentOS 8.1
|
||||
\li openSUSE Leap 15.1
|
||||
\li SUSE Linux Enterprise Server 15 (SLES 15)
|
||||
\li Ubuntu 20.04
|
||||
\endlist
|
||||
\li Windows 10, version 2004
|
||||
\endlist
|
||||
|
||||
\note For a good user experience on Windows 10, we recommend the following
|
||||
|
@@ -180,6 +180,7 @@
|
||||
\li \l{Profiling QML Applications}
|
||||
\endlist
|
||||
\li \l{Using External Tools}
|
||||
\li \l{Managing Data Collection Settings}
|
||||
\endlist
|
||||
\li \l{Help}
|
||||
\list
|
||||
|
@@ -4,16 +4,16 @@ import qbs.FileInfo
|
||||
import "qtc.js" as HelperFunctions
|
||||
|
||||
Module {
|
||||
property string qtcreator_display_version: '4.14.0-rc1'
|
||||
property string qtcreator_display_version: '4.14.0'
|
||||
property string ide_version_major: '4'
|
||||
property string ide_version_minor: '13'
|
||||
property string ide_version_release: '84'
|
||||
property string ide_version_minor: '14'
|
||||
property string ide_version_release: '0'
|
||||
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.'
|
||||
+ ide_version_release
|
||||
|
||||
property string ide_compat_version_major: '4'
|
||||
property string ide_compat_version_minor: '13'
|
||||
property string ide_compat_version_release: '84'
|
||||
property string ide_compat_version_minor: '14'
|
||||
property string ide_compat_version_release: '0'
|
||||
property string qtcreator_compat_version: ide_compat_version_major + '.'
|
||||
+ ide_compat_version_minor + '.' + ide_compat_version_release
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
QTCREATOR_VERSION = 4.13.84
|
||||
QTCREATOR_COMPAT_VERSION = 4.13.84
|
||||
QTCREATOR_DISPLAY_VERSION = 4.14.0-rc1
|
||||
QTCREATOR_VERSION = 4.14.0
|
||||
QTCREATOR_COMPAT_VERSION = 4.14.0
|
||||
QTCREATOR_DISPLAY_VERSION = 4.14.0
|
||||
QTCREATOR_COPYRIGHT_YEAR = 2020
|
||||
|
||||
IDE_DISPLAY_NAME = Qt Creator
|
||||
|
@@ -259,12 +259,12 @@ class Dumper(DumperBase):
|
||||
def qtCoreModuleName(self):
|
||||
modules = cdbext.listOfModules()
|
||||
# first check for an exact module name match
|
||||
for coreName in ['Qt5Cored', 'Qt5Core', 'QtCored4', 'QtCore4']:
|
||||
for coreName in ['Qt6Core', 'Qt6Cored', 'Qt5Cored', 'Qt5Core', 'QtCored4', 'QtCore4']:
|
||||
if coreName in modules:
|
||||
self.qtCoreModuleName = lambda: coreName
|
||||
return coreName
|
||||
# maybe we have a libinfix build.
|
||||
for pattern in ['Qt5Core.*', 'QtCore.*']:
|
||||
for pattern in ['Qt6Core.*', 'Qt5Core.*', 'QtCore.*']:
|
||||
matches = [module for module in modules if re.match(pattern, module)]
|
||||
if matches:
|
||||
coreName = matches[0]
|
||||
@@ -274,11 +274,11 @@ class Dumper(DumperBase):
|
||||
|
||||
def qtDeclarativeModuleName(self):
|
||||
modules = cdbext.listOfModules()
|
||||
for declarativeModuleName in ['Qt5Qmld', 'Qt5Qml']:
|
||||
for declarativeModuleName in ['Qt6Qmld', 'Qt6Qml', 'Qt5Qmld', 'Qt5Qml']:
|
||||
if declarativeModuleName in modules:
|
||||
self.qtDeclarativeModuleName = lambda: declarativeModuleName
|
||||
return declarativeModuleName
|
||||
matches = [module for module in modules if re.match('Qt5Qml.*', module)]
|
||||
matches = [module for module in modules if re.match('Qt[56]Qml.*', module)]
|
||||
if matches:
|
||||
declarativeModuleName = matches[0]
|
||||
self.qtDeclarativeModuleName = lambda: declarativeModuleName
|
||||
|
@@ -1068,7 +1068,7 @@ class DumperBase():
|
||||
if isinstance(typish, ReportItem):
|
||||
self.currentType.value = typish.value
|
||||
elif isinstance(typish, str):
|
||||
self.currentType.value = typish
|
||||
self.currentType.value = typish.replace('@', self.qtNamespace())
|
||||
else:
|
||||
self.currentType.value = typish.name
|
||||
self.currentType.priority += 1
|
||||
@@ -3852,6 +3852,7 @@ class DumperBase():
|
||||
tdata = self.TypeData(self)
|
||||
tdata.name = typish
|
||||
tdata.typeId = typish
|
||||
tdata.templateArguments = self.listTemplateParameters(typish)
|
||||
|
||||
if size is not None:
|
||||
tdata.lbitsize = 8 * size
|
||||
|
@@ -1284,7 +1284,7 @@ def qdumpHelper_Qt6_QMap(d, value, keyType, valueType):
|
||||
return
|
||||
m = value['d']['d']['m']
|
||||
d.putItem(m)
|
||||
d.putBetterType('QMap<%s, %s>' % (keyType.name, valueType.name))
|
||||
d.putBetterType('@QMap<%s, %s>' % (keyType.name, valueType.name))
|
||||
|
||||
|
||||
def qform__QMap():
|
||||
@@ -1315,7 +1315,7 @@ def qdumpHelper_Qt6_QMultiMap(d, value, keyType, valueType):
|
||||
return
|
||||
m = value['d']['d']['m']
|
||||
d.putItem(m)
|
||||
d.putBetterType('QMultiMap<%s, %s>' % (keyType.name, valueType.name))
|
||||
d.putBetterType('@QMultiMap<%s, %s>' % (keyType.name, valueType.name))
|
||||
|
||||
def qdump__QMultiMap(d, value):
|
||||
if d.qtVersion() >= 0x60000:
|
||||
@@ -1330,6 +1330,7 @@ def qform__QVariantMap():
|
||||
|
||||
def qdump__QVariantMap(d, value):
|
||||
qdumpHelper_QMap(d, value, d.createType('@QString'), d.createType('@QVariant'))
|
||||
d.putBetterType('@QVariantMap')
|
||||
|
||||
|
||||
def qdump__QMetaMethod(d, value):
|
||||
@@ -1494,12 +1495,47 @@ def qdump__QScopedPointer(d, value):
|
||||
d.putValue(d.currentValue.value, d.currentValue.encoding)
|
||||
typeName = value.type.name
|
||||
if value.type[1].name == d.qtNamespace() + 'QScopedPointerDeleter<%s>' % value.type[0].name:
|
||||
typeName = d.qtNamespace() + 'QScopedPointer<%s>' % value.type[0].name
|
||||
typeName = '@QScopedPointer<%s>' % value.type[0].name
|
||||
d.putBetterType(typeName)
|
||||
|
||||
|
||||
def qdump__QSet(d, value):
|
||||
if d.qtVersion() >= 0x060000:
|
||||
qdumpHelper_QSet6(d, value)
|
||||
else:
|
||||
qdumpHelper_QSet45(d, value)
|
||||
|
||||
def qdumpHelper_QSet6(d, value):
|
||||
dptr = d.extractPointer(value)
|
||||
if dptr == 0:
|
||||
d.putItemCount(0)
|
||||
return
|
||||
|
||||
ref, _, size, buckets, seed, spans = d.split('i@qqqp', dptr)
|
||||
|
||||
d.check(0 <= size and size <= 100 * 1000 * 1000)
|
||||
d.check(-1 <= ref and ref < 100000)
|
||||
d.putItemCount(size)
|
||||
|
||||
if d.isExpanded():
|
||||
value_type = value.type[0]
|
||||
value_size = value_type.size()
|
||||
with Children(d, size):
|
||||
span_size = 128 + 2 * d.ptrSize() # Including tail padding.
|
||||
nspans = int((buckets + 127) / 128)
|
||||
count = 0
|
||||
for b in range(nspans):
|
||||
span = spans + b * span_size
|
||||
offsets, entries, allocated, next_free = d.split('128spbb', span)
|
||||
for i in range(128):
|
||||
offset = offsets[i]
|
||||
if offset != 255: # Entry is used
|
||||
entry = entries + offset * value_size
|
||||
d.putSubItem(count, d.createValue(entry, value_type))
|
||||
count += 1
|
||||
|
||||
|
||||
def qdumpHelper_QSet45(d, value):
|
||||
def hashDataFirstNode():
|
||||
b = buckets
|
||||
n = numBuckets
|
||||
@@ -1827,43 +1863,43 @@ def qdump__QUuid(d, value):
|
||||
|
||||
def qdumpHelper_QVariant_0(d, value):
|
||||
# QVariant::Invalid
|
||||
d.putBetterType('%sQVariant (invalid)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (invalid)')
|
||||
d.putValue('(invalid)')
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_1(d, value):
|
||||
# QVariant::Bool
|
||||
d.putBetterType('%sQVariant (bool)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (bool)')
|
||||
d.putValue('true' if value.to('b') else 'false')
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_2(d, value):
|
||||
# QVariant::Int
|
||||
d.putBetterType('%sQVariant (int)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (int)')
|
||||
d.putValue(value.to('i'))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_3(d, value):
|
||||
# uint
|
||||
d.putBetterType('%sQVariant (uint)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (uint)')
|
||||
d.putValue(value.to('I'))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_4(d, value):
|
||||
# qlonglong
|
||||
d.putBetterType('%sQVariant (qlonglong)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (qlonglong)')
|
||||
d.putValue(value.to('q'))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_5(d, value):
|
||||
# qulonglong
|
||||
d.putBetterType('%sQVariant (qulonglong)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (qulonglong)')
|
||||
d.putValue(value.to('Q'))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_6(d, value):
|
||||
# QVariant::Double
|
||||
d.putBetterType('%sQVariant (double)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (double)')
|
||||
d.putValue(value.to('d'))
|
||||
|
||||
|
||||
@@ -1906,13 +1942,13 @@ qdumpHelper_QVariants_B = [
|
||||
|
||||
def qdumpHelper_QVariant_31(d, value):
|
||||
# QVariant::VoidStar
|
||||
d.putBetterType('%sQVariant (void *)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (void *)')
|
||||
d.putValue('0x%x' % d.extractPointer(value))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_32(d, value):
|
||||
# QVariant::Long
|
||||
d.putBetterType('%sQVariant (long)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (long)')
|
||||
if d.ptrSize() == 4:
|
||||
d.putValue('%s' % d.extractInt(value))
|
||||
else:
|
||||
@@ -1921,19 +1957,19 @@ def qdumpHelper_QVariant_32(d, value):
|
||||
|
||||
def qdumpHelper_QVariant_33(d, value):
|
||||
# QVariant::Short
|
||||
d.putBetterType('%sQVariant (short)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (short)')
|
||||
d.putValue('%s' % d.extractShort(value))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_34(d, value):
|
||||
# QVariant::Char
|
||||
d.putBetterType('%sQVariant (char)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (char)')
|
||||
d.putValue('%s' % d.extractByte(value))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_35(d, value):
|
||||
# QVariant::ULong
|
||||
d.putBetterType('%sQVariant (unsigned long)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (unsigned long)')
|
||||
if d.ptrSize() == 4:
|
||||
d.putValue('%s' % d.extractUInt(value))
|
||||
else:
|
||||
@@ -1942,19 +1978,19 @@ def qdumpHelper_QVariant_35(d, value):
|
||||
|
||||
def qdumpHelper_QVariant_36(d, value):
|
||||
# QVariant::UShort
|
||||
d.putBetterType('%sQVariant (unsigned short)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (unsigned short)')
|
||||
d.putValue('%s' % d.extractUShort(value))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_37(d, value):
|
||||
# QVariant::UChar
|
||||
d.putBetterType('%sQVariant (unsigned char)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (unsigned char)')
|
||||
d.putValue('%s' % d.extractByte(value))
|
||||
|
||||
|
||||
def qdumpHelper_QVariant_38(d, value):
|
||||
# QVariant::Float
|
||||
d.putBetterType('%sQVariant (float)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (float)')
|
||||
d.putValue(value.to('f'))
|
||||
|
||||
|
||||
@@ -2039,7 +2075,7 @@ def qdumpHelper__QVariant6(d, value):
|
||||
else:
|
||||
d.putItem(d.createValue(data, typeName))
|
||||
|
||||
d.putBetterType('%sQVariant (%s)' % (d.qtNamespace(), typeName))
|
||||
d.putBetterType('@QVariant (%s)' % typeName)
|
||||
|
||||
|
||||
def qdumpHelper__QVariant45(d, value):
|
||||
@@ -2060,7 +2096,7 @@ def qdumpHelper__QVariant45(d, value):
|
||||
# Extended Core type (Qt 4)
|
||||
if variantType >= 128 and variantType <= 135 and d.qtVersion() < 0x050000:
|
||||
if variantType == 128:
|
||||
d.putBetterType('%sQVariant (void *)' % d.qtNamespace())
|
||||
d.putBetterType('@QVariant (void *)')
|
||||
d.putValue('0x%x' % value.extractPointer())
|
||||
else:
|
||||
if variantType == 135: # Float
|
||||
@@ -2101,7 +2137,7 @@ def qdumpHelper__QVariant45(d, value):
|
||||
|
||||
d.putEmptyValue(-99)
|
||||
d.putItem(val)
|
||||
d.putBetterType('%sQVariant (%s)' % (d.qtNamespace(), innert))
|
||||
d.putBetterType('@QVariant (%s)' % innert)
|
||||
|
||||
return innert
|
||||
|
||||
@@ -2245,8 +2281,7 @@ def qdump__QXmlAttributes__Attribute(d, value):
|
||||
def qdump__QXmlAttributes(d, value):
|
||||
vptr, atts = value.split('p{@QList<@QXmlAttributes::Attribute>}')
|
||||
_, att_size, _ = d.describeStruct('{@QString}' * 4)
|
||||
innerType = d.createType(d.qtNamespace() + 'QXmlAttributes::Attribute',
|
||||
att_size)
|
||||
innerType = d.createType('@QXmlAttributes::Attribute', att_size)
|
||||
qdumpHelper_QList(d, atts, innerType)
|
||||
|
||||
|
||||
@@ -2385,21 +2420,20 @@ def qdump__QV4__PropertyHash(d, value):
|
||||
data = value.extractPointer()
|
||||
(ref, alloc, size, numBits, entries) = d.split('iiiip', data)
|
||||
n = 0
|
||||
innerType = d.qtNamespace() + 'QV4::Identifier'
|
||||
with Children(d):
|
||||
for i in range(alloc):
|
||||
(identifier, index) = d.split('pI', entries + i * 2 * d.ptrSize())
|
||||
if identifier != 0:
|
||||
n += 1
|
||||
with SubItem(d):
|
||||
d.putItem(d, d.createValue(identifier, innerType))
|
||||
d.putItem(d, d.createValue(identifier, '@QV4::Identifier'))
|
||||
d.put('keysuffix', ' %d' % index)
|
||||
d.putItemCount(n)
|
||||
d.putPlainChildren(value)
|
||||
|
||||
|
||||
def qdump__QV4__InternalClass__Transition(d, value):
|
||||
identifier = d.createValue(value.extractPointer(), d.qtNamespace() + 'QV4::Identifier')
|
||||
identifier = d.createValue(value.extractPointer(), '@QV4::Identifier')
|
||||
d.putStringValue(identifier)
|
||||
d.putPlainChildren(value)
|
||||
|
||||
@@ -2424,14 +2458,13 @@ def qdump__QV4__SharedInternalClassData(d, value):
|
||||
def qdump__QV4__IdentifierTable(d, value):
|
||||
(engine, alloc, size, numBits, pad, entries) = value.split('piiiip')
|
||||
n = 0
|
||||
innerType = d.qtNamespace() + 'QV4::Heap::String'
|
||||
with Children(d):
|
||||
for i in range(alloc):
|
||||
identifierPtr = d.extractPointer(entries + i * d.ptrSize())
|
||||
if identifierPtr != 0:
|
||||
n += 1
|
||||
with SubItem(d, None):
|
||||
d.putItem(d.createValue(identifierPtr, innerType))
|
||||
d.putItem(d.createValue(identifierPtr, '@QV4::Heap::String'))
|
||||
d.putItemCount(n)
|
||||
d.putPlainChildren(value)
|
||||
|
||||
@@ -2533,20 +2566,20 @@ def qdump_32__QV4__Value(d, value):
|
||||
val = v & 0xffffffff
|
||||
if (tag & 0x7fff2000) == 0x7fff2000: # Int
|
||||
d.putValue(val)
|
||||
d.putBetterType('%sQV4::Value (int32)' % ns)
|
||||
d.putBetterType('@QV4::Value (int32)')
|
||||
elif (tag & 0x7fff4000) == 0x7fff4000: # Bool
|
||||
d.putValue(val)
|
||||
d.putBetterType('%sQV4::Value (bool)' % ns)
|
||||
d.putBetterType('@QV4::Value (bool)')
|
||||
elif (tag & 0x7fff0000) == 0x7fff0000: # Null
|
||||
d.putValue(val)
|
||||
d.putBetterType('%sQV4::Value (null)' % ns)
|
||||
d.putBetterType('@QV4::Value (null)')
|
||||
elif (tag & 0x7ffa0000) != 0x7ffa0000: # Double
|
||||
d.putValue(value.split('d')[0])
|
||||
d.putBetterType('%sQV4::Value (double)' % ns)
|
||||
d.putBetterType('@QV4::Value (double)')
|
||||
elif tag == 0x7ffa0000:
|
||||
if val == 0:
|
||||
d.putValue('(undefined)')
|
||||
d.putBetterType('%sQV4::Value (undefined)' % ns)
|
||||
d.putBetterType('@QV4::Value (undefined)')
|
||||
else:
|
||||
managed = d.createValue(val, ns + 'QV4::Heap::Base')
|
||||
qdump__QV4__Heap__Base(d, managed)
|
||||
@@ -2625,45 +2658,45 @@ def qdump_64__QV4__Value(d, value):
|
||||
vtable = v & QV4_PointerMask
|
||||
ns = d.qtNamespace()
|
||||
if (v >> QV4_IsNumber_Shift) == 1:
|
||||
d.putBetterType('%sQV4::Value (int32)' % ns)
|
||||
d.putBetterType('@QV4::Value (int32)')
|
||||
vv = v & 0xffffffff
|
||||
vv = vv if vv < 0x80000000 else -(0x100000000 - vv)
|
||||
d.putBetterType('%sQV4::Value (int32)' % ns)
|
||||
d.putBetterType('@QV4::Value (int32)')
|
||||
d.putValue('%d' % vv)
|
||||
elif (v >> QV4_IsDouble_Shift):
|
||||
d.putBetterType('%sQV4::Value (double)' % ns)
|
||||
d.putBetterType('@QV4::Value (double)')
|
||||
d.putValue('%0.16x' % (v ^ QV4_NaNEncodeMask), 'float:8')
|
||||
elif tag == QV4_ValueType_Undefined_Type and not new:
|
||||
d.putBetterType('%sQV4::Value (undefined)' % ns)
|
||||
d.putBetterType('@QV4::Value (undefined)')
|
||||
d.putValue('(undefined)')
|
||||
elif tag == QV4_ValueTypeInternal_Null_Type_Internal:
|
||||
d.putBetterType('%sQV4::Value (null?)' % ns)
|
||||
d.putBetterType('@QV4::Value (null?)')
|
||||
d.putValue('(null?)')
|
||||
elif v == 0:
|
||||
if new:
|
||||
d.putBetterType('%sQV4::Value (undefined)' % ns)
|
||||
d.putBetterType('@QV4::Value (undefined)')
|
||||
d.putValue('(undefined)')
|
||||
else:
|
||||
d.putBetterType('%sQV4::Value (null)' % ns)
|
||||
d.putBetterType('@QV4::Value (null)')
|
||||
d.putValue('(null)')
|
||||
#elif ((v >> QV4_IsManaged_Shift) & ~1) == 1:
|
||||
# d.putBetterType('%sQV4::Value (null/undef)' % ns)
|
||||
# d.putBetterType('@QV4::Value (null/undef)')
|
||||
# d.putValue('(null/undef)')
|
||||
#elif v & QV4_IsNullOrBooleanMask:
|
||||
# d.putBetterType('%sQV4::Value (null/bool)' % ns)
|
||||
# d.putBetterType('@QV4::Value (null/bool)')
|
||||
# d.putValue('(null/bool)')
|
||||
# d.putValue(v & 1)
|
||||
else:
|
||||
(parentv, flags, pad, className) = d.split('pIIp', vtable)
|
||||
#vtable = value['m']['vtable']
|
||||
if flags & 2: # isString'
|
||||
d.putBetterType('%sQV4::Value (string)' % ns)
|
||||
d.putBetterType('@QV4::Value (string)')
|
||||
qdump__QV4__Heap__String(d, d.createValue(v, ns + 'QV4::Heap::String'))
|
||||
#d.putStringValue(d.extractPointer(value) + 2 * d.ptrSize())
|
||||
#d.putValue('ptr: 0x%x' % d.extractPointer(value))
|
||||
return
|
||||
elif flags & 4: # isObject
|
||||
d.putBetterType('%sQV4::Value (object)' % ns)
|
||||
d.putBetterType('@QV4::Value (object)')
|
||||
#QV4_putObjectValue(d, d.extractPointer(value) + 2 * d.ptrSize())
|
||||
arrayVTable = d.symbolAddress(ns + 'QV4::ArrayObject::static_vtbl')
|
||||
#DumperBase.warn('ARRAY VTABLE: 0x%x' % arrayVTable)
|
||||
@@ -2671,10 +2704,10 @@ def qdump_64__QV4__Value(d, value):
|
||||
d.putItem(d.createValue(d.extractPointer(value) + 2 * d.ptrSize(), ns + 'QV4::Object'))
|
||||
return
|
||||
elif flags & 8: # isFunction
|
||||
d.putBetterType('%sQV4::Value (function)' % ns)
|
||||
d.putBetterType('@QV4::Value (function)')
|
||||
d.putEmptyValue()
|
||||
else:
|
||||
d.putBetterType('%sQV4::Value (unknown)' % ns)
|
||||
d.putBetterType('@QV4::Value (unknown)')
|
||||
#d.putValue('[0x%x]' % v)
|
||||
d.putValue('[0x%x : flag 0x%x : tag 0x%x]' % (v, flags, tag))
|
||||
if d.isExpanded():
|
||||
@@ -2911,7 +2944,7 @@ def qdump__QScriptValue(d, value):
|
||||
#d.putSubItem('variant', variant)
|
||||
t = qdump__QVariant(d, variant)
|
||||
# Override the 'QVariant (foo)' output
|
||||
d.putBetterType('%sQScriptValue (%s)' % (ns, t))
|
||||
d.putBetterType('@QScriptValue (%s)' % t)
|
||||
if t != 'JSCoreValue':
|
||||
return
|
||||
except:
|
||||
|
@@ -220,7 +220,7 @@ RowLayout {
|
||||
iconColor: urlChooser.textColor
|
||||
onClicked: {
|
||||
fileModel.openFileDialog()
|
||||
if (fileModel.path !== "")
|
||||
if (fileModel.fileName !== "")
|
||||
urlChooser.backendValue.value = fileModel.fileName
|
||||
}
|
||||
}
|
||||
|
@@ -115,8 +115,9 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
++row;
|
||||
|
||||
auto qmlDebugAspect = bc->aspect<QtSupport::QmlDebuggingAspect>();
|
||||
connect(qmlDebugAspect, &QtSupport::QmlDebuggingAspect::changed,
|
||||
this, [this]() { handleQmlDebugCxxFlags(); });
|
||||
connect(qmlDebugAspect, &QtSupport::QmlDebuggingAspect::changed, this, [this]() {
|
||||
updateButtonState();
|
||||
});
|
||||
auto widget = new QWidget;
|
||||
LayoutBuilder builder(widget);
|
||||
qmlDebugAspect->addToLayout(builder);
|
||||
@@ -259,7 +260,6 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
m_configView->setEnabled(true);
|
||||
stretcher->stretch();
|
||||
updateButtonState();
|
||||
handleQmlDebugCxxFlags();
|
||||
m_showProgressTimer.stop();
|
||||
m_progressIndicator->hide();
|
||||
});
|
||||
@@ -360,43 +360,44 @@ void CMakeBuildSettingsWidget::setWarning(const QString &message)
|
||||
void CMakeBuildSettingsWidget::updateButtonState()
|
||||
{
|
||||
const bool isParsing = m_buildConfiguration->buildSystem()->isParsing();
|
||||
const bool hasChanges = m_configModel->hasChanges();
|
||||
m_resetButton->setEnabled(hasChanges && !isParsing);
|
||||
m_reconfigureButton->setEnabled((hasChanges || m_configModel->hasCMakeChanges()) && !isParsing);
|
||||
|
||||
// Update extra data in buildconfiguration
|
||||
const QList<ConfigModel::DataItem> changes = m_configModel->configurationForCMake();
|
||||
|
||||
const CMakeConfig configChanges = Utils::transform(changes, [](const ConfigModel::DataItem &i) {
|
||||
CMakeConfigItem ni;
|
||||
ni.key = i.key.toUtf8();
|
||||
ni.value = i.value.toUtf8();
|
||||
ni.documentation = i.description.toUtf8();
|
||||
ni.isAdvanced = i.isAdvanced;
|
||||
ni.isUnset = i.isUnset;
|
||||
ni.inCMakeCache = i.inCMakeCache;
|
||||
ni.values = i.values;
|
||||
switch (i.type) {
|
||||
case CMakeProjectManager::ConfigModel::DataItem::BOOLEAN:
|
||||
ni.type = CMakeConfigItem::BOOL;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::FILE:
|
||||
ni.type = CMakeConfigItem::FILEPATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::DIRECTORY:
|
||||
ni.type = CMakeConfigItem::PATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::STRING:
|
||||
ni.type = CMakeConfigItem::STRING;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::UNKNOWN:
|
||||
default:
|
||||
ni.type = CMakeConfigItem::INTERNAL;
|
||||
break;
|
||||
}
|
||||
return ni;
|
||||
});
|
||||
const CMakeConfig configChanges
|
||||
= getQmlDebugCxxFlags() + Utils::transform(changes, [](const ConfigModel::DataItem &i) {
|
||||
CMakeConfigItem ni;
|
||||
ni.key = i.key.toUtf8();
|
||||
ni.value = i.value.toUtf8();
|
||||
ni.documentation = i.description.toUtf8();
|
||||
ni.isAdvanced = i.isAdvanced;
|
||||
ni.isUnset = i.isUnset;
|
||||
ni.inCMakeCache = i.inCMakeCache;
|
||||
ni.values = i.values;
|
||||
switch (i.type) {
|
||||
case CMakeProjectManager::ConfigModel::DataItem::BOOLEAN:
|
||||
ni.type = CMakeConfigItem::BOOL;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::FILE:
|
||||
ni.type = CMakeConfigItem::FILEPATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::DIRECTORY:
|
||||
ni.type = CMakeConfigItem::PATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::STRING:
|
||||
ni.type = CMakeConfigItem::STRING;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::UNKNOWN:
|
||||
default:
|
||||
ni.type = CMakeConfigItem::INTERNAL;
|
||||
break;
|
||||
}
|
||||
return ni;
|
||||
});
|
||||
|
||||
m_resetButton->setEnabled(m_configModel->hasChanges() && !isParsing);
|
||||
m_reconfigureButton->setEnabled((!configChanges.isEmpty() || m_configModel->hasCMakeChanges())
|
||||
&& !isParsing);
|
||||
m_buildConfiguration->setExtraCMakeArguments(
|
||||
Utils::transform(configChanges, [](const CMakeConfigItem &i) { return i.toArgument(); }));
|
||||
}
|
||||
@@ -426,10 +427,12 @@ void CMakeBuildSettingsWidget::updateFromKit()
|
||||
m_configModel->setConfigurationFromKit(configHash);
|
||||
}
|
||||
|
||||
void CMakeBuildSettingsWidget::handleQmlDebugCxxFlags()
|
||||
CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags()
|
||||
{
|
||||
bool changed = false;
|
||||
const auto aspect = m_buildConfiguration->aspect<QtSupport::QmlDebuggingAspect>();
|
||||
const TriState qmlDebuggingState = aspect->setting();
|
||||
if (qmlDebuggingState == TriState::Default) // don't touch anything
|
||||
return {};
|
||||
const bool enable = aspect->setting() == TriState::Enabled;
|
||||
|
||||
const CMakeConfig configList = m_buildConfiguration->configurationFromCMake();
|
||||
@@ -446,25 +449,19 @@ void CMakeBuildSettingsWidget::handleQmlDebugCxxFlags()
|
||||
CMakeConfigItem it(item);
|
||||
if (enable) {
|
||||
if (!it.value.contains(qmlDebug)) {
|
||||
it.value = it.value.append(' ').append(qmlDebug);
|
||||
changed = true;
|
||||
it.value = it.value.append(' ').append(qmlDebug).trimmed();
|
||||
changedConfig.append(it);
|
||||
}
|
||||
} else {
|
||||
int index = it.value.indexOf(qmlDebug);
|
||||
if (index != -1) {
|
||||
it.value.remove(index, qmlDebug.length());
|
||||
changed = true;
|
||||
it.value = it.value.trimmed();
|
||||
changedConfig.append(it);
|
||||
}
|
||||
}
|
||||
it.value = it.value.trimmed();
|
||||
changedConfig.append(it);
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
m_buildConfiguration->setExtraCMakeArguments(
|
||||
Utils::transform(changedConfig,
|
||||
[](const CMakeConfigItem &i) { return i.toArgument(); }));
|
||||
}
|
||||
return changedConfig;
|
||||
}
|
||||
|
||||
void CMakeBuildSettingsWidget::updateSelection()
|
||||
|
@@ -25,6 +25,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cmakeconfigitem.h"
|
||||
|
||||
#include <projectexplorer/namedwidget.h>
|
||||
#include <QTimer>
|
||||
|
||||
@@ -66,7 +68,7 @@ private:
|
||||
void updateButtonState();
|
||||
void updateAdvancedCheckBox();
|
||||
void updateFromKit();
|
||||
void handleQmlDebugCxxFlags();
|
||||
CMakeProjectManager::CMakeConfig getQmlDebugCxxFlags();
|
||||
|
||||
void updateSelection();
|
||||
void setVariableUnsetFlag(bool unsetFlag);
|
||||
|
@@ -287,10 +287,6 @@ void CMakeBuildSystem::triggerParsing()
|
||||
reparseParameters |= REPARSE_FORCE_CMAKE_RUN | REPARSE_FORCE_EXTRA_CONFIGURATION;
|
||||
}
|
||||
|
||||
// Do not add extra args when doing initial configuration
|
||||
if (0 != (reparseParameters & REPARSE_FORCE_INITIAL_CONFIGURATION))
|
||||
reparseParameters = reparseParameters ^ REPARSE_FORCE_EXTRA_CONFIGURATION;
|
||||
|
||||
qCDebug(cmakeBuildSystemLog) << "Asking reader to parse";
|
||||
m_reader.parse(reparseParameters & REPARSE_FORCE_CMAKE_RUN,
|
||||
reparseParameters & REPARSE_FORCE_INITIAL_CONFIGURATION,
|
||||
|
@@ -506,12 +506,11 @@ void McuSupportOptions::registerQchFiles()
|
||||
if (docsDir.isEmpty())
|
||||
return;
|
||||
|
||||
const QStringList qchFiles = {
|
||||
docsDir + "/quickultralite.qch",
|
||||
docsDir + "/quickultralitecmake.qch"
|
||||
};
|
||||
const QFileInfoList qchFiles = QDir(docsDir, "*.qch").entryInfoList();
|
||||
Core::HelpManager::registerDocumentation(
|
||||
Utils::filtered(qchFiles, [](const QString &f) { return QFileInfo::exists(f); } ));
|
||||
Utils::transform<QStringList>(qchFiles, [](const QFileInfo &fi){
|
||||
return fi.absoluteFilePath();
|
||||
}));
|
||||
}
|
||||
|
||||
void McuSupportOptions::registerExamples()
|
||||
|
@@ -159,6 +159,7 @@ const char BUILDSTEPS_DEPLOY[] = "ProjectExplorer.BuildSteps.Deploy";
|
||||
const char C_LANGUAGE_ID[] = "C";
|
||||
const char CXX_LANGUAGE_ID[] = "Cxx";
|
||||
const char QMLJS_LANGUAGE_ID[] = "QMLJS";
|
||||
const char PYTHON_LANGUAGE_ID[] = "Python";
|
||||
|
||||
// ToolChain TypeIds
|
||||
const char CLANG_TOOLCHAIN_TYPEID[] = "ProjectExplorer.ToolChain.Clang";
|
||||
|
@@ -214,7 +214,7 @@ PythonProject::PythonProject(const FilePath &fileName)
|
||||
: Project(Constants::C_PY_MIMETYPE, fileName)
|
||||
{
|
||||
setId(PythonProjectId);
|
||||
setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
|
||||
setProjectLanguages(Context(ProjectExplorer::Constants::PYTHON_LANGUAGE_ID));
|
||||
setDisplayName(fileName.toFileInfo().completeBaseName());
|
||||
|
||||
setNeedsBuildConfigurations(false);
|
||||
|
@@ -656,8 +656,23 @@ void FormEditorFlowActionItem::setDataModelPositionInBaseState(const QPointF &po
|
||||
void FormEditorFlowActionItem::updateGeometry()
|
||||
{
|
||||
FormEditorItem::updateGeometry();
|
||||
//const QPointF pos = qmlItemNode().flowPosition();
|
||||
//setTransform(QTransform::fromTranslate(pos.x(), pos.y()));
|
||||
|
||||
const QPointF pos = qmlItemNode().instancePosition();
|
||||
|
||||
if (pos == m_oldPos)
|
||||
return;
|
||||
|
||||
m_oldPos = pos;
|
||||
|
||||
// Call updateGeometry() on all related transitions
|
||||
QmlFlowItemNode flowItem = QmlFlowActionAreaNode(qmlItemNode()).flowItemParent();
|
||||
if (flowItem.isValid() && flowItem.flowView().isValid()) {
|
||||
const auto nodes = flowItem.flowView().transitions();
|
||||
for (const ModelNode &node : nodes) {
|
||||
if (FormEditorItem *item = scene()->itemForQmlItemNode(node))
|
||||
item->updateGeometry();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FormEditorFlowActionItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "formeditorwidget.h"
|
||||
#include "designeractionmanager.h"
|
||||
#include "designersettings.h"
|
||||
#include "formeditoritem.h"
|
||||
#include "formeditorscene.h"
|
||||
#include "qmldesignerconstants.h"
|
||||
#include "qmldesignericons.h"
|
||||
@@ -208,7 +209,19 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view)
|
||||
|
||||
auto frameAll = [this, zoomOut]() {
|
||||
if (m_graphicsView) {
|
||||
m_graphicsView->frame(m_graphicsView->rootItemRect());
|
||||
QRectF bounds;
|
||||
if (QmlItemNode(m_formEditorView->rootModelNode()).isFlowView()) {
|
||||
for (QGraphicsItem *item : m_formEditorView->scene()->items()) {
|
||||
if (auto *fitem = FormEditorItem::fromQGraphicsItem(item)) {
|
||||
if (!fitem->qmlItemNode().modelNode().isRootNode()
|
||||
&& !fitem->sceneBoundingRect().isNull())
|
||||
bounds |= fitem->sceneBoundingRect();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bounds = m_graphicsView->rootItemRect();
|
||||
}
|
||||
m_graphicsView->frame(bounds);
|
||||
zoomOut();
|
||||
}
|
||||
};
|
||||
|
@@ -63,7 +63,8 @@ static bool itemIsRotatable(const QmlItemNode &qmlItemNode)
|
||||
&& qmlItemNode.instanceIsResizable()
|
||||
&& qmlItemNode.modelIsMovable()
|
||||
&& qmlItemNode.modelIsRotatable()
|
||||
&& !qmlItemNode.instanceIsInLayoutable();
|
||||
&& !qmlItemNode.instanceIsInLayoutable()
|
||||
&& !qmlItemNode.isFlowItem();
|
||||
}
|
||||
|
||||
void RotationIndicator::setItems(const QList<FormEditorItem*> &itemList)
|
||||
|
@@ -38,7 +38,6 @@ ConnectionManagerInterface::Connection::~Connection() = default;
|
||||
ConnectionManagerInterface::Connection::Connection(const QString &name, const QString &mode)
|
||||
: name{name}
|
||||
, mode{mode}
|
||||
, timer{std::make_unique<QTimer>()}
|
||||
{}
|
||||
|
||||
ConnectionManagerInterface::Connection::Connection(Connection &&connection) = default;
|
||||
@@ -49,7 +48,7 @@ void ConnectionManagerInterface::Connection::clear()
|
||||
socket.reset();
|
||||
blockSize = 0;
|
||||
lastReadCommandCounter = 0;
|
||||
timer->stop();
|
||||
timer.reset();
|
||||
}
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
@@ -52,8 +52,10 @@ void InteractiveConnectionManager::setUp(NodeInstanceServerInterface *nodeInstan
|
||||
|
||||
DesignerSettings settings = QmlDesignerPlugin::instance()->settings();
|
||||
int timeOutTime = settings.value(DesignerSettingsKey::PUPPET_KILL_TIMEOUT).toInt();
|
||||
for (Connection &connection : connections())
|
||||
for (Connection &connection : connections()) {
|
||||
connection.timer.reset(new QTimer);
|
||||
connection.timer->setInterval(timeOutTime);
|
||||
}
|
||||
|
||||
if (QmlDesignerPlugin::instance()
|
||||
->settings()
|
||||
|
@@ -159,7 +159,7 @@ bool InternalNode::hasId() const
|
||||
}
|
||||
|
||||
|
||||
uint qHash(const InternalNodePointer& node)
|
||||
Utils::QHashValueType qHash(const InternalNodePointer& node)
|
||||
{
|
||||
if (node.isNull())
|
||||
return ::qHash(-1);
|
||||
|
@@ -38,6 +38,8 @@
|
||||
#include "internalnodeproperty.h"
|
||||
#include "internalnodeabstractproperty.h"
|
||||
|
||||
#include <utils/porting.h>
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
namespace Internal {
|
||||
@@ -150,7 +152,7 @@ private:
|
||||
int m_nodeSourceType = 0;
|
||||
};
|
||||
|
||||
uint qHash(const InternalNodePointer& node);
|
||||
Utils::QHashValueType qHash(const InternalNodePointer& node);
|
||||
bool operator <(const InternalNodePointer &firstNode, const InternalNodePointer &secondNode);
|
||||
} // Internal
|
||||
} // QtQmlDesigner
|
||||
|
@@ -150,7 +150,7 @@ float QmlPreviewPlugin::zoomFactor()
|
||||
|
||||
void QmlPreviewPlugin::setZoomFactor(float zoomFactor)
|
||||
{
|
||||
if (s_previewPlugin) {
|
||||
if (auto s_previewPlugin = getPreviewPlugin()) {
|
||||
bool hasZoomFactor = s_previewPlugin->setProperty("zoomFactor", zoomFactor);
|
||||
QTC_CHECK(hasZoomFactor);
|
||||
}
|
||||
|
@@ -42,6 +42,7 @@
|
||||
#include <QDirIterator>
|
||||
#include <QFileInfo>
|
||||
#include <QFormLayout>
|
||||
#include <QSet>
|
||||
#include <QTemporaryDir>
|
||||
|
||||
using namespace ProjectExplorer;
|
||||
@@ -182,11 +183,16 @@ void MakeInstallStep::finish(bool success)
|
||||
m_deploymentData.setLocalInstallRoot(installRoot());
|
||||
QDirIterator dit(installRoot().toString(), QDir::Files | QDir::Hidden,
|
||||
QDirIterator::Subdirectories);
|
||||
const auto appFileNames = transform<QSet<QString>>(buildSystem()->applicationTargets(),
|
||||
[](const BuildTargetInfo &appTarget) { return appTarget.targetFilePath.fileName(); });
|
||||
while (dit.hasNext()) {
|
||||
dit.next();
|
||||
const QFileInfo fi = dit.fileInfo();
|
||||
const DeployableFile::Type type = appFileNames.contains(fi.fileName())
|
||||
? DeployableFile::TypeExecutable
|
||||
: DeployableFile::TypeNormal;
|
||||
m_deploymentData.addFile(fi.filePath(),
|
||||
fi.dir().path().mid(installRoot().toString().length()));
|
||||
fi.dir().path().mid(installRoot().toString().length()), type);
|
||||
}
|
||||
buildSystem()->setDeploymentData(m_deploymentData);
|
||||
} else if (m_noInstallTarget && m_isCmakeProject) {
|
||||
|
@@ -640,7 +640,7 @@ void VcsBasePluginPrivate::createRepository()
|
||||
// Find current starting directory
|
||||
QString directory;
|
||||
if (const Project *currentProject = ProjectTree::currentProject())
|
||||
directory = currentProject->projectFilePath().toString();
|
||||
directory = currentProject->projectFilePath().absolutePath().toString();
|
||||
// Prompt for a directory that is not under version control yet
|
||||
QWidget *mw = ICore::dialogParent();
|
||||
do {
|
||||
|
Submodule src/shared/qbs updated: f89169ccb8...80cb55a1fb
@@ -396,6 +396,11 @@ struct Value5 : Value
|
||||
Value5(const QString &value) : Value(value) { qtVersion = 5; }
|
||||
};
|
||||
|
||||
struct Value6 : Value
|
||||
{
|
||||
Value6(const QString &value) : Value(value) { qtVersion = 6; }
|
||||
};
|
||||
|
||||
struct UnsubstitutedValue : Value
|
||||
{
|
||||
UnsubstitutedValue(const QString &value) : Value(value) { substituteNamespace = false; }
|
||||
@@ -2006,6 +2011,8 @@ void tst_Dumpers::dumper()
|
||||
}
|
||||
if (!setok) {
|
||||
qDebug() << "NO CHECK IN SET PASSED";
|
||||
for (const Check &check : checkset.checks)
|
||||
qDebug() << check;
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
@@ -2966,26 +2973,26 @@ void tst_Dumpers::dumper_data()
|
||||
+ Check("m1.5", "[5] 22", FloatValue("22"), "")
|
||||
|
||||
+ Check("m2", "<1 items>", "@QMultiMap<@QString, float>")
|
||||
+ Check("m2.0.key", "\"22.0\"", "@QString")
|
||||
+ Check("m2.0.value", FloatValue("22"), "float")
|
||||
+ CheckPairish("m2.0.key", "\"22.0\"", "@QString")
|
||||
+ CheckPairish("m2.0.value", FloatValue("22"), "float")
|
||||
|
||||
+ CoreProfile()
|
||||
+ Check("m3", "<1 items>", "@QMultiMap<int, @QString>")
|
||||
+ Check("m3.0.key", "22", "int")
|
||||
+ Check("m3.0.value", "\"22.0\"", "@QString")
|
||||
+ CheckPairish("m3.0.key", "22", "int")
|
||||
+ CheckPairish("m3.0.value", "\"22.0\"", "@QString")
|
||||
|
||||
+ CoreProfile()
|
||||
+ Check("m4", "<3 items>", "@QMultiMap<@QString, Foo>")
|
||||
+ Check("m4.0.key", "\"22.0\"", "@QString")
|
||||
+ Check("m4.0.value", "", "Foo")
|
||||
+ Check("m4.0.value.a", "22", "int")
|
||||
+ CheckPairish("m4.0.key", "\"22.0\"", "@QString")
|
||||
+ CheckPairish("m4.0.value", "", "Foo")
|
||||
+ CheckPairish("m4.0.value.a", "22", "int")
|
||||
|
||||
+ Check("m5", "<4 items>", "@QMultiMap<@QString, @QPointer<@QObject>>")
|
||||
+ Check("m5.0.key", "\".\"", "@QString")
|
||||
+ Check("m5.0.value", "", "@QPointer<@QObject>")
|
||||
+ Check("m5.1.key", "\".\"", "@QString")
|
||||
+ Check("m5.2.key", "\"Hallo\"", "@QString")
|
||||
+ Check("m5.3.key", "\"Welt\"", "@QString");
|
||||
+ CheckPairish("m5.0.key", "\".\"", "@QString")
|
||||
+ CheckPairish("m5.0.value", "", "@QPointer<@QObject>")
|
||||
+ CheckPairish("m5.1.key", "\".\"", "@QString")
|
||||
+ CheckPairish("m5.2.key", "\"Hallo\"", "@QString")
|
||||
+ CheckPairish("m5.3.key", "\"Welt\"", "@QString");
|
||||
|
||||
|
||||
QTest::newRow("QObject1")
|
||||
@@ -3388,6 +3395,8 @@ void tst_Dumpers::dumper_data()
|
||||
"uint qHash(const QPointer<QObject> &p) { return (quintptr)p.data(); }\n"
|
||||
"QT_END_NAMESPACE\n",
|
||||
|
||||
"QSet<double> s0;\n"
|
||||
|
||||
"QSet<int> s1;\n"
|
||||
"s1.insert(11);\n"
|
||||
"s1.insert(22);\n\n"
|
||||
@@ -3403,19 +3412,23 @@ void tst_Dumpers::dumper_data()
|
||||
"s3.insert(ptr);\n"
|
||||
"s3.insert(ptr);\n",
|
||||
|
||||
"&s1, &s2, &s3")
|
||||
"&s0, &s1, &s2, &s3")
|
||||
|
||||
+ CoreProfile()
|
||||
|
||||
+ Check("s0", "<0 items>", "@QSet<double>")
|
||||
|
||||
+ Check("s1", "<2 items>", "@QSet<int>")
|
||||
+ Check("s1.0", "[0]", "22", "int")
|
||||
+ Check("s1.1", "[1]", "11", "int")
|
||||
+ CheckSet({{"s1.0", "[0]", "22", "int"},
|
||||
{"s1.0", "[0]", "11", "int"}})
|
||||
+ CheckSet({{"s1.1", "[1]", "22", "int"},
|
||||
{"s1.1", "[1]", "11", "int"}})
|
||||
|
||||
+ Check("s2", "<2 items>", "@QSet<@QString>")
|
||||
+ Check("s2.0", "[0]", Value4("\"11.0\""), "@QString")
|
||||
+ Check("s2.0", "[0]", Value5("\"22.0\""), "@QString")
|
||||
+ Check("s2.1", "[1]", Value4("\"22.0\""), "@QString")
|
||||
+ Check("s2.1", "[1]", Value5("\"11.0\""), "@QString")
|
||||
+ CheckSet({{"s2.0", "[0]", "\"11.0\"", "@QString"},
|
||||
{"s2.0", "[0]", "\"22.0\"", "@QString"}})
|
||||
+ CheckSet({{"s2.1", "[1]", "\"11.0\"", "@QString"},
|
||||
{"s2.1", "[1]", "\"22.0\"", "@QString"}})
|
||||
|
||||
+ Check("s3", "<1 items>", "@QSet<@QPointer<@QObject>>")
|
||||
+ Check("s3.0", "[0]", "", "@QPointer<@QObject>");
|
||||
@@ -4040,20 +4053,20 @@ void tst_Dumpers::dumper_data()
|
||||
//+ Check("v1", "\"Some string\"", "@QVariant (QString)")
|
||||
+ CheckType("v1", "@QVariant (QString)")
|
||||
|
||||
+ Check("my", "<2 items>", TypePattern("@QMap<unsigned int,@QStringList>|@QMap<unsigned int,@List<@QString>>|MyType"))
|
||||
+ Check("my.0.key", "1", "unsigned int")
|
||||
+ Check("my.0.value", "<1 items>", TypePattern("@QList<@QString>|@QStringList"))
|
||||
+ Check("my.0.value.0", "[0]", "\"Hello\"", "@QString")
|
||||
+ Check("my.1.key", "3", "unsigned int")
|
||||
+ Check("my.1.value", "<1 items>", TypePattern("@QList<@QString>|@QStringList"))
|
||||
+ Check("my.1.value.0", "[0]", "\"World\"", "@QString")
|
||||
+ Check("my", "<2 items>", TypePattern("@QMap<unsigned int,@QStringList>|@QMap<unsigned int,@QList<@QString>>|MyType"))
|
||||
+ CheckPairish("my.0.key", "1", "unsigned int")
|
||||
+ CheckPairish("my.0.value", "<1 items>", TypePattern("@QList<@QString>|@QStringList"))
|
||||
+ CheckPairish("my.0.value.0", "[0]", "\"Hello\"", "@QString")
|
||||
+ CheckPairish("my.1.key", "3", "unsigned int")
|
||||
+ CheckPairish("my.1.value", "<1 items>", TypePattern("@QList<@QString>|@QStringList"))
|
||||
+ CheckPairish("my.1.value.0", "[0]", "\"World\"", "@QString")
|
||||
//+ CheckType("v2", "@QVariant (MyType)")
|
||||
+ Check("v2.data.0.key", "1", "unsigned int") % NeedsInferiorCall
|
||||
+ Check("v2.data.0.value", "<1 items>", "@QStringList") % NeedsInferiorCall
|
||||
+ Check("v2.data.0.value.0", "[0]", "\"Hello\"", "@QString") % NeedsInferiorCall
|
||||
+ Check("v2.data.1.key", "3", "unsigned int") % NeedsInferiorCall
|
||||
+ Check("v2.data.1.value", "<1 items>", "@QStringList") % NeedsInferiorCall
|
||||
+ Check("v2.data.1.value.0", "[0]", "\"World\"", "@QString") % NeedsInferiorCall
|
||||
+ CheckPairish("v2.data.0.key", "1", "unsigned int") % NeedsInferiorCall
|
||||
+ CheckPairish("v2.data.0.value", "<1 items>", "@QStringList") % NeedsInferiorCall
|
||||
+ CheckPairish("v2.data.0.value.0", "[0]", "\"Hello\"", "@QString") % NeedsInferiorCall
|
||||
+ CheckPairish("v2.data.1.key", "3", "unsigned int") % NeedsInferiorCall
|
||||
+ CheckPairish("v2.data.1.value", "<1 items>", "@QStringList") % NeedsInferiorCall
|
||||
+ CheckPairish("v2.data.1.value.0", "[0]", "\"World\"", "@QString") % NeedsInferiorCall
|
||||
|
||||
+ Check("list", "<3 items>", "@QList<int>")
|
||||
+ Check("list.0", "[0]", "1", "int")
|
||||
@@ -4277,8 +4290,11 @@ void tst_Dumpers::dumper_data()
|
||||
//+ Check("ha1.protocol", "IPv4Protocol",
|
||||
// "@QAbstractSocket::NetworkLayerProtocol") % LldbEngine
|
||||
+ Check("ha1.scopeId", "\"\"", "@QString")
|
||||
+ Check("var", "", "@QVariant (@QHostAddress)") % NeedsInferiorCall
|
||||
+ Check("var.data", ValuePattern(".*127.0.0.1.*"), "@QHostAddress") % NeedsInferiorCall;
|
||||
+ Check5("var", "", "@QVariant (@QHostAddress)") % NeedsInferiorCall
|
||||
+ Check5("var.data", ValuePattern(".*127.0.0.1.*"),
|
||||
"@QHostAddress") % NeedsInferiorCall
|
||||
+ Check6("var", ValuePattern(".*127.0.0.1.*"),
|
||||
"@QVariant(@QHostAddress)") % NeedsInferiorCall;
|
||||
|
||||
|
||||
QTest::newRow("QVariantList")
|
||||
@@ -4334,13 +4350,13 @@ void tst_Dumpers::dumper_data()
|
||||
+ Check("vm0", "<0 items>", TypeDef("@QMap<@QString,@QVariant>", "@QVariantMap"))
|
||||
|
||||
+ Check("vm1", "<6 items>", TypeDef("@QMap<@QString,@QVariant>", "@QVariantMap"))
|
||||
+ Check("vm1.0.key", "\"a\"", "@QString")
|
||||
+ Check("vm1.0.value", "1", "@QVariant (int)")
|
||||
+ Check("vm1.5.key", "\"f\"", "@QString")
|
||||
+ Check("vm1.5.value", "\"2Some String\"", "@QVariant (QString)")
|
||||
+ CheckPairish("vm1.0.key", "\"a\"", "@QString")
|
||||
+ CheckPairish("vm1.0.value", "1", "@QVariant (int)")
|
||||
+ CheckPairish("vm1.5.key", "\"f\"", "@QString")
|
||||
+ CheckPairish("vm1.5.value", "\"2Some String\"", "@QVariant (QString)")
|
||||
|
||||
+ Check("v", "<6 items>", "@QVariant (QVariantMap)")
|
||||
+ Check("v.0.key", "\"a\"", "@QString");
|
||||
+ CheckPairish("v.0.key", "\"a\"", "@QString");
|
||||
|
||||
|
||||
QTest::newRow("QVariantHash")
|
||||
|
Reference in New Issue
Block a user