Используйте окно / область просмотра, чтобы перевернуть ось Y QPainter

Я использую Qt 4.7 QPainter для рисования некоторых многоугольники и т. д. в виджет. Я надеюсь изменить систему координат так, чтобы (0,0) находилась в центре моего виджета, а оси x / y вели себя стандартным «декартовым» образом (т.е. "вверх" и убывает "вниз"). Другими словами, я хочу, чтобы координаты были "математическими", а не "компьютерной графикой", если вы понимаете, о чем я.: -)

Я пытаюсь сделать это с помощью setViewport () и setWindow () вместо того, чтобы делать математику самому, так как было бы неплохо иметь возможность просто вызывать методы рисования напрямую с моими координатами.

Вот что у меня есть на данный момент:

// Setup coordinates
double screenWidth = width();
double screenHeight = height();

double windowWidth = 100.0;
double windowHeight = (screenHeight / screenWidth) * windowWidth;

painter.setViewport(0, 0, screenWidth, screenHeight);
painter.setWindow(-(windowWidth / 2.0), -(windowHeight / 2.0), windowWidth, windowHeight);

// Draw stuff
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::blue);
painter.drawRect(-10, -10, 20, 20);

Теперь это работает отлично, так как он рисует красивый синий квадрат в центре экрана. Проблема в том, что я должен сказать, что левый верхний угол равен (-10, -10). Я бы хотел чтобы иметь возможность сделать это (-10, 10), как это было бы в декартовых координатах.

Я пробовал возиться с setWindow / setViewport, чтобы получить этот "переворот оси Y", но безрезультатно. Это кажется действительно простым / простым делом, но после просмотра документации Qt и Интернета я не могу понять этого!

Спасибо,
Крис

11
задан sidewinderguy 10 December 2010 в 21:43
поделиться