1

我有一个关于在 C++ 端访问 QML 组件的问题,抱歉,它可能是个小初学者。

我目前正在使用示例地图视图,该应用程序单独运行良好,但在我尝试将此示例与导航面板放在一起后,它停止工作。

我添加了自己的 main.qml,另一个名为 menu.qml 的页面,并将应用程序的原始 main.qml 重命名为 map.qml。所以现在用户需要像这样导航面板:main.qml -> menu.qml -> map.qml

我的问题是:最初,从示例中,应用程序构造函数在创建 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 并且应用程序崩溃。

任何提示将不胜感激!谢谢

4

1 回答 1

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);
于 2013-09-06T20:55:29.023 回答