QT 4: программирование GUI на С++ | страница 18
>01 #ifndef FINDDIALOG_H
>02 #define FINDDIALOG_H
>03 #include
>04 class QCheckBox;
>05 class QLabel;
>06 class QLineEdit;
>07 class QPushButton;
Строки 1 и 2 (а также строка 27) предотвращают многократное включение в программу этого заголовочного файла.
В строке 3 в программу включается определение QDialog — базового класса для диалоговых окон в Qt. Класс QDialog наследует свойства класса QWidget.
В строках с 4 по 7 даются предварительные объявления классов Qt, использующихся для реализации диалогового окна. Предварительное объявление (forward declaration) указывает компилятору С++ только на существование класса, не давая подробного определения этого класса (обычно определение класса содержится в его собственном заголовочном файле). Чуть позже мы поговорим об этом более подробно.
Затем мы определяем FindDialog как подкласс QDialog:
>08 class FindDialog : public QDialog
>09 {
>10 Q_OBJECT
>11 public:
>12 FindDialog(QWidget *parent = 0);
Макрос Q_OBJECT необходимо задавать в начале определения любого класса, содержащего сигналы или слоты.
Конструктор FindDialog является типичным для классов виджетов в Qt. В параметре parent (родитель) указывается родительский виджет. По умолчанию задается нулевой указатель, указывающий на то, что у данного диалога нет родительского виджета.
>13 signals:
>14 void findNext(const QString &str, Qt::CaseSensitivity cs);
>15 void findPrev(const QString &str, Qt::CaseSensitivity cs);
В секции signals объявляется два сигнала, которые генерируются диалоговым окном при нажатии пользователем кнопки Find (найти). Если установлен флажок поиска в обратном направлении (Search backward), генерируется сигнал findPrevious(); в противном случае генерируется сигнал findNext ().
Ключевое слово signals на самом деле является макросом. Препроцессор С++ преобразует его в стандартные инструкции языка С++ и затем передает их компилятору. Qt::CaseSensitivity является перечислением и может принимать значение Qt::CaseSensitive или Qt::CaseInsensitive.
>16 private slots:
>17 void findClicked();
>18 void enableFindButton(const QString &text);
>19 private:
>20 QLabel *label;
>21 QLineEdit *lineEdit;
>22 QCheckBox *caseCheckBox;
>23 QCheckBox *backwardCheckBox;
>24 QPushButton *findButton;
>25 QPushButton *closeButton;
>26 };
>27 #endif
В закрытой (private) секции класса мы объявляем два слота. Для реализации слотов нам потребуется большинство дочерних виджетов диалогового окна, поэтому мы резервируем для них соответствующие переменные—указатели. Ключевое слово