Перерисовка окна или его части

Когда компонент (или его часть) становится видимым, требуется выполнить перерисовку компонента или только его части. В этом случае вызывается метод с названием paintEvent(). Прототип метода:

virtual void paintEvent(QPaintEvent *event)

Через параметр доступен экземпляр класса QPaintEvent, который содержит следующие методы:

  • rect() — возвращает экземпляр класса QRect с координатами и размерами прямоугольной области, которую требуется перерисовать. Прототип метода:
const QRect &rect() const
  • region() — возвращает экземпляр класса QRegion с регионом, требующим перерисовки. Прототип метода:
const QRegion &region() const

С помощью этих методов можно получать координаты области, которая, например, была ранее перекрыта другим окном и теперь оказалась в зоне видимости. Перерисовывая только область, а не весь компонент можно достичь более эффективного расходования ресурсов компьютера. Следует также заметить, что в целях эффективности, последовательность событий перерисовки может быть объединена в одно событие с общей областью перерисовки.

В некоторых случаях перерисовку окна необходимо выполнить вне зависимости от внешних действий системы или пользователя, например, при изменении каких-либо значений нужно обновить график. Вызвать событие перерисовки компонента позволяют следующие методы из класса QWidget:

  • repaint() — незамедлительно вызывает метод paintEvent() для перерисовки компонента, при условии, что компонент не скрыт и обновление не запрещено с помощью метода setUpdatesEnabled(). Прототипы методов (первый прототип является слотом):
void repaint()
void repaint(int x, int y, int w, int h)
void repaint(const QRect &rect)
void repaint(const QRegion &rgn)
void setUpdatesEnabled(bool enable)
  • update() — посылает сообщение о необходимости перерисовки компонента, при условии, что компонент не скрыт и обновление не запрещено. Событие будет обработано на следующей итерации основного цикла приложения. Если посылаются сразу несколько сообщений, то они объединяются в одно сообщение. Благодаря этому можно избежать неприятного мерцания. Метод update() предпочтительнее использовать вместо метода repaint(). Прототипы метода (первый прототип является слотом):
void update()
void update(int x, int y, int w, int h)
void update(const QRect &rect)
void update(const QRegion &rgn)

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов