Next Previous Table of Contents
Меню и панели инструментов - одна из наиболее важных частей приложения для обеспечения работы с документом. Как правило, вы должны сделать доступными все функции через меню. Те пункты меню, которые вызывают функции, недоступные в текущем состоянии приложения, должны быть запрещены.
Далее, приложение может содержать только одну панель меню, но несколько панелей инструментов.
Панель инструментов должна содержать только наиболее часто используемые функции, которые должны вызываться нажатием кнопок с иконками; также в состав панелей инструментов могут входить выпадающие списки для выбора значений.
Каждый вход меню или кнопка панели инструментов имеет ресурсный идентификатор (ID), представляющий собой число типа integer. Поскольку данные значения не могут использоваться дважды, они представляются макросами. В макросах числовое значение заменяется осмысленным названием, используемым в коде программы.
Все ресурсные ID собраны в файле resource.h
, где можно посмотреть, какие числа уже задействованы. В любом случае, компилятор
проинформирует вас, если вы дважды используете одно и то же число для различных входов. Кроме того, ресурсный файл должен содержать все клавиши быстрого доступа к меню,
заменяемые в IDK-макросе(?). Например:
(resource.h) #define ID_VIEW_TOOLBAR 12010 (kscribble.cpp) // menu entry Toolbar in the "view" menubar menu view_menu->insertItem(i18n("&Toolbar"), ID_VIEW_TOOLBAR);
Этот код добавляет вход Toolbar в меню View панели меню приложения kscribble. Имя ресурсного ID состоит из имени меню и имени входа, как видно. Амперсант, стоящий перед буквой, заставляет ее работать как горячую клавишу, а само имя входа передается с использованием макроса интернационализации i18n().
При активации входа меню вызывается конструкция switch функции commandCallback() с ID меню. Поэтому вы должны добавить соответствующее сравнение в конструкцию switch и функцию, которую необходимо выполнить при выборе данного входа меню:
case ID_VIEW_TOOLBAR: slotViewToolBar(); break;
Заметьте, что вы не обязаны использовать систему ID. Если не задан никакой ID, меню нумеруется автоматически.
KDevelop использует систему ID для того, чтобы иметь возможность создать конструкции switch для выбора выполняемого слота при
поступлении сигнала activated()
для меню и clicked()
для кнопок панели инструментов.
Однако эта связь может быть реализована непосредственно, используя соответствующие методы классов меню и панели инструментов.
Новое меню добавляется в приложение так:
QPopupMenu
для указателя в initMenuBar()
там, где должна появиться ваша панель меню в дальнейшем;commandCallback()
и statusCallback()
в конце initMenuBar()
;commandCallback()
и statusCallback()
;
Кнопки панелей инструментов могут быть добавлены аналогично входам меню, но с тем отличием, что используемый метод - insertButton()
.
Этот метод принимает в качестве аргументов иконку и всплывающую подсказку вместо текста меню.
Иконки, которые вы хотите использовать, загружаются с помощью KIconLoader
. KApplication
предоставляет макросы ICON()
и Icon()
для доступа к KIconLoader
и загрузки иконок. Эти макросы получают в качестве параметра имя файла иконки для ее загрузки из
файловой системы KDE, производя в ней поиск в определенном порядке (см. KIconLoader
для уточнения этого порядка).
Библиотеки KDE также предоставляют набор кнопок для панелей инструментов, которые используются для выполнения стандартных действий. В случае, когда они не удовлетворяют ваших потребностей, вы должны самостоятельно нарисовать иконки. KDevelop поможет вам это сделать - выберите "New" из меню "File", затем выберите тип файла Pixmap. Обычно иконки для панели инструментов располагаются в поддиректории проекта "toolbar" и инсталлируются оттуда в специфичный для вашего приложения KDE каталог "toolbar".
Шаблон проекта KDevelop уже использует строку статуса, отображая в ней справку о назначении входов меню и кнопок панели инструментов.
При добавлении входа меню также добавляйте справочное сообщение в метод statusCallback()
.
statusCallback()
использует метод slotStatusHelpMsg()
для показа сообщения в строке статуса в течение 2 секунд.
Когда выполняется команда, вы должны использовать метод slotStatusMsg()
в начале выполнения со строкой, поясняющей, что приложение делает;
перед окончанием операции вы должны установить сообщение в строке статуса "Ready.", вызывая тот же метод.
Очень профессиональная вещь, которую вы всегда должны добавлять в ваше приложение, - это горячие клавиши. Они обычно используются опытными пользователями,
которые хотят работать с приложением быстро и готовы изучить горячие клавиши. Для них библиотека KDE предоставляет класс
KAccel
, который реализует горячие клавиши и обеспечивает доступ к стандартной глобальной конфигурации горячих клавиш.
По умолчанию, приложение, сгенерированное KDevelop, использует только стандартные горячие клавиши, такие как F1 для получения помощи, Ctrl+N для создания нового файла. Перед добавлением новой комбинации клавиш вы должны посмотреть, а не определена ли она уже.
Если ваше приложение содержит множество горячих клавиш, вы должны сделать их конфигурируемыми через меню Options; они могут совпадать с конфигурацией других приложений
или использоваться только в вашем. Библиотека KDE предоставляет класс KKeyChooser
для использования в многостраничном диалоге,
тогда как KKeyDialog
дает готовое диалоговое окно для конфигурации горячих клавиш.
Для более детальной информации см. следующие классы:
KAccel
(kdecore), KKeyChooser
, KKeyDialog
(kdeui).
Next Previous Table of Contents