Я очень хочу создать подкласс класса Qt QQuickItem для использования в QML, поэтому за кулисами у него много логики C++. Однако, поскольку QML будет создавать его экземпляр и владеть им, а не стороной C++, я не знаю, как (если это возможно) передавать указатели или соединения между этим новым объектом и другими объектами C++ в системе. Это возможно?
Дайте подкласс указателя QQuickItem на другой объект C++
Ответы (1)
Вы можете зарегистрировать в себе глобальный объект QML main.cpp
, который указывает на произвольный объект QObject.
Brain *brain = new Brain();
QQmlApplicationEngine engine;
QQmlContext *context = engine.rootContext();
context->setContextProperty("brain", brain);
Теперь у вас есть brain
, доступные глобально в QML. Вы можете передать его пользовательскому компоненту, например
VisibleComponent {
id: vico1
width: 300
height: 300
Component.onCompleted: {
vico1.setLogic(brain)
}
}
Для этого требуется Q_INVOKABLE void setLogic(Brain* brain);
в VisibleComponent
.
У меня есть работающий пример проекта этого кода, дайте мне знать, если вам это нужно.
person
Simon Warta
schedule
21.12.2013
Accessing Loaded QML Objects by Object Name
http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-interactqmlfromcpp.html? - person Evgeny Timoshenko   schedule 16.12.2013