在C++代码中使用qml类型作为QWindow

问题描述 投票:0回答:2

我在 qtcreator 中创建了一个

MainWindow : public QMainWindow
和一个 qtquick ui 文件(用于工具箱)。我希望工具箱在主窗口中显示为浮动子窗口。我正在尝试使用
QMdiArea
来实现这一点。我看过的教程说我需要向
QMdiArea
添加一个窗口,如下所示:

mdi->addSubWindow(win);

其中

win
QWidget
。如何在我的 C++ 代码中使用使用 qml 创建的工具箱?

c++ qt qml qt5
2个回答
2
投票

您可以使用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
    }
}


0
投票

无需 QMdiArea 即可使用

int main(int argc, char *argv[])

{
    QApplication a(argc, argv);
    MainWindow w;
    QQuickWidget *toolbar = new QQuickWidget(QUrl("qrc:/main.qml"));
    toolbar->setResizeMode(QQuickWidget::SizeRootObjectToView);
    w.setCentralWidget(toolbar);
    w.show();
    return a.exec();
}

© www.soinside.com 2019 - 2024. All rights reserved.