QT 4: программирование GUI на С++ | страница 22
>38 }
Наконец, мы задаем название диалогового окна и устанавливаем фиксированной его высоту, поскольку в диалоговом окне нет виджетов, которым может понадобиться дополнительное пространство по вертикали. Функция QWidget::sizeHint() возвращает «идеальный» размер виджета.
На этом завершается рассмотрение конструктора FindDialog. Поскольку нами использован оператор new при создании виджетов и менеджеров компоновки, нам, по-видимому, придется написать деструктор, где будут предусмотрены операторы delete для удаления каждого созданного нами виджета и менеджера компоновки. Но поступать так не обязательно, поскольку Qt автоматически удаляет дочерние объекты при разрушении родительского объекта, а все дочерние виджеты и менеджеры компоновки являются потомками FindDialog.
Теперь мы рассмотрим слоты диалогового окна:
>39 void FindDialog::findClicked()
>40 {
>41 QString text = lineEdit->text();
>42 Qt::CaseSensitivity cs =
>43 caseCheckBox->isChecked() ? Qt::CaseSensitive
>44 : Qt::CaseInsensitive;
>45 if (backwardCheckBox->isChecked()) {
>46 emit findPrevious(text, cs);
>47 } else {
>48 emit findNext(text, cs);
>49 }
>50 }
>51 void FindDialog::enableFindButton(const QString &text)
>52 {
>53 findButton->setEnabled(!text.isEmpty());
>54 }
Слот findClicked() вызывается при нажатии пользователем кнопки Find. Он генерирует сигнал findPrevious() или findNext() в зависимости от состояния флажка Search backward (поиск в обратном направлении). Ключевое слово emit (генерировать сигнал) имеет особый смысл в Qt; как и другие расширения Qt, оно преобразуется препроцессором С++ в стандартные инструкции С++.
Слот enableFindButton() вызывается при любом изменении значения в строке редактирования. Он устанавливает активный режим кнопки, если в редактируемой строке имеется какой-нибудь текст; в противном случае кнопка устанавливается в неактивный режим.
Эти два слота завершают написание программы диалогового окна. Теперь мы можем создать файл main.cpp и протестировать наш виджет FindDialog:
>01 #include
>02 #include "finddialog.h"
>03 int main(int argc, char *argv[])
>04 {
>05 QApplication app(argc, argv);
>06 FindDialog *dialog = new FindDialog;
>07 dialog->show();
>08 return app.exec();
>09 }
Для компиляции этой программы выполните обычную команду qmake. Поскольку определение класса FindDialog содержит макрос