PIE-SDKについてはC ++マップのマウスイベントリスナー

1.はじめに

地図マウスイベントは、マウスのプレス含まMouseButtonPress()、バウンスMouseButtonRelease()、移動のMouseMove()などの操作が動的にこれらのイベントによってマッピングできるイベントを、次のマップ情報の具体的な例に、ステータスバーには、どのように使用する説明しますこれらの3つのイベント。

2.機能実装の注意事項

2.1。アイデアや原理の実現

最初のステップ:メインイベント捕捉ヘッダーファイルで

保護されました

    / **

    * @Brief 書き換えeventFilter イベント

    QObjectを[IN] * @Param * OBJ イベントをトリガしたオブジェクト

    * @Param QEvent *のEV [中] トリガしたイベント

    * @return

    * /

    BOOL eventFilter QObjectを* OBJ QEvent * EV オーバーライド

 

ステップ2:では.cppファイル書き込みコードファイルを達成すること

2.2コアインターフェースおよびメソッド

インタフェース/ クラス

メソッド/ プロパティ

説明

SysDisplay :: DisplayTransformationPtr

ToMapPoint

地図座標にスクリーン座標

SysGeometry :: SpatialReferencePtr

名前

空間参照を取得または設定

2.3。サンプルコード

プロジェクトパス

Baiduのクラウドディスクアドレスの下で/ PIEのサンプルプログラム/ 02. 地図の操作/ 06. 地図のマウスイベントリスナー

データパス

ディスクアドレスBaiduのクラウド/ PIE の典型的なデータ/ ラスタデータ/04.World/World.tif

ビデオパス

Baiduの下では、クラウドのディスクアドレス/ PIEのビデオチュートリアル/ 02. 地図操作/ 06. 地図のマウスイベントリスナー.AVI

サンプルコード

  1. ヘッダファイルをキャプチャするためにイベントを追加

    保護されました

     

        / **

        * @Brief 書き換えeventFilter イベント

        QObjectを[IN] * @Param * OBJ イベントをトリガしたオブジェクト

        * @Param QEvent *のEV [中] トリガしたイベント

        * @return

        * /

        BOOL eventFilter QObjectを* OBJ QEvent * EV オーバーライド

     

  2. コーディングイベント

    // この例では、ステータスバーをマップするために主です

    BOOL PIEMainWindow :: eventFilter QObjectを* OBJ QEvent * EV

    {

        もしOBJ == m_pMapControl

        {

            もしEV - > タイプ()== QEvent :: のMouseMove

            {

                QMouseEvent *pMouseEvent = static_cast<QMouseEvent*>(ev);

                m_pLineEdit_ScreenCoordsInfos->setText(QString("%1,%2").arg(pMouseEvent->x()).arg(pMouseEvent->y()));

                double mapX, mapY;

                mapX = mapY = 0;

                m_pMapControl->GetActiveView()->GetDisplayTransformation()->ToMapPoint(pMouseEvent->x(), pMouseEvent->y(), mapX, mapY);

                m_pLineEdit_GeoCoordsInfos->setText(QString("%1,%2").arg(mapX).arg(mapY));

     

                SysGeometry::SpatialReferencePtr ptrSR = m_pMapControl->GetMap()->GetSpatialReference();

                if (ptrSR == nullptr) return true;

                m_pLabel_SpatialReferenceInfos->setText(ptrSR->GetName());

            }

            else if (ev->type()==QEvent::MouseButtonPress)

            {    

                QMouseEvent *pMouseEvent = static_cast<QMouseEvent*>(ev);

                QPoint qPoint;

                qPoint.setX(pMouseEvent->x());

                qPoint.setY(pMouseEvent->y());

                SysGeometry::PointPtr point = new SysGeometry::Point();

                point = m_pMapControl->GetActiveView()->GetDisplayTransformation()->ToMapPoint(qPoint);

                QString screenPoint = QString("屏幕坐标:%1,%2").arg(pMouseEvent->x()).arg(pMouseEvent->y());

                QString mapPoint= QString("屏幕坐标:%1,%2").arg(point->GetX()).arg(point->GetY());

            }

            else if (ev->type()==QEvent::MouseButtonRelease)

            {

                qDebug("鼠标释放事件");

            }

        }

        else if (obj == m_pPageLayoutControl)

        {

            if (ev->type() == QEvent::MouseMove)

            {

                QMouseEvent *pMouseEvent = static_cast<QMouseEvent*>(ev);

     

                m_pLineEdit_ScreenCoordsInfos->setText(QString("%1,%2").arg(pMouseEvent->x()).arg(pMouseEvent->y()));

                double mapX, mapY;

                mapX = mapY = 0;

                m_pPageLayoutControl->GetActiveView()->GetDisplayTransformation()->ToMapPoint(pMouseEvent->x(), pMouseEvent->y(), mapX, mapY);

                m_pLineEdit_GeoCoordsInfos->setText(QString("%1,%2").arg(mapX).arg(mapY));

     

                SysGeometry::SpatialReferencePtr ptrSR = m_pPageLayoutControl->GetMap()->GetSpatialReference();

                if (ptrSR == nullptr) return true;

                m_pLabel_SpatialReferenceInfos->setText(ptrSR->GetName());

            }

        }

        return QMainWindow::eventFilter(obj, ev);

    }

2.4. 示例截图

 

おすすめ

転載: www.cnblogs.com/PIESat/p/12366958.html