2012-05-04 2 views
19

Je souhaite dessiner des polygones dans un QGraphicsScene mais où les polygones ont des positions de latitude/longitude. Dans une projection équirectangulaire les coordonnées va de:Comment définir QGraphicsScene/View à un système de coordonnées spécifique

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

Comment puis-je régler la QGraphicsScene/QGraphicsView à cette projection?

Merci beaucoup,

Carlos.

Répondre

18

Utilisez QGraphicsScene::setSceneRect() comme ceci:

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

Si vous êtes préoccupé par l'axe vertical incorrectement renversé, vous avez quelques options sur la façon de traiter cette question. Une façon est de simplement multiplier par -1 chaque fois que vous faites un calcul impliquant la coordonnée y. Une autre méthode consiste à retourner verticalement QGraphicsView en utilisant view->scale(1, -1) pour que la scène s'affiche correctement.

Voici un exemple de travail qui utilise cette dernière technique. Dans l'exemple, j'ai sous-classé QGraphicsScene afin que vous puissiez cliquer dans la vue, et la scène personnalisée affichera la position du clic en utilisant qDebug(). En pratique, vous n'avez pas besoin de sous-classer 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

Excellent. Juste une question: Pourquoi 360? – QLands

+0

@QLands 360 est la largeur, pas la bonne coordonnée. Pour aller de -180 à 180, la largeur est de 360. – Anthony

+0

Oui, habituellement ils font le point x, le point y, la taille x et la taille y – Lefsler

Questions connexes