Теперь мы рассмотрим программный код функции
Так же как рассмотренная нами в главе 3 функция
Существует множество ситуаций, когда генерируется событие рисования
• при первоначальном выводе на экран виджета система автоматически генерирует событие рисования, чтобы виджет нарисовал сам себя;
• при изменении размеров виджета система генерирует событие рисования;
• если виджет перекрывается другим окном и затем вновь оказывается видимым, генерируется событие рисования для областей, которые закрывались (если только система управления окнами не сохранит закрытую область).
Мы можем также принудительно сгенерировать событие рисования путем вызова функции
Ниже приводится программный код:
42 void IconEditor::paintEvent(QPaintEvent *event)
43 {
44 QPainter painter(this);
45 if (zoom >= 3) {
46 painter.setPen(palette().foreground().color());
47 for (int i = 0; i <= image.width(); ++i)
48 painter.drawLine(zoom * i, 0,
49 zoom * i, zoom * image.height());
50 for (int j = 0; j <= image.height(); ++j)
51 painter.drawLine(0, zoom * j,
52 zoom * image.width(), zoom * j);
53 }
54 for (int i = 0; i < image.width(); ++i) {
55 for (int j = 0; j < image.height(); ++j) {
56 QRect rect = pixelRect(i, j);
57 if (!event->region().intersect(rect).isEmpty()) {
58 QColor color = QColor::fromRgba(image.pixel(i, j));
59 painter.fillRect(rect, color);
60 }
61 }
62 }
63 }
Мы начинаем с построения объекта
Вызов функции
painter.drawLine(x1, y1, x2, y2);
где
Пиксель в верхнем левом углу виджета Qt имеет координаты (0, 0), а пиксель в нижнем правом углу имеет координаты (
Перед вызовом в