Qt - Как запустить функцию C ++ при нажатии кнопки QML? Использование QQmlApplicationEngine
myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QDebug>
#include <QObject>
class MyClass : public QObject
{
public:
MyClass();
public slots:
void buttonClicked();
void buttonClicked(QString &in);
};
#endif // MYCLASS_H
myclass.cpp
#include "myclass.h"
MyClass::MyClass()
{
}
void MyClass::buttonClicked()
{
// Do Something
}
void MyClass::buttonClicked(QString &in)
{
qDebug() << in;
}
main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <myclass.h>
#include <QQmlContext>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
MyClass myClass; // A class containing my functions
// Trying to "SetContextProperty" as I saw people do it to achieve C++/QML connection
QQmlContext * context = new QQmlContext(engine.rootContext());
context->setContextProperty("_myClass", &myClass);
return app.exec();
}
Я хочу использовать функцию вмои занятия класс, который принимает параметр QString при нажатии кнопки QML.
Когда я компилирую и запускаю .. все идет гладко. Но когда я нажимаю на кнопку .. она показывает эту ошибку в отладчике:
qrc: ///main.qml: 80: ReferenceError: _myClass не определен
~> «Строка 80 в моем файле QML»:
74: MouseArea {
75: id: mouseArea1
76: anchors.fill: parent
77: hoverEnabled: true;
78: onEntered: { rectangle1.border.width = 2 }
79: onExited: { rectangle1.border.width = 1 }
80: onClicked: _myClass.buttonClicked("Worked?")
81: }
РЕДАКТИРОВАТЬ: (Что касается ошибки, вызванной ошибкой компиляции)
Как@Jairo Предполагается, что все классы должны быть унаследованы от QObject.
Все еще ищу решение моей главной проблемы.