===============
Приложение парсит CSV файл со значениями дескрипторов объектов на изображении. Далее файл отображается в виде таблицы на главном окне, а также пользователь может выбрать те дескрипторы которые будут выступать в роли значений кривой графика откладывавемых по X или Y.
Пользователь может выбрать 1 или несколько файлов с значениями дескрипторов. Файл формата CSV в следующем формате:
DescriptorName1 | DescriptorName2 | ... | DescriptorNameN | |
---|---|---|---|---|
ObjectName1 | D(1, 1) | D(1, 2) | ... | D(1, N) |
... | ... | ... | ... | ... |
ObjectNameM | D(M, 1) | D(M, 2) | ... | D(M, N) |
В случае когда файлов несколько пользователь может выбрать каким образом обрабатывать эти файлы.
Режимы обработки файлов: Отобразить только объекты содержащиеся ...
- 1. Все объекты из А и из В. Дубликаты - оба значения (дескриптора)
- 2. Все объекты из А и из В. Дубликаты - значения только из А
- 3. Все объекты из А и из В кроме дубликатов
- 4. Только дубликаты из А и В, значения из обоих
- 5. Только дубликаты из А и В, значение только из А
- 6. Все объекты только из А кроме тех которые встречаются в В
- 7. Все объекты из А, дубликаты значение только из В
- 8. Все объекты из А, если дубликаты отсутсвуют
- 9. Все объекты из А и Все объекты из В, десли убликаты отсуствуют
TODO: про погрешности
- СИнициализирую 1 вкладку с пустой таблицей и график (сетка, оси...)
- Помечаю все неактивным кроме кнопки открытия
- Открывается файл = все активное + парсинг
- Помещаю полученную модель в таблицу и настройку графика
Читаю оба файла. Чтобы файлы считать корректными необходимо и достаточно:
[x] Оба файла существуют и читаются
[x] Файлы одного расширения (csv)
[x] Разделитель - запятая
[x] __*(первая строка)*__ = *имена дескрипторов* И __*первый столбец*__ = *имена объектов*
[x] Число столбцов (дескрипторов) равно
[x] Имена столбов совпадают соответсвенно
- Создаю новую вкладку TabWidget'а
- Добавляю туда TableView
- Создаю TableModel с заголовком равным первой строке файла.
- Первый столбец = ID = Primary Key - заголовочный столбец
- В TableModel копирую табличку из файла, все просто так без разбора.
- Создаю табличную модель в которой будет 4 типа параметров:
4.1. Выбрано/Не выбрано
4.2. Название поля
4.3. Ссылка на значение первой таблицы
4.4. Ссылка на значение второй таблицы
- Создаю ListView соответсвенно с этой моделью
- Устанавливаю листнер (настраиваю сигнал-слот) на нажатия пользователя
- Как только произошло нажатие достаю из обоих таблиц значение ячейки такой то столб такой то параметр
- Полученные значения помещаю в вызов функции отрисовки графика
- Создаю вектор всех возможных значений выбранного пользователем
- Для этого веткора считаю min/max и медиану
- Формирую оси : размах от min до max, цена деления = медиана. Название оси = название параметра.
- Для выбранного параметра, по его названию определяю номер столбца содержащего СКО этого параметра
- Отображаю на графике для каждого объекта (строки) точки с координатами х = значение параметра для этого объекта из файла А, y = значение соответсвующего параметра из файла B соответственно.
- В классе точки будут содержаться 2 ссылки на строка+столбец этой точки (объекта) в исходных таблицах
- Сделать таблицу масштабируемой
- Отображать вокруг точек полупрозрачную область погрешности, которая будет представлять из себя круг диаметром 2 * ср. ар. СКО для указанного параметра помещенного центром в координату точки
- При наведении мыши на точку отображается ацйди объекта и если на него кликнуть идет переход к этому параметру
TODO: вставить скрины