Подтвердить что ты не робот

Как установить QGraphicsScene/View в определенную систему координат

Я хочу нарисовать полигоны в QGraphicsScene, но где многоугольники имеют положения широты/долготы. В равноугольной проекции координаты идут от:

                       ^
                      90
                       |
                       |
-180----------------------------------->180
                       |
                       |
                     -90

Как настроить QGraphicsScene/QGraphicsView на такую ​​проекцию?

Большое спасибо,

Карлос.

4b9b3361

Ответ 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();
}