QT5.3 Как я могу добавить свой Qobject в QQmlEngine и получить доступ к его свойствам через QML?

Я начинаю с QT5.3, а точнее с QT в целом.
Теперь я хочу программировать консольные приложения на C / C ++ и добавить интерфейс.

Я создал приложение QT Quick, и у меня возникли проблемы с взаимодействием моего внутреннего кода с внешним интерфейсом.

Что у меня так далеко:

Main.qml:

import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Controls 1.2

Window {
visible: true
width: 360
height: 360

MouseArea {
anchors.fill: parent
onClicked: {
//  Qt.quit();
}
}

Text {
text: w1.getRoll
anchors.centerIn: parent
}

Button {
onClicked: w1.roll
}}

Main.cpp:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "wuerfel.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
Wuerfel w1;

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
engine.setContextForObject(&w1,engine.rootContext());

return app.exec();
}

Wuerfel.h:

#ifndef WUERFEL_H
#define WUERFEL_H

#include <QObject>
#include <time.h>
#include <cstdlib>

class Wuerfel : public QObject
{
Q_OBJECT
Q_PROPERTY(QString w1 READ getRoll WRITE roll NOTIFY rolled)
public:
explicit Wuerfel(QObject *parent = 0);
void roll(){
srand((unsigned) time(NULL));
head = rand() % 6 + 1;

emit rolled();
}

int getRoll(){
return head;
}

signals:
void rolled();

public slots:

private:
int head;
};

#endif // WUERFEL_H

Ошибка отладки

Ошибка отладки

Я понятия не имею, что я должен делать. Документация и результаты поиска в Интернете с похожими проблемами смущают меня еще больше. Они упоминают QQView или же QComponent и т.д., но всякий раз, когда я пробую одно из их решений, чего-то не хватает. Как упомянутый метод не является частью объекта, так что он не найден и т. Д.

Кто-нибудь знает, как заставить это работать? Я хочу использовать этот подход для визуализации будущих консольных приложений из учебника по C ++. И разработка интерфейсов в QT в целом.

Заранее спасибо. знак равно

0

Решение

Ты можешь использовать QQmlContext::setContextProperty чтобы установить значение для вашего свойства name в корневом контексте:

engine.rootContext()->setContextProperty("w1",  &w1);
1

Другие решения


По вопросам рекламы [email protected]