QT 4: программирование GUI на С++ | страница 19



так же как и signals, является макросом, который преобразуется в последовательность инструкций, понятных компилятору С++.

Для закрытых переменных мы использовали предварительные объявления их классов. Это допустимо, потому что все они являются указателями, и мы не используем их в заголовочном файле — поэтому компилятору не требуется иметь полные определения классов. Мы могли бы воспользоваться соответствующими заголовочными файлами (, и так далее), но при использовании предварительных объявлений компилятор работает немного быстрее.

Теперь рассмотрим файл finddialog.cpp, в котором находится реализация класса FindDialog.

>01 #include

>02 #include "finddialog.h"

Во-первых, мы включаем — заголовочный файл, который содержит определения классов графического интерфейса Qt. Qt состоит из нескольких модулей, каждый из которых находится в своей собственной библиотеке. Наиболее важными модулями являются QtCore, QtGui, QtNetwork, QtOpenGL, QtSql, QtSvg и QtXml. Заголовочный файл содержит определение всех классов, входящих в модули QtCore и QtGui. Включив этот заголовочный файл, мы можем не беспокоиться о включении каждого отдельного класса.

В filedialog.h вместо включения и использования предварительных объявлений для классов QCheckBox, QLabel, QLineEdit и QPushButton мы могли бы просто включить . Однако включение такого большого заголовочного файла, взятого из другого заголовочного файла, обычно свидетельствует о плохом стиле кодирования, особенно при разработке больших приложений.

>03 FindDialog::FindDialog(QWidget *parent)

>04 : QDialog(parent)

>05 {

>06 label = new QLabel(tr("Find &what:"));

>07 lineEdit = new QLineEdit;

>08 label->setBuddy(lineEdit);

>09 caseCheckBox = new QCheckBox(tr("Match &case"));

>10 backwardCheckBox = new QCheckBox(tr("Search backward"));

>11 findButton = new QPushButton(tr("&Find"));

>12 findButton->setDefault(true);

>13 findButton->setEnabled(false);

>14 closeButton = new QPushButton(tr("Close"));

В строке 4 конструктору базового класса передается указатель на родительский виджет (параметр parent). Затем мы создаем дочерние виджеты. Функция tr() переводит строковые литералы на другие языки. Она объявляется в классе QObject и в каждом подклассе, содержащем макрос Q_OBJECT. Любое строковое значение, которое пользователь будет видеть на экране, полезно преобразовывать функцией