- 1. Pro-Datei-Setup
- 2. Widget.h
- 3. Widget.cpp
- 4. QmlLabel.qml
Bei der Entwicklung einer Anwendung in Qt kann es vorkommen, dass Sie in QML geschriebene Funktionen in eine in QWidgets geschriebene Anwendung implementieren müssen. Um ein solches Problem zu lösen, kann die Klasse QQuickWidget verwendet werden, die zum Rendern von QML dient.
Lassen Sie uns das einfachste Hallo Welt schreiben, das es uns ermöglicht, den in QML geschriebenen Code in einem Widget zu zeichnen, das in einem Fenster platziert wird, das auf QWidget. basiert. So sieht es so aus:
Pro-Datei-Setup
Um ein Objekt dieser Klasse zu verwenden, müssen Sie das quickwidgets. -Modul in die Pro-Projektdatei aufnehmen. Wir werden auch eine Ressourcendatei hinzufügen, die qml -Dateien enthalten wird, nämlich die Datei QmlLabel. qml.
QT += core gui quickwidgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = qmlwidget TEMPLATE = app DEFINES += QT_DEPRECATED_WARNINGS SOURCES += main.cpp\ widget.cpp HEADERS += widget.h FORMS += widget.ui RESOURCES += \ qml.qrc
Widget.h
Schließen Sie in der Header-Datei des Anwendungsfensters die Header-Datei QQuickWidget ein und deklarieren Sie ein Objekt dieser Klasse.
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QQuickWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget* ui; QQuickWidget* m_quickWidget; }; #endif // WIDGET_H
Widget.cpp
Das Projekt wurde mit dem Schnittstellendesigner erstellt, sodass der Code nur das Hinzufügen eines QQuickWidget -Objekts zum Grid-Layout -Layout umfasst, das für die Anordnung der Widgets im Fenster verantwortlich ist.
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); m_quickWidget = new QQuickWidget(this) ; m_quickWidget->setSource(QUrl("qrc:/QmlLabel.qml")); m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); ui->gridLayout->addWidget(m_quickWidget, 1, 0); } Widget::~Widget() { delete ui; }
QmlLabel.qml
Hello World-Inhalt in QML
import QtQuick 2.5 import QtQuick.Controls 2.1 Item { Text { id: text text: qsTr("Hello world") anchors.centerIn: parent } }