2012-05-04 68 views
19

QGraphicsSceneにポリゴンを描きたいが、ポリゴンには緯度/経度の位置があります。私は、このような投影にQGraphicsScene/QGraphicsViewを設定するにはどうすればよいQGraphicsScene/Viewを特定の座標系に設定する方法

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

:正距円筒図法での座標から行きますか?

多くのありがとう、

カルロス。

答えて

18

使用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(); 
} 
+0

優れています。ただ一つの質問:なぜ360? – QLands

+0

@QLands 360は幅であり、右の座標ではありません。 -180から180までの幅は360です。 – Anthony

+0

はい、通常はポイントx、ポイントy、サイズx、サイズyを使用します – Lefsler

関連する問題