QT 4: программирование GUI на С++
Шрифт:
Конструктор прячет ту часть диалогового окна, где располагаются поля второго и третьего ключей. Он также устанавливает свойство sizeConstraint менеджера компоновки формы на значение QLayout::SetFixedSize, не позволяя пользователю изме-
От составителя. Страница №42 в исходном DjVu была пропущена! У кого есть — вставьте.
Создавать в Qt другой распространенный тип изменяющихся диалоговых окон, многостраничные диалоговые окна, даже еще проще как при ручном кодировании, так и при использовании Qt Designer. Такие диалоговые окна
• можно непосредственно воспользоваться виджетом окно с вкладками QTabWidget. Здесь сверху окна имеется полоска вкладок, которая находится под управлением стека QStackedWidget;
• можно совместно использовать список QListWidget и стек QStackedWidget, где текущий элемент списка будет определять страницу, показываемую стеком QStackedWidget, обеспечив связь сигнала QListWidget::currentRowChanged со слотом QStackedWidget::setCurrentIndex;
• можно виджет древовидной структуры QTreeWidget совместно использовать со стеком QStackedWidget, как в предыдущем случае.
Класс стека QStackedWidget рассматривается в главе 6 («Управление компоновкой»).
Динамические диалоговые окна
Динамическими называются диалоговые окна, которые создаются на основе файлов .ui, сделанных в Qt Designer, во время выполнения приложения. Вместо преобразования файла .ui компилятором uic в программу на С++ мы можем загрузить этот файл на этапе выполнения, используя класс QUiLoader:
Мы можем осуществлять доступ к дочерним виджетам формы при помощи функции QObject::findChild<T>:
Функция findChild<T> является шаблонной функцией—членом, которая возвращает дочерний объект по заданному имени и типу. Эта функция отсутствует для MSVC 6 из-за ограничений этого компилятора. Если вам необходимо использовать компилятор MSVC 6, вместо этой функции следует вызывать глобальную функцию qFindChild<T>, которая работает точно так же.
Класс QUiLoader расположен в отдельной библиотеке. Для использования класса QUiLoader в приложении Qt мы должны добавить в файл .pro следующую строку:
Динамические диалоговые окна позволяют изменять компоновку элементов формы без повторной компиляции приложения. Они могут также использоваться для создания «тонких» клиентских приложений, когда в исполняемый модуль встраивается только основная форма пользовательского интерфейса, а все другие формы создаются по мере необходимости.
Встроенные классы виджетов и диалоговых окон
Qt содержит большой набор встроенных виджетов и стандартных диалоговых
Рис. 2.16. Виджеты кнопок Qt.
Qt содержит четыре вида кнопок: QPushButton, QToolButton, QCheckBox и QRadioButton. Кнопки QPushButton и QToolButton получили наибольшее распространение и используются для инициации какого-то действия при их нажатии, но они также могут применяться как переключатели (один щелчок нажимает кнопку, другой щелчок отпускает кнопку). Флажок QCheckBox может использоваться для включения и выключения независимых опций, в то время как переключатели (радиокнопки) QRadioButton обычно задают взаимоисключающие возможности.
Рис. 2.17. Виджеты одностраничных контейнеров Qt.
Контейнеры Qt — это виджеты, которые содержат в себе другие виджеты. Фрейм QFrame, кроме того, может использоваться самостоятельно просто для вычерчивания линий, и он наследуется многими другими классами виджетов, включая QToolBox и QLabel.
Рис. 2.18. Виджеты многостраничных контейнеров Qt.
QTabWidget и QToolBox являются многостраничными виджетами. Каждая страница является дочерним виджетом, и страницы нумеруются с нуля.
Виджеты для просмотра списков элементов оптимизированы для работы с большими наборами данных, и в них часто используются полосы прокрутки. Работа полосы прокрутки реализуется классом QAbstractScrollArea, который является базовым для просмотра списков элементов и для других виджетов, обеспечивающих скроллинг.
Qt имеет несколько виджетов, которые предназначены для простого отображения информации. Наиболее важным из них является текстовая метка QLabel, и она может также использоваться для форматированного отображения текста (используя простой синтаксис, подобный HTML) и вывода изображений.
Рис. 2.19. Виджеты для просмотра списков объектов.
Текстовый браузер QTextBrowser представляет собой подкласс поля редактирования, работающий только в режиме чтения и обеспечивающий основные возможности формата HTML, включая списки, таблицы, изображения и гипертекстовые ссылки. Qt Assistant использует браузер QTextBrowser для представления документации пользователю.