Использование типа qml в качестве QWindow в коде C ++ - PullRequest
0 голосов
/ 04 декабря 2018

Я создал MainWindow : public QMainWindow и файл пользовательского интерфейса qtquick (для набора инструментов) в qtcreator.Я хочу, чтобы панель инструментов отображалась как плавающее подокно в главном окне.Я пытаюсь использовать QMdiArea для этого.Урок, который я видел, говорит, что мне нужно добавить окно к QMdiArea, например:

mdi->addSubWindow(win);

, где win - это QWidget.Как использовать набор инструментов, созданный с помощью qml, в моем коде C ++?

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете использовать QQuickWidget, но помните, что корнем QML должен быть Item или класс, который наследует от Item, это не может быть Window или ApplicationWindow.

#include <QApplication>
#include <QMainWindow>
#include <QMdiArea>
#include <QQuickWidget>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QApplication app(argc, argv);
    QMainWindow w;
    QMdiArea *mdiarea = new QMdiArea;
    w.setCentralWidget(mdiarea);
    QQuickWidget *toolbar = new QQuickWidget(QUrl("qrc:/main.qml"));
    toolbar->setResizeMode(QQuickWidget::SizeRootObjectToView);
    mdiarea->addSubWindow(toolbar);
    w.show();
    return app.exec();
}

main.qml

import QtQuick 2.9
import QtQuick.Controls 2.4

Rectangle {
    visible: true
    width: 640
    height: 480
    color: "red"
    Button{
        text: "Stack Overflow"
        anchors.centerIn: parent
    }
}

enter image description here

...