Я использую 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 и Интернета я не могу понять этого!
Спасибо,
Крис