Я пытаюсь создать смешанное приложение на c ++ / QML, но столкнулся с проблемой при попытке заставить обе части взаимодействовать и взаимодействовать.
Цель состоит в том, чтобы использовать встроенный объект C ++ в QML с помощью метода setContextProperties, используя QQmlApplicationEngine.
Я просматривал этот пост QT 5.7 QML - Справочная ошибка: класс не определен , поскольку проблема очень похожа, но, к сожалению, решение здесь не применимо. Я все еще новичок в Qt, так что, возможно, решение очевидно, но я не мог понять это.
Итак, у меня есть 3 файла: main.cpp
, thing.h
и main.qml
.
main.cpp:
#include "thing.h"
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
Thing thing;
engine.rootContext()->setContextProperty("thing", &thing);
thing.setColor(Qt::green);
return app.exec();
}
который вызывает thing.h:
class Thing : public QObject
{
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
public:
Thing() : _color(Qt::black), _text("text") { }
Q_INVOKABLE void clicked() { setColor(Qt::blue); }
QColor color() const {return _color;}
void setColor(const QColor &color) {
_color = color;
emit colorChanged();
}
signals:
void colorChanged();
private:
QColor _color;
};
и main.qml:
Window {id: main
width: 100; height: 100
color: thing.color
MouseArea {
anchors.fill: parent
onClicked: thing.clicked();
}
}
При запуске этого кода я получаю 'qrc: /main.qml: 6: ReferenceError: вещь не определена', которая ссылается на выполнение color: thing.color
в main.qml. Как я могу заставить его работать?