Next Previous Table of Contents

### 6. Редактор диалоговых окон Dialogeditor: Где строятся диалоги

### 6.1 Что предлагает Dialogeditor

Встроенный в KDevelop редактор диалогов разработан для того, чтобы помочь создавать диалоги, которые требуются для вашего приложения, и тем самым резко уменьшить время, расходуемое на построение графического пользовательского интерфейса. Единственное ограничение на сегодняшний день состоит в том, что Dialogeditor не поддерживает управление геометрическими размерами элементов, которое предоставляется Qt; поэтому диалоговые окна получаются статическими в своих размерах, что при определенных условиях может привести к нарушениям во внешнем виде приложения, например, текст метки после перевода приложения на другой язык окажется слишком длинным и не поместится в отведенном для него пространстве.

Но текущее состояние редактора в сочетании с возможностями по управлению проектом KDevelop обеспечивает скорейший путь для создания полнофункциональных приложений для K Desktop Environment.

### 6.2 Элементы Qt и KDE

На текущий момент доступны следующие элементы:

QT-элементы:

- QWidget - элемент, который может использоваться сам по себе, и может содержать другие элементы. Это позволяет создать иерархию элементов внутри вашего диалога.
- QLabel - метка, представляющая текстовую информацию на элементе. Используется QLabel, например, напротив строк ввода для пояснения их предназначения или возле выпадающего списка для указания названия устанавливаемого параметра.
- QPushButton - кнопка, позволяющая, например, вызвать другое диалоговое окно типа QFileDialog для выбора имени файла.
- QCheckBox - элемент, показывающий, разрешена или запрещена опция. QCheckBox широко используется в диалоговых окнах конфигурации.
- QLCDNumber - отображает номер как на жидкокристаллическом (LCD) экране. Часто используется как часы.
- QRadioButton - как и QCheckBox, позволяет пользователю выбрать опцию. QRadioButton используется для установки опций, когда они являются взаимозависимыми, например, вы имеете 3 кнопки, но выбрана может быть только одна из них. См. `QButtonGroup` для более детальной информации.
- QComboBox - позволяет пользователю установить значение, выбирая его из выпадающего меню, или ввести значение, если элемент сконфигурирован доступным для этого.
- QListBox - предоставляет список элементов, состоящий из одной колонки, с возможностью прокрутки.
- QListView - создает многоколонный список, который может быть использован для отображения, например, иерархии каталогов в виде таблицы или дерева.
- QMultiLineEdit - предоставляет многострочный текстовый редактор.
- QProgressBar - показывает степень выполнения действия, если оно занимает много времени.
- QSpinBox - позволяет выбрать числовое значение с помощью стрелок вверх/вниз, или ввести его непосредственно в поле ввода, если позволяет конфигурация.
- QSlider - устанавливает значение в заданном программой диапазоне.
- QScrollBar - показывает диапазон изменения значения и устанавливает текущее значение с помощью ползунка и кнопок вверх/вниз; часто используется для элементов, чье содержимое больше видимой области. С его использованием организуется прокрутка и видимая область элемента может меняться.
- QGroupBox - предоставляет фрейм с заголовком, чтобы показать, что элементы внутри сгруппированы.

KDE-элементы:

- KColorButton - кнопка, отображающая выбранный цвет. При нажатии вызывается KDE-окно выбора цвета, в котором пользователь может выбрать другой цвет. Часто используется для приложений типа графического редактора и в других случаях, когда может быть выбран цвет.
- KCombo - аналогичен `QComboBox`. Позволяет пользователю выбирать значение из выпадающего списка.
- KDatePicker - мощный элемент для ввода даты пользователем.
- KDateTable - табличка календаря для выбора дня месяца. Используется `KDatePicker` для построения диалога ввода даты.
- KKeyButton - кнопка для выбора значения клавиши. Если кнопка выбрана, то она активируется, и нажатие клавиши на клавиатуре изменяет установленный для кнопки код. Может быть использована для конфигурирования обработки клавиатурных команд.
- KLed - LED (Light Emitting Diode), светящийся диод. Предназначен для отображения текущего состояния.
- KLedLamp - аналогичен KLed, но поддерживает нажатие мышью.
- KProgress - аналогичен `QProgressBar`, но поддерживает другие диапазоны значений.
- KRestrictedLine - `QLineEdit` с возможностями фильтрации ввода. Может быть использован для создания окна ввода пароля.
- KSeparator - разделитель, который используется во всех случаях, где необходимо что-то отделить от чего-то. Часто используется в диалогах для выделения логических частей там, где не может быть использован `QGroupBox`.
- KTreeList - сворачивающийся список для отображения деревьев, похожий на `QListView`.

### 6.3 Свойства элементов Qt

Эта глава дает полный обзор поддерживаемых в настоящее время элементов Qt. Чтобы достичь лучшего понимания назначения свойств, они разделены в соответствии с иерархией наследования. Так как все элементы имеют предком `QWidget`, этот класс описан первым. Все свойства `QWidget` доступны для всех остальных элементов, поэтому повторно не приводятся. Для групп элементов, которые унаследованы от абстрактных подклассов (`QWidget` - базовый класс), свойства базового класса приведены вначале (хотя этот класс и не предоставляет видимых элементов в редакторе диалогов). Затем приводятся свойства для доступных элементов группы, содержащих специфичные опции. Для лучшего понимания иерархии наследования дерево, представляющее ее, приводится ниже:

- QWidget
  - QButton (abstract)
    - QCheckBox
    - QPushButton
    - QRadioButton
  - QComboBox
  - QFrame (abstract for now)
    - QGroupBox
    - QLCDNumber
    - QLabel
    - QProgressBar
    - QScrollView (abstract for now)
      - QListView
    - QSpinBox
    - QTableView (abstract)
      - QListBox
      - QMultiLineEdit
  - QLineEdit
  - QScrollBar
  - QSlider

#### Свойства QWidget

`QWidget` - базовый класс почти для всех элементов Qt и KDE. Поэтому элементы, унаследованные от `QWidget`, позволяют использовать те же установки в большинстве случаев.

- Appearance:
  - BgColor: Цвет заднего плана (background) элемента
  - BgMode: Режим заднего плана элемента
  - BgPalColor: Цветовая палитра заднего плана элемента
  - BgPixmap: Имя файла картинки заднего плана элемента
  - Cursor: Курсор над элементом
  - Font: Шрифт элемента
  - MaskBitmap: Имя файла для накладываемого точечного рисунка (masking bitmap)
- C++ Code:
  - AcceptsDrops: если установлено в true, экземпляр элемента воспринимает механизм drag'n drop Qt-протокола, не KDE 1.x !
  - Connections: соединение сигналов и слотов элемента
  - FocusProxy: элемент, предоставляющий фокус данному элементу
  - HasFocus: устанавливается, если элемент имеет фокус по умолчанию. Помните, что только один объект в диалоге может иметь данное свойство равным true
  - ResizeToParent: изменяет размер элемента до размера родителя (не виден в режиме редактирования)
  - VarName: имя переменной объекта. Измените это на имя, описывающее предназначение элемента.
- General:
  - IsEnabled: устанавливается, если элемент должен принимать пользовательские события
  - IsHidden: делает элемент невидимым (true) или видимым (false)
  - Name: устанавливает имя элемента. Помните, что имя отличается от VarName в коде C++.
- Geometry:
  - Height: высота элемента
  - IsFixedSize: true - имеет фиксированный размер
  - MaxHeight: максимальное значение для высоты Height
  - MaxWidth: максимальное значение для ширины Width
  - MinHeight: минимальное значение для высоты Height
  - MinWidth: минимальное значение для ширины Width
  - SizeIncX: количество пикселей в одном шаге при изменении размеров по X
  - SizeIncY: количество пикселей в одном шаге при изменении размеров по Y
  - Width: ширина элемента
  - X: положение по горизонтали, считаемое от левого угла
  - Y: положение по вертикали, считаемое сверху вниз

#### Наследуемые элементы QButton

`QButton` - абстрактный класс, предоставляющий свойства для всех кнопок.

Порожден от QWidget

Наследуется QCheckBox, QPushButton и QRadioButton.

- Appearance:
  - setPixmap: имя файла используемой картинки
- General:
  - setText: текст на метках, кнопках и ящиках (boxes), также предустановленный текст для строк ввода
  - setAutoRepeat: если разрешено, сигнал clicked() испускается через равные интервалы времени, пока кнопка находится в нажатом состоянии. Не действует на переключаемые (toggle) кнопки.
  - setAutoResize: Если true, то разрешается автоматическое изменение размера. Если оно разрешено, то кнопка изменяет свой размер при изменении содержимого.

#### Свойства QCheckBox

Порожден от QWidget и QButton

- General:
  - isChecked: (setChecked) определяет, выбрана ли кнопка при создании

#### Свойства QPushButton

Порожден от QWidget и QButton

- General:
  - isAutoDefault: (setAutoDefault) если установлено авто-умолчание, то кнопка становится кнопкой по умолчанию, когда она получает фокус ввода с клавиатуры
  - isDefault: (setDefault) может быть только одна кнопка по умолчанию и это может быть использовано только в диалоге. Кнопка по умолчанию испускает сигнал `clicked()` при нажатии пользователем клавиши Enter.
  - isMenuButton: (setIsMenuButton) сообщает кнопке о необходимости нарисовать стрелку меню. Меню должно быть вставлено отдельно.
  - isToggleButton::(setToggleButton) делает кнопку переключаемой, то есть заставляет ее вести себя аналогично QCheckBox.
  - isToggledOn: (setOn) (public slot) включает переключаемую кнопку.

#### Свойства QRadioButton

Порожден от QWidget и QButton

- General:
  - isChecked: (setChecked) определяет, выбрана ли кнопка при создании

#### Свойства QComboBox

Порожден от QWidget

(нет дополнительных свойств)

#### Элементы, унаследованные от QFrame

Порожден от QWidget

Сейчас используется только как абстрактный класс.

- Appearance:
  - Margin (setMargin): устанавливает отступ, равный расстоянию от самого внутреннего пикселя рамки и до самого внешнего пикселя содержимого

#### Свойства QGroupBox

Порожден от QWidget и QFrame

- General:
  - Title: (setTitle) устанавливает заголовок группы, который отображается на групповой рамке

#### Свойства QLCDNumber

Порожден от QWidget и QFrame

- General:
  - NumDigits:(setNumDigits) устанавливает количество цифр, отображаемых в QLCDNumber
  - Value: (display) (public slot) отображает исходное значение QLCDNumber

#### Свойства QLabel

Порожден от QWidget и QFrame

- Appearance:
  - Margin (setMargin): устанавливает отступ, который для QLabel равен расстоянию от рамки до первого символа текста метки, в зависимости от выравнивания метки
- C++ Code:
  - Buddy: (setBuddy) определяет объект, которому передается фокус при выборе метки
- General:
  - Text: (setText) устанавливает текст метки
  - isAutoResize: (setAutoResize) если true, то метка изменяет свой размер при изменении содержимого. Левый верхний угол не передвигается

#### Свойства QProgressBar

Порожден от QWidget и QFrame

- General:
  - TotalSteps: (setTotalSteps) (public slot) устанавливает общее количество шагов для индикатора прогресса. В процессе выполнения вашего задания для отображения прогресса вы должны вызывать метод setProgress(int) для отображения количества пройденных шагов (int).

#### QScrollView

Порожден от QWidget and QFrame

Наследуется QListBox (сейчас абстрактный)

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

#### QListView

Порожден от QWidget, QFrame и QListView

Предоставляет список для отображения иерархических данных как в виде таблицы, так и в виде дерева. Имеет прокрутку, организованную с помощью QScrollView.

- Appearance:
  - ListViewFont: (setFont()) устанавливает шрифт для строк списка
  - ListViewPalette: (setPalette()) устанавливает палитру для строк списка
  - TreeStepSize: (setTreeStepSize(int)) смещение в пикселях дочернего элемента от родительского
  - hScrollBarMode: Режим прокрутки предоставляется QScrollView для горизонтальной прокрутки
  - isAllColumnsShowFocus: (setAllColumnsShowFocus(bool)) показывает фокус для всех колонок списка
  - isMultiSelection: разрешает множественный выбор строк списка
  - isRootDecorated: разрешает показ "+" и "-" для развернутых и свернутых веток
  - vScrollBarMode: Режим прокрутки предоставляется QScrollView для вертикальной прокрутки
- General:
  - Entries: позволяет вам вставить список строк, который устанавливается как QListViewItems
  - isAutoUpdate:

#### Свойства QSpinBox

Порожден от QWidget и QFrame

- General:
  - MaxValue: максимальное значение, которое пользователь может выбрать
  - MinValue: минимальное значение, которое пользователь может выбрать
  - Prefix:
  - Suffix:
  - Value: предустановленное значение при отображении элемента
  - isWrapping:

#### Элементы, унаследованные от QTableView

Порожден от <QWidget, QFrame и QTableView

Наследуется QListBox and QMultiLineEdit

#### Свойства QListBox

Порожден от QWidget, QFrame и QTableView

- General:
  - isAutoBottomScrollBar: (setAutoBottomScrollBar)
  - isAutoScroll: (setAutoScroll)
  - isAutoScrollBar: (setAutoScrollBar)
  - isAutoUpdate: (setAutoUpdate)
  - isBottomScrollBar: (setBottomScrollBar)
  - isDragSelect: (setDragSelect)
  - isSmoothScrolling: (setSmoothScrolling)
- Geometry:
  - setFixedVisibleLines: устанавливает фиксированную высоту элемента, указывая количество текстовых строк, которые отображаются с использованием текущего шрифта

#### Свойства QMultiLineEdit

Порожден от QWidget, QFrame и QTableView

- General:
  - Text: (setText) (public slot) устанавливает текст элемента
  - isAutoUpdate: (setAutoUpdate) используется для того, чтобы избежать мигания при больших изменениях; элемент не обновляется, если запрещено
  - isOverWriteMode: (setOverwriteMode) (public slot) включает режим замены при вводе
  - isReadOnly: (setReadOnly) (public slot) если установлен в true, то текст не может редактироваться
  - isTextSelected: (selectAll)(public slot) делает выбранным весь текст
- Geometry:
  - setFixedVisibleLines: устанавливает фиксированную высоту для элементов, при этом отображается заданное количество текстовых строк текущим шрифтом

#### Свойства QLineEdit

Порожден от QWidget

- General:
  - CursorPosition: (setCursorPosition) устанавливает позицию курсора по умолчанию
  - MaxLength: (setMaxLength) устанавливает максимальную длину строки
  - Text: (setText) (public slot) устанавливает текст, отображаемый при создании
  - hasFrame: (setFrame) если разрешено, то рисует элемент внутри рамки шириной 2 пикселя
  - isTextSelected: (selectAll) (public slot) делает текст выбранным

#### Свойства QScrollBar

Порожден от QWidget и `QRangeControl`.

- General:
  - MaxValue: устанавливает максимальное значение ползунка; используется в конструкторе (не обязательно)
  - MinValue: устанавливает минимальное значение ползунка; используется в конструкторе (не обязательно)
  - Orientation: (setOrientation) устанавливает горизонтальное или вертикальное положение
  - Value: устанавливает начальное положение (не обязательно)
  - isTracking: (setTracking) если разрешено, то элемент испускает сигнал `valueChanged()`, пока он перемещает ползунок при нажатой кнопке мыши; иначе сигнал испускается после того, как кнопка мыши будет отпущена

#### Свойства QSlider

Порожден от <QWidget и `QRangeControl`.

- General:
  - MaxValue: устанавливает максимальное значение ползунка; используется в конструкторе (не обязательно)
  - MinValue: устанавливает минимальное значение ползунка; используется в конструкторе (не обязательно)
  - Orientation: (setOrientation) устанавливает горизонтальное или вертикальное положение
  - Value: (setValue) (public slot) использует `QRangeControl::setValue()` для присвоения значения
  - isTracking:(setTracking) если разрешено, то элемент испускает сигнал `valueChanged()`, пока он перемещает ползунок при нажатой кнопке мыши; иначе сигнал испускается после того, как кнопка мыши будет отпущена

### 6.4 Свойства элементов KDE

- QWidget
  - QButton (abstract)
    - QPushButton
      - KColorButton
      - KKeyButton
  - QComboBox
    - KCombo
  - QFrame (abstract for now)
    - KDatePicker
    - KLedLamp
    - KProgress
    - KSeparator
    - QTableView (abstract)
      - KDateTable
      - KTreeList
  - QLineEdit
    - KRestrictedLine
- KLed

#### KColorButton

Порожден от QPushButton

- General
  - DisplayedColor (setColor()) отображаемый цвет кнопки

#### KKeyButton

#### KCombo

Порожден от QComboBox

- General
  - Entries список входов, отображаемых в элементе
  - Text текущий отображаемый текст
  - isAutoResize изменить размер в соответствии с размером текущего элемента

#### KDatePicker

- Appearance
  - FontSize размер шрифта элемента

#### KLedLamp

#### KProgress

#### KSeparator

- General
  - Orientation устанавливает ориентацию разделителя - горизонтальная или вертикальная; по умолчанию горизонтальная

#### KDateTable

#### KTreeList

- Appearance
  - TreeListBgColor
  - TreeListPalette
  - isBottomScrollbar
  - isScrollBar
  - isShowItemText
  - isSmoothScrolling
  - isTreeDrawing
- General
  - Entries
  - isAutoUpdate

#### KRestrictedLine

#### KLed

Порожден от QWidget

- Appearance
  - LedColor: (setColor()) устанавливает отображаемый цвет индикатора

### 6.5 Создание нового диалога

Создание нового диалога очень простой процесс, если у вас уже есть опыт графической разработки приложений. KDevelop предоставляет возможность создавать элементы визуально и показывает, как они будут выглядеть в приложении. Кроме того, вы можете выбрать команду предварительного просмотра "Preview" из меню "View".

Для создания диалога или любого другого элемента переключитесь в режим Dialogeditor'а и выберите "New" из меню "File". Затем введите всю необходимую информацию в диалог "New Dialog". Это:

1. От какого класса наследуется диалог (The Dialog inheritance). Это необходимо, потому что любой элемент в конце концов порожден от `QWidget`. Кроме типов элементов, предоставляемых Qt, вы можете наследовать элемент, например, от абстрактного базового класса, который вы создали сами в проекте. В этом случае выберите "custom" и введите путь файла заголовка в строку ввода ниже.
2. Имя диалога (The Dialog name). Это устанавливает имя класса для генерируемого диалога. Выберите осмысленное имя, отражающее назначение диалога; в случае наследования от `QDialog`, вы можете ввести имя, заканчивающееся буквами `Dlg`, чтобы помнить, что это диалог. При присвоении имени следует использовать принятые в KDE и Qt соглашения: используйте заглавные буквы в имени класса. Например, диалог выбора размеров таблицы вы можете назвать `GridSizeDlg`.
3. Имена генерируемых файлов (The generated filenames). Они заполняются при вводе имени диалога, но могут быть изменены. Если вы хотите использовать другие имена файлов, также необходимо придерживаться соглашений KDE и Qt: все имена файлов набираются строчными буквами и содержат имя класса для напоминания, что он содержится в этом файле. Файл данных, который будет задан позднее, содержит сгенерированный код, получаемый при создании диалога. Вы не должны редактировать этот файл непосредственно; используйте файл реализации для любых добавлений в диалог и реализации его методов.

После этого диалог отобразится как элемент с сеткой. Поскольку сетка используется редактором диалогов для привязки элементов к ее узлам, вы можете изменять шаг сетки с помощью пункта "Grid Size" в меню "View", если вас не удовлетворяет значение по умолчанию

Выберите переключатель "Widgets" на левой панели и нажмите тот элемент, который вы хотите добавить в главное окно. Он появится в главном окне в левом верхнем углу и будет выбран рамкой, позволяющей производить изменение размеров. Передвиньте или измените размер элемента с помощью мыши. Курсор будет при этом изменяться, чтобы показать, какое действие может быть выполнено в данной позиции.

После завершения создания диалога выберите "Generate Files" из меню "Build" или нажмите соответствующую кнопку панели инструментов. Файлы будут сгенерированы в предопределенном месте и включены в исходники вашего проекта. Команда "Build" или "Make" перекомпилирует все сгенерированные файлы вашего проекта и вы сможете добавить соответствующий вызов конструктора в ваше приложение для отображения диалога или элемента. Для проектов KDE все свойства элементов могут быть просмотрены позже, например текст метки, установленный с помощью макроса `i18n()` из `kapp.h` для поддержки интернационализации. Таким образом, вы должны выполнить "Make Messages and merge" после завершения создания и реализации.

При создании диалога или элемента вы должны следовать следующим советам:

- Всегда стремитесь к стандарту! Это, наверное, наиболее важное правило при разработке элементов графического пользовательского интерфейса. Помните, что пользователь воспримет только те приложения, которые легко понять, независимо от того, насколько сложны решаемые ими задачи.
- Добавляйте везде, где это возможно, всплывающие подсказки. Что это..? Помощь, или Быстрая помощь. Это позволяет получить информацию о целях конкретного объекта пользовательского интерфейса.
- Следите за фокусом ввода клавиатуры! Генератор не заботится об этом - об этом надо помнить при создании любого элемента; иначе вы будете вынуждены переупорядочивать ваш инициализационный код вручную, что является очень неблагодарным занятием. Порядок изменения фокуса ввода клавиатуры значит порядок, в котором составляющие диалог элементы получают фокус, когда пользователь нажимает клавиши Tab и Shift+Tab. Очень надоедливо, когда фокус изменяется как угодно, но только не на следующий элемент, расположенный ниже или справа от текущего. Поэтому начинайте создание ваших элементов сверху вниз слева направо для уверенности в правильности перемещения фокуса.

### 6.6 Установка свойств элемента

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

- Значениями типа integer, такие как положение элемента или размер шрифта
- Значениями типа boolean для разрешения/запрещения определенных параметров элемента. Установленные выбором из списка содержат true и false
- Значения перечислимых типов, например, палитра. При установке выбором из списка содержат все доступные значения
- Значение цвета, например, для цвета элемента. Устанавливается с помощью диалога выбора цветов KDE
- Шрифт, например, текста метки. Будьте осторожны, задавая значение шрифта, отличное от шрифта по умолчанию, поскольку может случиться, что KDE не обновит шрифт.
- Имена файлов для картинок заднего плана. Не используйте файлы формата gif, поскольку они могут не поддерживаться последующими версиями Qt.

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

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

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

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

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

1. `QSplitter`
2. `KPanner`
3. `KNewPanner`

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

#### Наследование от `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`

Next Previous Table of Contents