我在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中?
提前致谢!!
答案 0 :(得分:3)
qmlRegisterType不会创建实例。它使用qml引擎注册类型ClassInstance,以便您可以在qml中创建ClassInstance的实例。当你说你可以在qml端访问这个实例时,你实际上是在qml中创建一个新实例而且无法从c ++访问它。
如果您打算创建一个可以从qml和c ++访问的单个实例,那么您需要的是一个上下文属性。
ClassInstance obj;
view.rootContext()->setContextProperty("myInstance", &obj);
现在,您可以在qml中访问与myInstance相同的实例,在c ++代码中访问obj。文档here。