Next
Previous
Table of Contents
Встроенный в KDevelop редактор диалогов разработан для того, чтобы помочь создавать диалоги, которые требуются для вашего приложения,
и тем самым резко уменьшить время, расходуемое на построение графического пользовательского интерфейса. Единственное ограничение на сегодняшний день состоит в том, что Dialogeditor не поддерживает
управление геометрическими размерами элементов, которое предоставляется Qt; поэтому диалоговые окна получаются статическими в своих размерах, что при определенных условиях может привести
к нарушениям во внешнем виде приложения, например, текст метки после перевода приложения на другой язык окажется слишком длинным и не поместится в отведенном для него пространстве.
Но текущее состояние редактора в сочетании с возможностями по управлению проектом KDevelop обеспечивает скорейший путь для создания
полнофункциональных приложений для K Desktop Environment.
На текущий момент доступны следующие элементы:
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.
Эта глава дает полный обзор поддерживаемых в настоящее время элементов Qt. Чтобы достичь лучшего понимания
назначения свойств, они разделены в соответствии с иерархией наследования. Так как все элементы имеют предком QWidget, этот класс описан
первым. Все свойства QWidget доступны для всех остальных элементов, поэтому повторно не приводятся. Для групп элементов,
которые унаследованы от абстрактных подклассов (QWidget - базовый класс), свойства базового класса приведены вначале
(хотя этот класс и не предоставляет видимых элементов в редакторе диалогов).
Затем приводятся свойства для доступных элементов группы, содержащих специфичные опции.
Для лучшего понимания иерархии наследования дерево, представляющее ее, приводится ниже:
Свойства 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(), пока он перемещает ползунок при нажатой кнопке мыши; иначе
сигнал испускается после того, как кнопка мыши будет отпущена
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
KRestrictedLine
KLed
Порожден от
QWidget
- Appearance
- LedColor: (setColor()) устанавливает отображаемый цвет индикатора
Создание нового диалога очень простой процесс, если у вас уже есть опыт графической разработки приложений. KDevelop предоставляет
возможность создавать элементы визуально и показывает, как они будут выглядеть в приложении. Кроме того, вы можете выбрать команду предварительного просмотра
"Preview" из меню "View".
Для создания диалога или любого другого элемента переключитесь в режим Dialogeditor'а и выберите "New" из меню "File". Затем введите
всю необходимую информацию в диалог "New Dialog". Это:
- От какого класса наследуется диалог (The Dialog inheritance). Это необходимо, потому что любой элемент в конце концов порожден от
QWidget. Кроме типов элементов,
предоставляемых Qt, вы можете наследовать элемент, например, от абстрактного базового класса, который вы создали сами в проекте. В этом случае
выберите "custom" и введите путь файла заголовка в строку ввода ниже.
- Имя диалога (The Dialog name). Это устанавливает имя класса для генерируемого диалога. Выберите осмысленное имя, отражающее назначение диалога;
в случае наследования от
QDialog, вы можете ввести имя, заканчивающееся буквами Dlg, чтобы помнить, что это диалог.
При присвоении имени следует использовать принятые в KDE и Qt соглашения: используйте заглавные буквы в имени класса. Например, диалог выбора размеров таблицы
вы можете назвать GridSizeDlg.
- Имена генерируемых файлов (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. Очень надоедливо,
когда фокус изменяется как угодно, но только не на следующий элемент, расположенный ниже или справа от текущего. Поэтому начинайте
создание ваших элементов сверху вниз слева направо для уверенности в правильности перемещения фокуса.
Свойства элемента могут быть легко установлены через окно свойств элемента. Когда выбирается элемент, окно свойств
автоматически обновляется и отображает свойства текущего элемента. Поскольку все элементы произошли от QWidget, вы можете установить
свойства QWidget и свойства, специфичные для выбранного элемента. Свойства могут быть:
- Значениями типа integer, такие как положение элемента или размер шрифта
- Значениями типа boolean для разрешения/запрещения определенных параметров элемента. Установленные выбором из списка содержат true и false
- Значения перечислимых типов, например, палитра. При установке выбором из списка содержат все доступные значения
- Значение цвета, например, для цвета элемента. Устанавливается с помощью диалога выбора цветов KDE
- Шрифт, например, текста метки. Будьте осторожны, задавая значение шрифта, отличное от шрифта по умолчанию, поскольку может случиться, что KDE не обновит шрифт.
- Имена файлов для картинок заднего плана. Не используйте файлы формата gif,
поскольку они могут не поддерживаться последующими версиями Qt.
Когда вы создаете элемент, вы, вероятно, хотите добавить его в проект для выполнения функций, для которых он был разработан. Поскольку элемент
может быть создан для выполнения нескольких функций, мы рассмотрим 2 случая - элемент унаследован от QWidget, и элемент унаследован от QDialog.
Наследование от QWidget
Предположим, вы создали элемент, который будет входить в состав главного окна. Если вы заполняете всю видимую область, вы должны добавить
указатель на экземпляр объекта в файл заголовка с определением вашего экземпляра KTMainWindow, заменив текущий объект Просмотр. Затем измените код в
методе initView для установки вашего элемента главным. Кроме того, вы можете удалить класс View из сгенерированного проекта, но помните,
что экземпляр документа и экземпляр приложения (App) зависят от класса View. В этой ситуации технически гораздо более удобно создать
мини-KDE приложение и создать свой экземпляр KTMainWindow.
Гораздо чаще элемент будет частью видимой области, что предполагает его объединение с другими элементами. Это может быть сделано
с использованием одного из следующих классов, которые предлагают разделители для отделения двух элементов:
QSplitter
KPanner
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