我有一个关于在C ++端访问QML组件的问题,抱歉这可能不是初学者。
我目前正在使用sample map view,仅此应用程序效果很好,但在我尝试将此示例与导航面板放在一起后,它就停止了工作。
我添加了自己的main.qml,另一个名为menu.qml的页面,并将应用程序的原始main.qml重命名为map.qml。所以现在用户需要像这样导航面板:main.qml - > menu.qml - > map.qml
我的问题是: 最初,从示例中,app构造函数在创建main.qml时保存了mapView指针,以便稍后它可以添加标记/更改位置到mapview。
通过调用:
获取mapView指针QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
qml->setContextProperty("_mapViewTest", this);
AbstractPane *root = qml->createRootObject<AbstractPane>();
QObject* mapViewAsQObject = root->findChild<QObject*>(QString("mapViewObj"));
mapView = qobject_cast<bb::cascades::maps::MapView*>(mapViewAsQObject);
但是,我已将名称更改为map.qml,findChild返回为null。由于我的应用程序无法找到mapView,当我尝试设置标记/定位自己时,整个应用程序都会崩溃。
我尝试了QmlDocument :: create(“asset:///map.qml”),并使用与上面相同的方法来查找mapview,我能够得到它,但当我尝试时没有任何反应放下一个标记/定位。
我还尝试添加一个调用findChild并获取mapView指针的新函数。该函数在map.qml页面内的onCreationCompleted中调用,但mapViewAsQObject仍然返回null并且应用程序被粉碎。
任何提示都会非常感激!感谢
答案 0 :(得分:1)
我找到了解决问题的方法,当点击下一个按钮时,我必须使用C ++导航页面,这样它就可以找到正确的mapView指针。
QmlDocument *qml = QmlDocument::create("asset:///map.qml").parent(this);
qml->setContextProperty("_mapViewTest", this);
Page *root = qml->createRootObject<Page>();
QObject* mapViewAsQObject = root->findChild<QObject*>(QString("mapViewObj"));
... etc
nav->push(root);