
Теперь мы рассмотрим слоты диалогового окна:
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 необходимые команды
<< назад вперед >>