22

ポリゴンを描画したいのですQGraphicsSceneが、ポリゴンに緯度/経度の位置があります。正距円筒図法では、座標は次のようになります。

                       ^
                      90
                       |
                       |
-180----------------------------------->180
                       |
                       |
                     -90

QGraphicsScene/QGraphicsViewをそのような投影に設定するにはどうすればよいですか?

どうもありがとう、

カルロス。

4

1 に答える 1

24

QGraphicsScene::setSceneRect()次のように使用します。

scene->setSceneRect(-180, -90, 360, 180);

縦軸が誤って反転されていることが懸念される場合は、これに対処する方法がいくつかあります。1 つの方法は、y 座標を含む計算を行うたびに単純に -1 を掛けることです。view->scale(1, -1)別の方法は、シーンが正しく表示されるように、QGraphicsView を垂直方向に反転することです。

以下は、後者の手法を使用した実際の例です。この例では、ビュー内でクリックできるように QGraphicsScene をサブクラス化し、カスタム シーンは を使用してクリック位置を表示しますqDebug()。実際には、QGraphicsScene をサブクラス化する必要はありません。

#include <QtGui>

class CustomScene : public QGraphicsScene
{
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        qDebug() << event->scenePos();
    }
};

class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QGraphicsScene *scene = new CustomScene;
        QGraphicsView *view = new QGraphicsView(this);
        scene->setSceneRect(-180, -90, 360, 180);
        view->setScene(scene);
        view->scale(1, -1);
        setCentralWidget(view);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
于 2012-05-04T07:24:34.063 に答える