diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake
index cf4964ef087..236f3cf9508 100644
--- a/cmake/QtCreatorIDEBranding.cmake
+++ b/cmake/QtCreatorIDEBranding.cmake
@@ -1,6 +1,6 @@
-set(IDE_VERSION "7.84.0") # The IDE version.
-set(IDE_VERSION_COMPAT "7.84.0") # The IDE Compatibility version.
-set(IDE_VERSION_DISPLAY "8.0.0-rc1") # The IDE display version.
+set(IDE_VERSION "8.0.0") # The IDE version.
+set(IDE_VERSION_COMPAT "8.0.0") # The IDE Compatibility version.
+set(IDE_VERSION_DISPLAY "8.0.0") # The IDE display version.
set(IDE_COPYRIGHT_YEAR "2022") # The IDE current copyright year.
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.
diff --git a/doc/qtcreator/examples/textfinder/CMakeLists.txt b/doc/qtcreator/examples/textfinder/CMakeLists.txt
new file mode 100644
index 00000000000..39f9d4cd471
--- /dev/null
+++ b/doc/qtcreator/examples/textfinder/CMakeLists.txt
@@ -0,0 +1,71 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(TextFinder VERSION 0.1 LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools)
+
+set(TS_FILES TextFinder_de_DE.ts)
+
+set(PROJECT_SOURCES
+ main.cpp
+ textfinder.cpp
+ textfinder.h
+ textfinder.ui
+ ${TS_FILES}
+ textfinder.qrc
+)
+
+if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
+ qt_add_executable(TextFinder
+ MANUAL_FINALIZATION
+ ${PROJECT_SOURCES}
+ )
+# Define target properties for Android with Qt 6 as:
+# set_property(TARGET TextFinder APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
+# ${CMAKE_CURRENT_SOURCE_DIR}/android)
+# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
+
+ qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
+else()
+ if(ANDROID)
+ add_library(TextFinder SHARED
+ ${PROJECT_SOURCES}
+ )
+# Define properties for Android with Qt 5 after find_package() calls as:
+# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
+ else()
+ add_executable(TextFinder
+ ${PROJECT_SOURCES}
+ )
+ endif()
+
+ qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
+endif()
+
+target_link_libraries(TextFinder PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
+
+set_target_properties(TextFinder PROPERTIES
+ MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
+ MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
+ MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ MACOSX_BUNDLE TRUE
+ WIN32_EXECUTABLE TRUE
+)
+
+install(TARGETS TextFinder
+ BUNDLE DESTINATION .
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+
+if(QT_VERSION_MAJOR EQUAL 6)
+ qt_finalize_executable(TextFinder)
+endif()
diff --git a/doc/qtcreator/examples/textfinder/TextFinder_de_DE.ts b/doc/qtcreator/examples/textfinder/TextFinder_de_DE.ts
new file mode 100644
index 00000000000..ae942c6f1c6
--- /dev/null
+++ b/doc/qtcreator/examples/textfinder/TextFinder_de_DE.ts
@@ -0,0 +1,22 @@
+
+
+
+
+ TextFinder
+
+
+ TextFinder
+
+
+
+
+ Keyword
+
+
+
+
+ Find
+
+
+
+
diff --git a/doc/qtcreator/examples/textfinder/main.cpp b/doc/qtcreator/examples/textfinder/main.cpp
index 37cc1de814f..d9799019643 100644
--- a/doc/qtcreator/examples/textfinder/main.cpp
+++ b/doc/qtcreator/examples/textfinder/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator
@@ -47,15 +47,25 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
#include "textfinder.h"
#include
+#include
+#include
int main(int argc, char *argv[])
{
- Q_INIT_RESOURCE(textfinder);
QApplication a(argc, argv);
+
+ QTranslator translator;
+ const QStringList uiLanguages = QLocale::system().uiLanguages();
+ for (const QString &locale : uiLanguages) {
+ const QString baseName = "TextFinder_" + QLocale(locale).name();
+ if (translator.load(":/i18n/" + baseName)) {
+ a.installTranslator(&translator);
+ break;
+ }
+ }
TextFinder w;
w.show();
return a.exec();
diff --git a/doc/qtcreator/examples/textfinder/textfinder.cpp b/doc/qtcreator/examples/textfinder/textfinder.cpp
index f402e0f31de..06d43a4cb69 100644
--- a/doc/qtcreator/examples/textfinder/textfinder.cpp
+++ b/doc/qtcreator/examples/textfinder/textfinder.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator
@@ -47,18 +47,18 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
#include "textfinder.h"
//! [1]
+#include "./ui_textfinder.h"
#include
#include
//! [1]
-#include
//! [3]
TextFinder::TextFinder(QWidget *parent)
- : QWidget(parent), ui(new Ui::TextFinder)
+ : QWidget(parent)
+ , ui(new Ui::TextFinder)
{
ui->setupUi(this);
loadTextFile();
diff --git a/doc/qtcreator/examples/textfinder/textfinder.h b/doc/qtcreator/examples/textfinder/textfinder.h
index 8351a473777..2366a55aa30 100644
--- a/doc/qtcreator/examples/textfinder/textfinder.h
+++ b/doc/qtcreator/examples/textfinder/textfinder.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator
@@ -47,24 +47,21 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#pragma once
-
-#include "ui_textfinder.h"
+#ifndef TEXTFINDER_H
+#define TEXTFINDER_H
#include
-namespace Ui
-{
- class TextFinder;
-}
+QT_BEGIN_NAMESPACE
+namespace Ui { class TextFinder; }
+QT_END_NAMESPACE
class TextFinder : public QWidget
{
Q_OBJECT
public:
- TextFinder(QWidget *parent = 0);
+ TextFinder(QWidget *parent = nullptr);
~TextFinder();
//! [0]
@@ -76,3 +73,4 @@ private:
void loadTextFile();
//! [0]
};
+#endif // TEXTFINDER_H
diff --git a/doc/qtcreator/examples/textfinder/textfinder.pro b/doc/qtcreator/examples/textfinder/textfinder.pro
deleted file mode 100644
index f8f547aef7c..00000000000
--- a/doc/qtcreator/examples/textfinder/textfinder.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-TARGET = TextFinder
-TEMPLATE = app
-
-QT += widgets
-
-SOURCES += main.cpp\
- textfinder.cpp
-
-HEADERS += textfinder.h
-
-FORMS += textfinder.ui
-
-RESOURCES += textfinder.qrc
diff --git a/doc/qtcreator/examples/textfinder/textfinder.qrc b/doc/qtcreator/examples/textfinder/textfinder.qrc
index 03cc512f4d6..fb804b5eca1 100644
--- a/doc/qtcreator/examples/textfinder/textfinder.qrc
+++ b/doc/qtcreator/examples/textfinder/textfinder.qrc
@@ -1,5 +1,5 @@
-
-
- input.txt
-
-
\ No newline at end of file
+
+
+ input.txt
+
+
diff --git a/doc/qtcreator/examples/textfinder/textfinder.ui b/doc/qtcreator/examples/textfinder/textfinder.ui
index ba8018742a5..33f9d9c9729 100644
--- a/doc/qtcreator/examples/textfinder/textfinder.ui
+++ b/doc/qtcreator/examples/textfinder/textfinder.ui
@@ -6,33 +6,30 @@
0
0
- 378
- 158
+ 800
+ 600
- Find Text
+ TextFinder
-
+
-
-
-
-
-
-
- -
-
+
+
-
+
- &Keyword:
-
-
- lineEdit
+ Keyword
- -
+
-
+
+
+ -
- &Find
+ Find
@@ -41,38 +38,8 @@
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 16
-
-
-
-
-
-
- lineEdit
- returnPressed()
- findButton
- animateClick()
-
-
- 261
- 17
-
-
- 320
- 17
-
-
-
-
+
diff --git a/doc/qtcreator/images/qtcreator-add-resource-wizard2.png b/doc/qtcreator/images/qtcreator-add-resource-wizard2.png
index 8efcf7c4a7a..13246171a3b 100644
Binary files a/doc/qtcreator/images/qtcreator-add-resource-wizard2.png and b/doc/qtcreator/images/qtcreator-add-resource-wizard2.png differ
diff --git a/doc/qtcreator/images/qtcreator-add-resource-wizard3.png b/doc/qtcreator/images/qtcreator-add-resource-wizard3.png
index 9b4188e718d..1ca3c01636e 100644
Binary files a/doc/qtcreator/images/qtcreator-add-resource-wizard3.png and b/doc/qtcreator/images/qtcreator-add-resource-wizard3.png differ
diff --git a/doc/qtcreator/images/qtcreator-add-resource-wizard4.png b/doc/qtcreator/images/qtcreator-add-resource-wizard4.png
new file mode 100644
index 00000000000..ea985fc5ea0
Binary files /dev/null and b/doc/qtcreator/images/qtcreator-add-resource-wizard4.png differ
diff --git a/doc/qtcreator/images/qtcreator-add-resource.png b/doc/qtcreator/images/qtcreator-add-resource.png
index 42da7b0173c..dd7a2c59cdd 100644
Binary files a/doc/qtcreator/images/qtcreator-add-resource.png and b/doc/qtcreator/images/qtcreator-add-resource.png differ
diff --git a/doc/qtcreator/images/qtcreator-intro-and-location-qt-gui.png b/doc/qtcreator/images/qtcreator-intro-and-location-qt-gui.png
index 2afd5e6c149..9d4e7b2ca03 100644
Binary files a/doc/qtcreator/images/qtcreator-intro-and-location-qt-gui.png and b/doc/qtcreator/images/qtcreator-intro-and-location-qt-gui.png differ
diff --git a/doc/qtcreator/images/qtcreator-new-project-build-system-qt-gui.png b/doc/qtcreator/images/qtcreator-new-project-build-system-qt-gui.png
index 9bcb248e0f8..e0e5bcda818 100644
Binary files a/doc/qtcreator/images/qtcreator-new-project-build-system-qt-gui.png and b/doc/qtcreator/images/qtcreator-new-project-build-system-qt-gui.png differ
diff --git a/doc/qtcreator/images/qtcreator-new-project-qt-versions-qt-gui.png b/doc/qtcreator/images/qtcreator-new-project-qt-versions-qt-gui.png
index b829cee9512..292cac5e7ee 100644
Binary files a/doc/qtcreator/images/qtcreator-new-project-qt-versions-qt-gui.png and b/doc/qtcreator/images/qtcreator-new-project-qt-versions-qt-gui.png differ
diff --git a/doc/qtcreator/images/qtcreator-new-project-summary-qt-gui.png b/doc/qtcreator/images/qtcreator-new-project-summary-qt-gui.png
index e7b04b20542..81faa7e18e6 100644
Binary files a/doc/qtcreator/images/qtcreator-new-project-summary-qt-gui.png and b/doc/qtcreator/images/qtcreator-new-project-summary-qt-gui.png differ
diff --git a/doc/qtcreator/images/qtcreator-textfinder-contents.png b/doc/qtcreator/images/qtcreator-textfinder-contents.png
index 213edc62b1e..f8362911e36 100644
Binary files a/doc/qtcreator/images/qtcreator-textfinder-contents.png and b/doc/qtcreator/images/qtcreator-textfinder-contents.png differ
diff --git a/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc b/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc
index 546cbd20277..84133a9f48d 100644
--- a/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc
+++ b/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2021 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
@@ -68,9 +68,8 @@
\image qtcreator-new-project-build-system-qt-gui.png "Define Build System dialog"
- \li In the \uicontrol {Build system} field, select the build system to
- use for building and running the project: \l qmake,
- \l {Setting Up CMake}{CMake}, or \l {Setting Up Qbs}{Qbs}.
+ \li In the \uicontrol {Build system} field, select \l {Setting Up CMake}
+ {CMake} as the build system to use for building the project.
\li Select \uicontrol Next or \uicontrol Continue to open the
\uicontrol{Class Information} dialog.
@@ -117,8 +116,7 @@
\note The project opens in the \uicontrol Edit mode, and these instructions are
hidden. To return to these instructions, open the \uicontrol Help mode.
- If you selected qmake as the build system, the TextFinder project now
- contains the following files:
+ The TextFinder project now contains the following files:
\list
@@ -126,14 +124,13 @@
\li textfinder.h
\li textfinder.cpp
\li textfinder.ui
- \li textfinder.pro
+ \li CMakeLists.txt
\endlist
\image qtcreator-textfinder-contents.png "TextFinder project contents"
The .h and .cpp files come with the necessary boiler plate code.
- The .pro file is complete.
If you selected CMake as the build system, \QC created a CMakeLists.txt
project file for you.
@@ -312,7 +309,7 @@
\li In the \uicontrol{Name} field, enter \b{textfinder}.
- \li In the \uicontrol{Path} field, enter \c{C:\Qt\examples\TextFinder},
+ \li In the \uicontrol{Path} field, enter the path to the project,
and select \uicontrol Next or \uicontrol Continue.
The \uicontrol{Project Management} dialog opens.
@@ -320,10 +317,16 @@
\image qtcreator-add-resource-wizard3.png "Project Management dialog"
- \li In the \uicontrol{Add to project} field, select \b{TextFinder.pro}
+ \li In the \uicontrol{Add to project} field, select \b{TextFinder}
and select \uicontrol{Finish} or \uicontrol Done to open the file
in the code editor.
+ \li In the \uicontrol Copy to Clipboard dialog, select \uicontrol Yes to
+ copy the path to the resource file to the clipboard for adding it
+ to the CMakeLists.txt file.
+
+ \image qtcreator-add-resource-wizard4.png "Copy to Clipboard dialog"
+
\li Select \uicontrol Add > \uicontrol {Add Prefix}.
\li In the \uicontrol{Prefix} field, replace the default prefix with a slash
@@ -336,10 +339,20 @@
\endlist
- \section1 Compiling and Running Your Program
+ \section1 Adding Resources to Project File
+
+ For the text file to appear when you run the application, you must specify
+ the resource file as a source file in the \e CMakeLists.txt file that the
+ wizard created for you:
+
+ \quotefromfile TextFinder/CMakeLists.txt
+ \skipto set(PROJECT_SOURCES
+ \printuntil )
+
+ \section1 Compiling and Running Your Application
Now that you have all the necessary files, select the
\inlineimage icons/run_small.png
- button to compile and run your program.
+ button to compile and run your Application.
*/
diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs
index dfa8b056fc4..deb25dff2c2 100644
--- a/qbs/modules/qtc/qtc.qbs
+++ b/qbs/modules/qtc/qtc.qbs
@@ -6,15 +6,15 @@ import qbs.Utilities
Module {
Depends { name: "cpp"; required: false }
- property string qtcreator_display_version: '8.0.0-rc1'
- property string ide_version_major: '7'
- property string ide_version_minor: '84'
+ property string qtcreator_display_version: '8.0.0'
+ property string ide_version_major: '8'
+ property string ide_version_minor: '0'
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: '7'
- property string ide_compat_version_minor: '84'
+ property string ide_compat_version_major: '8'
+ property string ide_compat_version_minor: '0'
property string ide_compat_version_release: '0'
property string qtcreator_compat_version: ide_compat_version_major + '.'
+ ide_compat_version_minor + '.' + ide_compat_version_release
diff --git a/qtcreator_ide_branding.pri b/qtcreator_ide_branding.pri
index ae387b60577..5e44fbf06d4 100644
--- a/qtcreator_ide_branding.pri
+++ b/qtcreator_ide_branding.pri
@@ -1,6 +1,6 @@
-QTCREATOR_VERSION = 7.84.0
-QTCREATOR_COMPAT_VERSION = 7.84.0
-QTCREATOR_DISPLAY_VERSION = 8.0.0-rc1
+QTCREATOR_VERSION = 8.0.0
+QTCREATOR_COMPAT_VERSION = 8.0.0
+QTCREATOR_DISPLAY_VERSION = 8.0.0
QTCREATOR_COPYRIGHT_YEAR = 2022
IDE_DISPLAY_NAME = Qt Creator
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index e121ece7da5..222c1dc526e 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -791,6 +791,7 @@ class Dumper(DumperBase):
def lookupNativeType(self, name):
#DumperBase.warn('LOOKUP TYPE NAME: %s' % name)
+
typeobj = self.typeCache.get(name)
if typeobj is not None:
#DumperBase.warn('CACHED: %s' % name)
@@ -846,6 +847,15 @@ class Dumper(DumperBase):
if typeobj is not None:
return typeobj
+ # For QMetaType based typenames we have to re-format the type name.
+ # Converts "T>"" to "T >" since FindFirstType
+ # expects it that way.
+ name = name.replace(',', ', ').replace('>>', '> >')
+ typeobj = self.target.FindFirstType(name)
+ if typeobj.IsValid():
+ self.typeCache[name] = typeobj
+ return typeobj
+
return lldb.SBType()
def setupInferior(self, args):
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml
index f2df9c0d042..cd31bcdddcb 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ColorEditor.qml
@@ -55,6 +55,8 @@ SecondColumnLayout {
property color originalColor
property bool isVector3D: false
+ property alias spacer: spacer
+
function isNotInGradientMode() {
return ceMode.currentValue === "Solid"
}
@@ -1310,17 +1312,7 @@ SecondColumnLayout {
}
}
- Spacer { implicitWidth: StudioTheme.Values.controlLabelGap }
-
- ControlLabel {
- text: "Hex"
- horizontalAlignment: Text.AlignLeft
- width: StudioTheme.Values.controlLabelWidth
- + StudioTheme.Values.controlGap
- + StudioTheme.Values.linkControlWidth
- }
-
- ExpandingSpacer {}
+ ExpandingSpacer { id: spacer}
StudioControls.Menu {
id: contextMenu
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml
index ecb4936bd7d..9c3f3ec43cb 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml
@@ -47,6 +47,9 @@ Row {
// Current item
property string absoluteFilePath: ""
+ property alias comboBox: comboBox
+ property alias spacer: spacer
+
FileResourcesModel {
id: fileModel
modelNodeBackendProperty: modelNodeBackend
@@ -501,7 +504,9 @@ Row {
}
}
- Spacer { implicitWidth: StudioTheme.Values.twoControlColumnGap }
+ Spacer { id: spacer
+ implicitWidth: StudioTheme.Values.twoControlColumnGap
+ }
IconIndicator {
icon: StudioTheme.Constants.addFile
diff --git a/share/qtcreator/translations/qtcreator_ja.ts b/share/qtcreator/translations/qtcreator_ja.ts
index a74564d2189..c1085df3af4 100644
--- a/share/qtcreator/translations/qtcreator_ja.ts
+++ b/share/qtcreator/translations/qtcreator_ja.ts
@@ -8168,10 +8168,6 @@ SSH 認証が必要とされるリポジトリで使用されます(SSH の SSH_
Whether the grid wraps key navigation.
グリッドがキーナビゲーションをラップするかどうか。
-
- Whether the grid wraps key navigation.
- グリッドがキーナビゲーションをラップするかどうか。
-
Orientation
方向
@@ -9020,22 +9016,6 @@ preferShaping プロパティを false に設定すると、このような機
Add Annotation
アノテーションを追加する
-
- Exports this item as an alias property of the root item.
- このアイテムを、ルートアイテムのエイリアスプロパティとしてエクスポートします。
-
-
- Component
- コンポーネント
-
-
- ID
- ID
-
-
- Custom ID
- Custom ID
-
Visibility
可視性
@@ -9106,10 +9086,6 @@ preferShaping プロパティを false に設定すると、このような機
Exports this item as an alias property of the root item.
このアイテムを、ルートアイテムのエイリアスプロパティとしてエクスポートします。
-
- Exports this item as an alias property of the root item.
- このアイテムを、ルートアイテムのエイリアスプロパティとしてエクスポートします。
-
TextInputSection
@@ -15854,10 +15830,6 @@ to version control (%2)
Evaluating Type Hierarchy
型階層を評価する
-
- Derived
- 派生
-
Evaluating type hierarchy...
型階層を評価する...
@@ -20466,10 +20438,6 @@ Do you want to retry?
Cannot evaluate %1 in current stack frame.
現在のスタック・フレームでは、%1 を評価できません。
-
- QML Debugger disconnected.
- QML デバッガは切断しました。
-
Context:
コンテキスト:
@@ -27683,10 +27651,6 @@ to project "%2".
Import Build
ビルドをインポートする
-
- %1 - temporary
- %1 - テンポラリ
-
Imported Kit
インポートされたキット
@@ -30646,22 +30610,6 @@ Preselects a desktop Qt for building the application if available.
Could not add %1 to project.
プロジェクトに %1 を追加できませんでした。
-
- All Files (%1)
- すべてのファイル (%1)
-
-
- Add Assets
- アセットを追加する
-
-
- Failed to Add Files
- ファイルの追加に失敗しました
-
-
- Could not add %1 to project.
- プロジェクトに %1 を追加できませんでした。
-
Resources
Title of library resources view
@@ -30821,14 +30769,6 @@ Locked items cannot be modified or selected.
%1 is an invalid ID.
%1 は無効な id です。
-
- Invalid ID
- 無効な ID
-
-
- %1 is an invalid ID.
- %1 は無効な id です。
-
%1 already exists.
%1 は既に存在しています。
@@ -31192,10 +31132,6 @@ Ids must begin with a lowercase letter.
&Go into Component
コンポーネント内へ移動(&G)
-
- &Go into Component
- コンポーネント内へ移動(&G)
-
Export as &Image...
画像としてエクスポート(&I)...
@@ -31910,10 +31846,6 @@ Do you want to save the data first?
Kit has no device.
キットにデバイスがありません。
-
- Qt version is too old.
- Qt のバージョンが古すぎます。
-
Qt version has no qmlscene command.
Qt バージョンには qmlscene コマンドがありません。
diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h
index 187cf673b95..3764775eaed 100644
--- a/src/libs/languageserverprotocol/jsonrpcmessages.h
+++ b/src/libs/languageserverprotocol/jsonrpcmessages.h
@@ -48,17 +48,15 @@ class JsonRpcMessage;
class LANGUAGESERVERPROTOCOL_EXPORT MessageId : public Utils::variant
{
public:
- MessageId() = default;
+ MessageId() : variant(QString()) {}
explicit MessageId(int id) : variant(id) {}
explicit MessageId(const QString &id) : variant(id) {}
explicit MessageId(const QJsonValue &value)
{
if (value.isDouble())
- *this = MessageId(value.toInt());
- else if (value.isString())
- *this = MessageId(value.toString());
+ emplace(value.toInt());
else
- m_valid = false;
+ emplace(value.toString());
}
operator QJsonValue() const
@@ -70,7 +68,14 @@ public:
return QJsonValue();
}
- bool isValid() const { return m_valid; }
+ bool isValid() const
+ {
+ if (Utils::holds_alternative(*this))
+ return true;
+ const QString *id = Utils::get_if(this);
+ QTC_ASSERT(id, return false);
+ return !id->isEmpty();
+ }
QString toString() const
{
@@ -89,9 +94,6 @@ public:
return QT_PREPEND_NAMESPACE(qHash(Utils::get(id)));
return QT_PREPEND_NAMESPACE(qHash(0));
}
-
-private:
- bool m_valid = true;
};
template
diff --git a/src/plugins/clangcodemodel/clangdfollowsymbol.cpp b/src/plugins/clangcodemodel/clangdfollowsymbol.cpp
index 4c7400914ab..102e49acf4e 100644
--- a/src/plugins/clangcodemodel/clangdfollowsymbol.cpp
+++ b/src/plugins/clangcodemodel/clangdfollowsymbol.cpp
@@ -135,7 +135,7 @@ public:
std::set openedFiles;
VirtualFunctionAssistProcessor *virtualFuncAssistProcessor = nullptr;
QMetaObject::Connection focusChangedConnection;
- bool finished = false;
+ bool done = false;
};
ClangdFollowSymbol::ClangdFollowSymbol(ClangdClient *client, const QTextCursor &cursor,
@@ -146,14 +146,14 @@ ClangdFollowSymbol::ClangdFollowSymbol(ClangdClient *client, const QTextCursor &
openInSplit))
{
// Abort if the user does something else with the document in the meantime.
- connect(document, &TextDocument::contentsChanged, this, &ClangdFollowSymbol::done,
+ connect(document, &TextDocument::contentsChanged, this, &ClangdFollowSymbol::emitDone,
Qt::QueuedConnection);
if (editorWidget) {
connect(editorWidget, &CppEditorWidget::cursorPositionChanged,
- this, &ClangdFollowSymbol::done, Qt::QueuedConnection);
+ this, &ClangdFollowSymbol::emitDone, Qt::QueuedConnection);
}
d->focusChangedConnection = connect(qApp, &QApplication::focusChanged,
- this, &ClangdFollowSymbol::done, Qt::QueuedConnection);
+ this, &ClangdFollowSymbol::emitDone, Qt::QueuedConnection);
// Step 1: Follow the symbol via "Go to Definition". At the same time, request the
// AST node corresponding to the cursor position, so we can find out whether
@@ -163,7 +163,7 @@ ClangdFollowSymbol::ClangdFollowSymbol(ClangdClient *client, const QTextCursor &
if (!self)
return;
if (!link.hasValidTarget()) {
- emit self->done();
+ self->emitDone();
return;
}
self->d->defLink = link;
@@ -205,6 +205,15 @@ void ClangdFollowSymbol::clear()
d->pendingGotoDefRequests.clear();
}
+void ClangdFollowSymbol::emitDone()
+{
+ if (d->done)
+ return;
+
+ d->done = true;
+ emit done();
+}
+
bool ClangdFollowSymbol::Private::defLinkIsAmbiguous() const
{
// Even if the call is to a virtual function, it might not be ambiguous:
@@ -238,18 +247,18 @@ void ClangdFollowSymbol::Private::handleDocumentInfoResults()
// If something went wrong, we just follow the original link.
if (symbolsToDisplay.isEmpty()) {
callback(defLink);
- emit q->done();
+ q->emitDone();
return;
}
if (symbolsToDisplay.size() == 1) {
callback(symbolsToDisplay.first().second);
- emit q->done();
+ q->emitDone();
return;
}
QTC_ASSERT(virtualFuncAssistProcessor && virtualFuncAssistProcessor->running(),
- emit q->done(); return);
+ q->emitDone(); return);
virtualFuncAssistProcessor->finalize();
}
@@ -301,7 +310,7 @@ void ClangdFollowSymbol::VirtualFunctionAssistProcessor::resetData(bool resetFol
return;
m_followSymbol->d->virtualFuncAssistProcessor = nullptr;
if (resetFollowSymbolData)
- emit m_followSymbol->done();
+ m_followSymbol->emitDone();
m_followSymbol = nullptr;
}
@@ -374,7 +383,7 @@ void ClangdFollowSymbol::Private::handleGotoDefinitionResult()
// No dis-ambiguation necessary. Call back with the link and finish.
if (!defLinkIsAmbiguous()) {
callback(defLink);
- emit q->done();
+ q->emitDone();
return;
}
@@ -408,7 +417,7 @@ void ClangdFollowSymbol::Private::handleGotoImplementationResult(
// We didn't find any further candidates, so jump to the original definition link.
if (allLinks.size() == 1 && pendingGotoImplRequests.isEmpty()) {
callback(allLinks.first());
- emit q->done();
+ q->emitDone();
return;
}
diff --git a/src/plugins/clangcodemodel/clangdfollowsymbol.h b/src/plugins/clangcodemodel/clangdfollowsymbol.h
index 4512675d041..fffe2c42b9f 100644
--- a/src/plugins/clangcodemodel/clangdfollowsymbol.h
+++ b/src/plugins/clangcodemodel/clangdfollowsymbol.h
@@ -55,6 +55,7 @@ signals:
void done();
private:
+ void emitDone();
class VirtualFunctionAssistProcessor;
class VirtualFunctionAssistProvider;
diff --git a/src/plugins/clangcodemodel/clangdswitchdecldef.cpp b/src/plugins/clangcodemodel/clangdswitchdecldef.cpp
index d3ce7187631..28c27034f48 100644
--- a/src/plugins/clangcodemodel/clangdswitchdecldef.cpp
+++ b/src/plugins/clangcodemodel/clangdswitchdecldef.cpp
@@ -68,6 +68,7 @@ public:
const LinkHandler callback;
optional ast;
optional docSymbols;
+ bool done = false;
};
ClangdSwitchDeclDef::ClangdSwitchDeclDef(ClangdClient *client, TextDocument *doc,
@@ -75,14 +76,14 @@ ClangdSwitchDeclDef::ClangdSwitchDeclDef(ClangdClient *client, TextDocument *doc
: QObject(client), d(new Private(this, client, doc, cursor, editorWidget, callback))
{
// Abort if the user does something else with the document in the meantime.
- connect(doc, &TextDocument::contentsChanged, this, &ClangdSwitchDeclDef::done,
+ connect(doc, &TextDocument::contentsChanged, this, &ClangdSwitchDeclDef::emitDone,
Qt::QueuedConnection);
if (editorWidget) {
connect(editorWidget, &CppEditorWidget::cursorPositionChanged,
- this, &ClangdSwitchDeclDef::done, Qt::QueuedConnection);
+ this, &ClangdSwitchDeclDef::emitDone, Qt::QueuedConnection);
}
connect(qApp, &QApplication::focusChanged,
- this, &ClangdSwitchDeclDef::done, Qt::QueuedConnection);
+ this, &ClangdSwitchDeclDef::emitDone, Qt::QueuedConnection);
connect(client->documentSymbolCache(), &DocumentSymbolCache::gotSymbols, this,
[this](const DocumentUri &uri, const DocumentSymbolsResult &symbols) {
@@ -101,11 +102,11 @@ ClangdSwitchDeclDef::ClangdSwitchDeclDef(ClangdClient *client, TextDocument *doc
if (!self)
return;
if (!d->document) {
- emit done();
+ emitDone();
return;
}
if (!ast.isValid()) {
- emit done();
+ emitDone();
return;
}
d->ast = ast;
@@ -122,6 +123,15 @@ ClangdSwitchDeclDef::~ClangdSwitchDeclDef()
delete d;
}
+void ClangdSwitchDeclDef::emitDone()
+{
+ if (d->done)
+ return;
+
+ d->done = true;
+ emit done();
+}
+
optional ClangdSwitchDeclDef::Private::getFunctionNode() const
{
QTC_ASSERT(ast, return {});
@@ -160,7 +170,7 @@ QTextCursor ClangdSwitchDeclDef::Private::cursorForFunctionName(const ClangdAstN
void ClangdSwitchDeclDef::Private::handleDeclDefSwitchReplies()
{
if (!document) {
- emit q->done();
+ q->emitDone();
return;
}
@@ -171,7 +181,7 @@ void ClangdSwitchDeclDef::Private::handleDeclDefSwitchReplies()
ast->print(0);
const Utils::optional functionNode = getFunctionNode();
if (!functionNode) {
- emit q->done();
+ q->emitDone();
return;
}
@@ -182,7 +192,7 @@ void ClangdSwitchDeclDef::Private::handleDeclDefSwitchReplies()
client->followSymbol(document.data(), funcNameCursor, editorWidget, callback,
true, false);
}
- emit q->done();
+ q->emitDone();
}
} // namespace ClangCodeModel::Internal
diff --git a/src/plugins/clangcodemodel/clangdswitchdecldef.h b/src/plugins/clangcodemodel/clangdswitchdecldef.h
index 8c278bf6555..44e296686db 100644
--- a/src/plugins/clangcodemodel/clangdswitchdecldef.h
+++ b/src/plugins/clangcodemodel/clangdswitchdecldef.h
@@ -52,6 +52,7 @@ signals:
void done();
private:
+ void emitDone();
class Private;
Private * const d;
};
diff --git a/src/plugins/languageclient/semantichighlightsupport.cpp b/src/plugins/languageclient/semantichighlightsupport.cpp
index 9536052b811..7fbf6645912 100644
--- a/src/plugins/languageclient/semantichighlightsupport.cpp
+++ b/src/plugins/languageclient/semantichighlightsupport.cpp
@@ -88,6 +88,7 @@ void SemanticTokenSupport::reloadSemanticTokensImpl(TextDocument *textDocument,
filePath,
documentVersion = m_client->documentVersion(filePath)](
const SemanticTokensFullRequest::Response &response) {
+ m_runningRequests.remove(filePath);
if (const auto error = response.error()) {
qCDebug(LOGLSPHIGHLIGHT)
<< "received error" << error->code() << error->message() << "for" << filePath;
@@ -120,6 +121,10 @@ void SemanticTokenSupport::reloadSemanticTokensImpl(TextDocument *textDocument,
request.setResponseCallback(responseCallback);
qCDebug(LOGLSPHIGHLIGHT) << "Requesting all tokens for" << filePath << "with version"
<< m_client->documentVersion(filePath);
+ MessageId &id = m_runningRequests[filePath];
+ if (id.isValid())
+ m_client->cancelRequest(id);
+ id = request.id();
m_client->sendMessage(request);
}
}
@@ -151,6 +156,7 @@ void SemanticTokenSupport::updateSemanticTokensImpl(TextDocument *textDocument,
request.setResponseCallback(
[this, filePath, documentVersion, remainingRerequests](
const SemanticTokensFullDeltaRequest::Response &response) {
+ m_runningRequests.remove(filePath);
if (const auto error = response.error()) {
qCDebug(LOGLSPHIGHLIGHT) << "received error" << error->code()
<< error->message() << "for" << filePath;
@@ -168,6 +174,10 @@ void SemanticTokenSupport::updateSemanticTokensImpl(TextDocument *textDocument,
});
qCDebug(LOGLSPHIGHLIGHT)
<< "Requesting delta for" << filePath << "with version" << documentVersion;
+ MessageId &id = m_runningRequests[filePath];
+ if (id.isValid())
+ m_client->cancelRequest(id);
+ id = request.id();
m_client->sendMessage(request);
return;
}
diff --git a/src/plugins/languageclient/semantichighlightsupport.h b/src/plugins/languageclient/semantichighlightsupport.h
index a03947c9153..d8314979111 100644
--- a/src/plugins/languageclient/semantichighlightsupport.h
+++ b/src/plugins/languageclient/semantichighlightsupport.h
@@ -120,6 +120,7 @@ private:
QStringList m_tokenTypeStrings;
QStringList m_tokenModifierStrings;
QSet m_docReloadQueue;
+ QHash m_runningRequests;
};
} // namespace LanguageClient
diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp b/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp
index 4884925c0e3..b174cafe6db 100644
--- a/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp
+++ b/src/plugins/qmldesigner/components/connectioneditor/connectionview.cpp
@@ -35,6 +35,10 @@
#include
#include
#include
+#include
+#include
+
+#include
#include
@@ -268,6 +272,25 @@ BackendModel *ConnectionView::backendModel() const
return m_backendModel;
}
+ConnectionView *ConnectionView::instance()
+{
+
+ static ConnectionView *s_instance = nullptr;
+
+ if (s_instance)
+ return s_instance;
+
+ const auto views = QmlDesignerPlugin::instance()->viewManager().views();
+ for (auto *view : views) {
+ ConnectionView *myView = qobject_cast(view);
+ if (myView)
+ s_instance = myView;
+ }
+
+ QTC_ASSERT(s_instance, return nullptr);
+ return s_instance;
+}
+
} // namesapce Internal
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/connectioneditor/connectionview.h b/src/plugins/qmldesigner/components/connectioneditor/connectionview.h
index fb934ba3855..7bf3064f830 100644
--- a/src/plugins/qmldesigner/components/connectioneditor/connectionview.h
+++ b/src/plugins/qmldesigner/components/connectioneditor/connectionview.h
@@ -83,13 +83,14 @@ public:
QTableView *dynamicPropertiesTableView() const;
QTableView *backendView() const;
-protected:
+ DynamicPropertiesModel *dynamicPropertiesModel() const;
+
ConnectionViewWidget *connectionViewWidget() const;
ConnectionModel *connectionModel() const;
BindingModel *bindingModel() const;
- DynamicPropertiesModel *dynamicPropertiesModel() const;
BackendModel *backendModel() const;
+ static ConnectionView *instance();
private: //variables
QPointer m_connectionViewWidget;
diff --git a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp
index e45cac43287..49446c324e0 100644
--- a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp
+++ b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp
@@ -63,22 +63,6 @@ QString idOrTypeNameForNode(const QmlDesigner::ModelNode &modelNode)
return idLabel;
}
-QmlDesigner::PropertyName unusedProperty(const QmlDesigner::ModelNode &modelNode)
-{
- QmlDesigner::PropertyName propertyName = "property";
- int i = 0;
- if (modelNode.metaInfo().isValid()) {
- while (true) {
- const QmlDesigner::PropertyName currentPropertyName = propertyName + QString::number(i).toLatin1();
- if (!modelNode.hasProperty(currentPropertyName) && !modelNode.metaInfo().hasProperty(currentPropertyName))
- return currentPropertyName;
- i++;
- }
- }
-
- return propertyName;
-}
-
QVariant convertVariantForTypeName(const QVariant &variant, const QmlDesigner::TypeName &typeName)
{
QVariant returnValue = variant;
@@ -120,6 +104,22 @@ namespace QmlDesigner {
namespace Internal {
+QmlDesigner::PropertyName DynamicPropertiesModel::unusedProperty(const QmlDesigner::ModelNode &modelNode)
+{
+ QmlDesigner::PropertyName propertyName = "property";
+ int i = 0;
+ if (modelNode.metaInfo().isValid()) {
+ while (true) {
+ const QmlDesigner::PropertyName currentPropertyName = propertyName + QString::number(i).toLatin1();
+ if (!modelNode.hasProperty(currentPropertyName) && !modelNode.metaInfo().hasProperty(currentPropertyName))
+ return currentPropertyName;
+ i++;
+ }
+ }
+
+ return propertyName;
+}
+
DynamicPropertiesModel::DynamicPropertiesModel(ConnectionView *parent)
: QStandardItemModel(parent)
, m_connectionView(parent)
diff --git a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h
index 3b7d0cf4231..a5b674c1f8a 100644
--- a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h
+++ b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h
@@ -69,6 +69,8 @@ public:
BindingProperty replaceVariantWithBinding(const PropertyName &name, bool copyValue = false);
void resetProperty(const PropertyName &name);
+ QmlDesigner::PropertyName unusedProperty(const QmlDesigner::ModelNode &modelNode);
+
protected:
void addProperty(const QVariant &propertyValue,
const QString &propertyType,
diff --git a/src/plugins/qmldesigner/components/edit3d/backgroundcolorselection.cpp b/src/plugins/qmldesigner/components/edit3d/backgroundcolorselection.cpp
index 3d7a9207c08..40d5ca4084b 100644
--- a/src/plugins/qmldesigner/components/edit3d/backgroundcolorselection.cpp
+++ b/src/plugins/qmldesigner/components/edit3d/backgroundcolorselection.cpp
@@ -23,8 +23,6 @@
**
****************************************************************************/
-#pragma once
-
#include
#include
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
index 4ae156dc921..af96ddd5813 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
@@ -187,4 +187,3 @@ private:
QML_DECLARE_TYPE(PropertyEditorValue)
QML_DECLARE_TYPE(PropertyEditorNodeWrapper)
-QML_DECLARE_TYPE(QQmlPropertyMap)
diff --git a/src/plugins/qmldesigner/designercore/include/viewmanager.h b/src/plugins/qmldesigner/designercore/include/viewmanager.h
index dd77c07f459..93d05c7087d 100644
--- a/src/plugins/qmldesigner/designercore/include/viewmanager.h
+++ b/src/plugins/qmldesigner/designercore/include/viewmanager.h
@@ -105,6 +105,7 @@ public:
void disableStandardViews();
void enableStandardViews();
+ QList views() const;
private: // functions
Q_DISABLE_COPY(ViewManager)
@@ -122,7 +123,6 @@ private: // functions
void switchStateEditorViewToBaseState();
void switchStateEditorViewToSavedState();
- QList views() const;
QList standardViews() const;
private: // variables
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp
index 38a02059696..28d99003cae 100644
--- a/src/plugins/qmldesigner/designmodewidget.cpp
+++ b/src/plugins/qmldesigner/designmodewidget.cpp
@@ -255,6 +255,8 @@ void DesignModeWidget::setup()
// First get all navigation views
QList factories = Core::INavigationWidgetFactory::allNavigationFactories();
+ QList viewCommands;
+
for (Core::INavigationWidgetFactory *factory : factories) {
Core::NavigationView navigationView;
navigationView.widget = nullptr;
@@ -304,7 +306,7 @@ void DesignModeWidget::setup()
actionToggle.withSuffix(uniqueId + "Widget"),
designContext);
command->setAttribute(Core::Command::CA_Hide);
- mviews->addAction(command);
+ viewCommands.append(command);
}
}
@@ -327,7 +329,7 @@ void DesignModeWidget::setup()
actionToggle.withSuffix(widgetInfo.uniqueId + "Widget"),
designContext);
command->setAttribute(Core::Command::CA_Hide);
- mviews->addAction(command);
+ viewCommands.append(command);
}
// Finally the output pane
@@ -347,12 +349,19 @@ void DesignModeWidget::setup()
actionToggle.withSuffix("OutputPaneWidget"),
designContext);
command->setAttribute(Core::Command::CA_Hide);
- mviews->addAction(command);
+ viewCommands.append(command);
connect(outputPanePlaceholder, &Core::OutputPanePlaceHolder::visibilityChangeRequested,
m_outputPaneDockWidget, &ADS::DockWidget::toggleView);
}
+ std::sort(viewCommands.begin(), viewCommands.end(), [](Core::Command *first, Core::Command *second){
+ return first->description() < second->description();
+ });
+
+ for (Core::Command *command : viewCommands)
+ mviews->addAction(command);
+
// Create toolbars
auto toolBar = new QToolBar();
diff --git a/src/plugins/remotelinux/makeinstallstep.cpp b/src/plugins/remotelinux/makeinstallstep.cpp
index 534ebc25399..79a90814eea 100644
--- a/src/plugins/remotelinux/makeinstallstep.cpp
+++ b/src/plugins/remotelinux/makeinstallstep.cpp
@@ -107,7 +107,7 @@ MakeInstallStep::MakeInstallStep(BuildStepList *parent, Id id) : MakeStep(parent
cleanInstallRootAspect->setSettingsKey(CleanInstallRootAspectId);
cleanInstallRootAspect->setLabel(tr("Clean install root first:"),
BoolAspect::LabelPlacement::InExtraLabel);
- cleanInstallRootAspect->setValue(false);
+ cleanInstallRootAspect->setValue(true);
const auto commandLineAspect = addAspect();
commandLineAspect->setId(FullCommandLineAspectId);
diff --git a/src/shared/qbs b/src/shared/qbs
index 85711c54b13..5d45d6e6a5b 160000
--- a/src/shared/qbs
+++ b/src/shared/qbs
@@ -1 +1 @@
-Subproject commit 85711c54b13cb119ccfc0473bfe0a064e3ca6403
+Subproject commit 5d45d6e6a5b4fbb13b9ee3e5949dbfd1978c667a
diff --git a/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp b/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp
index fe3fadd4f7d..2a6f7b1ac30 100644
--- a/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp
+++ b/src/tools/cplusplus-mkvisitor/cplusplus-mkvisitor.cpp
@@ -403,7 +403,7 @@ protected:
if (Symbol *s = klass->find(accept0)) {
if (Function *meth = s->type()->asFunctionType()) {
if (! meth->isPureVirtual()) {
- for (const ClassOrNamespace *u : b->usings()) {
+ for (ClassOrNamespace *u : b->usings()) {
if (interfaces.contains(u)) {
// qDebug() << oo(klass->name()) << "implements" << oo(u->symbols().first()->name());
} else {