qt - Cómo configurar QGraphicsScene/View a un sistema de coordenadas específico
projection qgraphicsview (1)
Utilice QGraphicsScene::setSceneRect()
como QGraphicsScene::setSceneRect()
:
scene->setSceneRect(-180, -90, 360, 180);
Si le preocupa que el eje vertical esté volteado incorrectamente, tiene algunas opciones para solucionarlo. Una forma es simplemente multiplicar por -1 cada vez que realice cualquier cálculo que implique la coordenada y. Otra forma es voltear verticalmente QGraphicsView, usando view- view->scale(1, -1)
para que la escena se muestre correctamente.
A continuación se muestra un ejemplo de trabajo que utiliza la última técnica. En el ejemplo, he subclasificado QGraphicsScene para que pueda hacer clic en la vista, y la escena personalizada mostrará la posición de clic usando qDebug()
. En la práctica, no es necesario que subclasses 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();
}
Quiero dibujar polígonos en un QGraphicsScene
pero donde los polígonos tienen posiciones de latitud / longitud. En una proyección equirrectangular las coordenadas van desde:
^
90
|
|
-180----------------------------------->180
|
|
-90
¿Cómo puedo configurar QGraphicsScene
/ QGraphicsView
para tal proyección?
Muchas gracias,
Carlos.