Рабочая среда К

4.2. Создание собственного элемента просмотра

Теперь, когда вы получили общее представление о предоставляемых возможностях, можно заметить, что для большинства задач уже существуют элементы, которые могут быть использованы самостоятельно или объединены с другими. KMail и сам KDevelop - хорошие примеры использования библиотечных элементов для отображения данных.

Для приложений, которые используют специфические форматы файлов или имеют дело с графикой, вы, вероятно, будете вынуждены создать свой собственный элемент просмотра для организации обработки данных. Это реализуется в нашем примере с помощью класса KScribbleView, уже имеющего все необходимое для области просмотра.

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

Повторим для полноты подлежащие переопределению методы:

a) События клавиатуры -- клавиши TAB и Shift-TAB :

изменяет фокус ввода с клавиатуры с текущего элемента на следующий элемент в порядке изменения фокусов. Фокус может быть установлен для элемента вызовом setFocusPolicy(). Изменение фокуса обрабатывается следующими обработчиками событий: :

b) другой ввод с клавиатуры:

c) перемещение мыши:

d) нажатие кнопок мыши:

e) события окна, содержащего элемент:

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

  1. объявляйте ваши виртуальные методы как virtual в секции protected. Это позволит переиспользовать код при наследовании и обеспечит логическую целостность;

  2. не включайте в текст программы, реализующей обработку событий, непосредственно (hard-code) ничего такого, что может конфигурироваться. Это в основном относится к событиям клавиатуры, которые реализуются через горячие клавиши и состоят в вызове функций. Данное замечание касается даже текстовой обработки! (Вообразите себе, что множество пользователей привыкли к своему любимому текстовому редактору. Если горячие клавиши конфигурируются, то они смогут использовать привычные для себя настройки);

  3. передавайте сигналы, генерируемые при подсветке пунктов меню, главному элементу, чтобы обеспечить подсказки в строке статуса.