Как установить QGraphicsScene / View в определенную систему координат
Я хочу нарисовать многоугольники в QGraphicsScene
но где полигоны имеют позиции широты / долготы. В равнонаправленной проекции координаты идут от:
^
90
|
|
-180----------------------------------->180
|
|
-90
как я могу установить QGraphicsScene
/ QGraphicsView
в такой проекции?
большое спасибо,
Карлос.
1 ответов
использовать QGraphicsScene::setSceneRect()
вот так:
scene->setSceneRect(-180, -90, 360, 180);
если вы обеспокоены тем, что вертикальная ось неправильно перевернута, у вас есть несколько вариантов того, как с этим справиться. Один из способов-просто умножить на -1 всякий раз, когда вы делаете какие-либо вычисления с использованием координаты y. Другой способ-вертикально перевернуть QGraphicsView, используя view->scale(1, -1)
чтобы сцена отображалась правильно.
Ниже приведен рабочий пример, который использует последний метод. В этом примере я подкласс QGraphicsScene, чтобы вы могли щелкнуть в представлении, и пользовательская сцена отобразит позицию щелчка с помощью qDebug()
. На практике вам фактически не нужно подкласс 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();
}