Harrix Блог

  • Списки статей
    • Все статьи
    • IT
    • Qt
    • C++
    • Сложение двух чисел
    • Web программированиe
    • FAQ
    • Latex
    • Установка программ
    • Мифы
    • Видео
    • Про фото
  • Проекты
  • Harrix.org
  • RSS
  • Контакты

Qt Quick и C++ в Qt 5.6.0 Краткая инструкция

Это укороченный вариант статьи http://blog.harrix.org/?p=5076. Там рассматривается конкретный пример работающего приложения, а здесь расписывается без воды, как добавить C++ часть в приложение Qt Quick.

21.03.2016 Leave a Comment 4 909 просмотров

Это укороченный вариант статьи http://blog.harrix.org/?p=5076. Там рассматривается конкретный пример работающего приложения, а здесь расписывается без воды, как добавить C++ часть в приложение Qt Quick.

В статье http://blog.harrix.org/?p=5082 рассказывается о подобном приложении, но с использованием компонентов QtQuick Controls.

В качестве среды для разработки используется Qt 5.6.0 для Windows 64-bit под компилятор Visual Studio 2015.

  1. Создайте приложение QtQuick Application.
  2. Создадим новый класс. Правой кнопкой щелкнем по проекту и выбираем пункт Add New....
  3. Там выбираем C++ Class.
  4. Далее вводим название нашего нового класса, например, HandlerSignals, а в качестве базового класса выбираем QObject.
  5. Заголовочный файл handlersignals.h меняем на следующий, где cppSlot — наш код, что будет исполняться из QML:
  6. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #ifndef HANDLERSIGNALS_H
    #define HANDLERSIGNALS_H
     
    #include <QObject>
    #include <QVariant>
     
    class HandlerSignals : public QObject
    {
        Q_OBJECT
    public:
        explicit HandlerSignals(QObject *parent = 0);
     
    signals:
     
    public slots:
        void cppSlot(const QString &msg);
    };
     
    #endif // HANDLERSIGNALS_H

  7. Файл класса handlersignals.cpp меняем на такой:
  8. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "handlersignals.h"
     
    HandlerSignals::HandlerSignals(QObject *parent) : QObject(parent)
    {
     
    }
     
    void HandlerSignals::cppSlot(const QString &msg) {
    //Здесь располагается код С++, который вызывается QML элементом.
    }

  9. Перейдем к файлу main.cpp и меняем его на такой:
  10. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
     
    #include "handlersignals.h"
     
    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
     
        QQmlApplicationEngine engine;
        engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
     
        QObject* root = engine.rootObjects()[0];
     
        HandlerSignals *handlerSignals= new HandlerSignals(root);
     
        QObject::connect(root, SIGNAL(qmlSignal(QString)),
                         handlerSignals, SLOT(cppSlot(QString)));
     
        return app.exec();
    }

  11. В корневом элементе в qml файле прописываем сигнал. Например, такой:
  12. 1
    signal qmlSignal(string msg)

  13. Теперь находите в нужном qml объекте можем отправить этот сигнал:
  14. 1
    2
    3
    4
    5
    6
    7
    //Действие мыши
    MouseArea {
        id: mouseArea1
        anchors.fill: parent
        hoverEnabled: true;
        onClicked: {qmlSignal("яблок")}
    }

Всё!


Статьи по теме:

  1. Сложение двух чисел в Qt 5.5.0 на C++ (Qt Quick)
  2. Сложение двух чисел в Qt 5.5.0 на C++ (Qt Quick Controls)
  3. Сложение двух чисел в Qt 5.6.0 на C++ (Qt Quick)
  4. Сложение двух чисел в Qt 5.6.0 на C++ (Qt Quick Controls)

IT C++, Qt, QtQuick

© 2014 Harrix