Подклассы QDialog
Первое диалоговое окно мы создадим полностью вручную, чтобы было ясно, ка выглядит исходный код такой программы. Затем мы покажем способы построени. диалоговых окон в Qt Designer, который является средством визуального проектирс вания в Qt. Использование Qt Designer позволяет получать результат значительн быстрее, чем при ручном кодировании, и полученные в нем различные вариант] проектов легче тестировать и изменять в будущем.
Первым нашим примером будет диалоговое окно Find (найти) для поиска заданно: пользователем последовательности символов, и оно будет полностью написано на С+н Мы реализуем это диалоговое окно в виде его собственного класса. Причем мы сделае! его независимым и самодостаточным компонентом, со своими сигналами и слотами.

Рис. 2.1. Диалоговое окно поиска
Исходный код программы содержится в двух файлах: finddialog. h и finddia-log. срр. Сначала приведем файл finddialog. h:
001 #ifndef FINDDIAL0G_H
002 #define FINDDIAL0G_H
003 #include <QDialog.h>
004 class QCheckBox;
005 class QLabel;
006 class QLineEdit;
007 class QPushButton;
Строки 1 и 2 (а также строка 27) предотвращают многократное включение в программу этого заголовочного файла.
8 строке 3 в программу включается определение QDialog - базового класса для диалоговых окон в Qt. Класс QDialog наследует свойства класса QWidget.
В строках с 4 по 7 даются предварительные объявления классов Qt, использующихся для реализации диалогового окна. Предварительное объявление (forward declaration) указывает компилятору С++ только на существование класса, не давая подробного определения этого класса (обычно определение класса содержится в его собственном заголовочном файле). Чуть позже мы поговорим об этом более подробно.
Затем мы определяем FindDialog как подкласс QDialog:
008 class FindDialog : public QDialog
009 {
010 Q_OBJECT
011 public:
012 FindDialog(QWidget *parent = 0);
Макрос Q_OBJECT необходимо задавать в начале определения любого класса, содержащего сигналы или слоты.
Конструктор FindDialog является типичным для классов виджетов в Qt. В параметре parent (родитель) указывается родительский виджет. По умолчанию задается нулевой указатель, указываюпдий на то, что у данного диалога нет родительского виджета.
013 signals:
014 void findNext(const QString &str, Qt::CaseSensitivity cs);
<< назад вперед >>