LINUX.ORG.RU

Интеграция C++ и QtQuick 2.0

 , ,


0

4

Подскажите, люди добрые, глаза мои не смотрят, видимо, но как в QtQuick 2.0 засунуть свойства, управляемые кодом на C++? в QtQuick 1.1 было так:

QmlApplicationViewer viewer;
QDeclarativeContext* pCon = viewer.rootContext();
pCon>setContextProperty("contextProperty",contextPropertyClass);
contextPropertyClass обладал свойствами Q_PROPERTY, которые через setter/getter и сигнал можно было выдирать в QML. В Qt 5 и QtQuick 2.0 такой код не будет скомпилирован, так как нет класса. Как теперь делать свои свойства?

★★

Последнее исправление: CYB3R (всего исправлений: 1)

тоже интересует, хотя я не написал ни строчки на QML, зато Qt юзаю

читал в описании релизов что теперь QML как-то иначе QML + C++ работает, по идее должно быть лучше чем раньше, еще проще, еще меньше кода писать чтобы добираться

I-Love-Microsoft ★★★★★
()

Вроде сейчас при создании нового проекта создается подпроект для вьювера. Так что если он у вас есть, можете попробовать так:

    QtQuick2ApplicationViewer viewer;

    MainModel d;
    viewer.rootContext()->setContextProperty("mainModel", &d);

Kakadu
()
Ответ на: комментарий от Kakadu

А откуда вы это узнали, можно ссылку? Или уже вышли книги по Qt5? Очень интересует разная документация

OldWiseCat ★★
() автор топика
Ответ на: комментарий от Kakadu

И у вас оно компилится? У меня ошибку выдаёт:

main.cpp:51: ошибка: invalid use of incomplete type 'class QQmlContext'
/home/<..>/Qt5.0.0/5.0.0/gcc_64/include/QtQuick/QQuickView:1: In file included from ../../../../Qt5.0.0/5.0.0/gcc_64/include/QtQuick/QQuickView:1:0,
/home/<..>/untitled1/qtquick2applicationviewer/qtquick2applicationviewer.h:14: from ../untitled1/qtquick2applicationviewer/qtquick2applicationviewer.h:14,
/home/<..>/untitled1/main.cpp:10: from ../untitled1/main.cpp:10:
/home/<..>/Qt5.0.0/5.0.0/gcc_64/include/QtQuick/qquickview.h:54: ошибка: forward declaration of 'class QQmlContext'

OldWiseCat ★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Проблема в том, что такой пример и раньше выдавал ошибку, для этого надо было получить указатель на rootContext и работать с ним, а сейчас это сделать не получается, так как изменился тип rootContext (вроде бы)

OldWiseCat ★★
() автор топика
Ответ на: комментарий от OldWiseCat

Мне несколько лень проверять сейчас именно это, просто скажу, что код по этой ссылке у меня компилится в новом креаторе и с Qt5

https://github.com/Kakadu/qml-test-2

Kakadu
()
Ответ на: комментарий от OldWiseCat

Всё делается абсолютно так же. Классы QDeclarative* (1.0) переименовали в QQml* (2.0). У вас ошибка линковки, линковать нужно теперь с Qt5Qml + Qt5Quick.

Dendy ★★★★★
()
Последнее исправление: Dendy (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.