From 68306470048b001a1df7ec6549330d9bce2f7bc2 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 27 Jan 2021 21:52:58 +0100 Subject: [PATCH 1/9] QmlDesigner: Add annotation for position marker Change-Id: Idb469841f3cf5dd8b26dc011d8e0e4387f0d7d1b Reviewed-by: Thomas Hartmann --- .../components/annotationeditor/annotationcommenttab.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/qmldesigner/components/annotationeditor/annotationcommenttab.cpp b/src/plugins/qmldesigner/components/annotationeditor/annotationcommenttab.cpp index e1afef38be1..8aa58a13968 100644 --- a/src/plugins/qmldesigner/components/annotationeditor/annotationcommenttab.cpp +++ b/src/plugins/qmldesigner/components/annotationeditor/annotationcommenttab.cpp @@ -60,6 +60,7 @@ AnnotationCommentTab::AnnotationCommentTab(QWidget *parent) ui->titleEdit->setModel(new QStringListModel{QStringList{"Description", "Display Condition", "helper lines", + "position marker", "highlight", "project author", "project confirmed", From 5cd4dc5e982a5c49c9bd94775f794e87a91cc47a Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 5 Jan 2021 14:13:02 +0100 Subject: [PATCH 2/9] Add changes file for 4.14.1 Change-Id: I423c09ad1b75d6bd456c2f23ca9f525c7dce6463 Reviewed-by: Leena Miettinen --- dist/changes-4.14.1.md | 111 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 dist/changes-4.14.1.md diff --git a/dist/changes-4.14.1.md b/dist/changes-4.14.1.md new file mode 100644 index 00000000000..4e97b0858c7 --- /dev/null +++ b/dist/changes-4.14.1.md @@ -0,0 +1,111 @@ +Qt Creator 4.14.1 +================= + +Qt Creator version 4.14.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.14.0..v4.14.1 + +General +------- + +* Fixed copying to clipboard from JavaScript locator filter + +### Building Qt Creator with CMake + +* Made it easier to build against separate litehtml (QTCREATORBUG-25144) +* Made it possible to adapt install layout for Linux distributions + (QTCREATORBUG-25142) +* Fixed building and running against system LLVM (QTCREATORBUG-25147) + +Editing +------- + +* Fixed search result highlighting for overlapping results (QTCREATORBUG-25237) + +### C++ + +* Added support for `BINDABLE` in `Q_PROPERTY` +* Fixed loading `ClangFormat` plugin on Linux distributions with software + rendering (QTCREATORBUG-24998) +* Fixed hanging `Follow Symbol` (QTCREATORBUG-25193) +* Fixed freeze in global indexing (QTCREATORBUG-25121) +* Fixed missing completion in `connect` statements (QTCREATORBUG-25153) + +### QML + +* Fixed reformatter for arrow functions (QTCREATORBUG-23019) +* Fixed reformatter for template strings + +### Language Client + +* Fixed handling of dynamically registered capabilities + +Projects +-------- + +* Fixed crash in environment settings (QTCREATORBUG-25170) + +### qmake + +* Fixed unnecessary `qmake` run if `separate_debug_info` is force-disabled + (QTCREATORBUG-25134) +* Fixed wrong messages in `Issues` pane from cumulative parsing + (QTCREATORBUG-25201) + +Debugging +--------- + +### LLDB + +* Fixed that application output could be printed delayed (QTCREATORBUG-24667) + +### CDB + +* Fixed `std::map`, `std::set` and `std::list` pretty printers in release builds + (QTCREATORBUG-24901) + +Analyzer +-------- + +### Clang + +* Fixed issue with MSVC and MinGW (QTCREATORBUG-25126) + +Platforms +--------- + +### Remote Linux + +* Fixed SSH download operation without session (QTCREATORBUG-25236) + +Credits for these changes go to: +-------------------------------- +Alessandro Portale +Andre Hartmann +André Pönitz +Björn Schäpers +Christian Kandeler +Christian Stenger +Cristian Adam +David Schulz +Eike Ziller +Henning Gruendl +Ivan Komissarov +Kai Köhne +Kama Wójcik +Knud Dollereder +Leander Schulten +Leena Miettinen +Lukasz Ornatek +Mahmoud Badri +Marco Bubke +Michael Winkelmann +Orgad Shaneh +Thomas Hartmann +Tim Jenssen +Vikas Pachdha From 234a67d403cd083238d8dbfeb4a37b1c24b596e1 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 26 Jan 2021 10:56:23 +0100 Subject: [PATCH 3/9] Update qbs submodule To HEAD of 1.18 branch. Change-Id: I1ae87430fa5579074eb44da7278ab3e22ada14ac Reviewed-by: Richard Weickelt Reviewed-by: Ivan Komissarov --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 01a8b6e1198..ca486ad0b13 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 01a8b6e11986a3260e911e6a95a0d85d17467c49 +Subproject commit ca486ad0b138d75a6ef73bfc2517424406155d7c From 534e5101de31aa09b4cc7c5a9dc6acbdbee76537 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 28 Jan 2021 14:01:32 +0100 Subject: [PATCH 4/9] Doc: Hide Conan plugin doc sources from QDS doc builds Conan is not used with QDS, so the docs are not a part of QDS Manual. Change-Id: I539afb58dd9762d088d2d22ea9793f819f89168a Reviewed-by: Leena Miettinen --- doc/qtdesignstudio/config/qtdesignstudio.qdocconf | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/qtdesignstudio/config/qtdesignstudio.qdocconf b/doc/qtdesignstudio/config/qtdesignstudio.qdocconf index cdb97676c2a..17afe39b575 100644 --- a/doc/qtdesignstudio/config/qtdesignstudio.qdocconf +++ b/doc/qtdesignstudio/config/qtdesignstudio.qdocconf @@ -51,6 +51,7 @@ excludedirs += ../../qtcreator/examples/accelbubble \ ../../qtcreator/src/android \ ../../qtcreator/src/baremetal \ ../../qtcreator/src/cmake \ + ../../qtcreator/src/conan \ ../../qtcreator/src/debugger/creator-only \ ../../qtcreator/src/editors/creator-only \ ../../qtcreator/src/howto/creator-only \ From 6553df4a20f9d8e7fccae9caf6591bb954887c10 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 28 Jan 2021 17:17:59 +0100 Subject: [PATCH 5/9] Doc: Display info about using Qt Creator variables in QDS Manual They are needed for some more advanced actions. - Move the section to a .qdocinc file that is included as necessary and modify defines where needed. - Describe using tooltips to get more info about variables. - Add a screenshot. Change-Id: Ieb03ccf7de5f0c493c98ae356cdda4b4d3915832 Reviewed-by: Christian Kandeler --- doc/qtcreator/images/qtcreator-variables.png | Bin 0 -> 9575 bytes .../src/editors/creator-code-completion.qdoc | 9 ++- ...creator-projects-settings-environment.qdoc | 46 +---------- .../creator-qtcreator-variables.qdocinc | 74 ++++++++++++++++++ 4 files changed, 84 insertions(+), 45 deletions(-) create mode 100644 doc/qtcreator/images/qtcreator-variables.png create mode 100644 doc/qtcreator/src/projects/creator-qtcreator-variables.qdocinc diff --git a/doc/qtcreator/images/qtcreator-variables.png b/doc/qtcreator/images/qtcreator-variables.png new file mode 100644 index 0000000000000000000000000000000000000000..ab306c0bca27f241f99a0165e89418e85b478a09 GIT binary patch literal 9575 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 T-idY$3=9mOu6{1-oD!M \uicontrol Options > \uicontrol Nim > \uicontrol Tools, and enter the path to the tool executable in the \uicontrol Path field. + \else + \include qtcreator-variables.qdocinc qtcreator variables \endif */ diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc index 5dbdb44b176..f038e900054 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-environment.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -93,49 +93,11 @@ \section1 Using Environment Variables - You can use any environment variables to in build, deploy, and run + You can use any environment variables in build, deploy, and run configurations. For a list of variable names, select \uicontrol {Build - Settings} > \uicontrol {Build Environment} > \uicontrol Details}. + Settings} > \uicontrol {Build Environment} > \uicontrol Details. Environment variables are referenced using the native syntax: $VARNAME or ${VARNAME} on Unix and %VARNAME% on Windows. - \section1 Using Qt Creator Variables - - You can use \QC variables in arguments, executable paths, and working - directories. The variables take care of quoting their expansions, so you do - not need to put them in quotes. Select the \inlineimage replace.png - (\uicontrol {Variables}) button in a field to select from a list of - variables that are available in a particular context. - - The following syntax enables you to use environment variables as \QC - variables: %{Env:VARNAME}. - - \QC uses pattern substitution when expanding variable names. To replace the - first match of \e pattern within \e variable with \e replacement, use: - - \badcode - %{variable/pattern/replacement} - \endcode - - To replace all matches of \e pattern within \e variable with \e replacement, - use: - - \badcode - %{variable//pattern/replacement} - \endcode - - The pattern can be a regular expression and the replacement can contain - backreferences. For example, if \c %{variable} is \c my123var, then - \c %{variable/(..)(\d+)/\2\1} is expanded to \c {123myvar}. - - Instead of the forward slash, you can also use the pound sign (\c #) as - the substitution character. This can be helpful if the value is supposed - to be a file path, in which case forward slashes might get translated - to backslashes on Windows hosts. - - To use the default value if the variable is not set, use: - - \badcode - %{variable:-default} - \endcode + \include qtcreator-variables.qdocinc qtcreator variables */ diff --git a/doc/qtcreator/src/projects/creator-qtcreator-variables.qdocinc b/doc/qtcreator/src/projects/creator-qtcreator-variables.qdocinc new file mode 100644 index 00000000000..65c0fe10bfd --- /dev/null +++ b/doc/qtcreator/src/projects/creator-qtcreator-variables.qdocinc @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Creator documentation. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** +****************************************************************************/ + +/*! +//! [qtcreator variables] + \section1 Using Qt Creator Variables + + You can use \QC variables in arguments, executable paths, and working + directories. The variables take care of quoting their expansions, so you do + not need to put them in quotes. + + Select the \inlineimage replace.png + (\uicontrol {Variables}) button in a field to select from a list of + variables that are available in a particular context. + For more information about each variable, move the cursor over it in the + list. + + \image qtcreator-variables.png "Qt Creator Variables dialog displaying a tooltip" + + The following syntax enables you to use environment variables as \QC + variables: %{Env:VARNAME}. + + \QC uses pattern substitution when expanding variable names. To replace the + first match of \e pattern within \e variable with \e replacement, use: + + \badcode + %{variable/pattern/replacement} + \endcode + + To replace all matches of \e pattern within \e variable with \e replacement, + use: + + \badcode + %{variable//pattern/replacement} + \endcode + + The pattern can be a regular expression and the replacement can contain + backreferences. For example, if \c %{variable} is \c my123var, then + \c %{variable/(..)(\d+)/\2\1} is expanded to \c {123myvar}. + + Instead of the forward slash, you can also use the pound sign (\c #) as + the substitution character. This can be helpful if the value is supposed + to be a file path, in which case forward slashes might get translated + to backslashes on Windows hosts. + + To use the default value if the variable is not set, use: + + \badcode + %{variable:-default} + \endcode +//! [qtcreator variables] +*/ From 368864a0af3052adf1f63e40d830a69b5d999eae Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Fri, 29 Jan 2021 19:37:29 +0100 Subject: [PATCH 6/9] qmldesigner: fix invalid target.id() call Task-number: QDS-3333 Change-Id: Id63a376e3d483c41a979b5d776a1f1cfc6c30682 Reviewed-by: Thomas Hartmann --- .../components/transitioneditor/transitioneditorview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp index 62fb34403ba..9ec8d9e3661 100644 --- a/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp +++ b/src/plugins/qmldesigner/components/transitioneditor/transitioneditorview.cpp @@ -220,8 +220,8 @@ ModelNode TransitionEditorView::addNewTransition() for (const QmlPropertyChanges & change : state.propertyChanges()) { QStringList locList; const ModelNode target = change.target(); - const QString targetId = target.id(); if (target.isValid() && target.hasMetaInfo()) { + const QString targetId = target.id(); for (const VariantProperty &property : change.modelNode().variantProperties()) { TypeName typeName = target.metaInfo().propertyTypeName(property.name()); From d3b5e373b8850262e06096642271d3373dc78be0 Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Tue, 26 Jan 2021 15:59:17 +0100 Subject: [PATCH 7/9] AssetExport: Add typeId and typeName to component instances typdId is required to identify the instance's component while generating PSDs Task-number: QDS-2811 Change-Id: I61e0fe977e252c9c2aaeacd425b057c92a7c5b49 Reviewed-by: Leena Miettinen Reviewed-by: Thomas Hartmann --- .../assetexporterplugin/assetexporter.cpp | 94 ++++++++++++++++++- .../assetexporterplugin/assetexporter.h | 6 ++ .../assetexportpluginconstants.h | 3 +- .../assetexporterplugin/componentexporter.cpp | 6 -- .../parsers/modelitemnodeparser.cpp | 6 ++ 5 files changed, 107 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp index 74498f185b0..03f1e71f1d8 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp @@ -28,6 +28,7 @@ #include "exportnotification.h" #include "designdocument.h" +#include "nodemetainfo.h" #include "qmldesignerplugin.h" #include "rewriterview.h" #include "qmlitemnode.h" @@ -43,6 +44,7 @@ #include #include #include +#include #include #include @@ -130,13 +132,27 @@ void AssetExporter::exportQml(const Utils::FilePaths &qmlFiles, const Utils::Fil m_exportFiles = qmlFiles; m_totalFileCount = m_exportFiles.count(); m_components.clear(); + m_componentUuidCache.clear(); m_exportPath = exportPath; m_currentState.change(ParsingState::Parsing); - triggerLoadNextFile(); if (exportAssets) m_assetDumper = make_unique(); else m_assetDumper.reset(); + + QTimer::singleShot(0, this, &AssetExporter::beginExport); +} + +void AssetExporter::beginExport() +{ + for (const Utils::FilePath &p : m_exportFiles) { + if (m_cancelled) + break; + preprocessQmlFile(p); + } + + if (!m_cancelled) + triggerLoadNextFile(); } void AssetExporter::cancel() @@ -253,6 +269,68 @@ Utils::FilePath AssetExporter::componentExportDir(const Component *component) co return m_exportPath.pathAppended(component->name()); } +void AssetExporter::preprocessQmlFile(const Utils::FilePath &path) +{ + // Load the QML file and assign UUIDs to items having none. + // Meanwhile cache the Component UUIDs as well + std::unique_ptr model(Model::create("Item", 2, 7)); + Utils::FileReader reader; + if (!reader.fetch(path.toString())) { + ExportNotification::addError(tr("Cannot preprocess file: %1. Error %2") + .arg(path.toString()).arg(reader.errorString())); + return; + } + + QPlainTextEdit textEdit; + textEdit.setPlainText(QString::fromUtf8(reader.data())); + NotIndentingTextEditModifier *modifier = new NotIndentingTextEditModifier(&textEdit); + modifier->setParent(model.get()); + RewriterView *rewriterView = new RewriterView(QmlDesigner::RewriterView::Validate, model.get()); + rewriterView->setCheckSemanticErrors(false); + rewriterView->setTextModifier(modifier); + model->attachView(rewriterView); + rewriterView->restoreAuxiliaryData(); + ModelNode rootNode = rewriterView->rootModelNode(); + if (!rootNode.isValid()) { + ExportNotification::addError(tr("Cannot preprocess file: %1").arg(path.toString())); + return; + } + + if (assignUuids(rootNode)) { + // Some UUIDs were assigned. Rewrite the file. + rewriterView->writeAuxiliaryData(); + const QByteArray data = textEdit.toPlainText().toUtf8(); + Utils::FileSaver saver(path.toString(), QIODevice::Text); + saver.write(data); + if (!saver.finalize()) { + ExportNotification::addError(tr("Cannot update %1.\n%2") + .arg(path.toString()).arg(saver.errorString())); + return; + } + } + + // Cache component UUID + const QString uuid = rootNode.auxiliaryData(Constants::UuidAuxTag).toString(); + m_componentUuidCache[path.toString()] = uuid; +} + +bool AssetExporter::assignUuids(const ModelNode &root) +{ + // Assign an UUID to the node without one. + // Return true if an assignment takes place. + bool changed = false; + for (const ModelNode &node : root.allSubModelNodesAndThisNode()) { + const QString uuid = node.auxiliaryData(Constants::UuidAuxTag).toString(); + if (uuid.isEmpty()) { + // Assign an unique identifier to the node. + QByteArray uuid = generateUuid(node); + node.setAuxiliaryData(Constants::UuidAuxTag, QString::fromLatin1(uuid)); + changed = true; + } + } + return changed; +} + QByteArray AssetExporter::generateUuid(const ModelNode &node) { QByteArray uuid; @@ -263,6 +341,20 @@ QByteArray AssetExporter::generateUuid(const ModelNode &node) return uuid; } +QString AssetExporter::componentUuid(const ModelNode &instance) const +{ + // Returns the UUID of the component's root node + // Empty string is returned if the node is not an instance of a component within + // the project. + NodeMetaInfo metaInfo = instance.metaInfo(); + if (!metaInfo.isValid()) + return {}; + const QString path = metaInfo.componentFileName(); + if (m_componentUuidCache.contains(path)) + return m_componentUuidCache[path]; + return {}; +} + void AssetExporter::triggerLoadNextFile() { QTimer::singleShot(0, this, &AssetExporter::loadNextFile); diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h index 55b1432d223..adfc71a115b 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h @@ -76,6 +76,7 @@ public: const QString &suffix = {}) const; void exportAsset(const QPixmap &asset, const Utils::FilePath &path); QByteArray generateUuid(const ModelNode &node); + QString componentUuid(const ModelNode &instance) const; signals: void stateChanged(ParsingState); @@ -93,6 +94,10 @@ private: void onQmlFileLoaded(); Utils::FilePath componentExportDir(const Component *component) const; + void beginExport(); + void preprocessQmlFile(const Utils::FilePath &path); + bool assignUuids(const ModelNode &root); + private: mutable class State { public: @@ -109,6 +114,7 @@ private: Utils::FilePath m_exportPath; bool m_perComponentExport = false; std::vector> m_components; + QHash m_componentUuidCache; QSet m_usedHashes; QHash m_assets; std::unique_ptr m_assetDumper; diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexportpluginconstants.h b/src/plugins/qmldesigner/assetexporterplugin/assetexportpluginconstants.h index 36033a5ea2e..07b2fa18338 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexportpluginconstants.h +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexportpluginconstants.h @@ -67,7 +67,8 @@ const char ReferenceAssetTag[] = "referenceAsset"; const char AssetPathTag[] = "assetPath"; const char AssetBoundsTag[] = "assetBounds"; const char OpacityTag[] = "opacity"; -const char TypeNameTag[] = "qmlType"; +const char TypeNameTag[] = "typeName"; +const char TypeIdTag[] = "typeId"; const char TextDetailsTag[] = "textDetails"; const char FontFamilyTag[] = "fontFamily"; diff --git a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp index d3e2edfc82b..13dfb3a5aa4 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp @@ -130,12 +130,6 @@ QJsonObject Component::nodeToJson(const ModelNode &node) std::unique_ptr parser(createNodeParser(node)); if (parser) { - if (parser->uuid().isEmpty()) { - // Assign an unique identifier to the node. - QByteArray uuid = m_exporter.generateUuid(node); - node.setAuxiliaryData(Constants::UuidAuxTag, QString::fromLatin1(uuid)); - node.model()->rewriterView()->writeAuxiliaryData(); - } jsonObject = parser->json(*this); } else { ExportNotification::addError(tr("Error exporting node %1. Cannot parse type %2.") diff --git a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp index 43963aa8b26..56ccd890f2f 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp @@ -25,6 +25,8 @@ #include "modelitemnodeparser.h" #include "assetexportpluginconstants.h" +#include "assetexporter.h" +#include "componentexporter.h" #include "qmlitemnode.h" @@ -83,6 +85,10 @@ QJsonObject QmlDesigner::ItemNodeParser::json(QmlDesigner::Component &component) metadata.insert(ExportTypeTag, ExportTypeChild); metadata.insert(TypeNameTag, QString::fromLatin1(m_node.type())); + QString typeId = component.exporter().componentUuid(m_node); + if (!typeId.isEmpty()) + metadata.insert(TypeIdTag, typeId); + jsonObject.insert(MetadataTag, metadata); return jsonObject; } From 460f1d3ecdbfc3dc853ea2e7ce476cad5f68fcf2 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 25 Jan 2021 13:12:32 +0100 Subject: [PATCH 8/9] Doc: Describe Debugging Helper Customization field We have several user questions and bug reports about SIGSTOP preventing users from debugging, so use SIGSTOP signal handling as an example. Task-number: QTCREATORBUG-24500 Change-Id: I2243d45ef4f5354a15712567882861053d3d6a7a Reviewed-by: hjk --- .../qtcreator-debugging-helper-options.png | Bin 25777 -> 12681 bytes .../creator-only/creator-debugger.qdoc | 30 +++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/doc/qtcreator/images/qtcreator-debugging-helper-options.png b/doc/qtcreator/images/qtcreator-debugging-helper-options.png index 25a312f783a9e6269a8df543795f05cc531a1239..a73e6144bd4dcdc91193edc535f77eea842a0d19 100644 GIT binary patch literal 12681 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ÌIls3{lKC!Q_G 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 diff --git a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc index 2610210524e..b10498edc24 100644 --- a/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc +++ b/doc/qtcreator/src/debugger/creator-only/creator-debugger.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -843,6 +843,31 @@ Linux, LLDB on macOS, and CDB on Windows, or any other platform on which at least one of the three supported backends is available. + \section2 Customizing Built-In Debugging Helpers + + You can have commands executed after built-in debugging helpers have + been loaded and fully initialized. To load additional debugging helpers or + modify existing ones, select \uicontrol Tools > \uicontrol Options > + \uicontrol Debugger > \uicontrol {Locals & Expressions}, and enter the + commands in the \uicontrol {Debugging Helper Customization} field. + + \image qtcreator-debugging-helper-options.png + + If you receive error messages about receiving signals when using GDB, you + can specify \l{https://sourceware.org/gdb/onlinedocs/gdb/Signals.html} + {GDB commands} for handling the signals. For example, you can tell GDB to + ignore the \c SIGSTOP signal if you receive the following error message: + \c {The inferior stopped because it received a signal from the operating + system. Signal name: SIGSTOP}. + + To stop GDB from handling the \c SIGSTOP signal, add the following commands + to the \uicontrol {Debugging Helper Customization} field: + + \badcode + handle SIGSTOP nopass + handle SIGSTOP nostop + \endcode + \section2 Adding Custom Debugging Helpers To add debugging helpers for your own types, no compilation is required, @@ -889,9 +914,6 @@ \uicontrol Tools > \uicontrol Options > \uicontrol Debugger > \uicontrol {Locals & Expressions} > \uicontrol {Extra Debugging Helpers}. - - \image qtcreator-debugging-helper-options.png - \endlist The custom debugging helpers will be automatically picked up from From 70670cad234e2a4cee0772037160a5ad0ca043c3 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Tue, 26 Jan 2021 12:08:52 +0100 Subject: [PATCH 9/9] McuSupport: Do not add clang to PATH when creating a new kit (1.7+) Fixes: UL-3591 Change-Id: I7ec618aeb28bb8e79733267056d5c4c0ff7ba382 Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mcusupportoptions.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 1d4a82e36c4..55ebe006a9a 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -654,10 +654,13 @@ static void setKitEnvironment(Kit *k, const McuTarget *mcuTarget, processPackage(package); processPackage(qtForMCUsSdkPackage); - const QString path = QLatin1String(HostOsInfo().isWindowsHost() ? "Path" : "PATH"); - pathAdditions.append("${" + path + "}"); - pathAdditions.append(QDir::toNativeSeparators(Core::ICore::libexecPath() + "/clang/bin")); - changes.append({path, pathAdditions.join(HostOsInfo::pathListSeparator())}); + // Clang not needed in version 1.7+ + if (mcuTarget->qulVersion() < QVersionNumber{1,7}) { + const QString path = QLatin1String(HostOsInfo().isWindowsHost() ? "Path" : "PATH"); + pathAdditions.append("${" + path + "}"); + pathAdditions.append(QDir::toNativeSeparators(Core::ICore::libexecPath() + "/clang/bin")); + changes.append({path, pathAdditions.join(HostOsInfo::pathListSeparator())}); + } if (kitNeedsQtVersion()) changes.append({QLatin1String("LD_LIBRARY_PATH"), "%{Qt:QT_INSTALL_LIBS}"});