Дайте подкласс указателя QQuickItem на другой объект C++

Я очень хочу создать подкласс класса Qt QQuickItem для использования в QML, поэтому за кулисами у него много логики C++. Однако, поскольку QML будет создавать его экземпляр и владеть им, а не стороной C++, я не знаю, как (если это возможно) передавать указатели или соединения между этим новым объектом и другими объектами C++ в системе. Это возможно?


person johnbakers    schedule 16.12.2013    source источник
comment
Что-то вроде 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


Ответы (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