KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Жасмин Бланшет - QT 4: программирование GUI на С++

Жасмин Бланшет - QT 4: программирование GUI на С++

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Жасмин Бланшет, "QT 4: программирование GUI на С++" бесплатно, без регистрации.
Перейти на страницу:

Встроенные классы виджетов и диалоговых окон

Qt содержит большой набор встроенных виджетов и стандартных диалоговых окон, с помощью которых можно реализовать большинство возможных ситуаций. В данном разделе мы представим изображения экранов почти со всеми из них. Несколько специальных виджетов будет рассматриваться позже: такие виджеты главного окна, как QMenuBar, QToolBar и QStatusBar, обсуждаются в главе 3, а виджеты, связанные с компоновкой элементов (такие, как QSplitter и QScrollArea), рассматриваются в главе 6. Большинство встроенных виджетов и диалоговых окон входят в примеры данной книги. В представленных ниже экранах виджеты используют стиль Plastique.

Рис. 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 для представления документации пользователю.

Рис. 2.20. Виджеты отображения данных в Qt.

Qt содержит несколько виджетов для ввода данных. Строка редактирования QLineEdit может ограничивать ввод данных, применяя маску ввода или функцию проверки допустимости данных. Поле редактирования QTextEdit является подклассом QAbstractScrollArea, позволяющим редактировать тексты большого объема.

Рис. 2.21. Виджеты ввода данных в Qt.

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

Рис. 2.22. Диалоговое окно выбора цвета и диалоговое окно выбора шрифта в Qt.

В системах Windows и Mac Os X по мере возможности используются «родные» диалоговые окна, а не их общие аналоги.

Рис. 2.23. Диалоговое окно для выбора файла и диалоговое окно печати документов в Qt.

Qt содержит разнообразные диалоговые окна для передачи сообщений об ошибках и других сообщений, причем они обеспечивают обратную связь с пользователем. При выполнении продолжительных операций могут использоваться диалоговый индикатор состояния процесса QProgressDialog и показанный ранее индикатор состояния процесса без обратной связи QProgressBar. Очень удобно пользоваться диалоговым окном QInputDialog, когда пользователю требуется ввести одну строку или одно число.

Рис. 2.24. Диалоговые окна для установки обратной связи с пользователем.

Встроенные виджеты и стандартные диалоговые окна обладают большими функциональными возможностями, которыми можно пользоваться без дополнительного программирования. Многие специальные требования обеспечиваются установкой свойств виджетов или путем применения механизма сигналов и слотов и реализации пользовательских определений слотов.

В некоторых случаях может возникнуть потребность в создании пользовательского виджета без помощи стандартных средств. В Qt это делается просто, и возможности пользовательских виджетов будут обладать таким же свойством независимости от платформы, как и возможности встроенных виджетов Qt. Пользовательские виджеты даже можно интегрировать в Qt Designer, и тогда они могут применяться так же, как и встроенные виджеты Qt. В главе 5 объясняются способы создания пользовательских виджетов.

Глава 3. Создание главных окон

В данной главе вы научитесь создавать главные окна при помощи средств разработки Qt. К концу главы вы будете способны построить законченный графический пользовательский интерфейс приложения, который имеет меню, панели инструментов и строку состояния, и все необходимые приложению диалоговые окна.

Главное окно приложения обеспечивает каркас для построения пользовательского интерфейса приложения. Данная глава будет строиться на основе главного окна приложения Электронная таблица, показанного на рис. 3.1. В приложении Электронная таблица используются созданные в главе 2 диалоговые окна Find, Go-to-Cell и Sort (найти, перейти на ячейку и сортировать).

Рис. 3.1. Приложение Электронная таблица.

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

Создание подкласса QMainWindow

Главное окно приложения создается в виде подкласса QMainWindow. Многие из представленных в главе 2 методов также подходят для построения главных окон, поскольку оба класса QDialog и QMainWindow являются наследниками QWidget.

Главные окна можно создавать при помощи Qt Designer, но в данной главе мы продемонстрируем, как это все делается при непосредственном программировании. Если вы предпочитаете пользоваться визуальными средствами проектирования, то необходимую информацию вы сможете найти в главе «Creating a Main Window Application» (Создание приложения на основе класса главного окна) в онлайновом руководстве по Qt Designer.

Исходный код программы главного окна приложения Электронная таблица содержится в двух файлах: mainwindow.h и mainwindow.cpp. Сначала приведем заголовочный файл:

01 #ifndef MAINWINDOW_H

02 #define MAINWINDOW_H

03 #include <QMainWindow>


04 class QAction;

05 class QLabel;

06 class FindDialog;

07 class Spreadsheet;


08 class MainWindow : public QMainWindow

09 {

10 Q_OBJECT

11 public:

12 MainWindow();

13 protected:

14 void closeEvent(QCloseEvent *event);

Мы определяем класс MainWindow как подкласс QMainWindow. Он содержит макрос Q_OBJECT, поскольку имеет собственные сигналы и слоты.

Функция closeEvent() определена в QWidget как виртуальная функция; она автоматически вызывается при закрытии окна пользователем. Она переопределяется в MainWindow для того, чтобы можно было задать пользователю стандартный вопрос относительно возможности сохранения изменений («Do you want to save your changes?») и чтобы сохранить на диске пользовательские настройки.

15 private slots:

16 void newFile();

17 void open();

18 bool save();

19 bool saveAs();

20 void find();

21 void goToCell();

22 void sort();

23 void about();

Некоторые функции меню, как, например, File | New (Файл | Создать) или Help | About (Помощь | О программе), реализованы в MainWindow в виде закрытых слотов. Большинство слотов возвращают значение типа void, однако save() и saveAs() возвращают значение типа bool. Возвращаемое значение игнорируется при выполнении слота в ответ на сигнал, но при вызове слота в качестве функции мы может воспользоваться возвращаемым значением, как это мы можем делать при вызове любой обычной функции С++.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*