web-dev-qa-db-ja.com

QGraphicsScene / Viewを特定の座標系に設定する方法

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

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

QGraphicsScene/QGraphicsViewをそのようなプロジェクションに設定するにはどうすればよいですか?

どうもありがとう、

カルロス。

20
QLands

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

_scene->setSceneRect(-180, -90, 360, 180);
_

垂直軸が誤って反転することが心配な場合は、これに対処する方法についていくつかのオプションがあります。 1つの方法は、y座標を含む計算を行うときはいつでも、単純に-1を掛けることです。もう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();
}
_
19
Anthony