# 6.7. Подключение диалога к проекту

Когда вы создаете элемент, вы, вероятно, хотите добавить его в проект для выполнения функций, для которых он был разработан. Поскольку элемент может быть создан для выполнения нескольких функций, мы рассмотрим 2 случая - элемент унаследован от `QWidget`, и элемент унаследован от `QDialog`.

## 6.7.1. Наследование от `QWidget`

Предположим, вы создали элемент, который будет входить в состав главного окна. Если вы заполняете всю видимую область, вы должны добавить указатель на экземпляр объекта в файл заголовка с определением вашего экземпляра `KTMainWindow`, заменив текущий объект Просмотр. Затем измените код в методе `initView` для установки вашего элемента главным. Кроме того, вы можете удалить класс View из сгенерированного проекта, но помните, что экземпляр документа и экземпляр приложения (App) зависят от класса View. В этой ситуации технически гораздо более удобно создать мини-KDE приложение и создать свой экземпляр `KTMainWindow`.

Гораздо чаще элемент будет частью видимой области, что предполагает его объединение с другими элементами. Это может быть сделано с использованием одного из следующих классов, которые предлагают разделители для отделения двух элементов:

1. `QSplitter`

2. `KPanner`

3. `KNewPanner`

Если видимая область будет содержать более двух элементов, вы сможете использовать второй экземпляр разделителя в качестве объекта управления в одной из первоначальных областей. Добавьте соответствующие элементы на каждую из частей видимой области и установите первый разделитель как видимую область. (см. Netscape Mail - прим. переводч.)

## 6.7.2. Наследование от `QDialog`

Если ваш элемент унаследован от `QDialog`, то, вероятно, он используется для изменения одного или нескольких значений; часто это необходимо для установки настроек приложения. Для вызова диалога вы должны добавить слот в класс `App`, вставляя объявление метода и его реализацию. Затем добавьте вызов конструктора для метода, а также вызов `show()` или `exec()` диалога. Наконец, вы должны позаботиться об обработке результатов работы диалога; это может быть сделано в диалоге изменением значений родителя, или получением значений из диалога (что сделает ваш диалог гораздо более легко переносимым в другие проекты). Имейте в виду, что вы должны вызвать `delete`, если вы создаете экземпляр диалога с помощью `new`, чтобы избежать потери памяти.

Наконец, вы должны связать вход меню (обеспечив соответствующее сообщение в строке статуса) с новым методом, вызывающим диалог; можно создать горячую клавишу и кнопку на панели инструментов. Для этого добавьте ресурсный ID в файл `resource.h`. Затем добавьте соответствующий вход меню в одно из выпадающих меню, уже имеющихся в панели меню, или создайте новое. Вход меню состоит из:

- необязательной иконки. Установите ее вызовом макроса `Icon("iconname.xpm")` из `KApplication`, чтобы использовать уже существующий экземпляр `KIconLoader`.

- имени входа меню. Добавьте его с использованием макроса `i18n("&&;имя&_;входа")` из `KApplication`, чтобы обеспечить интернационализацию. Амперсант должен быть перед буквой, которая обеспечивает доступ по горячей клавише.

- экземпляр, содержащий вызываемый метод. Обычно это указатель `this`.

- вызываемый слот. Используйте `SLOT(ваш&_;метод())` для вызова слота по сигналу `activated()`.

- горячая клавиша. Должна быть установлена в 0, поскольку это назначение делается в `initKeyAccel()`, где вы вводите горячие клавиши вместе с слотами для вызова. Затем вызовите `changeMenuAccel()` для изменения горячей клавиши. Это позволит сделать ее конфигурируемой через стандартный диалог в дальнейшем. Для стандартных действий используйте значения, определенные `KAccel`.

- меню ID, установленный в `resource.h`