2012-05-04 2 views
19

QGraphicsScene에는 다각형을 그려야하지만 다각형에는 위도/경도 위치가 있습니다. 나는 그런 투사로 QGraphicsScene/QGraphicsView을 설정하는 방법QGraphicsScene/View를 특정 좌표계로 설정하는 방법

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

하십시오 투영법이 투영 좌표에서 간다?

많은 감사,

카를로스. 그래서 같은

답변

18

사용 QGraphicsScene::setSceneRect() : 당신이 수직 축이 잘못 반전되고 염려되는 경우

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

,이 처리하는 방법에 대한 몇 가지 옵션이 있습니다. 한 가지 방법은 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