Я использую Qt 4.7 QPainter для рисования нескольких полигонов и т.д. в виджет. Я надеюсь изменить систему координат так, что (0,0) находится в центре моего виджета, а ось x/y ведет себя стандартным "декартовым" способом (т.е. 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-документов и Интернета я не могу понять это!
Спасибо,
Крис