Доступ к свойствам объектов QML из C ++ без определения Q_PROPERTY - PullRequest
3 голосов
/ 17 мая 2011

Я знаю, что можно определить QObject с пользовательскими свойствами и выставить этот объект в среде QML. Но так, для каждого нового свойства мне нужно будет перекомпилировать код C ++.

Возможно ли сделать динамическое связывание из C ++ / Qt с QML-объектами? Что-то вроде:

//C++ code: 
updateProperty("myQmlObject.any_property", "Hello World");

Спасибо!

РЕШИТЬ:

_view->rootContext()->setContextProperty( "cppmessage" , "Hello from C++" );

WHERE: view является QDeclarativeView, а cppmessage используется в QML без предварительного объявления, например: "text: cppmessage"

Эта ссылка была полезна для поиска решения: http://xizhizhu.blogspot.com/2010/10/hybrid-application-using-qml-and-qt-c.html

1 Ответ

2 голосов
/ 17 мая 2011

Да, это можно сделать. Ссылка

// MyItem.qml
import QtQuick 1.0

Item {
    property int someNumber: 100
}

//C++
QDeclarativeEngine engine;
QDeclarativeComponent component(&engine, "MyItem.qml");
QObject *object = component.create();

qDebug() << "Property value:" << QDeclarativeProperty::read(object,"someNumber").toInt();
QDeclarativeProperty::write(object, "someNumber", 5000);

qDebug() << "Property value:" << object->property("someNumber").toInt();
object->setProperty("someNumber", 100);

Редактировать: 1 Другой способ сделать это, как предложено @Valentin, указан здесь ссылка

...