Подклассы 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);


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