diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index 3611a397ea9..d226f6fc894 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -1157,12 +1157,16 @@ QStandardItemModel *ListField::itemModel() return m_itemModel; } -void ListField::selectRow(int row) +bool ListField::selectRow(int row) { - auto index = itemModel()->index(row, 0); + QModelIndex index = itemModel()->index(row, 0); + if (!index.isValid()) + return false; + selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect); this->updateIndex(); + return true; } QItemSelectionModel *ListField::selectionModel() const @@ -1271,12 +1275,15 @@ QVariant ComboBoxField::toSettings() const return {}; } -void ComboBoxField::selectRow(int row) +bool ComboBoxField::selectRow(int row) { - ListField::selectRow(row); + if (!ListField::selectRow(row)) + return false; auto w = qobject_cast(widget()); w->setCurrentIndex(row); + + return true; } int ComboBoxField::selectedRow() const diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h index ed89746d0b2..db8a1b06fb7 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h @@ -282,7 +282,7 @@ public: ~ListField() override; QStandardItemModel *model() { return m_itemModel; } - virtual void selectRow(int row); + virtual bool selectRow(int row); protected: bool parseData(const QVariant &data, QString *errorMessage) override; @@ -351,7 +351,7 @@ private: } public: - void selectRow(int row) override; + bool selectRow(int row) override; int selectedRow() const; }; diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index d8fbbb1cd7d..2874cc9c8d7 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -78,6 +78,7 @@ using namespace LanguageUtils; using namespace QmlJS; static Q_LOGGING_CATEGORY(rewriterBenchmark, "qtc.rewriter.load", QtWarningMsg) +static Q_LOGGING_CATEGORY(texttomodelMergerDebug, "qtc.texttomodelmerger.debug", QtDebugMsg) namespace { @@ -574,7 +575,7 @@ public: if (parentObject) *parentObject = objectValue; if (!value) { - qWarning() << Q_FUNC_INFO << "Skipping invalid property name" << propertyName; + qCInfo(texttomodelMergerDebug) << Q_FUNC_INFO << "Skipping invalid property name" << propertyName; return false; } @@ -655,9 +656,10 @@ public: const ObjectValue *containingObject = nullptr; QString name; if (!lookupProperty(propertyPrefix, propertyId, &property, &containingObject, &name)) { - qWarning() << Q_FUNC_INFO << "Unknown property" << propertyPrefix + QLatin1Char('.') + toString(propertyId) - << "on line" << propertyId->identifierToken.startLine - << "column" << propertyId->identifierToken.startColumn; + qCInfo(texttomodelMergerDebug) << Q_FUNC_INFO << "Unknown property" + << propertyPrefix + QLatin1Char('.') + toString(propertyId) + << "on line" << propertyId->identifierToken.startLine + << "column" << propertyId->identifierToken.startColumn; return hasQuotes ? QVariant(cleanedValue) : cleverConvert(cleanedValue); } diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp index 51d62a2bbe5..e9de2cb251b 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.cpp @@ -97,17 +97,20 @@ public: Sqlite::JournalMode::Wal, Sqlite::LockingMode::Normal}; ImageCacheStorage storage{database}; - ImageCacheConnectionManager connectionManager; - ImageCacheCollector collector{connectionManager, - ImageCacheCollectorNullImageHandling::DontCaptureNullImage}; - TimeStampProvider timeStampProvider; AsynchronousExplicitImageCache cache{storage}; - AsynchronousImageFactory factory{storage, timeStampProvider, collector}; }; class QmlDesignerProjectManagerProjectData { public: + QmlDesignerProjectManagerProjectData(ImageCacheStorage &storage) + : factory{storage, timeStampProvider, collector} + {} + ImageCacheConnectionManager connectionManager; + ImageCacheCollector collector{connectionManager, + ImageCacheCollectorNullImageHandling::DontCaptureNullImage}; + TimeStampProvider timeStampProvider; + AsynchronousImageFactory factory; ::ProjectExplorer::Target *activeTarget = nullptr; }; @@ -157,8 +160,8 @@ void QmlDesignerProjectManager::currentEditorChanged(::Core::IEditor *) m_projectData->activeTarget); if (qmlBuildSystem) { - m_imageCacheData->collector.setTarget(m_projectData->activeTarget); - m_imageCacheData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8()); + m_projectData->collector.setTarget(m_projectData->activeTarget); + m_projectData->factory.generate(qmlBuildSystem->mainFilePath().toString().toUtf8()); } } @@ -166,16 +169,14 @@ void QmlDesignerProjectManager::editorsClosed(const QList<::Core::IEditor *> &) void QmlDesignerProjectManager::projectAdded(::ProjectExplorer::Project *project) { - m_projectData = std::make_unique(); + m_projectData = std::make_unique(m_imageCacheData->storage); m_projectData->activeTarget = project->activeTarget(); } void QmlDesignerProjectManager::aboutToRemoveProject(::ProjectExplorer::Project *) { - if (m_projectData) { - m_imageCacheData->collector.setTarget(m_projectData->activeTarget); + if (m_projectData) m_projectData.reset(); - } } void QmlDesignerProjectManager::projectRemoved(::ProjectExplorer::Project *) {} diff --git a/src/plugins/qmldesigner/qmldesignerprojectmanager.h b/src/plugins/qmldesigner/qmldesignerprojectmanager.h index f4a958fac5d..4b993ba74d2 100644 --- a/src/plugins/qmldesigner/qmldesignerprojectmanager.h +++ b/src/plugins/qmldesigner/qmldesignerprojectmanager.h @@ -62,7 +62,7 @@ private: void projectRemoved(::ProjectExplorer::Project *project); private: - std::unique_ptr m_projectData; std::unique_ptr m_imageCacheData; + std::unique_ptr m_projectData; }; } // namespace QmlDesigner diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp index 80b2d08ca7e..0b637e24a74 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectfileformat.cpp @@ -99,6 +99,11 @@ QmlProjectItem *QmlProjectFileFormat::parseProjectFile(const Utils::FilePath &fi if (fileSelectorsProperty.isValid()) projectItem->setFileSelectors(fileSelectorsProperty.value.toStringList()); + const auto multilanguageSupportProperty = rootNode->property( + QLatin1String("multilanguageSupport")); + if (multilanguageSupportProperty.isValid()) + projectItem->setMultilanguageSupport(multilanguageSupportProperty.value.toBool()); + const auto languagesProperty = rootNode->property(QLatin1String("supportedLanguages")); if (languagesProperty.isValid()) projectItem->setSupportedLanguages(languagesProperty.value.toStringList()); diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp index 249474a224f..806c873817b 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.cpp @@ -77,6 +77,11 @@ void QmlProjectItem::setFileSelectors(const QStringList &selectors) m_fileSelectors = selectors; } +void QmlProjectItem::setMultilanguageSupport(const bool isEnabled) +{ + m_multilanguageSupport = isEnabled; +} + void QmlProjectItem::setSupportedLanguages(const QStringList &languages) { if (m_supportedLanguages != languages) diff --git a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h index a104e906464..01d3b8572e0 100644 --- a/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h +++ b/src/plugins/qmlprojectmanager/fileformat/qmlprojectitem.h @@ -63,6 +63,9 @@ public: QStringList fileSelectors() const { return m_fileSelectors; } void setFileSelectors(const QStringList &selectors); + bool multilanguageSupport() const { return m_multilanguageSupport; } + void setMultilanguageSupport(const bool isEnabled); + QStringList supportedLanguages() const { return m_supportedLanguages; } void setSupportedLanguages(const QStringList &languages); @@ -94,6 +97,7 @@ protected: QString m_targetDirectory; QStringList m_importPaths; QStringList m_fileSelectors; + bool m_multilanguageSupport; QStringList m_supportedLanguages; QString m_primaryLanguage; QString m_mainFile; diff --git a/src/plugins/qmlprojectmanager/qmlmultilanguageaspect.cpp b/src/plugins/qmlprojectmanager/qmlmultilanguageaspect.cpp index 662e904974f..cfb2bfaf474 100644 --- a/src/plugins/qmlprojectmanager/qmlmultilanguageaspect.cpp +++ b/src/plugins/qmlprojectmanager/qmlmultilanguageaspect.cpp @@ -75,8 +75,9 @@ QmlMultiLanguageAspect::QmlMultiLanguageAspect(ProjectExplorer::Target *target) { setVisible(isMultilanguagePresent()); setSettingsKey(Constants::USE_MULTILANGUAGE_KEY); - setLabel(tr("Use MultiLanguage translation database."), BoolAspect::LabelPlacement::AtCheckBox); - setToolTip(tr("Enable loading application with special desktop SQLite translation database.")); + setLabel(tr("Use MultiLanguage in Form Editor."), BoolAspect::LabelPlacement::AtCheckBox); + setToolTip(tr("By enabling this Form Editor can read translations\n" + "from MultiLanguage plugin.")); setDefaultValue(!databaseFilePath().isEmpty()); QVariantMap getDefaultValues; diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index 52d655bbe95..9eccfdabff0 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -340,6 +340,13 @@ QStringList QmlBuildSystem::customFileSelectors() const return {}; } +bool QmlBuildSystem::multilanguageSupport() const +{ + if (m_projectItem) + return m_projectItem->multilanguageSupport(); + return false; +} + QStringList QmlBuildSystem::supportedLanguages() const { if (m_projectItem) diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index 143c1697d1b..89f5dd34454 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -88,6 +88,7 @@ public: Utils::EnvironmentItems environment() const; QStringList customImportPaths() const; QStringList customFileSelectors() const; + bool multilanguageSupport() const; QStringList supportedLanguages() const; void setSupportedLanguages(QStringList languages); QString primaryLanguage() const; diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index e0c7cb30459..7eb5a4f6786 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -120,16 +120,24 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id) connect(target, &Target::kitChanged, this, &RunConfiguration::update); m_multiLanguageAspect = addAspect(target); + auto buildSystem = qobject_cast(activeBuildSystem()); + if (buildSystem) + m_multiLanguageAspect->setValue(buildSystem->multilanguageSupport()); auto envAspect = addAspect(); - connect(m_multiLanguageAspect, &QmlMultiLanguageAspect::changed, envAspect, &EnvironmentAspect::environmentChanged); + connect(m_multiLanguageAspect, + &QmlMultiLanguageAspect::changed, + envAspect, + &EnvironmentAspect::environmentChanged); auto envModifier = [this](Environment env) { - if (auto bs = dynamic_cast(activeBuildSystem())) + if (auto bs = qobject_cast(activeBuildSystem())) env.modify(bs->environment()); - if (m_multiLanguageAspect && m_multiLanguageAspect->value() && !m_multiLanguageAspect->databaseFilePath().isEmpty()) { - env.set("QT_MULTILANGUAGE_DATABASE", m_multiLanguageAspect->databaseFilePath().toString()); + if (m_multiLanguageAspect && m_multiLanguageAspect->value() + && !m_multiLanguageAspect->databaseFilePath().isEmpty()) { + env.set("QT_MULTILANGUAGE_DATABASE", + m_multiLanguageAspect->databaseFilePath().toString()); env.set("QT_MULTILANGUAGE_LANGUAGE", m_multiLanguageAspect->currentLocale()); } else { env.unset("QT_MULTILANGUAGE_DATABASE"); diff --git a/src/plugins/studiowelcome/createproject.cpp b/src/plugins/studiowelcome/createproject.cpp index 1b6dd93e9d7..ce3b83945fb 100644 --- a/src/plugins/studiowelcome/createproject.cpp +++ b/src/plugins/studiowelcome/createproject.cpp @@ -68,6 +68,7 @@ void CreateProject::processFieldPage(ProjectExplorer::JsonFieldPage *page) auto widthField = dynamic_cast(page->jsonField("CustomScreenWidth")); auto heightField = dynamic_cast(page->jsonField("CustomScreenHeight")); + // TODO: use m_wizard to set these text items? if (widthField && heightField) { if (!m_customWidth.isEmpty() && !m_customHeight.isEmpty()) { widthField->setText(m_customWidth); diff --git a/src/plugins/studiowelcome/qdsnewdialog.cpp b/src/plugins/studiowelcome/qdsnewdialog.cpp index 83a966caeb0..0324a7de93c 100644 --- a/src/plugins/studiowelcome/qdsnewdialog.cpp +++ b/src/plugins/studiowelcome/qdsnewdialog.cpp @@ -170,17 +170,26 @@ void QdsNewDialog::onProjectCanBeCreatedChanged(bool value) emit fieldsValidChanged(); } +void QdsNewDialog::updateScreenSizes() +{ + int index = m_wizard.screenSizeIndex(m_currentPreset->screenSizeName); + if (index > -1) { + setScreenSizeIndex(index); + } else { + index = m_screenSizeModel->appendItem(m_currentPreset->screenSizeName); + setScreenSizeIndex(index); + } + + m_screenSizeModel->reset(); +} + void QdsNewDialog::onWizardCreated(QStandardItemModel *screenSizeModel, QStandardItemModel *styleModel) { m_screenSizeModel->setBackendModel(screenSizeModel); m_styleModel->setBackendModel(styleModel); if (m_qmlDetailsLoaded) { - int index = m_wizard.screenSizeIndex(m_currentPreset->screenSizeName); - if (index > -1) - setScreenSizeIndex(index); - - m_screenSizeModel->reset(); + updateScreenSizes(); emit haveVirtualKeyboardChanged(); emit haveTargetQtVersionChanged(); @@ -288,11 +297,7 @@ void QdsNewDialog::setWizardFactories(QList factories_, emit projectLocationChanged(); // So that QML knows to update the field if (m_qmlDetailsLoaded) { - int index = m_wizard.screenSizeIndex(m_currentPreset->screenSizeName); - if (index > -1) - setScreenSizeIndex(index); - - m_screenSizeModel->reset(); + updateScreenSizes(); } if (m_qmlStylesLoaded) @@ -334,9 +339,9 @@ void QdsNewDialog::accept() .execute(); PresetItem item = m_wizard.preset(); - QString screenSize = m_wizard.screenSizeName(m_qmlScreenSizeIndex); + QString customSizeName = m_qmlCustomWidth + " x " + m_qmlCustomHeight; - m_recentsStore.add(item.categoryId, item.name, screenSize); + m_recentsStore.add(item.categoryId, item.name, customSizeName); m_dialog->close(); m_dialog->deleteLater(); diff --git a/src/plugins/studiowelcome/qdsnewdialog.h b/src/plugins/studiowelcome/qdsnewdialog.h index 476750e5408..a4afa69e927 100644 --- a/src/plugins/studiowelcome/qdsnewdialog.h +++ b/src/plugins/studiowelcome/qdsnewdialog.h @@ -131,6 +131,8 @@ private: QString projectDescription() const { return m_qmlProjectDescription; } + void updateScreenSizes(); + private slots: void onDeletingWizard(); void onWizardCreated(QStandardItemModel *screenSizeModel, QStandardItemModel *styleModel); diff --git a/src/plugins/studiowelcome/qml/downloaddialog/PushButton.ui.qml b/src/plugins/studiowelcome/qml/downloaddialog/PushButton.ui.qml new file mode 100644 index 00000000000..db64b5751d5 --- /dev/null +++ b/src/plugins/studiowelcome/qml/downloaddialog/PushButton.ui.qml @@ -0,0 +1,119 @@ + + +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ +import QtQuick 2.15 +import QtQuick.Templates 2.15 +import ExampleCheckout 1.0 +import StudioTheme 1.0 + +Button { + id: control + + implicitWidth: Math.max( + buttonBackground ? buttonBackground.implicitWidth : 0, + textItem.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max( + buttonBackground ? buttonBackground.implicitHeight : 0, + textItem.implicitHeight + topPadding + bottomPadding) + leftPadding: 4 + rightPadding: 4 + + text: "My Button" + property alias fontpixelSize: textItem.font.pixelSize + //property bool decorated: false + state: "normal" + + background: buttonBackground + Rectangle { + id: buttonBackground + color: "#00000000" + implicitWidth: 100 + implicitHeight: 40 + opacity: enabled ? 1 : 0.3 + radius: 2 + border.color: "#047eff" + anchors.fill: parent + } + + contentItem: textItem + + Text { + id: textItem + text: control.text + font.pixelSize: 18 + + opacity: enabled ? 1.0 : 0.3 + color: Values.themeTextColor + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + states: [ + State { + name: "normal" + when: !control.down && !control.hovered + + PropertyChanges { + target: buttonBackground + color: Values.themeControlBackground + border.color: Values.themeControlOutline + } + + PropertyChanges { + target: textItem + color: Values.themeTextColor + } + }, + State { + name: "hover" + when: control.hovered && !control.down + PropertyChanges { + target: textItem + color: Values.themeTextColor + } + + PropertyChanges { + target: buttonBackground + color: Values.themeControlBackgroundHover + border.color: Values.themeControlOutline + } + }, + State { + name: "activeQds" + when: control.down + PropertyChanges { + target: textItem + color: "#ffffff" + } + + PropertyChanges { + target: buttonBackground + color: "#2e769e" + border.color: "#00000000" + } + } + ] +} diff --git a/src/plugins/studiowelcome/qml/downloaddialog/main.qml b/src/plugins/studiowelcome/qml/downloaddialog/main.qml index 33acd7e3e4e..0f3bc5f46f4 100644 --- a/src/plugins/studiowelcome/qml/downloaddialog/main.qml +++ b/src/plugins/studiowelcome/qml/downloaddialog/main.qml @@ -30,17 +30,23 @@ import ExampleCheckout 1.0 import QtQuick.Layouts 1.11 import StudioFonts 1.0 +import StudioTheme 1.0 + Rectangle { + + property color currentThemeBackground: Values.welcomeScreenBackground + property color themeTextColor: Values.themeTextColor + id: root property alias url: downloader.url property string path: fileExtractor.targetPath width: 620 height: 300 - color: "#2d2e30" + color: root.currentThemeBackground - property color textColor: "#b9b9ba" + property color textColor: Values.themeTextColor signal canceled signal accepted @@ -51,7 +57,7 @@ Rectangle { StackLayout { id: stackLayout anchors.fill: parent - currentIndex: root.tempFile.length === 0 ? 0 : 1 + currentIndex: root.tempFile.length === 0 ? 1 : 1 FileExtractor { id: fileExtractor @@ -76,7 +82,7 @@ Rectangle { Layout.fillHeight: true Layout.fillWidth: true - DialogButton { + PushButton { id: button x: 532 y: 432 @@ -87,6 +93,7 @@ Rectangle { anchors.rightMargin: 20 enabled: false onClicked: stackLayout.currentIndex = 1 + } CoolProgressBar { @@ -106,7 +113,7 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter } - DialogButton { + PushButton{ id: downloadbutton y: 420 enabled: !button.enabled @@ -119,6 +126,7 @@ Rectangle { downloadbutton.enabled = false downloader.start() } + } CircularIndicator { @@ -138,7 +146,7 @@ Rectangle { Layout.fillHeight: true Layout.fillWidth: true - DialogButton { + PushButton { id: nextPageDestination x: 532 y: 432 @@ -152,6 +160,7 @@ Rectangle { stackLayout.currentIndex = 2 fileExtractor.extract() } + } RowLayout { @@ -171,7 +180,7 @@ Rectangle { readOnly: true } - DialogButton { + PushButton{ id: browse text: qsTr("Browse") onClicked: fileExtractor.browse() @@ -189,7 +198,7 @@ Rectangle { visible: !nextPageDestination.enabled } - DialogButton { + PushButton{ id: button5 x: 400 y: 420 @@ -199,6 +208,7 @@ Rectangle { anchors.bottomMargin: 20 anchors.rightMargin: 20 onClicked: root.canceled() + } DialogLabel { @@ -215,8 +225,7 @@ Rectangle { Layout.fillHeight: true Layout.fillWidth: true - - DialogButton { + PushButton{ id: done x: 532 y: 432 @@ -227,6 +236,7 @@ Rectangle { anchors.rightMargin: 20 enabled: fileExtractor.finished onClicked: root.accepted() + } @@ -241,8 +251,7 @@ Rectangle { anchors.bottomMargin: 20 } - - DialogButton { + PushButton{ id: details x: 8 text: qsTr("Details") @@ -250,6 +259,7 @@ Rectangle { anchors.topMargin: 66 anchors.horizontalCenter: parent.horizontalCenter checkable: true + } @@ -291,7 +301,7 @@ Rectangle { Layout.fillHeight: true Layout.fillWidth: true - DialogButton { + PushButton{ id: finish x: 532 y: 432 @@ -301,6 +311,7 @@ Rectangle { anchors.bottomMargin: 20 anchors.rightMargin: 20 onClicked: root.canceled() + } DialogLabel { diff --git a/src/plugins/studiowelcome/screensizemodel.h b/src/plugins/studiowelcome/screensizemodel.h index 597811146e7..0bde90c2690 100644 --- a/src/plugins/studiowelcome/screensizemodel.h +++ b/src/plugins/studiowelcome/screensizemodel.h @@ -87,6 +87,12 @@ public: return {}; } + int appendItem(const QString &text) + { + m_backendModel->appendRow(new QStandardItem{text}); + return rowCount(QModelIndex{}) - 1; + } + QHash roleNames() const override { if (m_backendModel)