QObject :: findChild返回null,找不到交叉QML对象

时间:2013-09-06 20:31:22

标签: qt qml cascade blackberry-cascades

我有一个关于在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并且应用程序被粉碎。

任何提示都会非常感激!感谢

1 个答案:

答案 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);