Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПОВМ_курсач_26 / 890541_Kalenchits_K_V_Poyasnitelnaya_zapiska.docx
Скачиваний:
2
Добавлен:
29.07.2022
Размер:
109.01 Кб
Скачать

2.2 Проектирование модуля сбора данных

Данный модуль отвечает за получение информации о событиях и преобразует ее к формату, который будет обработан основным модулем (графический интерфейс). Модуль сбора данных будет реализован в виде отдельного модуля исходного кода, содержащего описание его интерфейса и реализации. Единая структура представления данных событиях будет описана именно в этом модуле. Также в этом модуле будет содержаться описание функции сбора данных о событиях в выбранном каталоге.

!!!!!Структура представления данных будет описывать структуру информации об одном событии. В этой структуре будут присутствовать поля наименования (описания) устройства, его класса и списка характеристик этого устройства. Так как данная структура должна быть доступна (видна) во всех модулях программы, то ее описание будет осуществляться в заголовочной части модуля сбора данных.

Интерфейс функции сбора данных будет описывать вызов функции сбора данных, формирующей список структур данных, описывающих события.

3 Реализация программного обеспечения

По заданию для реализации данного проекта для ОС Linux был выбран язык программирования C++. В качестве среды разработки был использован Qt.

Рассмотрим далее в этом разделе реализацию основных частей данного приложения.

3.1 Реализация структур данных

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

Листинг 3.1 – Описание структуры данных событий

struct Watch {

std::string path;

bool in_move;

};

3.2 Реализация графического интерфейса

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

Функция сhange_dir_click отвечает за изменение директории

void change_dir_click() {

QFileDialog dialog(this);

dialog.setFileMode(QFileDialog::Directory);

dialog.setOption(QFileDialog::ShowDirsOnly, true);

int result = dialog.exec();

QString directory;

if (result) {

myModel->reset();

directory = dialog.selectedFiles()[0];

cur_dir->setText(directory);

dir = directory.toUtf8().constData();

tracker.change_dir(dir);

}

}

Функция Render отвечает за отображение модели

void render() {

if (!dir.empty()) {

auto recs = tracker.get_records();

myModel->add_events(recs);

}

}

Функция Reset отвечает за очистку модели

void reset() {

beginResetModel();

this->recs.clear();

endResetModel();

}

Функция rowCount отвечает за количество строк в таблице

int rowCount(const QModelIndex &parent) const {

if (parent.isValid())

return 0;

return recs.size();

}

Функция columnCount отвечает за количество колонок в таблице

int columnCount(const QModelIndex &parent) const {

if (parent.isValid())

return 0;

return 2;

}

Функция add_events отвечает за добавление оповещения о директориях в графический интерфейс

void add_events(table_records &events) {

beginInsertRows(QModelIndex(), recs.size(),

recs.size() + events.size() - 1);

recs.insert(recs.begin(), events.begin(), events.end());

endInsertRows();

}

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

Рисунок 3.1 – Главное окно приложения

Соседние файлы в папке СПОВМ_курсач_26