Как представление обновляется за кулисами?

#c #qt

#c #qt

Вопрос:

Итак, когда я использую setText (), например, в QLabel, Qt автоматически обновляет view / gui для меня, и отображается новый текст, но что происходит за кулисами? Существует ли функция обновления, которая вызывается автоматически при использовании таких функций, как setText()?

Спасибо!!

Ответ №1:

Вам следует ознакомиться с базовой документацией по этой ссылке.

Внутренняя система немного сложнее, но в целом она соответствует шаблону наблюдателя. Этот механизм позволяет обнаруживать действие пользователя или изменяющееся состояние и реагировать на это действие.

Низкоуровневые взаимодействия, такие как обновление экрана, реализуются через систему событий

В Qt события — это объекты, производные от абстрактного класса QEvent, которые представляют события, произошедшие либо внутри приложения, либо в результате внешней активности, о которой приложению необходимо знать. События могут приниматься и обрабатываться любым экземпляром подкласса QObject, но они особенно актуальны для виджетов. В этом документе описывается, как доставляются и обрабатываются события в типичном приложении.

Итак, что касается процесса отображения, существует специальное событие. Объект QWidget обрабатывает paintEvent / подписывается на него, см. QWidget::paintEvent .

Этот обработчик событий может быть повторно реализован в подклассе для получения событий paint, переданных в event. Событие рисования — это запрос на перерисовку всего виджета или его части.

Когда вы вызываете, QLineEdit::setText() виджет будет перерисован при следующем запуске события отображения в зависимости от конфигурации операционной системы, частоты обновления и т.д.

Для высокоуровневых взаимодействий Qt использует аналогичный шаблон, основанный на механизме сигнала / слота:

Шаблон Observer используется повсеместно в приложениях с графическим интерфейсом и часто приводит к некоторому шаблонному коду. Qt был создан с идеей удаления этого шаблонного кода и предоставления приятного и чистого синтаксиса, а механизм сигналов и слотов является ответом.