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);
}
另一种方法是使用布局来处理小部件的大小。
我尝试嵌入这个 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);
}
另一种方法是使用布局来处理小部件的大小。