Это укороченный вариант статьи. Там рассматривается конкретный пример работающего приложения, а здесь расписывается без воды, как добавить C++ часть в приложение Qt Quick.

В статье рассказывается о подобном приложении, но с использованием компонентов Qt Quick Controls.

  • Создайте приложение Qt Quick Application.

  • Создадим новый класс. Правой кнопкой щелкнем по проекту и выбираем пункт Add New….

  • Там выбираем C++ Class.

  • Далее вводим название нашего нового класса, например, HandlerSignals, а в качестве базового класса выбираем QObject.

  • Заголовочный файл handlersignals.h меняем на следующий, где cppSlot — наш код, что будет исполняться из QML:

#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
  • Файл класса handlersignals.cpp меняем на такой:
#include "handlersignals.h"

HandlerSignals::HandlerSignals(QObject *parent) : QObject(parent)
{

}

void HandlerSignals::cppSlot(const QString &msg) {
//Здесь располагается код С++, который вызывается QML элементом.
}:

  • Перейдем к файлу main.cpp и меняем его на такой:
#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();
}
  • В корневом элементе в QML файле прописываем сигнал. Например, такой:
signal qmlSignal(string msg)
  • Теперь находите в нужном QML объекте можем отправить этот сигнал:

qml //Действие мыши MouseArea { id: mouseArea1 anchors.fill: parent hoverEnabled: true; onClicked: {qmlSignal("яблок")} } <ul><li>Qt logo 2016.svg by Qt Project / (2019-01-26)</li></ul>