На этом шаге рассмотрим класс QPainter.
Класс QPainter, определенный в заголовочном файле QPainter, является исполнителем команд рисования. Он содержит массу методов для отображения линий, прямоугольников, окружностей и др. Рисование осуществляется на всех объектах классов, унаследованных от класса QPaintDevice (рис. 1).
Рис.1. QPainter и контексты рисования
Это означает, что то, что отображается контекстом рисования одного объекта, может быть точно так же отображено контекстом и другого объекта.
Чтобы использовать объект QPainter, необходимо передать ему адрес объекта контекста, на котором должно осуществляться рисование. Этот адрес можно передать как в конструкторе, так и с помощью метода QPainter::begin(). Смысл метода begin() состоит в том, что он позволяет рисовать на одном контексте несколькими объектами класса QPainter. При использовании метода begin() нужно по окончании работы с контекстом вызвать метод QPainter::end(), чтобы отсоединить установенную этим методом связь с контекстом рисования, давая другому объекту возможность для рисования:
QPainter painter1; QPainter painter2; painter1.begin(this); // Команды рисования painter1.end(); painter2.begin(this); // Команды рисования painter2.end();
Но чаще всего используется рисование одним объектом QPainter в разных контекстах:
QPainter painter; painter.begin(this); //контекст виджета //Команды рисования painter.end(); QPixmap pix(rect()); painter.begin(&pix); //контекст растрового изображения // Команды рисования painter.end();
Объекты QPainter содержат установки, влияющие на их рисование. Это могут быть трансформации координат, модификация кисти и пера, установка шрифта, установка режима сглаживания и т. д. Поэтому, для того чтобы оставить старые настройки без изменений, рекомендуется перед началом изменения сохранить их с помощью метода QPainter::save(), а по окончании работы — восстановить, с помощью метода QPainter::restore().
На следующем шаге рассмотрим класс QPen.