#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 был создан с идеей удаления этого шаблонного кода и предоставления приятного и чистого синтаксиса, а механизм сигналов и слотов является ответом.