Все виджеты в Qt наследуют от класса QWidget . Класс QWidget предоставляет базовую функциональность общую для всех виджетов. Среди свойств, которые наследуют от QWidget , — свойство enabled , которое позволяет разрешить или запретить взаимодействие пользователя с элементом управления (методы void setEnabled(bool) и bool isEnabled() ). Когда свойство установлено (логическое значение false ) — визуальный элемент деактивирован и пользователь больше не может с ним взаимодействовать. Обычно такие деактивированные элементы изменяют внешний вид, чтобы пользователь смог их отличить от активных. Свойство visible (методы void setVisible(bool) и bool isVisible() ) определяет видимый виджет (значение true ) или нет (значение false ). Эти свойства влияют не только на сам визуальный элемент, но и на дочерние элементы.
Кроме этих общих свойств, каждый виджет обладает собственными уникальными особенностями, которые позволяют создавать удобные и практичные в использовании пользовательские интерфейсы.
0042 Создание простейшего окна типа QWidget
Так, например, кнопки ( Buttons ), очень часто употребляемый элемент управления. В общем поведение для кнопок определяет абстрактный класс QAbstractButton . Эти элементы могут находиться в включённом или выключенном состояниях. Состояние можно определять с помощью свойства checked (метод isChecked() ). Переключением можно управлять с помощью свойства checkable (bool isCheckable(), setChеcked(bool)). От класса QAbstractButton наследуют классы QCheckBox, QPushButton, QRadioButton, QToolButton .
- QPushButton чаще используют соединяя его сигнал clicked() , который вызывается при нажатии кнопки, с другими слотами.
- QToolButton является кнопкой для быстрого доступа к действиям или настройкам, которую обычно используют внутри панели инструментов.
- QCheckBox — элемент-флажок. Может находиться в включённом или выключенном состоянии. Также может иметь третье промежуточное состояние, поддержку которого можно активировать с помощью метода setTristate() .
- QRadioButton — кнопка-переключатель. Как и флажок может находиться в включённом или выключенном состоянии. Её используют в группе с другими переключателями (см. класс QButtonGroup ) для обозначения нескольких взаимоисключающих вариантов выбора, где только один переключатель включён, а все остальные выключены.
К виджетам-контейнерам ( Containers ) относят QFrame, QGroupBox, QTabWidget, QToolBox. QFrame — наиболее общий элемент. Это базовый класс для виджетов, которые имеют обрамление. От него наследуют такие классы визуальных элементов как QLabel, QLCDNumber, QSplitter, QToolBox, QStackedWidget, QAbstractScrollArea . Может использоваться самостоятельно для отображения различных рамок.
- QGroupBox используют для выделения группы виджетов рамкой с надписью. Есть возможность задать клавиатурную комбинацию, чтобы перевести фокус ввода на виджеты в группе. Не создаёт компоновку для группы виджетов автоматически.
- QTabWidget — виджет для отображения виджетов внутри отдельных страниц. Предоставляет панель вкладок и показывает виджет для текущей страницы внутри себя. Для работы необходимо создать виджет и добавить его как страницу, а также задать имя страницы.
- QToolBox используют для создания вертикальной колонки виджетов со вкладками. Каждый виджет имеет отдельную вкладку. Текущий видимый виджет соответствует текущей открытой вкладке.
Также следует выделить виджеты-виды ( Views ), к которым относят QListView, QListWidget, QTableView, QTableWidget, QTreeView, QTreeWidget . Они добавляют возможность выводить информацию в виде списков, таблиц и деревьев. QListView, QTableView, QTreeView используют модель, как источник данных (см. абстрактный класс QAbstractItemModel ). QListWidget, QTableWidget и QTreeWidget используют как самостоятельный виджет с данными, данные добавляют поэлементно (см. QListWidgetItem, QTableWidgetItem, QTreeWidgetItem ).
Уроки С++. Qt Widgets — Первая программа. Знакомство
К элементам вывода информации ( Display widgets ) относят QLabel, QLCDNumber и QProgressBar . QProgressBar позволяет вывести текущий прогресс в виде заполненной линии. QLCDNumber выводит целые и числа с плавающей запятой в стиле семисегментного дисплея. QLabel используют для вывода различной текстовой информации. Этот виджет также поддерживает разметку HTML4, которую можно использовать для оформления текста.
Наиболее многочисленная группа — элементы ввода ( Input widgets ). К ним относят QComboBox, QDateEdit, QDial, QDoubleSpinBox, QFontComboBox, QLineEdit, QScrollBar, QSlider, QSpinBox, QTextEdit, QTimeEdit .
- QComboBox — выпадающий список, используемый для выбора элемента из списка альтернатив.
- QDateTimeEdit — поле ввода даты и времени. Позволяет вводить и показывать время в заданном формате. Вид этого элемента наследуют также QTimeEdit и QDateEdit .
- QDial — изменяет числовое значение по тому же принципу, что и регуляторы на панели приборов. Наследует от абстрактного класса QAbstractSlider .
- QLineEdit — поле ввода. Даёт возможность не только вводить текст, но и проверять допустимость ввода (см. класс QValidator ). Имеет режим для ввода пароля. Также возможно задать маску для ввода значений.
- QScrollBar — элемент управления скроллингом. Наследует от абстрактного класса QAbstractSlider . Каждому положению указателя соответствует значение в заданных пределах. Часто используют для прокрутки содержимого других виджетов.
- QSlider — элемент, который использует перетаскивания мышкой для ввода значений. Каждому положению указателя соответствует значение, в заданных пределах. Наследует от абстрактного класса QAbstractSlider .
Источник: intuit.ru
Краткое описание
Прежде чем делиться всеми базовыми знаниями, необходимо представить здесь широко используемые windows-QWidget, QDialog, QMainWindow.
Студенты, знакомые с Qt, должны знать, что они будут встречаться при выборе информации о классе для новых проектов Qt Widgets. Да, это совпадение, что они могут встречаться каждый раз. Поэтому в будущем развитии Qt мы будем часто иметь с ними дело. Как говорится, знание себя и знание друг друга означает, что вы не будете поражены. Только поняв их и познакомившись с ними, мы сможем лучше их контролировать. , ,
QWidget наследует от QObject и QPaintDevice, QDialog и QMainWindow наследуют от QWidget, и между QDialog и QMainWindow нет прямой связи. Озорные маленькие друзья из горшочка снова расстроены, они явно принадлежат одному отцу, то есть отношения брат-сестра O (∩_∩) O ха-ха-ха ~.
- Краткое описание
- QWidget
- QMainWindow
- QDialog
- Модальный диалог
- Немодальный диалог
- Полумодальное диалоговое окно
QWidget
Класс QWidget является базовым классом для всех объектов пользовательского интерфейса.
Виджет является атомом пользовательского интерфейса: он получает мышь, клавиатуру и другие события из оконной системы и рисует свое собственное представление на экране. Каждый виджет является прямоугольным, и они расположены в порядке оси Z. Виджет может быть частично покрыт его родительским виджетом или виджетом перед ним.
QWidget имеет много функций-членов, но некоторые из них имеют несколько прямых функций: например, QWidget имеет атрибуты шрифта, но он никогда не используется сам по себе. Предоставляет практические функции для многих подклассов, которые его наследуют, таких как QLabel, QPushButton, QCheckBox и так далее.
Виджет без родительской формы всегда является отдельным окном (виджет верхнего уровня). Не виджеты виджеты являются дочерними виджетами, которые отображаются в родительском окне. Большинство компонентов в Qt в основном используются в качестве подкомпонентов. Например, кнопка может отображаться как окно верхнего уровня, но большинство людей предпочитают, чтобы кнопка была встроена в другие виджеты, такие как QDialog.

На рисунке выше показан QGroupBox, который содержит большое количество дочерних элементов управления, размеченных QGridLayout.
QMainWindow
Класс QMainWindow предоставляет главное окно приложения с панелью меню, панелью инструментов и строкой состояния (например: IDE-Visual Studio, Qt Creator и т. Д., Которые обычно используются для разработки Qt).
Главное окно предоставляет структуру пользовательского интерфейса для создания приложений. Qt имеет QMainWindow и связанные с ним классы для управления главным окном.
QMainWindow имеет свой собственный макет. Мы можем использовать QMenuBar (строка меню), QToolBar (панель инструментов), QStatusBar (строка состояния) и QDockWidget (плавающее окно). Макет имеет центральную область, которая может быть занята любым небольшим окном.

QDialog
Класс QDialog является базовым классом для диалоговых окон.
Диалоговое окно представляет собой форму верхнего уровня, которая в основном используется для краткосрочных задач и краткого общения с пользователями. QDialog может быть модальным или немодальным. QDialog поддерживает расширяемость и может предоставлять возвращаемые значения. Они могут иметь кнопки по умолчанию. QDialog также может иметь QSizeGrip в правом нижнем углу, используя setSizeGripEnabled ().
Примечание: QDialog (и другие виджеты, которые используют типы Qt :: Dialog) используют родительские виджеты немного иначе, чем другие классы в Qt. Диалоговое окно всегда является виджетом верхнего уровня, но если у него есть родительский объект, его позиция по умолчанию находится в середине родительского объекта. Он также поделится записями панели инструментов с родительским объектом.
Модальный диалог
Диалоговое окно, которое блокирует ввод из других видимых окон в том же приложении. Модальное диалоговое окно имеет собственный цикл обработки событий. Пользователь должен завершить взаимодействие в этом диалоговом окне и закрыть его, прежде чем получить доступ к любым другим окнам в приложении. Модальное диалоговое окно блокирует доступ только к окну, связанному с беседой, позволяя пользователям продолжать использовать приложения в других окнах.
Наиболее распространенным способом отображения модального диалога является вызов его функции exec (). Когда пользователь закрывает диалог, exec () предоставит полезное возвращаемое значение, и управление потоком затем продолжится с того места, где был вызван exec (). Обычно, чтобы закрыть диалоговое окно и вернуть соответствующее значение, мы подключаем кнопку по умолчанию, например: кнопка «ОК» подключена к гнезду accept (), а кнопка «Отмена» подключена к гнезду reject (). В качестве альтернативы, мы можем подключить слот done () и передать его в Accepted или Rejected.
Немодальный диалог
Диалоговые окна, которые не имеют ничего общего с другими операциями окна в той же программе. Диалоговые окна поиска и замены в текстовом редакторе обычно не работают, что позволяет пользователям одновременно взаимодействовать как с главным окном приложения, так и с диалоговыми окнами. Вызовите show () для отображения немодального диалогового окна и немедленно верните управление вызывающей стороне.
Если функция show () вызывается после того, как диалоговое окно скрыто, диалоговое окно будет отображаться в исходном положении, поскольку положение окна, определенное диспетчером окон, явно не указано программистом. ), А затем переместите диалоговое окно в эту позицию перед его отображением.
Диалоговое окно Half Mode
Вызовите setModal (true) или setWindowModality (), а затем покажите (). В отличие от exec (), show () немедленно возвращает вызывающему элементу управления.
Для диалога прогресса очень полезно вызвать setModal (true), пользователь должен иметь возможность взаимодействовать с ним, например: отменить длительные операции. Если вы используете show () и setModal (true) для совместного выполнения длинной операции, вы должны периодически вызывать QApplication :: processEvents () во время выполнения, чтобы позволить пользователю взаимодействовать с диалоговым окном (см. QProgressDialog).
Принципы использования
- Если его нужно встроить в другие формы, он создается на основе QWidget.
- Если это основная форма, она создается на основе QMainWindow.
- Если это диалог верхнего уровня, он создается на основе QDialog.
Сегодня я в основном объясняю сходства и различия между тремя, не все они описаны и используются, и они будут подробно объяснены в последующем фактическом боевом процессе, например: использование некоторых общих диалоговых окон — QFileDialog, QColorDialog, QMessageBox Как добавить строку меню, панель инструментов, плавающую форму и т. Д. В основную форму QMainWindow, QWidget и его подклассы-QLabel, QPushButton, QCheckBox и т. Д.
Источник: russianblogs.com
QWidget — базовый виджет для всех интерфейсных объектов¶
Если виджет не имеет родителя (parent), то виджет отображается как окно, иначе оно распологается на родительском виджете.
Если в параметре flags указан тип окна, то компонент, имея родителя, будет обладать свои собственным окном, но привязан к родительскому окну.
Флаги виджета из класса QtCore.Qt
- Widget — тип по умолчанию для класса QWidget
- Window — указывает, что компонент является окном, независимо от того, имеет он родителя или нет.
Окно выводится с рамкой и заголовком, в котором расположены кнопки Свернуть, Развернуть и Закрыть. По умолчанию размеры окна можно изменять с помощью мыши
Окно выводится с рамкой и заголовком, в котором расположены кнопки Справка и Закрыть. Размеры окна можно изменять с помощью мыши.
Окно выводится без рамки и заголовка. Кроме того, окно может отбрасывать тень. Изменить размеры окна с помощью мыши нельзя
Окно выводится с рамкой и заголовком (меньшем по высоте, чем обычное окно), в котором расположена кнопка Закрыть. Размеры окна можно изменять с помощью мыши
Окно выводится без рамки и заголовка. Изменить размеры окна с помощью мыши нельзя
Окно выводится без рамки и заголовка. Изменить размеры окна с помощью мыши нельзя. Значение по умолчанию для класса
Окно вообще не отображается на экране
Окно выводится с рамкой и заголовком (меньшем по высоте, чем обычное окно) без кнопок. Изменить размеры окна с помощью мыши нельзя.
Для окон верхнего уровня можно дополнительно указать следующие атрибуты из класса QtCore.Qt через оператор |:
- MSWindowsFixedSizeDialogHint — запрещает изменение размеров окна.
Источник: ilnurgi1.ru