从C ++访问已注册的类型实例(例如main.cpp)

时间:2014-01-22 01:41:24

标签: c++ qml qt5 qt-quick

我在main.cpp中注册了一个c ++类(class_name),如下所示:

#include "class_header.hpp"
#include <QtQuick/QQuickView>
#include <QGuiApplication>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    qmlRegisterType<class_name>("ClassInstance", 1, 0, "ClassInstance");

    QQuickView view;
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.setSource(QUrl("qml/main.qml"));
    view.show();
    return app.exec();
}

我已经确定注册这个类会创建一个对象的实例,我只需要一个实例。 QML方可以很好地访问这个实例。如何从C ++端访问同一个实例,例如,在上面显示的main.cpp中?

提前致谢!!

1 个答案:

答案 0 :(得分:3)

qmlRegisterType不会创建实例。它使用qml引擎注册类型ClassInstance,以便您可以在qml中创建ClassInstance的实例。当你说你可以在qml端访问这个实例时,你实际上是在qml中创建一个新实例而且无法从c ++访问它。

如果您打算创建一个可以从qml和c ++访问的单个实例,那么您需要的是一个上下文属性。

ClassInstance obj;
view.rootContext()->setContextProperty("myInstance", &obj);

现在,您可以在qml中访问与myInstance相同的实例,在c ++代码中访问obj。文档here