如何处理地图中出现的气泡按钮动作部分?

时间:2013-11-18 10:30:38

标签: qt mobile blackberry qml blackberry-10

我正在使用BB Native SDK开发Blackberry 10移动应用程序。

我将地图部分添加到我的应用中。我正在使用C ++动态添加标记。

我想要的只是当点击标记时气泡apear,我想处理动作按钮部分以显示包含所点击的所有相对信息(海拔,经度,地址等)的新页面标记

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您没有说明是否使用MapView对象来显示地图。如果您是,那么有两个信号与标记标题气泡上的手势相关联地发出:

  1. captionButtonClicked()
  2. captionLabelTapped()
  3. 您可以使用这两个信号中的一个来发布包含该信息的工作表。我使用第二个,因为按钮单击的正常行为是获取到标记位置的导航路径。如果您不提供该服务,您可以将该信号用于您的目的。

    焦点标记的ID(标题所属的标记)将包含在MapView属性focusId中。使用此ID,您可以从MapData对象获取标记。我更喜欢为标记提供一个ID,允许直接访问从中提取MapData的数据存储,数据库中记录的主键等。

    在我的一个应用程序中,我在QML中处理了captionLabelTapped()信号,如下所示:

            onCaptionLabelTapped: {
                console.log("Waypoint ID tapped " + focusedId);
                app.invokeWaypointPage(focusedId);
            }
    

    invokeWaypointPage方法从另一个应用程序调用一张卡片:

    void ApplicationUI::invokeWaypointPage(QString ident) {
        InvokeManager* invokeManager = new InvokeManager();
        InvokeRequest cardRequest;
        //cardRequest.setTarget("ca.sarmobile.OurAirportsDb.invoke.waypointPage");
        cardRequest.setAction("bb.action.VIEW");
        cardRequest.setMimeType("x-aviation/wp-ident");
        cardRequest.setData(ident.toAscii());
        InvokeTargetReply* reply = invokeManager->invoke(cardRequest);
        reply->setParent(this);
        reply->deleteLater();
    }
    

    在这种情况下,标记ID是数据库中的项标识符(和主键)。如果您使用较小的数据集,可以将信息放在QMap中或使用XmlDataModel。

    首先,您可以在C ++中获取纬度,经度和其他一些数据:

    double lat = qobject_cast<GeoLocation*>(pMapView->mapData()->geographic(focusId))->latitude();
    double lan = qobject_cast<GeoLocation*>(pMapView->mapData()->geographic(focusId))->longitude();
    

    当然假设标记是GeoLocation,而不是Line或Polygon。