Шаг 115.
Библиотека Qt.
Класс 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.




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