The K Desktop Environment

Next Previous Table of Contents

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

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

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

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

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

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

QT-элементы:

KDE-элементы:

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

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

Свойства QWidget

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

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

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

Порожден от QWidget

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

Свойства QCheckBox

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

Свойства QPushButton

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

Свойства QRadioButton

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

Свойства QComboBox

Порожден от QWidget

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

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

Порожден от QWidget

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

Свойства QGroupBox

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

Свойства QLCDNumber

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

Свойства QLabel

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

Свойства QProgressBar

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

QScrollView

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

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

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

QListView

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

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

Свойства QSpinBox

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

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

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

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

Свойства QListBox

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

Свойства QMultiLineEdit

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

Свойства QLineEdit

Порожден от QWidget

Свойства QScrollBar

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

Свойства QSlider

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

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

KColorButton

Порожден от QPushButton

KKeyButton

KCombo

Порожден от QComboBox

KDatePicker

KLedLamp

KProgress

KSeparator

KDateTable

KTreeList

KRestrictedLine

KLed

Порожден от QWidget

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" после завершения создания и реализации.

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

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

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

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. Затем добавьте соответствующий вход меню в одно из выпадающих меню, уже имеющихся в панели меню, или создайте новое. Вход меню состоит из:

Next Previous Table of Contents