KDevelop. Руководство программиста: Руководство по разработке приложений на C++ для K Desktop Environment (KDE) с использованием KDevelop IDE, Version 1.0 | ||
---|---|---|
. | След. |
При разработке приложения с графическим пользовательским интерфейсом наиболее трудоемкой является реализация так называемого элемента Просмотр ("view") приложения. Просмотр - это видимый элемент, который отображает данные, содержащиеся в обрабатываемом приложением документе, и предоставляет методы для изменения этих данных. Пользователь заставляет эти методы работать, порождая события клавиатуры и мыши; сложные операции часто выполняются с помощью команд, генерируемых при выборе пунктов меню или кнопок панели управления, которые взаимодействуют с Просмотром. Строка статуса предоставляет информацию о документе, о режиме работы объекта Просмотр и о состоянии приложения. Рассмотрим, например, как устроен текстовый редактор, и где реализованы его части.
Редактор обычно предназначен для просмотра и изменения текстового файла пользователем. Если вы откроете KEdit, вы увидите следующие элементы пользовательского интерфейса:
Панель меню: предоставляет возможность выполнять сложные операции, такие как открытие и закрытие файлов, выход из приложения и т.п.,
Панель инструментов: содержит иконки для быстрого доступа к наиболее часто используемым функциям,
Строка статуса: отображает координаты текущего положения курсора,
Объект Просмотр в центре окна: отображает документ и предоставляет связь курсора с клавиатурой и мышью для обработки данных.
Теперь легко понять, что Просмотр - наиболее специализированная часть приложения, и от того, как он разработан, зависит полезность приложения и удобство работы с ним. Это значит, что один из первых шагов при разработке приложения - это определение назначения приложения и того, какой тип объекта Просмотра наилучшим образом позволит пользователю работать с приложением, с минимумом затрат на освоение пользовательского интерфейса.
Для некоторых стандартных задач, например, текстовой обработки или отображения HTML файлов, Qt и библиотеки KDE предоставляют специальные объекты просмотра; мы обсудим некоторые аспекты использования таких объектов высокого уровня в следующем разделе. Но для большинства приложений должны быть разработаны новые элементы. Это момент, где программист становится также дизайнером, и где требуются его творческие способности. Однако не забывайте, что основное в пользовательском интерфейсе - это его интуитивность. Помните, что многие пользователи не воспримут приложение, которое:
некрасиво выглядит,
не предлагает широкого набора возможностей,
трудно в использовании,
тяжело для изучения.
Однако не стоит даже говорить, что основной критерий качества разработки - стабильность. Никто не сможет предотвратить все ошибки, но с помощью хорошо продуманного процесса разработки можно свести их число к минимуму. Четко определите цель и широко используйте методы объектно-ориентированного программирования. C++ сделает программирование удовольствием, если вы будете знать, как использовать его возможности - наследование, ограничения доступа и повторное использование кода.
При создании KDE или Qt проекта вы всегда наследуете объект Просмотра от QWidget непосредственно или через использование библиотечного элемента, унаследованного от QWidget. KAppWizard уже создал объект Просмотра, который является экземпляром класса <ваше&_;приложение>View, унаследованного от QWidget. Приложение создает его в методе initView(), где создается экземпляр объекта, который затем устанавливается как главный с помощью KTMainWidget::setView().
Эта глава описывает, как использовать библиотеку элементов для создания главного объекта (объекта Просмотр) для KDE или Qt приложений, которые разрабатываются с помощью KDevelop. Мы просмотрим библиотеки и узнаем, какие типы элементов они предлагают.
Когда начинается разработка приложения, вы в первую очередь должны просмотреть уже существующий код, что сделает вашу жизнь гораздо легче. Например, необходимо изучить уже существующие элементы, которые могут быть использованы в качестве объектов Просмотра или как их часть, как непосредственно, так и путем наследования. Библиотеки KDE и Qt уже содержат набор элементов, которые могут быть использованы для этих целей. Вы имеете две возможности для их использования:
удалить объект Просмотра, включенный в шаблон, создать экземпляр библиотечного элемента и установить его как главный элемент;
изменить предка предложенного в шаблоне элемента на класс библиотечного элемента.
В любом случае, важно понимать, что если приложение на данный момент не линкуется с библиотекой, которая содержит новый элемент, линкование завершится с ошибкой. После того, как вы решили использовать определенный элемент, посмотрите, с какой библиотекой необходимо связаться. Потом откройте "Project"->"Options" из меню KDevelop, переключитесь на страницу "Linker Options" и посмотрите на то, какие библиотеки используются на текущий момент. Если среди них есть библиотека, в которой содержится ваш элемент, вы можете закрыть окно опций проекта без изменений и начать вносить необходимые изменения в ваш код. Если нет, и в опциях линкера есть возможность добавить необходимую библиотеку выбором соответствующего пункта, выберите его и нажмите "OK", чтобы закрыть окно опций проекта. В любом другом случае добавьте библиотеку в строку ввода внизу окна с опцией -l. Для библиотек, которые ваше приложение должно искать перед генерацией файлов Makefiles в скрипте configure на машине пользователя, добавьте соответствующий макрос для поиска в файл configure.in, расположенный в корневом каталоге проекта, и добавьте макрос для изменения строки. Имейте в виду, что вы должны запустить "Build"->"Autoconf" и "Build"->"Configure" для того, чтобы в файлы Makefile была записана правильная информация о макросе для вашей библиотеки.
Кроме того, если include-файлы добавленной библиотеки не попадают в текущий путь для поиска include-файлов (каталоги, заданные с помощью ключа -I в окне вывода информации о работе "Make"), вы должны добавить путь в диалоговом окне Project Options - страница "Compiler Options", с ключом -I, или соответствующий макрос automake в строке ввода "Additional Options".
На первой странице Qt online-документации вы найдете ссылку на картинки элементов "Widget Screenshots", где сможете посмотреть, как выглядят различные элементы Qt . Все они готовы к использованию и могут быть объединены вместе для создания сложных главных окон приложений или диалогов. Далее мы описываем некоторые из этих элементов, которые очень полезны при разработке приложений и элементов Просмотр, но имейте в виду, что библиотеки KDE иногда содержат другие элементы, выполняющие те же задачи; их мы обсудим в следующем разделе.
Перед вами несколько подсказок, для каких целей какие элементы Qt использовать:
если ваша область просмотра недостаточно велика, чтобы вместить все данные, необходимо обеспечить пользователю возможность прокрутки (скроллинга) с помощью полос прокрутки справа и внизу. Для этого Qt предоставляет класс QScrollView, у которого имеется пользовательская область с обеспечением прокрутки. Вы можете наследовать свой собственный элемент от QScrollView или использовать его экземпляр для организации просмотра в вашем приложении.
для создания прокручиваемой области самостоятельно наследуйте объект Просмотра от класса QWidget и добавьте к нему вертикальную и горизонтальную прокрутку QScrollBar (это сделано в KDE для элемента KHTMLView);
для текстовой обработки используйте QMultiLineEdit. Этот класс предоставляет полнофункциональный текстовый редактор, умеющий работать с буфером обмена и полосами прокрутки;
используйте QTableView, чтобы отобразить данные в табличной форме. QTableView управляется полосами прокрутки, поэтому он - хорошее решение для приложения типа электронных таблиц.
для одновременного отображения двух различных элементов или двух экземпляров элемента используйте QSplitter. Это позволит разделить область просмотра горизонтально или вертикально. Окно Netscape's Mail - хороший пример того, как это выглядит. Главное окно разделено по вертикали, а правая часть снова разделена по горизонтали.
QListView отображает информацию в виде дерева. Это полезно для представления дерева каталогов или другой иерархической информации, которую необходимо обрабатывать.
Как видно, Qt предоставляет полный набор элементов, уже готовых к использованию, поэтому вы не должны изобретать новых решений, если они удовлетворяют вашим требованиям. Еще одно преимущество использования стандартных элементов - пользователь уже знает, как с ними работать, и сможет сконцентрироваться не на интерфейсе, а на обрабатываемых данных.
Библиотеки KDE созданы для облегчения разработки приложений K Desktop Environment, и поддерживают всю функциональность, реализованную в Qt . Чтобы определить, что нам доступно, посмотрим на дерево документации в KDevelop. Мы видим, что библиотеки KDE начинаются с kdecore, которая является основой для всех приложений KDE. Идущая следом kdeui предоставляет элементы пользовательского интерфейса. Здесь мы найдем несколько полезных вещей. Для создания приложений kdeui предлагает:
KTabListBox: список с несколькими столбцами, строки которого можно изменять с помощью drag'n drop .
KTreeList: унаследованный от QTableView, реализует дерево с возможностью показа/скрытия веток. Может быть использован вместо QListView. В KDE 2.0 этот класс реализован не будет.
KEdit: базовый класс для приложения KEdit, поставляемого вместе с KDE; может использоваться вместо QMultiLineEdit.
KNewPanner: Управляет двумя дочерними элементами как QSplitter. В KDE 2.0 этот класс реализован не будет.
Библиотека khtmlw предоставляет полнофункциональный интерпретатор HTML документов, готовый к использованию. Он поддерживает прокрутку, поэтому вы не должны о ней заботиться. Может быть полезен как интегрированное средство просмотра в HTML-редакторе; используется такими приложениями, как KFM, KDEHelp и KDevelop для показа HTML файлов.