2014-01-08 4 views
2

Пусть будет класс C++, который содержит сигналы и некоторые функции, доступные из QML. Теперь для того, чтобы получить доступ к членам этого класса в QML, я пишу что-то вроде:Как получить доступ к объекту класса C++ в QML, а не создавать отдельный объект в QML?

myClass 
{ 
    id: abc 

    x: 100  
    onXChanged: {console.log ("xx");} 
} 

Предполагая, что x является членом фактического класса C++, приведенный выше код работает.


Теперь у меня есть объект класса C++ т.е. myClass, созданный в соответствующем C++ файл.

Вопрос:
Вместо того чтобы создавать новый объект того же класса в QML, это возможно и целесообразно, чтобы получить доступ и использовать уже созданный объект C++ в QML?

ответ

2

Для этого вы можете использовать свойства контекста. Вы писали бы что-то вроде этого:

... 

MyClass myClassObject; 
QQuickView view; 
view.rootContext()->setContextProperty("myClassContextProperty", &myClassObject); 
view->setSource(QUrl::fromLocalFile("main.qml")); 
view->show(); 

... 

, а затем вы можете получить доступ к нему в QML следующим образом:

Button { 
    onClicked: myClassContextProperty.x = 100 
}