Используйте класс QMatrix
. Он определяет 2D-преобразования. QMatrix
установлено на QPainter
.
Но помните, что в вашем случае, если вы преобразуете координаты вашего виджета в декартовы координаты , вам придется поставить первую точку на (- 10, -10) (не в (- 10,10) , как вы упомянули) , чтобы нарисовать прямоугольник с центром в (0,0) , потому что ось Y теперь растет вверх и ось X теперь растет вправо .
Все, что вам нужно, это преобразовать вашу систему координат следующим образом:
Вот код, набранный в paintEvent()
функции виджета:
QPainter pn( this );
int w_2 = width() / 2;
int h_2 = height() / 2;
{ // X- and Y-Axis drawing
pn.setPen( Qt::blue );
pn.drawLine( 0, h_2, width(), h_2); // X-Axis
pn.drawLine( w_2, 0 , w_2, height() ); // Y-Axis
}
QMatrix m;
m.translate( w_2, h_2 );
m.scale( 1, -1 );
pn.setMatrix( m );
pn.setPen( Qt::NoPen );
pn.setBrush( QBrush( Qt::blue, Qt::Dense4Pattern ) );
pn.drawRect( -10, -10, 20, 20 );
* * Результат тысяча сорок-девять:
обновление 7 апреля 2014 г.
Этот вопрос задавался очень давно, и с тех пор многое изменилось. Для тех, кто задает себе тот же вопрос сегодня (начало 2014 года), тогда мой личный ответ таков: с Qt 4.3 стало проще решать проблему с перелистыванием текста.
Вы правы. Текст также запечатывается, потому что он нарисован тем же художником. Вы можете нарисовать текст в конце, когда все перевернутые рисунки сделаны, если это возможно. Этот метод не удобен из-за новых расчетов положения текстов. Также вам нужно будет сбросить настройки для художника.
Теперь я бы порекомендовал вам использовать QGraphicsView
из-за огромной поддержки 2D-рисования. Также для каждого QGraphicsItem
ItemIgnoresTransformations
может быть установлен флаг, который позволяет ему игнорировать унаследованные преобразования (т. Е. Его позиция все еще привязана к его родительскому элементу, но преобразования вращения родительского элемента или представления, преобразования масштаба или сдвига игнорируются). Этот флаг полезен для хранения элементов текстовой метки в горизонтальном и немасштабированном виде, поэтому они по-прежнему будут доступны для чтения, если графическое представление преобразуется