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();
}
Excellent. Juste une question: Pourquoi 360? – QLands
@QLands 360 est la largeur, pas la bonne coordonnée. Pour aller de -180 à 180, la largeur est de 360. – Anthony
Oui, habituellement ils font le point x, le point y, la taille x et la taille y – Lefsler