Qt5:派生QQuickWidget得到一个widget

Qt5: Derive QQuickWidget to get a widget

我尝试嵌入这个 qml 定义:

import QtQuick 2.0

Rectangle {
    id: mqldefinition
    color: "green"
    width: 100
    height: 100

    Text {
        id: text
        text: "This is a text!"
        font.pointSize: 14
        anchors.centerIn: parent
    }
}

在 Qt C++ 小部件中:

qmlwidget.h

#include <QQuickWidget>

class QmlWidget
      : public QQuickWidget
{
    Q_OBJECT
public:
    explicit QmlWidget(QWidget *parent = nullptr);
};

qmlwidget.h

#include "qmlwidget.h"

QmlWidget::QmlWidget(QWidget *parent)
   : QQuickWidget(parent)
{
    resize(100,100);
    setSource(QUrl("qrc:/definition.qml"));
}

此小部件应显示在主窗口中,如下所示:
mainwindow.cpp

#include "mainwindow.h"
#include "qmlwidget.h"

MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent)
{
    auto qmlWidget = new QmlWidget(this);
    qmlWidget->move(0,0);
}

但是没有显示:(


我在 SO 中找到了这个:

QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
view->show();

但我想将其实现为派生的 class :)

一种可能的解决方案是将 QmlWidget 设置为 centralWidget

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QmlWidget *qmlWidget = new QmlWidget;
    qmlWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
    setCentralWidget(qmlWidget);
}

另一种方法是使用布局来处理小部件的大小。