Evgenii Legotckoi
3 февраля 2017 г. 22:55

QML - Урок 027. Добавляем QML в проект на QWidget

При разработке приложения на Qt может случиться такая ситуация, когда потребуется в приложение, написанное на QWidgets внедрить функционал, написанный на QML. Для решения подобной задачи может использоваться класс QQuickWidget , который служит для рендеринга QML.

Напишем простейший hello world, который позволит отрисовать код, написанный на QML в виджете, который помещён в окно, основанное на QWidget. Чтобы оно выглядело следующим образом:


Настройка Pro файла

Чтобы воспользоваться объектом данного класса, необходимо в Pro файле проекта подключить модуль quickwidgets. Также добавим ресурсный файл, в котором будут содержаться qml файлы, а именно файл QmlLabel.qml.

  1. QT += core gui quickwidgets
  2.  
  3. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  4.  
  5. TARGET = qmlwidget
  6. TEMPLATE = app
  7.  
  8. DEFINES += QT_DEPRECATED_WARNINGS
  9.  
  10. SOURCES += main.cpp\
  11. widget.cpp
  12.  
  13. HEADERS += widget.h
  14.  
  15. FORMS += widget.ui
  16.  
  17. RESOURCES += \
  18. qml.qrc

widget.h

В заголовочном файле окна приложения подключим заголовочный файл QQuickWidget и объявим объект данного класса.

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3.  
  4. #include <QWidget>
  5. #include <QQuickWidget>
  6.  
  7. namespace Ui {
  8. class Widget;
  9. }
  10.  
  11. class Widget : public QWidget
  12. {
  13. Q_OBJECT
  14.  
  15. public:
  16. explicit Widget(QWidget *parent = 0);
  17. ~Widget();
  18.  
  19. private:
  20. Ui::Widget* ui;
  21. QQuickWidget* m_quickWidget;
  22. };
  23.  
  24. #endif // WIDGET_H

widget.cpp

Проект создавался с помощью дизайнера интерфейсов, поэтому в коде будет присутствовать только добавление объекта QQuickWidget в размещение Grid Layout , которое отвечает за компоновку виджетов в окне.

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3.  
  4. Widget::Widget(QWidget *parent) :
  5. QWidget(parent),
  6. ui(new Ui::Widget)
  7. {
  8. ui->setupUi(this);
  9. m_quickWidget = new QQuickWidget(this) ;
  10. m_quickWidget->setSource(QUrl("qrc:/QmlLabel.qml"));
  11. m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
  12. ui->gridLayout->addWidget(m_quickWidget, 1, 0);
  13. }
  14.  
  15. Widget::~Widget()
  16. {
  17. delete ui;
  18. }

QmlLabel.qml

Содержимое Hello World на QML

  1. import QtQuick 2.5
  2. import QtQuick.Controls 2.1
  3.  
  4. Item {
  5.  
  6. Text {
  7. id: text
  8. text: qsTr("Hello world")
  9.  
  10. anchors.centerIn: parent
  11. }
  12.  
  13. }

Скачать архив с проектом

Рекомендуемые статьи по этой тематике

По статье задано0вопрос(ов)

0

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь