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();
}
Eccellente. Solo una domanda: perché 360? – QLands
@QLands 360 è la larghezza, non la coordinata corretta. Per andare da -180 a 180, la larghezza è 360. – Anthony
Sì, di solito fanno punto x, punto y, dimensione x e dimensione y – Lefsler