он становится дочерним элементом диалога и все виджеты в ме­неджерах компоновки становятся дочерними элементами диалога. Иерархия полу­ченных родословных связей представлена на рис. 2.3.


Теперь мы рассмотрим слоты диалогового окна:

39 void FindDialog::findClicked()

40 {

41 QString text = HneEdit->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. Он ге­нерирует сигнал findPreviousO или findNext() в зависимости от состояния флажка Search backward (поиск в обратном направлении). Ключевое слово emit (генериро­вать сигнал) имеет особый смысл в Qt; как и другие расширения Qt, оно преобразу­ется препроцессором С++ в стандартные инструкции С++.

Слот enableFindButton() вызывается при любом изменении значения в строке редактирования. Он устанавливает активный режим кнопки, если в редактируемой строке имеется какой-нибудь текст; в противном случае кнопка устанавливается в неактивный режим.

Эти два слота завершают написание программы диалогового окна. Теперь мы мо­жем создать файл main, срр и протестировать наш виджет FindDialog:

1 include <QApplication>

2 flinclude "finddialog.h"

3 int main(int argc, char *argv[])

4 {

5 QApplication app(argc, argv);

6 FindDialog *dialog = new FindDialog;

7 dialog->show();

8 return app.execO;

9 }

Для компиляции этой программы выполните обычную команду qmake. Посколь­ку определение класса FindDialog содержит макрос G_OBJECT, сформированный ко­мандой qmake, файл makefile будет содержать специальные правила для запуска тос -мета-объектного компилятора Qt. (Мета-объектная система Qt рассматривается в следующем разделе.)

Для правильной работы тос мы должны включить определение класса в заголо­вочный файл, то есть отделить его от файла реализации класса. Сформированный тос программный код содержит этот заголовочный файл и собственно сгенерирован­ные инструкции С++.

Классы с макросом Q_OBJECT сначала должны пройти через компилятор тос. Здесь не будет проблем, поскольку qmake автоматически добавляет в файл makefile необходимые команды


<< назад вперед >>