Смекни!
smekni.com

Разработка геоинформационной системы (стр. 3 из 10)

В настоящее время Qt – это библиотека классов C++ и набор инструментального программного обеспечения, предназначенных для построения многоплатформенных приложений с графическим интерфейсом и исповедующих принцип «написав однажды – компилируй в любом месте». Qt представляет собой единую платформу для приложений, которые могут работать под управлением Windows 95/98/Me/2000/XP, Mac OS X, Linux, Solaris, HP-UX и других версий Unix.

Qt предоставляет:

- широкий набор классов и методов, пригодных для использования даже для программ без графического интерфейса;

- хорошее решение для реализации взаимодействия с пользователем посредством виртуальных методов и механизма сигнал / слот;

- набор предопределенных GUI-элементов, называемых «widgets», которые могут быть легко использованы для создания видимых элементов;

- дополнительные полностью предопределенные диалоговые окна, которые часто используются в приложениях, такие как окно прогресса или окно выбора файлов.

В качестве языка программирования выбран C++ как язык, наилучшим образом сочетающий в себе поддержку объектно-ориентированной технологии программирования и возможности написания кода на достаточно низком уровне, что позволяет достичь оптимального быстродействия разрабатываемого программного обеспечения. Одним из современных инструментальных средств для разработки Windows-приложений является пакет MicrosoftVisualC++ 6.0. VisualC++ предоставляет удобную среду визуального объектно-ориентированного программирования, что и обусловило выбор именно этого пакета в качестве среды разработки.

2.2 Логическая структура библиотеки картографии

Библиотека картографии предназначена для работы с цифровой картой местности (ЦКМ) и представляет собой набор классов и функций, обеспечивающих визуализацию и работу с картой, а также обеспечение решения расчетных задач на фоне карты.

Программное обеспечение состоит из следующих элементов:

- набор классов и функций, составляющих ядро библиотеки;

- класс MKartaInterface, предоставляющий функции управления картой.

Для хранения карты на диске используются файлы в формате UTP. Формат UTP предполагает наличие utp-файла, а также kls-файл, содержащий классификатор. Также возможно использование bmh-файла с матрицей высот.

Логически карта состоит из паспорта, ссылки на классификатор (в виде термина) и одного или нескольких слоёв, каждый из которых, в свою очередь, состоит из объектов.

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

Слой – самая крупная структурная единица в структуре карты, представляющая собой хранилище объектов. Структурно состоит из паспорта слоя и списка объектов.

В картографии понятие «объект» обозначает наиболее элементарную часть в структуре карты, соответствующую единичному географическому явлению на местности.

Как информационная структура, объект представляет собой хранилище сведений об изображаемом явлении, включающее:

- указание на способ изображения данного явления, т.е. его условный знак;

- данные о расположении явления (пространственные данные, контур);

- дополнительные сведения о нем (атрибуты).

3. Функциональное проектирование

3.1 Проектирование структуры классов

Исходя из выделенных на этапе структурного проектирования блоков разрабатываемого программного модуля, для реализации заданных функции были разработаны описанные ниже классы.

Класс MainWindow – описывает главное окно программного модуля.

Класс MapView – реализует отображения карты в главном окне программного модуля.

Класс Tasks – обрабатывает нажатие функциональных клавиш в главном окне программного модуля.

Класс Heights – реализует работу со списком стандартных высот.

Класс EditDialog – описывает работу диалога редактирования стандартных высот.

Класс Matrix – реализует работу с матрицей превышений и матрицей корректировок.

Класс ComputeDialog – описывает работу диалога расчета матрицы превышений для нескольких листов карт местности.

Класс ComputeThread – реализует процедуру расчета матрицы превышений для нескольких листов карт местности.

Взаимодействие всех классов осуществляется с помощью следующих глобальных переменных объявленных в main.cpp как указатели на объекты соответствующих классов:

- MKartaInterface *karta – объект, реализующий функции взаимодействия с картой;

- Matrix *matrix – текущая обрабатываемая матрица превышений;

- Matrix *correctionMatrix – текущая обрабатываемая матрица корректировок;

- MainWindow *window – главное окно приложения;

- Tasks *tasks – объект для обработки нажатия клавиш в главном окне.

Классы, реализующие диалоги программного модуля

Класс MainWindow – с помощью этого класса происходит описание главного окна программного модуля. Основные функции данного класса:

- MainWindow() – конструктор, который вызывается при создании окна;

- bool eventFilter (QObject *o, QEvent *e) – функция обработки движения мыши;

- void onExit() – функция выполняет последовательность операций при закрытии главного окна программы.

Класс EditDialog – с помощью этого класса происходит описание диалога редактирования стандартных высот. Основные функции этого класса:

- EditDialog() – конструктор, который вызывается при создании диалога;

- void addButtonClick() – функция обработки добавления элементов в список;

- void remButtonClick() – функция обработки удаления элементов из списка;

- void listViewClick (QListViewItem *item) – функция обработки выбора раздела классификатора;

- void updateTables (QString zs, QString razd) – функция обновления списка высот для знаков выбранного раздела классификатора;

- void valueChanged (int row, int col) – функция обработки изменения значения высоты в списке.

Класс ComputeDialog – с помощью этого класса происходит описание диалога расчета матрицы превышений для нескольких листов карт местности. Основные функции данного класса:

- ComputeDialog (QWidget* parent = 0, const char* name = «ComputeDialog», bool modal = FALSE, WFlags fl = 0) – конструктор, который вызывается при создании диалога;

- void start() – функция обработки запуска процедуры расчета;

- void stop() – функция обработки остановки процедуры расчета;

При реализации пользовательского интерфейса использованы стандартные элементы управления Windows, каждому из которых в Qt соответствует собственный класс:

- панель управления – используется для ускоренного доступа к часто используемым функциям – класс QToolBar;

- главное меню – используется для организации меню – класс QMenuBar;

- панель состояния – используется для вывода сервисной информации – класс QStatusBar;

- список – представление данных в виде списка – класс QListView;

- надпись – используется для подписывания элементов интерфейса – класс QLabel;

- поле ввода – используется для ввода данных пользователем – класс QLineEdit;

- кнопка – используется для выполнения пользователем определенных действий – класс QPushButton;

- индикатор прогресса – класс QProgressBar.

Кроме того, использованы некоторые специальные классы Qt:

- QMainWindow – для создания главного окна приложения (класс MainWindow);

- QTable – для организации таблиц с данными;

- QDialog – для организации окон модальных диалогов (классы EditDialog, ComputerDialog).

С помощью программы QtDesigner, входящей в комплект поставки системы разработки Qt, был разработан вид главного окна программного модуля и диалогового окна для редактирования стандартных высот.

Программа QtDesigner предназначена для разработки и реализации графического пользовательского интерфейса приложения. С ее помощью также можно сгенерировать программный код, обеспечивающий реализацию функций разработанного интерфейса. В отличие от MicrosoftVisualStudio, помещающего описание ресурсов диалогового окна в текстовый файл с расширением.rc, среда разработки Qt создает файл с расширением.ui и помещает в него описание диалогового окна в формате, совместимом с XML. Этот файл включается в makefile данного проекта, создающий на его основе соответствующие файлы заготовок и реализации класса диалогового окна.

Вид главного окна приложения с описанием элементов представлен на рисунке 3.1.


Рисунок 3.1. Главное окно программы


Вид диалогового окна для редактирования списка стандартных высот с


описанием элементов представлен на рисунке 3.2.

Рисунок 3.2. Диалоговое окно для редактирования списка стандартных высот

Классы, реализующие функции программного модуля

Класс ComputeThread– с помощью этого класса происходит расчет матрицы превышений для нескольких листов карт местности. Основные функции этого класса:

- ComputeThread (QObject*obj) – конструктор, который вызывается при создании объекта;

- voidstart() – функция запуска процедуры расчета;

- void stop() – функция остановки процедуры расчета;