2012-05-04 5 views

risposta

18

Usa QGraphicsScene::setSceneRect() in questo modo:

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

Se siete preoccupati per l'asse verticale viene capovolto in modo non corretto, avete alcune opzioni per come affrontare questo. Un modo è semplicemente moltiplicare per -1 ogni volta che effettui un calcolo che coinvolge la coordinata y. Un altro modo è di capovolgere verticalmente QGraphicsView, usando view->scale(1, -1) in modo che la scena sia visualizzata correttamente.

Di seguito è riportato un esempio funzionante che utilizza quest'ultima tecnica. Nell'esempio, ho creato una sottoclasse di QGraphicsScene in modo che sia possibile fare clic nella vista e la scena personalizzata visualizzerà la posizione del clic utilizzando qDebug(). In pratica, non è necessario sottoclasse 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

Eccellente. Solo una domanda: perché 360? – QLands

+0

@QLands 360 è la larghezza, non la coordinata corretta. Per andare da -180 a 180, la larghezza è 360. – Anthony

+0

Sì, di solito fanno punto x, punto y, dimensione x e dimensione y – Lefsler