Рис. 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();