Класс QPaintEvent

   
На этом шаге рассмотрим класс QPaintEvent.

   
Qt поддерживает двойную буферизацию. Ее можно отключить вызовом метода QWidget::setAttribute(Qt::WA_PaintOnScreen). Вполне возможно, последствия вас удивят: дело в том, что некогда выведенная в окно графическая информация вдруг исчезнет при изменении размеров окна приложения или после перекрытия его окном другого приложения. Чтобы этого не произошло, необходимо получать и обрабатывать событие QPaintEvent.

   
В объекте класса QPaintEvent передается информация для перерисовки всего изображения или его части. Событие возникает тогда, когда виджет впервые отображается на экране явным или неявным вызовом метода show(), а также в результате вызова методов repaint() и update().

   
Объект события передается в метод paintEvent(), в котором реализуется отображение самого виджета. В большинстве случаев этот метод используется для полной перерисовки виджета. Для маленьких виджетов это приемлемо, но для виджетов больших размеров рациональнее перерисовывать только отдельную область, действительно нуждающуюся в этом. Для получения координат и размеров такого участка вызывается метод region(). Вызовом метода contains() можно проверить, находится ли объект в заданной области. Например:

MyClass::paintEvent(QPaintEvent* pe)
{
    QPainter painter(this);
    QRect r(40, 40, 100, 100);
    if (pe->region().contains(r)) {
        painter.drawRect(r);
    }
}

   
На следующем шаге рассмотрим событие мыши - класс QMouseEvent.

Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий