Исторически первый подход к построению графического интерфейса на Qt представляли виджет. Виджеты представляют различные элементы пользовательского интерфейса, например, кнопки, текстовые поля и прочие компоненты, из которых состоит окно приложения. Виджет позволяет обрабатывать различные пользовательские события, например, события мыши и клавиатуры. И таким образом пользователь может взаимодействовать с приложением. Базовый встороенный набор виджетов Qt расположен в модуле QtWidgets.
При этом Qt широко использует концепцию наследования. Все виджеты наследуются от встроенного типа QWidget. Это базовый виджет и базовый класс всех виджетов пользовательского интерфейса. Он содержит большинство свойств, необходимых для описания виджета, а также такие свойства позиционирования виджета, цвет и т. д. Иерархию виджетов Qt еще можно представить следующим образом:
Некоторые базовые виджеты:
QPushButton: представляет кнопку
QCheckBox: представляет флажок, который может находиться в отмеченном и неотмеченном состоянии
QRadioButton: представляет радиокнопку (переключатель)
QFrame: представляет фрейм и позволяет группировать виджеты
QLabel: используется для отображения текста или изображения
QLineEdit: позволяет пользователю вводить и редактировать однострочный текст
QTabWidget: используется для создания вкладок с виджетами
При этом класс QWidget в свою очередь наследуется от базового типа QObject. Любой объект, который наследуется от QObject, позволяет установить связь между виджетом-контейнером и вложенными или дочерними виджетами. То есть один виджет (например, графическое окно) может содержать другие виджеты (кнопки, текстовые поля и т.д.). Эта взаимосвязь упрощает многие вещи, в частности:
Дочерние виджеты в Qwidget автоматически появляются внутри родительского виджета.
Когда виджет-контейнер уничтожается, все его дочерние элементы также уничтожаются. Это позволяет избежать утечек памяти.
Все дочерние элементы определенного виджета-контейнера можно получить с помощью методов findChild()
и findChildren()
.