258 Commits
v0.8 ... DEV

Author SHA1 Message Date
semenov
965f2d9579 docs: update 2026-03-18 10:48:23 +03:00
semenov
6bfe260e47 feat: add file data complete 2026-03-11 11:46:11 +03:00
semenov
74937bc64d Merge branch 'DEV' of https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer into DEV 2026-03-05 16:54:27 +03:00
semenov
60b2cd8aac docs: update 2026-03-05 16:54:20 +03:00
2b656c2959 Работает сокет стрим 2026-02-26 17:59:17 +03:00
a0e54c0e18 refact2 2026-02-24 11:17:48 +03:00
a1f3e04fad refact 2026-02-19 12:26:46 +03:00
517515e94e Merge branch 'work48' into DEV 2026-02-18 17:21:21 +03:00
594aa8311e sendFileBlock_V3 2026-02-18 17:20:20 +03:00
semenov
a3d6c2899b feat: cfi package update 2026-02-16 09:35:38 +03:00
semenov
c16e99cc3e Merge branch 'DEV' of https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer into DEV
# Conflicts:
#	DOCS/MainScheme.md
2026-02-11 10:22:06 +03:00
semenov
f2e36d35e4 docs: add test cases 2026-02-11 10:21:29 +03:00
ed7de8af4e refact 1 2026-02-10 16:28:28 +03:00
2cce331a67 refact 0 2026-02-09 17:28:14 +03:00
f03632c56e initialize вместо singleShot 2026-02-09 16:23:40 +03:00
6387b41f9b Settings DB 2026-02-09 16:10:47 +03:00
b3aa4d088a flInitServerLMSWidget 2026-02-09 11:45:16 +03:00
0d287113e1 slot_StateServer 2026-02-09 11:45:04 +03:00
d27ab62114 bugFix SF GUI 2026-02-09 11:31:24 +03:00
4e2a5c48c6 ref 2 2026-02-09 11:30:52 +03:00
dde9ac61f8 refract Server 1 2026-02-06 15:02:55 +03:00
4b98d00faf refract Server 0 2026-02-06 14:47:20 +03:00
8ab4238537 STAB 2026-02-05 14:42:16 +03:00
7b82fcbf07 Запуск refact 2026-02-05 12:30:30 +03:00
ddb5f4b76e refact. Повторный запуск. 2026-02-05 10:16:06 +03:00
c0f46db50a Оптимизация старта Сервера 0 2026-02-05 09:41:24 +03:00
54c82d579a перевод 2026-02-04 16:14:51 +03:00
0d9643c3c1 App is running already 2026-02-04 15:32:57 +03:00
efa08e4330 signal_updateDocsXML 2026-02-04 13:15:37 +03:00
a901e7ecb3 GUI добавлено выкл ПерсКарты при арх-и и удал-и об 2026-02-04 12:17:33 +03:00
34799c5814 bugFix refact 0 2026-02-03 17:57:45 +03:00
60534ebef4 bugFix Блочная передача больших данных 2026-02-03 17:22:52 +03:00
4a24f6fc29 Переработан порядок передачи списков 1 2026-02-02 17:41:36 +03:00
a6451d0261 Переработан порядок передачи списков 0 2026-02-02 14:57:09 +03:00
466b2cd7fc cfiController поштучное изменение 2026-01-30 11:33:47 +03:00
semenov
8ff5072d5b feat:change cifResponse name 2026-01-30 09:59:44 +03:00
semenov
4476b5ccae Merge branch 'DEV' into CFI-Update 2026-01-29 17:27:21 +03:00
semenov
f3bebaeb26 feat: update cifList for unity 2026-01-29 17:12:15 +03:00
406769da27 cfiController ID -> GUID 2026-01-29 16:55:58 +03:00
b4d796d8be cfiController Проверка на удаление 2026-01-29 16:38:55 +03:00
2a13f63fcc плавный скрол 2026-01-29 16:23:35 +03:00
semenov
24e41a0e59 Merge branch 'DEV' into CFI-Update
# Conflicts:
#	LibServer/serverlmswidget.cpp
2026-01-28 17:06:20 +03:00
0c5509a426 cfiController 2026-01-28 13:19:52 +03:00
952e7ae65d All GUI Sending 2026-01-27 13:16:10 +03:00
01b665d82c delete DirectConnection 2026-01-27 12:43:16 +03:00
4ce3f53171 cfiController 1 + fix bug BUSY FREE not for Unity 2026-01-27 12:34:20 +03:00
semenov
c7f2afe3c2 feat: add CFI Update 2026-01-27 12:04:46 +03:00
b452ef347d CFIController 0 2026-01-26 18:47:57 +03:00
f7c677f498 перевод 2026-01-26 10:21:35 +03:00
f328a4a692 fix bug waitAnimation 2026-01-23 16:43:01 +03:00
52882667e4 fix bug select treeview 2026-01-23 15:58:22 +03:00
82c667cfd0 refact 2026-01-23 15:08:57 +03:00
19222cd855 waitAnimationWidget при ожидании подтв-я блок-ки 2026-01-23 12:17:41 +03:00
fe15f059e4 add blocker CalculateFullHashWithSetup 2026-01-23 11:30:08 +03:00
d1d259a854 refact 2026-01-22 18:49:06 +03:00
455b3f384e BUSY и FREE проходят даже на незалогиненых 2026-01-22 17:22:29 +03:00
a43a547631 Откл-е запр-в на EditorTrainees EditorInstructors 2026-01-22 16:42:03 +03:00
ebbfc484b4 Разблокировка при вылете АРМ Инструктора 2026-01-22 15:48:27 +03:00
5415afe264 отклонение запроса на Управление версиями 2026-01-22 15:18:40 +03:00
2522bc6af5 refact connect disconnect при Авторизации 2026-01-22 12:36:22 +03:00
75acf12c3c refact 0 2026-01-22 11:48:21 +03:00
4ba70853cb UpdateController вернул блокировку от SERVER 2026-01-22 10:27:05 +03:00
89d3d51c6b Индикация блокировки Сервера на ГУИ 2026-01-21 17:29:00 +03:00
2772c3aaba карта блок-в. Блокировка правильная. Множ. доступ 2026-01-21 15:44:01 +03:00
fe75f2c6ca refact 2 2026-01-20 17:11:01 +03:00
e7e719bc84 styling 1 2026-01-20 14:34:15 +03:00
238d501ac4 styling 2026-01-20 13:18:30 +03:00
9b2fd4eff3 доработка интерфейс 2026-01-19 16:11:24 +03:00
f2b08887c7 statAMM statFIM в Перс Карте 2026-01-19 14:56:58 +03:00
aa109ad2fe Задачи в цвете 2026-01-19 14:18:52 +03:00
9e0acf0893 Отправка задач об. при отпр. списка об. в ГУИ 2026-01-19 10:53:29 +03:00
1c44fdb182 ПКМ для FIM AMM 2026-01-19 10:38:23 +03:00
8dd2e386fb tasks статистика 0 2026-01-16 15:13:46 +03:00
3ce889524b ПКМ tree 2026-01-16 14:31:13 +03:00
83d6d66172 доперевод 2026-01-15 18:31:12 +03:00
4e2c6bb81e refact ui 1 2026-01-15 16:24:52 +03:00
2ab2e47850 refact ui 2026-01-15 15:23:26 +03:00
2a2ad69a44 refact 2026-01-14 18:26:21 +03:00
8d346cce31 Messages 2026-01-14 17:34:14 +03:00
736f2392e2 style like Unity 0 2026-01-14 15:51:31 +03:00
3ef1b559b3 refact 2026-01-13 18:44:33 +03:00
7116bf14c1 Перевод + Настройки Сервер 2026-01-13 17:10:27 +03:00
2221d27fc3 refact 2026-01-13 16:29:54 +03:00
b09f8e0d49 report upgrade 2 2026-01-13 15:13:36 +03:00
c8e9ea1925 report upgrade 1 2026-01-13 15:04:47 +03:00
7871019a13 report upgrade 0 2026-01-13 13:11:23 +03:00
2eb10b5b4b versionStr при смене языка актуализируется 2026-01-12 16:04:01 +03:00
36527a9cb5 MPS->MTD 2026-01-12 15:27:12 +03:00
6d40c45135 Update files 2026-01-12 12:50:16 +03:00
7c71d8a0e9 Merge branch 'work41' into DEV 2026-01-12 10:40:58 +03:00
semenov
90d034d148 Merge branch 'DEV' of https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer into DEV 2026-01-12 10:30:38 +03:00
semenov
c3298613c2 docs: add tasks 2026-01-12 10:30:31 +03:00
b990d147e6 Перевод 2025-12-26 13:49:36 +03:00
645dc130f4 refact 2025-12-25 13:47:00 +03:00
a06f7653c5 Report WH 2025-12-24 17:24:01 +03:00
bfe586ee2e Report upgrade WH 2025-12-24 11:58:32 +03:00
4dab164e27 Доперевод 2025-12-18 18:37:24 +03:00
ca0284692b Merge branch 'work40' into DEV 2025-12-18 17:34:22 +03:00
33499ed0ea Изменение статуса ФИМ. Закончил 2025-12-18 17:34:05 +03:00
4b3453fe72 в процессе2 2025-12-18 12:22:40 +03:00
b0abac8352 в процессе 1 2025-12-18 11:27:29 +03:00
c8ca0e32ad Изменение статуса для ФИМ. В процессе. 2025-12-18 10:27:10 +03:00
360b740220 refact 2025-12-17 17:17:34 +03:00
semenov
90a25f6163 Merge branch 'add-docs' into DEV 2025-12-17 16:41:30 +03:00
semenov
8170fc1194 docs: add tasks 2025-12-17 16:40:59 +03:00
3953527795 Нотификация рефакт 2025-12-17 15:15:34 +03:00
b7c246b3f6 Разные иконки в трее 2025-12-17 13:08:38 +03:00
d1df6a2a05 Общий перевод. SpecMsgBox 2025-12-16 15:13:37 +03:00
a641194b29 объединение переводов 2025-12-16 13:03:40 +03:00
317e576300 Merge branch 'work38' into DEV 2025-12-16 12:07:05 +03:00
4db649b478 refact 2025-12-16 12:06:39 +03:00
semenov
8a00f2e6bf docs: update board 2025-12-12 13:20:57 +03:00
18920cee6e Стабильная 2025-12-11 16:23:26 +03:00
d50d5a6af3 Новые иконки 2025-12-11 12:05:43 +03:00
84bdd7dfa6 refact gitignore 2025-12-09 10:51:56 +03:00
6a48bf4cb2 refact 2025-12-09 10:09:25 +03:00
05fce073f1 refact1 2025-12-05 12:20:47 +03:00
57673d0ee4 rename0 2025-12-05 11:48:24 +03:00
63cd6a71d1 refact 2025-12-05 10:29:08 +03:00
11c8e21729 Naming 2025-12-02 18:13:51 +03:00
75ffb5ceca смена пароля админа + иконка в exe 2025-12-02 15:10:23 +03:00
2e807112f0 refact 2025-12-01 15:27:09 +03:00
0b7f772b21 signal_hasError 2025-12-01 14:50:15 +03:00
c97c86ac55 Оповещения о непрочитанных сообщениях 2025-12-01 14:29:26 +03:00
834e192479 Merge branch 'work31' into DEV 2025-12-01 10:12:04 +03:00
d2384d3758 refact 2025-12-01 00:55:22 +03:00
df1ada6945 refact 2025-11-30 23:12:00 +03:00
54f1744e7f errorCheck переделал 2025-11-30 22:54:09 +03:00
d30e6b4927 WidgetTools::closeAllChildWidgets 2025-11-30 21:29:32 +03:00
d129fbded0 notifyController убрал 2025-11-30 19:28:08 +03:00
fb493aca9f SpecMsgBox в процессе исправления 2025-11-28 21:01:33 +03:00
semenov
44e7c4781a Merge branch 'DEV' of https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer into DEV
# Conflicts:
#	ServerLMS/Systems/processingsystem.cpp
2025-11-28 16:54:22 +03:00
semenov
567eb282d7 docs: add tasks 2025-11-28 16:52:13 +03:00
8ad6d06f18 closeChildDlg 2025-11-28 12:32:53 +03:00
612fcc8aa7 refact 2025-11-28 11:28:39 +03:00
c61066cfd1 Refact 2025-11-27 18:06:13 +03:00
6f44b6125e Server. Перекомпоновка интерфейса 2025-11-27 17:35:56 +03:00
ace95db3df Переводы ошибок 2025-11-27 17:05:26 +03:00
bf87a2c982 GUI.Тип ошибки авторизации 2025-11-27 16:54:40 +03:00
00c9ec8893 refact0 2025-11-27 15:02:04 +03:00
4def07ff68 GUI. Закрытие диалогов при расконнекте с Сервером 2025-11-27 14:46:18 +03:00
b0f02e742a Отработка BUSSY 2025-11-27 13:25:30 +03:00
f0e04954ed refact1 2025-11-27 11:45:14 +03:00
711963c9be refact0 2025-11-27 11:24:06 +03:00
3e50bfe2e2 Схлопывание диалогов при выключении Сервера 2025-11-27 10:43:12 +03:00
f75ff9660f refact1 2025-11-26 18:09:41 +03:00
23d432170d refact0 2025-11-26 17:47:56 +03:00
1c151d4aff VersionSelectWidget refact 2025-11-26 17:28:22 +03:00
44b6299e59 notifyController -> specialWB 2025-11-26 11:19:11 +03:00
f6e96e002c refact 2025-11-25 18:32:46 +03:00
e3dcd8c54b Merge branch 'work29' into DEV 2025-11-25 17:51:36 +03:00
173c369cc5 NewVersionWidget -> Dialog 2025-11-25 17:51:12 +03:00
c627bc73d9 Server. тображение текущей версии. 2025-11-25 15:54:25 +03:00
e24c57c395 refact0 2025-11-25 12:46:58 +03:00
9a4a082ffc GUI. fix. Обнуление диалогов при разлогинивании. 2025-11-25 11:07:35 +03:00
f2d7557f19 Авто подключение работает 2025-11-24 18:19:28 +03:00
4bdfb8163a GUI. автоматические 10 попыток подкл к Серверу 2025-11-24 16:27:13 +03:00
76a5f08481 Списки subProc невыделяемые 2025-11-24 15:28:35 +03:00
semenov
f43abdc46d feat: load version 2025-11-24 12:56:34 +03:00
1842c9381f Schem update 2025-11-24 12:38:44 +03:00
4f6958ef81 Update style css 2025-11-24 12:38:19 +03:00
770a705281 Server. Начальная загрузка. Крутилка. 2025-11-24 10:30:20 +03:00
b6c0f6aa57 Крутилка при запуске Сервера 2025-11-23 00:11:47 +03:00
72d107308c Доделал списки подпроцедур 2025-11-22 23:40:24 +03:00
394eee5a16 Объединенные ячейки списка 2025-11-22 22:08:03 +03:00
5bb9816593 ПП отображаются в виде выпадающего списка (назн-е) 2025-11-21 14:05:02 +03:00
semenov
73fd93a834 feat: link busy state with lock icon 2025-11-21 10:16:06 +03:00
72438e8257 refact 2025-11-20 16:00:10 +03:00
27b4edef6d Доукомплектация папки 2025-11-20 15:45:48 +03:00
bbef1f73b4 Merge branch 'work28' into DEV 2025-11-20 15:30:43 +03:00
15eade2363 Correct SQL Delete Trainee query 2025-11-20 15:29:51 +03:00
semenov
b16fd1f53d Merge branch 'scenario-updater' into DEV 2025-11-20 13:10:56 +03:00
08664989b9 refact 2025-11-20 13:09:40 +03:00
semenov
7e27584c5a bugfix: segregate send and delete list to client 2025-11-20 13:04:36 +03:00
semenov
bd0bed926c ref: segregate client hashes 2025-11-20 12:14:50 +03:00
176ced7045 Server. Фильтрация subProc на совпадения 2025-11-19 17:33:50 +03:00
74594de4ad Недоступные к назначение заблочены 2025-11-19 15:36:58 +03:00
069aa80826 GUI. subProc отобр. выпад-м списком в ранее назн. 2025-11-19 15:01:23 +03:00
semenov
560b7ff4cb feat: add update scenario 2025-11-19 14:03:24 +03:00
ee97f83856 subproc выгр. из БД и отпр. клиентам в списках AMM 2025-11-19 12:57:46 +03:00
74bdac7540 subproc удаляются из БД 2025-11-19 11:51:30 +03:00
10a30af698 subprocs сохраняются в БД 2025-11-19 11:22:08 +03:00
9bff7c3050 Сервер. Список ПП парсится, но не сохр. в БД 2025-11-18 17:53:23 +03:00
31e01ff8e5 refact. SubProc превр. в класс. fix bug canplay 2025-11-18 17:23:37 +03:00
b333ec8ec1 Передача списка subProc в Сервер 2025-11-18 14:52:39 +03:00
4f14cddbed передается список ПП в sendQueryToDB для отправки 2025-11-18 12:58:13 +03:00
168ded7b1e подпроцедуры можно выбирать (чекбоксом) 2025-11-17 17:06:48 +03:00
bd0f52c613 Списки отображаются в виде дерева 2025-11-17 16:10:31 +03:00
semenov
c0d6571f2c ref: asset updater scheme 2025-11-17 14:32:04 +03:00
d280472e1f Небольшой рефакт 2025-11-17 13:47:26 +03:00
546edf1b52 Списки отображаются (пока только DMCode) 2025-11-17 13:32:14 +03:00
200f919afe Построение списка ПП в ГУИ в процессе 2025-11-17 13:16:14 +03:00
0c7d84ec84 в GUI приходит ответ с перечнем ПП от Сервера 2025-11-17 10:22:02 +03:00
aa4972c3a5 GUI. Отправка запроса на список ПП в Сервер 2025-11-13 17:16:38 +03:00
208fa638ef GUI. Заготовка под список подпроцедур 2 2025-11-13 16:36:38 +03:00
47d9c182a5 GUI. Заготовка под список подпроцедур 2025-11-13 16:11:54 +03:00
a6bee48b77 Построение списков подпроцедур в Сервере работает 2025-11-13 14:34:39 +03:00
4bfd4dad82 Формируются списки подпроцедур 1 ур в сервере 2025-11-12 17:47:53 +03:00
98821a7533 Индикация и возм обновл docs из ГУИ 2025-11-12 15:22:15 +03:00
650b0525a3 DocsUpdater в отдельный поток 2025-11-12 10:55:31 +03:00
81d7e5e6d6 DocsUpdater рабочая версия 2025-11-11 18:00:06 +03:00
9df00eda9e refact 2025-11-11 15:12:54 +03:00
404fb0bf49 loadXMLtoDOM, saveDOMtoXML перенес в Tools 2025-11-11 15:11:24 +03:00
9b87bcc490 DocsUpdater 1rev 2025-11-11 14:55:37 +03:00
ff8767d1b3 Начал реал-ть список подпроцедур ViewerTasksCommon 2025-11-07 21:05:56 +03:00
364d3f44a9 Refact 2025-11-07 10:57:02 +03:00
e79186cb4f Refact 2025-11-07 01:31:19 +03:00
fd8fcd5c1d refact struct projects 2025-11-06 23:56:52 +03:00
c021421118 Отложенная инициализация в Сервере (старт виджета) 2025-11-06 21:49:15 +03:00
2d3d4f82dd Прокинул сигнал ошибки SQL на виджет 2025-11-06 20:55:16 +03:00
da7363dfb5 Переименовал Диалог Авторизации 2025-11-06 17:19:43 +03:00
2d1e17627b Рефакт Администрирование БД 3 2025-11-06 16:46:41 +03:00
2d91b18bfb Рефакт Администрирование БД 2 2025-11-05 23:50:10 +03:00
99d9c6d1e3 Рефакт Администрирование БД 1 2025-11-05 16:17:26 +03:00
84ea6ca512 Рефакт Администрирование БД 2025-11-05 12:36:11 +03:00
e9363c388b refact 0 2025-11-01 13:19:52 +03:00
0d1d851e3f Создание БД из кода. Требуется рефакт. 2025-10-30 14:56:58 +03:00
c11871e8f4 Рефакт интерфейса 2025-10-28 16:43:18 +03:00
39c11897f8 Рефакт 2025-10-27 18:46:50 +03:00
ce65daea2e TrayServerLMS рабочая версия 2025-10-27 16:20:34 +03:00
d4fd29f373 Сервер. Settings DB 2025-10-24 16:34:53 +03:00
5287d5f13d Сервер рефакт 2025-10-21 14:40:35 +03:00
f2df91e97e Сервер сменил иконку 2025-10-21 12:48:39 +03:00
ff6f70c967 Перевод Сервера работает 2025-10-21 12:42:12 +03:00
b9a39287cf Settings 2 2025-10-21 11:48:30 +03:00
068a4ee14a Settings 1 2025-10-20 18:47:13 +03:00
294a7e4a7d TrayServerLMS переименовал 2025-10-20 17:07:26 +03:00
93343a56e5 Server Interface Refact 2025-10-20 15:24:04 +03:00
86ee77e8cb Gui без консоли 2025-10-20 14:35:45 +03:00
ad8a544e45 Рефакт 2025-10-20 13:33:10 +03:00
f4ffc7c393 Server в Трее 1 2025-10-20 12:44:37 +03:00
edadfdf323 Рефакт 2025-10-17 17:36:33 +03:00
5c147be57a Refact 1 2025-10-17 16:24:50 +03:00
2d8c13fd1a Refact connectortoserver 2025-10-17 16:12:33 +03:00
e2a2d8142c Refact common 2025-10-17 15:08:09 +03:00
d643205323 DialogEditTrainee (adminMode) 2025-10-17 11:12:57 +03:00
b539f9fd2b Изменение пароля 2025-10-16 18:56:09 +03:00
241382d305 Хэширование пароля 2025-10-16 17:11:58 +03:00
8e931f229b Рефакт интерфейс 2025-10-15 18:04:10 +03:00
2cf219ce94 Отправка сообщений по Enter 2025-10-15 16:48:23 +03:00
79c5354f58 Рефакт интерфейс 2025-10-15 11:16:10 +03:00
e5f4c0bd00 В списке задач не выбирается первая по умолчанию 2025-10-15 10:27:31 +03:00
936ee45fd6 Валидация логинов 2025-10-15 10:13:01 +03:00
6af6ca1ab3 Не слетает выбранная задача при обновлении дерева 2025-10-14 11:52:03 +03:00
5d5267f859 Кнопка для Персональной карточки 2025-10-07 19:17:47 +03:00
f6c4da675d Перевод 2025-10-07 18:10:39 +03:00
fc42dc0723 Добавил параметры БД в Сервер 2025-10-07 17:41:49 +03:00
b1baafe6a1 refact 2025-10-03 14:45:03 +03:00
17f6119954 Блокировка доработал 2025-10-03 10:51:17 +03:00
a70c8b5be1 Блокировка Авторизации при Редактировании в ГУИ 2025-10-02 18:36:41 +03:00
05d4e02d02 Добавил наименование задачи и DMcode в проверку 2025-10-01 17:23:50 +03:00
e108b79d09 ширина скрола для task 25 2025-10-01 16:37:59 +03:00
191b817c21 Заблочил сортировку деревьев по колонкам 2025-10-01 16:31:59 +03:00
81dca6e106 Obsidian update 2025-10-01 15:32:27 +03:00
9a2d816d0a refact DBLMS 2025-09-30 17:47:25 +03:00
dd4d58a393 Ширина скрола 20 2025-09-30 17:09:53 +03:00
2c35b7bd06 Транзакция корректно закрывается (commit) 2025-09-26 11:53:42 +03:00
7c70fc90d6 Оптимизировал дерево в Задачах (размеры колонок) 2025-09-25 17:56:46 +03:00
620 changed files with 20479 additions and 12009 deletions

14
.gitignore vendored
View File

@@ -13,10 +13,12 @@ compile_commands.json
CTestTestfile.cmake CTestTestfile.cmake
_deps _deps
CMakeUserPresets.json CMakeUserPresets.json
TestServerLMS/TestServerLMS/CMakeLists.txt.user
ServerLMS/ServerLMS/CMakeLists.txt.user ProgramServerMPS/TestServerLMS/CMakeLists.txt.user.*
InstructorsAndTrainees/CMakeLists.txt.user ProgramAWSinstructorMPS/CMakeLists.txt.user.*
GUIdataBaseLMS/CMakeLists.txt.user LibServer/ServerLMS/CMakeLists.txt.user.*
DataBaseLMS/CMakeLists.txt.user LibInstructorsAndTrainees/CMakeLists.txt.user.*
LibDataBaseInterface/CMakeLists.txt.user.*
DOCS/.obsidian DOCS/.obsidian
GUIdataBaseLMS/StaticData

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.5)
message("Using CMake ${CMAKE_VERSION}\n") message("Using CMake ${CMAKE_VERSION}\n")
project(LMS LANGUAGES CXX) project(MTD LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
@@ -21,7 +21,7 @@ endif()
include(cmake/CommonInfoForProject.cmake) include(cmake/CommonInfoForProject.cmake)
common_info_for_project(LMS) common_info_for_project(MTD)
find_package(Qt5 COMPONENTS Widgets REQUIRED) find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt5 COMPONENTS Network REQUIRED) find_package(Qt5 COMPONENTS Network REQUIRED)
@@ -30,13 +30,14 @@ find_package(Qt5 COMPONENTS LinguistTools REQUIRED)
find_package(Qt5 COMPONENTS Xml REQUIRED) find_package(Qt5 COMPONENTS Xml REQUIRED)
find_package(Qt5 COMPONENTS Concurrent REQUIRED) find_package(Qt5 COMPONENTS Concurrent REQUIRED)
add_subdirectory(DataBaseLMS) add_subdirectory(LibDataBaseInterface)
add_subdirectory(InstructorsAndTrainees) add_subdirectory(LibInstructorsAndTrainees)
add_subdirectory(GUIdataBaseLMS) add_subdirectory(LibServer)
add_subdirectory(ServerLMS) add_subdirectory(ProgramAWSinstructorMTD)
add_subdirectory(TestServerLMS) add_subdirectory(ProgramServerMTD)
add_dependencies(InstructorsAndTrainees DataBaseLMS) add_dependencies(InstructorsAndTrainees DataBaseInterface)
add_dependencies(GUIdataBaseLMS InstructorsAndTrainees) add_dependencies(Server DataBaseInterface)
add_dependencies(ServerLMS DataBaseLMS) add_dependencies(Server InstructorsAndTrainees)
add_dependencies(TestServerLMS ServerLMS) add_dependencies(AWSinstructorMTD InstructorsAndTrainees)
add_dependencies(ServerMTD Server)

BIN
DOCS/DBschem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

View File

@@ -74,13 +74,8 @@ UnityClient
ServerLMS ^EJX4eIpX ServerLMS ^EJX4eIpX
Mainthread: Mainthread:
*serverLMS *ServerLMSWidget
*dataParser ^ite9vjus
*MultiThreadServer
*processingSystem
*commonClientHandler
*chatSystem
*processParser ^ite9vjus
ClientHandler: Thread ClientHandler: Thread
@@ -94,7 +89,8 @@ LoggerThread:
UpdateThread: UpdateThread:
*updateController *updateController
*assetsManager *assetsManager
*docsUpdater
*cfiController
^ZvWgIkFz ^ZvWgIkFz
Client QT ^sWMT4y6l Client QT ^sWMT4y6l
@@ -149,9 +145,9 @@ Server ^57kJSOBv
Клиент ^Iao6ua8K Клиент ^Iao6ua8K
sendClientAutorization ^FgztXDxQ sendClientAutorizationXML ^FgztXDxQ
Server Authorization ^FAEhzlqj Server AuthorizationXML ^FAEhzlqj
Send version ^Wsgy80Do Send version ^Wsgy80Do
@@ -266,12 +262,62 @@ TYPE_COMMAND ^Qljc4T07
TYPE_DISABLE ^IIrBIFHt TYPE_DISABLE ^IIrBIFHt
VersionData ^W7PN2rtW VersionDataXML ^W7PN2rtW
sendCheckHash ^N9XDpZcf sendCheckHash ^N9XDpZcf
TYPE_CHECK_VERSION ^Ze62Cipy TYPE_CHECK_VERSION ^Ze62Cipy
Логин инструктора с дозагрузкой сценария ^Yjh3SCZW
Server ^PWQFD9Cw
Клиент ^OYfJYOhT
SendClientAutorizationXML ^Za9NF1mi
Server AuthorizationXML ^xHClCCKn
VersionDataXML ^gr6jkOBB
GETSERVERDATALIST ^ucynRquw
CHECKVERSIONLIST ^cidQq0td
HASHSENDCOMPLETE ^1NHntJg9
VersionDataXML ^lSsIgPGT
CANCHANGE ^0kAyN4XO
после нажатия выгрузки ^OgPlj3dk
CHANGEABLE ^A3apuHcm
ОТПРАВКА ФАЙЛОВ ^OKhIgcM3
TYPE_FINISH ^RNN4fRif
Где-то тут нужно пересчитывать docs ^ixmhU2Zx
сделать отдельный метод и клиенту повторный хэш не пересылать
^D0vsPWNF
RECALCULATE DOCS ^VUTu7wzn
SEND DOCS ^iM67vAqM
потому что по умолчанию он больше не пересылается ^WR3pLokt
ServerThread:
*providerDBLMS
*dataParser
*MultiThreadServer
*processingSystem
*commonClientHandler
*chatSystem
*processParser ^UjfEZdiN
%% %%
## Drawing ## Drawing
```compressed-json ```compressed-json
@@ -373,414 +419,492 @@ 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
MRStBAAA
``` ```
%% %%

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

View File

@@ -8,6 +8,7 @@ tags: [excalidraw]
# Excalidraw Data # Excalidraw Data
## Text Elements ## Text Elements
Server ^IFISGtDh Server ^IFISGtDh
@@ -95,219 +96,450 @@ recognize ^cbFaiqgQ
sendInstalledVersion? ^wHecIDrY sendInstalledVersion? ^wHecIDrY
Обновление версии 2.0 ^k8TgwAx9
Инструктор 1 ^HzN3hTVf
Сервер ^fYkwjWON
Первичное обновление или обновление не Scenaries части ^S5OLkmcX
обновление только сценариев ^ILG4z0FH
Обновление в полном объеме без уточнений, по первой версии обновления ^BnztnoYb
Дозагрузка новых сценариев ^6KtdBRKv
Пересчет docs по canPlay ^HUV0GHOH
Отправка уведов клиентам о наличии обновления ^wUj0KJs4
Клиент ^gqufkQsE
Клиент ^DcrY1jCl
Клиент ^VC0b0ofc
У клиента все сценарии в наличии (отправитель) ^5MmswpU1
не делаем ничего ^vLRSpFhd
У клиента есть не все (при обновлении кто то еще выгрузил изменения) ^YSGYSqjL
отправляем docs ^IuuYIAuC
отправка ^hGggwW7c
Досылаем недостающие Scenaries ^1aR92hQv
У предыдущей версии удален какой либо сценарий ^OlPkE0Gx
отправляем docs ^NtxU8Z63
отправка при уже не актуальной версии ^Obzi2qJ9
Дозагрузка новых сценариев ^cwhKgQjN
Пересчет docs по canPlay ^JHWnre3C
отправляем delete на лишние файлы ^xEjE8ehi
отправка обновления отправителю без уведомления ^qfEWtzgP
уведы в Unity,QTclient, GUI
Добавить кнопку Обновить везде? ^EK8w9Zar
%% %%
## Drawing ## Drawing
```compressed-json ```compressed-json
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
gaaQUp42hjIx4CAAA===
``` ```
%% %%

View File

@@ -6,16 +6,20 @@ kanban-plugin: board
## backLog ## backLog
- [ ] проверить работоспособность без Qt - не работает
- [ ] 23 -> связное оборудование -> общая часть
- [ ] Добавить экран первой настройки
## bugs ## bugs
- [ ] Перезаполнять имя на offline, если клиент отключился - [ ] 16.27 от 22.12
- [ ] Unity: ошибка при проигрывании - нажать на среднюю кнопку мыши
## feature client Unity ## feature client Unity
- [ ] перетащить наименования хинтов в XML и забирать из оттуда при старте - [ ] Запросить картинки объектов для топливной системы
## feature client QT ## feature client QT
@@ -24,6 +28,8 @@ kanban-plugin: board
## feature server ## feature server
- [ ] добавить чекбокс на изменяемый или нет в во всех версиях кроме базовой
- [ ] Попробовать изменить версию base на "Базовая"
## NOW ## NOW
@@ -32,6 +38,49 @@ kanban-plugin: board
## Complete ## Complete
- [ ] QT клиент: сделать отключение кнопки обновить при появлении inline Инициализация
- [ ] не работает выключение QT клиента призагрузке
- [ ] если нажать настройки после сообщении о возмозности обновления, и отжать, а потом попробовать закрыть QT клиент, он зависает
- [ ] base делать неизменяемым по умолчанию
- [ ] у RRJClient пробрасывать аргументы в Unity приложение
- [ ] починить закрытие во время загрузки
- [ ] добавить выбор файлов которые нжно обновить в клиенте и формировать из него список того, что обновляется
- [ ] Связать схемный и реальный манометр
- [ ] QT клиент при восстановлении сразу показывают кнопку обновить, а должен вызывать слайдер загрузкии
- [ ] при переключении между позициями при режиме панели не сбрасывается fov
- [ ] кнопка 2Д/3Д появляется хаотично
- [ ] QT клиент, если сервер занят повторно не появляется окно авторизации
- [ ] QT клиент: После обновления переодически не работает запуск
- [ ] QT клиент: обновить реакции на сообщение о блокировки сервера и уже залогиненного пользователя
- [ ] Прописать реакцию на невалидный логин, и уже залогиненного пользователя
- [ ] FIM - не обновляется статус после выполнения
- [ ] AMM - статуса проверки нет, сразу выполнен
- [ ] Unity: переделать с deltatime на fixedDeltatime
- [ ] Unity: три камеры подряд не работают
- [ ] добавить пресеты для камер
- [ ] добавить переход на сценарий из PDF по типу списка окон
- [ ] Гидравлическая система, при нажатии на пожарку при работающей 3й гидросистеме и включенном PTU, PTU путь не закрашивается обратно
- [ ] добавить сохранение предыдущей загруженнной версии
- [ ] поправить верстку в управлении серверами
- [ ] QT клиент: не работают текстовые ссылки при обновлении сценариев НЕ ДОБАВЛЯТЬ ПРОБЕЛ В НАЗВАНИИ
- [ ] М у EDP должно окрашиваться в оранжевый при подаче на на них питания
- [ ] Не включается ГС3 при выставлении всего в AUTO
- [ ] при включении двигателя без XFEED и работающей правой помпы (какой либо) неправильно вызывается анимация питания двигателя в топливной схеме
- [ ] Иконки окон не выключаются при повторном открытии
- [ ] Unity клиент: Вошел как на втором экране
- [ ] Unity клиент: При закрытии окна при включенных мат параметрах, неверно инициализируется окно и пропадает содержимое
- [ ] Перезаполнять имя на offline, если клиент отключился
- [ ] Проверить работу настроек матмодели ис по билда
- [ ] Подчищать креды при успешном логине в UNITY
- [ ] Читать сабпроцедуры из тасок
- [ ] BUSY не меняет иконку блокировки
- [ ] не работают ссылки при выгрузке в QT Client
- [ ] убрать из XML все настройки для мат модели
- [ ] не отправлять updateDocs если не залогинен и запретить все операции
- [ ] Завести CLIENT с состояние залогигнен или нет
- [ ] перетащить наименования хинтов в XML и забирать из оттуда при старте
- [ ] починить поведение окон при включенном обновлении у 2х пользователей
- [ ] Отменить изменения работает некрасиво
- [ ] увеличить размер текста в окне обновлений - [ ] увеличить размер текста в окне обновлений
- [ ] Делить по группам траэйнисы и инструкторы - [ ] Делить по группам траэйнисы и инструкторы
- [ ] Проверить Максимальный объем пересылаемых позже сообщений 4 тысячи знаков - [ ] Проверить Максимальный объем пересылаемых позже сообщений 4 тысячи знаков

View File

@@ -41,5 +41,29 @@
7. Unity: отправка в базовую версию 7. Unity: отправка в базовую версию
Сервер: Сервер:
1. Выключение сервера -> рассылка все клиентам DISABLE. Клиенты должны отключится от сети 1. Загрузка контента с нуля и логин 2х машин под QT
2. 2. Загрузка контента с нуля и разлогин 2х машин под QT
3. Загрузка контента с нуля попытка обновления с QT клиента (под инструктором)
4. Загрузка контента с нуля попытка восстановления с QT клиента (под инструктором)
5. Загрузка контента с нуля и отправка сообщений между машинами Unity -> Unity
6. Загрузка контента с нуля выполнение задачи с Unity
7. Загрузка контента с нуля отправка FIM с Unity
8. Загрузка контента с нуля и отправка сообщений между машинами GUI -> Unity
9. Загрузка контента с нуля и изменение CFI
10. Загрузка контента с нуля логин 2х машин под Unity
11. Загрузка контента c нуля редактирование пользователей (Инструктор, обучаемый, группы)
12. Загрузка контента с нуля назначение FIM ГУИ
13. Загрузка контента с нуля назначение AMM ГУИ
14. Загрузка контента с нуля назначение FIM удаление и проверка ГУИ
15. Загрузка контента с нуля назначение AMM удаление ГУИ
16. Загрузка контента с нуля Авторизация 2х ГУИ
17. Загрузка контента с нуля Деавторизация 2х ГУИ
18. Загрузка контента с нуля переключение версии контента ГУИ
19. Загрузка контента с нуля удаление версии контента ГУИ
20. Загрузка контента с нуля копирование версии контента ГУИ
21. Загрузка контента с нуля запрос DOCS ГУИ
22. Назначение задач с 2х ГУИ параллельно (10 задач) (1 пользователю)
23. При просмотре задачи инструктором, меняется ее статус
24. Блокировка сервера в момент авторизации между QT и Unity
25. Попытка выгрузки изменений (Unity залогинен под одной версией) QT сервер изменил версию и далее через восстановление

View File

@@ -6,11 +6,34 @@ kanban-plugin: board
## backlog ## backlog
- [ ] GUI: Сделать кнопку перезапроса общих списков FIM (по аналогии с АММ)
- [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура - [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура
- [ ] выгрузка назначенных задач с оценками в эксель таблицу или любой другой человекочитаемый вид
- [ ] Текстовый поиск в задачах
## Complete ## Completed
- [ ] Не влазиют слишком большие сообщения
- [ ] FIM процедура добавить кнопку сделать новой
- [ ] Не видно новых пришедших сообщений, если выбран другой Юзер
- [ ] При смене УЗ в ГУИ остается история переписки в мессенджере. При этом Имя инструктора в диалоге подменяется. (Путается только в ГУИ!)
[Возможно, поможет переинициализация мессенджера при переавторизации инструктора?]
- [ ] Отображать текущую версию data в статус баре
- [ ] Сделать крутилку на начальную загрузку Сервера
- [ ] Логин суперпользователя PostgreSQL предлагать по умолчанию postgres
- [ ] Сделать несколько попыток подключения к серверу
- [ ] Переобновление docs.xml в пределах версии (если инструктор изменяет процедуры)
- [ ] Реализовать механизм отображения и выбора подпроцедур для АММ.
- [ ] Создание БД из кода (если нет или слетела)
- [ ] Сервер при сворачивании превращается в трей
- [ ] Пароли хранить и пересылать в виде Хеша
- [ ] Смена пароля админом (или инструктором только для обучаемых). Старый никому не виден (парольная политика)
- [ ] Сделать отправку сообщения на Enter
- [ ] Введение логина только латиницей и цифрами
- [ ] Кнопка открытия Персональной карты обучаемого
- [ ] Блокировка авторизации не работает при входе в редакторы И/О
- [ ] Добавить текущий статус задачи в "Проверке задачи" (AMM, FIM)
- [ ] выдавать trainee_id при авторизации и вытащить передачу Trainee ID из тасок - [ ] выдавать trainee_id при авторизации и вытащить передачу Trainee ID из тасок
- [ ] Подсчет учебного времени - дельта между включением и выключением - [ ] Подсчет учебного времени - дельта между включением и выключением
- [ ] регистрация времени включения и выключения тренажера (по приходу уходу пакета is unity) с регистрацие БД - [ ] регистрация времени включения и выключения тренажера (по приходу уходу пакета is unity) с регистрацие БД
@@ -35,60 +58,33 @@ kanban-plugin: board
- [ ] Убрать "DM-код" для узлов PM (AMM) - [ ] Убрать "DM-код" для узлов PM (AMM)
- [ ] Уменьшить размер диалога "Проверка задачи" (AMM) - [ ] Уменьшить размер диалога "Проверка задачи" (AMM)
- [ ] Учет ширины скрола на деревьях (появляется если дерево больше окна) - [ ] Учет ширины скрола на деревьях (появляется если дерево больше окна)
- [ ] Универсальный пересчет ширин колонок деревьев
- [ ] При обновлении деревьев слетает назначенная колонка сортировки
- [ ] В сообщение о неудачном подключении к PostgreSQL добавить: PSQL не установлен
## feature ## Server
- [ ] Сервер при сворачивании превращается в трей
- [ ] Отходить от идентификации по Логину в пользу ID юзера везде, где это возможно. - [ ] Отходить от идентификации по Логину в пользу ID юзера везде, где это возможно.
(Так как сейчас может вызвать проблемы при смене логина юзера!!!) (Так как сейчас может вызвать проблемы при смене логина юзера!!!)
- [ ] Зарефакторить databaselms_PostgreSQL.cpp
(возможно, нужно использовать транзакции при восстановлении БД!)
- [ ] Сделать поиск в процедурах по названию для удобного поиска задач для назначения
## DataBaseLMS ## GUI Messenger
- [ ] Оптимизировать
DataBaseLMS::deleteTrainee(int id_trainee)
- [ ] ProviderDBLMS::deAuthorizationAll()
## Messenger
- [ ] Не влазиют слишком большие сообщения
- [ ] Сделать отправку сообщения на Enter
## ConnectorToServer
- [ ] MutexAccess
- [ ] Запрос AMM и FIM xml продумать
## Интерфейс
- [ ] Унифицировать терминологию
## GUI общие ## GUI общие
- [ ] Задержка после авторизации из-за запроса AMM, FIM - [ ] Общий список АММ. автопролистывание вниз, если раскрывается дерево внизу
- [ ] При обновлении деревьев слетает назначенная колонка сортировки
- [ ] Введение логина только латиницей
- [ ] Блокировка авторизации не работает при входе в редакторы И/О
- [ ] Добавить текущий статус задачи в "Проверке задачи" (AMM, FIM)
- [ ] Универсальный пересчет ширин колонок деревьев
## Замечания Кирилл
- [ ] Создание БД из кода (если нет или слетела)
- [ ] Кнопка открытия Персональной карты обучаемого
- [ ] Смена пароля админом. Старый никому не виден (парольная политика)
%% kanban:settings %% kanban:settings
``` ```
{"kanban-plugin":"board","list-collapse":[false,false,false,false,false,false,false,false,false]} {"kanban-plugin":"board","list-collapse":[false,false,false,false,false]}
``` ```
%% %%

View File

@@ -0,0 +1,6 @@
{
"nodes":[
{"id":"3e71087c4a5247a0","type":"file","file":"DBschem.png","x":-1134,"y":-740,"width":1494,"height":808}
],
"edges":[]
}

View File

@@ -11,3 +11,15 @@ RecognizeSystem - система распознавания типа пакет
ProcessingSystem - система активации процессов (создает результат после распознания действия) 1 штука на всех ProcessingSystem - система активации процессов (создает результат после распознания действия) 1 штука на всех
/*XmlSerializer serializer = new XmlSerializer(typeof(Task));
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, curTask);
string xmlString = writer.ToString();
string filePath = Path.Combine(Application.dataPath, "savedTask.xml");
File.WriteAllText(filePath, xmlString);
}*/

View File

@@ -1,74 +0,0 @@
project(DataBaseLMS LANGUAGES CXX)
common_info_for_project(DataBaseLMS)
add_library(DataBaseLMS SHARED
DataBaseLMS_global.h
databaselms.cpp
databaselms_tasks.cpp
databaselms_groups.cpp
databaselms_users.cpp
databaselms_instructors.cpp
databaselms_trainees.cpp
databaselms.h
interfacedatabaselms.cpp
interfacedatabaselms.h
basicentity.cpp
basicentity.h
user.cpp
user.h
instructor.cpp
instructor.h
trainee.cpp
trainee.h
group.cpp
group.h
computer.cpp
computer.h
classroom.cpp
classroom.h
tasksAmmFim.cpp
tasksAmmFim.h
typeQueryToDB.h
timingoftrainee.cpp
timingoftrainee.h
contactModel.h
resources.qrc
)
target_link_libraries(DataBaseLMS PRIVATE Qt5::Widgets)
target_link_libraries(DataBaseLMS PRIVATE Qt5::Sql)
target_link_libraries(DataBaseLMS PRIVATE Qt5::Xml)
target_compile_definitions(DataBaseLMS PRIVATE DATABASELMS_LIBRARY)
if(PROJECT_TYPE_DEBUG)
add_custom_command(TARGET DataBaseLMS
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/DataBaseLMS/libDataBaseLMS.dll
${REPO_PATH}/BUILDS/Debug64/TestServerLMS)
add_custom_command(TARGET DataBaseLMS
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/DataBaseLMS/libDataBaseLMS.dll
${REPO_PATH}/BUILDS/Debug64/GUIdataBaseLMS)
else()
add_custom_command(TARGET DataBaseLMS
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/DataBaseLMS/libDataBaseLMS.dll
${REPO_PATH}/BUILDS/Release64/TestServerLMS)
add_custom_command(TARGET DataBaseLMS
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/DataBaseLMS/libDataBaseLMS.dll
${REPO_PATH}/BUILDS/Release64/GUIdataBaseLMS)
endif()

View File

@@ -1,347 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2024-12-28T11:57:36. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{00ce76f6-77cf-4587-a216-9a8e243377cb}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/BUILDS/LMS/DB_LMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB_LMS/Release64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,390 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2025-01-10T12:59:06. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{15ef2478-2444-4b00-88b8-fead51c6fef5}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">4</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_LMS/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_LMS/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_LMS/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_LMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_LMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,39 +0,0 @@
#include "tasksAmmFim.h"
#include <QDomDocument>
#include <QFile>
#include <QMessageBox>
int TaskAmmFim::lastID = 1;
void TaskAmmFim::initialize(int id, QString type, QString title, QString status, QString created_date, QString changed_date)
{
this->id = id;
this->type = type;
this->title = title;
this->status = status;
this->created_date = created_date;
this->changed_date = changed_date;
}
void TaskAmmFim::addMalfunction(Malfunction malfunction)
{
malfunctionList.append(malfunction);
}
void Malfunction::initialize(QString dmCode, QString num, QString description)
{
this->dmCode = dmCode;
this->num = num;
this->description = description;
}
void Malfunction::addMalfunctionSign(MalfunctionSign sign)
{
malfunctionSigns.append(sign);
}
void MalfunctionSign::initialize(int type, QString description)
{
this->type = type;
this->description = description;
}

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
<context>
<name>DataBaseLMS</name>
<message>
<location filename="../databaselms.cpp" line="93"/>
<source>Attention!</source>
<translation>Внимание!</translation>
</message>
<message>
<location filename="../databaselms.cpp" line="93"/>
<source>The file could not be opened:</source>
<translation>Файл не может быть открыт:</translation>
</message>
</context>
<context>
<name>InterfaceDataBaseLMS</name>
<message>
<location filename="../interfacedatabaselms.cpp" line="19"/>
<source>Connection error</source>
<translation>Ошибка подключения</translation>
</message>
</context>
</TS>

View File

@@ -0,0 +1,443 @@
/*Обязательные поля*/
*[mandatoryField="true"] {
background-color: #fffdfd
}
/*Общие настройки виджетов*/
QWidget {
font-family: Tahoma;
font-size: 12pt;
icon-size: 24px;
}
QWidget#widgetControl {
background: #E0E0E0;
}
QWidget#viewerTrainees
{
padding-left: 20px;
}
QDialog {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #e6e7ea, stop: 1 #eaebee);
}
QLineEdit, QTextEdit, QComboBox {
border: 1px solid gray;
border-radius: 2px;
padding: 0px 8px;
background: #fafafafa;
selection-background-color: darkgray;
}
QLineEdit[echoMode="2"] {
lineedit-password-character: 9679; /*Сокрытие пароля*/
}
QLineEdit:read-only {
background: lightblue;
}
QGroupBox {
background: #E0E0E0;
border: 1px solid gray;
border-radius: 3px;
margin-top: 26px;
font-size: 13pt;
}
QGroupBox#groupBox_Report {
background: #FFFFFF;
}
QGroupBox::title {
border: 1px solid gray;
border-bottom: none;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
subcontrol-origin: margin;
subcontrol-position: top left;
padding-left: 10px;
padding-right: 10px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #fafafa, stop: 0.1 #E0E0E0,
stop: 0.6 #E0E0E0, stop: 1.0 #fafafa);
color: black;
min-height: 25px;
}
QPushButton, QToolButton {
border: 3px outset /*#2d5585*/gray;
/*border: 3px solid #8f8f91;
border-style: outset;*/
border-radius: 5px;
background-color: #5d85B5;
min-width: 75px;
height: 55px;
padding: 1px;
qproperty-iconSize: 32px;
color: white;
}
QToolButton::icon {
background-color: white;
}
QPushButton {
height: 25px;
width: 100px;
}
QToolButton {
width: 180px;
height: 55px;
}
QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive, QToolButton#btnStatus,
QToolButton#btnDocsUpdating,
QToolButton#btnAssignTask,
QToolButton#btnAssign {
width: 100px;
height: 55px;
}
QToolButton#btnCheckDB, QToolButton#btnUpdateDocs, QToolButton#btnRepare, QToolButton#btnSave, QToolButton#btnUpdateStyle, QToolButton#btnSetVersion {
width: 150px;
height: 55px;
}
QToolButton#btnViewPassword, QToolButton#btnChangePassword {
min-width: 18px;
width: 18px;
height: 18px;
}
QPushButton#createDuplicateButton, QPushButton#deleteVersionButton, QPushButton#switchServerVersionButton {
width: 130px;
}
QPushButton:flat, QToolButton:flat {
border: none; /* no border for a flat push button */
}
QPushButton:disabled, QToolButton:disabled {
/*background-color: #777777;*/
background-color: #bbbbbb;
/*border-color: gray;*/
}
QPushButton:default, QToolButton:default {
border-color: #2d5585;
}
QPushButton:hover , QToolButton:hover {
background-color: #9dc5f5;
}
QPushButton:pressed, QToolButton:pressed {
background-color: #8db5e5;
border-style: inset;
}
QPushButton:checked, QToolButton:checked {
background-color: #8db5e5;
border-style: inset;
}
QCheckBox {
spacing: 20px;
}
QCheckBox#checkAutoStart, QCheckBox#checkLocalhost {
spacing: 0px;
}
QCheckBox::indicator:checked {
width: 24px;
height: 24px;
image: url(:/resources/icons/chekYes.png);
}
QCheckBox::indicator:!checked {
width: 24px;
height: 24px;
image: url(:/resources/icons/chekNo.png);
}
QTreeWidget {
font-size: 13pt;
font-family: Tahoma;
icon-size: 32px;
border-radius: 4px;
border: 2px solid white;
}
QTreeWidget::item {
height: 34px;
}
/*Бранчи*/
QTreeWidget::branch:has-siblings:!adjoins-item {
/*border-image: url(:/resources/icons/vline.png) 0; */
}
QTreeWidget::branch:has-siblings:adjoins-item {
/*border-image: url(:/resources/icons/branch-more.png) 0;*/
}
QTreeWidget::branch:!has-children:!has-siblings:adjoins-item {
/*border-image: url(:/resources/icons/branch-end.png) 0;*/
}
QTreeWidget::branch:closed:has-children:!has-siblings,
QTreeWidget::branch:closed:has-children:has-siblings {
/*border-image: none;*/
image: url(:/resources/icons/branch-closed.png);
}
QTreeWidget::branch:open:has-children:!has-siblings,
QTreeWidget::branch:open:has-children:has-siblings {
/*border-image: none;*/
image: url(:/resources/icons/branch-open.png);
}
QTreeWidget::item:hover,
QTreeWidget::branch:hover {
background: #EEEEEE;
/*border: 1px solid #6c6c6c;*/
/*border-radius: 3px;*/
}
QTreeWidget::item:selected {
background: #9dc5f5;
color: #000000;
}
QTreeWidget::indicator:checked {
width: 24px;
height: 24px;
image: url(:/resources/icons/chekYes.png);
}
QTreeWidget::indicator:!checked {
width: 24px;
height: 24px;
image: url(:/resources/icons/chekNo.png);
}
QHeaderView::section {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #2d5585, stop: 1 #9dc5f5);
color: white;
padding-left: 4px;
border: 1px solid #6c6c6c;
border-radius: 2px;
font-size: 13pt;
}
QTabWidget::pane { /* The tab widget frame */
border-top: 1px solid #C2C7CB;
border: 1px solid #C2C7CB;
}
QTabWidget::pane#tabWidgetTasks { /* The tab widget frame */
border-top: 1px solid #C2C7CB;
border: 1px solid #C2C7CB;
}
QTabWidget::tab-bar {
left: 0px; /* move to the right by 0px */
}
QTabBar::tab {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,
stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);
border: 2px solid #C4C4C3;
border-bottom-color: #C2C7CB; /* same as the pane color */
border-top-left-radius: 4px;
border-top-right-radius: 4px;
min-width: 40ex;
padding: 2px;
font-size: 12pt;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF);
background-color: #5d85B5;
color: black;
height: 20px;
}
QTabBar::tab:selected {
border-style: outset;
background: #8db5e5;
}
QTabBar::tab:!selected {
border-style: inset;
background: #bbbbbb;
}
QTabBar::tab:hover {
background: #aee1ff;
background: #EEEEEE;
background-color: #9dc5f5;
background: #8db5e5;
}
QTabBar::scroller { /* the width of the scroll buttons */
width: 80px;
}
QTabBar QToolButton { /* the scroll buttons are tool buttons */
min-width: 30px;
width: 30px;
padding: 0px;
margin-top: 5px;
}
QListWidget::item {
}
QListWidget#oneDialogMessenger {
background-color: white;
border: 1px solid gray;
border-radius: 2px;
}
QListWidget::item:selected {
color: #000000;
}
QListWidget#oneDialogMessenger::item:selected {
color: #000000;
background: #ffffff;
}
QListWidget::item:hover {
background: #EEEEEE;
}
QListWidget#oneDialogMessenger::item:hover {
background: #ffffff;
}
QListWidget#subProcItemListWidget::item:hover {
background: #ffffff;
}
QListWidget {
selection-background-color: #9dc5f5;; /* Цвет выделенного элемента */
selection-color: black; /* Цвет текста выделенного элемента */
show-decoration-selected: false; /* Показывать выделение на выбранном элементе */
outline: none; /* Без выделения фокуса */
}
QTextEdit {
padding: -20px;
font-size: 12pt;
}
QTextEdit#editMsg {
height: 65px;
background: #ffffff;
}
QTextEdit#MsgWidgetEditTextLocal {
background: #EEEEEE;
border-radius: 8px;
}
QTextEdit#MsgWidgetEditTextRemote {
background: #9dc5f5;
border-radius: 8px;
}
QLabel#MsgWidgetLblTimeLocal {
font-size: 9pt;
}
QLabel#MsgWidgetLblTimeRemote {
font-size: 9pt;
}
QLabel#MsgWidgetLblNameLocal {
font-size: 9pt;
}
QLabel#MsgWidgetLblNameRemote {
font-size: 9pt;
}
QLabel#MsgWidgetLblAvatar {
}
QLabel#MessangerWidgetLblUser {
background: #ddeeff;
padding-left: 4px;
border-radius: 4px;
background: #9dc5f5;
}
QLabel#MessangerWidgetLblAvatar {
}
QLabel#MessangerWidgetLblLoggedIn {
}
QLabel#PersonalCard_lblName {
font-size: 16pt;
color: #2d5585;
}
QLabel#ReportFimWidget_label_MMEL, QLabel#ActionWidget_lbl_Type {
color: gray;
border-radius: 4px;
min-width: 50px;
min-height: 25px;
background: #ffffff;
border: 1px solid gray;
}
QLabel#ActionWidget_lbl_Status {
color: black;
border-radius: 18px;
min-width: 150px;
min-height: 40px;
background: #d0d0d0;
border: 1px solid gray;
}
QLabel#DeviceWidget_lbl_Status {
color: black;
border-radius: 18px;
min-width: 250px;
min-height: 40px;
background: #f0f0f0;
border: 1px solid gray;
}
QLabel#DeviceWidget_lbl_ObjName {
color: black;
}
QLabel#DeviceWidget_lbl_Code {
color: gray;
}
QLabel#lblStatAMM, QLabel#lblStatFIM {
padding-top: 1px;
}
QPlainTextEdit#ActionWidget_plainTextEdit_Procedure{
border-radius: 5px;
border: 1px solid gray;
background: #F0F0F2;
}
QPlainTextEdit#ActionWidget_plainTextEdit_Comment{
border-radius: 5px;
border: 1px solid gray;
background: #FEFEFE;
}
QPlainTextEdit#plainText{ /*Репорт*/
margin-left: 50pt;
margin-right: 100pt;
}
QComboBox::drop-down {
subcontrol-position: right center; /*Выравнивание стрелки по центру */
width: 20px; /* Ширина области со стрелкой */
border: none;
border-left: 1px solid gray;
background: #E0E0E0;
}
QComboBox::down-arrow {
image: url(:/resources/icons/branch-open.png); /* Подставляем свою картинку стрелки */
width: 16px; /* Размер иконки */
height: 16px;
}
QComboBox QAbstractItemView {
selection-background-color: #9dc5f5;; /* Цвет выделенного элемента */
selection-color: black; /* Цвет текста выделенного элемента */
alternate-background-color: lightgrey; /* Чередующиеся строки */
show-decoration-selected: true; /* Показывать выделение на выбранном элементе */
outline: none; /* Без выделения фокуса */
}

Binary file not shown.

View File

@@ -0,0 +1,4 @@
set CURRENT_DIR=%~dp0
cd %CURRENT_DIR%
set "PGPASSWORD=12345678"
pg_restore -U postgres -h localhost -p 5432 -d rrjdatabase .\restoreDB\DBLMS_EMPTY.backup

BIN
FILES/ICONS/planeCustom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<ServerSettingsContainer>
<ServerSettings Address="127.0.0.1" Port="6000" Language="RUS"/>
</ServerSettingsContainer>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<ServerSettingsContainer>
<DataBaseSettings Type="QPSQL" Name="rrjdatabase" UserName="rrjuser" Password="rrjuser" HostName="localhost" Port="5432" Language="RUS"/>
</ServerSettingsContainer>

Binary file not shown.

View File

@@ -1,40 +0,0 @@
project(GUIdataBaseLMS LANGUAGES CXX)
common_info_for_project(GUIdataBaseLMS)
add_executable(GUIdataBaseLMS
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
GUIdataBaseLMS.qrc
)
target_link_libraries(GUIdataBaseLMS PRIVATE Qt5::Widgets)
target_link_libraries(GUIdataBaseLMS PRIVATE Qt5::Sql)
target_link_libraries(GUIdataBaseLMS PRIVATE Qt5::Xml)
target_link_libraries(GUIdataBaseLMS PRIVATE Qt5::Network)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees/instructors)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees/trainees)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees/tasks)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees/docTasks)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees/connectorToServer)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees/connectorToServer/Core)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../InstructorsAndTrainees/messanger)
if(PROJECT_TYPE_DEBUG)
target_link_directories(GUIdataBaseLMS PUBLIC ${REPO_PATH}/BUILDS/Debug64/InstructorsAndTrainees)
else()
target_link_directories(GUIdataBaseLMS PUBLIC ${REPO_PATH}/BUILDS/Release64/InstructorsAndTrainees)
endif()
target_link_libraries(GUIdataBaseLMS PRIVATE libInstructorsAndTrainees.dll)
target_include_directories(GUIdataBaseLMS PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../DataBaseLMS)
if(PROJECT_TYPE_DEBUG)
target_link_directories(GUIdataBaseLMS PUBLIC ${REPO_PATH}/BUILDS/Debug64/DataBaseLMS)
else()
target_link_directories(GUIdataBaseLMS PUBLIC ${REPO_PATH}/BUILDS/Release64/DataBaseLMS)
endif()
target_link_libraries(GUIdataBaseLMS PRIVATE libDataBaseLMS.dll)

View File

@@ -1,695 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2024-12-28T11:57:36. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{00ce76f6-77cf-4587-a216-9a8e243377cb}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/BUILDS/LMS/GUIdataBaseLMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/GUIdataBaseLMS/Release64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/ProjectsQT_5_14/testDB/build-testDBpgSQL-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/ProjectsQT_5_14/testDB/build-testDBpgSQL-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">testDBpgSQL</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.testDBpgSQL</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">testDBpgSQL</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">GUIdataBaseLMS</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.GUIdataBaseLMS</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">GUIdataBaseLMS</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/QT/BUILDS/LMS/GUIdataBaseLMS/Debug64</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/ProjectsQT_5_14/testDB/Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/ProjectsQT_5_14/testDB/build-testDBpgSQL-Desktop_Qt_5_14_2_MinGW_32_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/ProjectsQT_5_14/testDB/build-testDBpgSQL-Desktop_Qt_5_14_2_MinGW_32_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/ProjectsQT_5_14/testDB/build-testDBpgSQL-Desktop_Qt_5_14_2_MinGW_32_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">testDBpgSQL</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.testDBpgSQL</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">testDBpgSQL</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,391 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2025-01-10T12:59:21. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{15ef2478-2444-4b00-88b8-fead51c6fef5}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">4</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/GUIdataBaseLMS/build-GUIdataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/GUIdataBaseLMS/build-GUIdataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/GUIdataBaseLMS/build-GUIdataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/GUIdataBaseLMS/build-GUIdataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/GUIdataBaseLMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">GUIdataBaseLMS</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.GUIdataBaseLMS</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">GUIdataBaseLMS</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/QT/Projects/RRJServer/RRJServer/BUILDS/GUIdataBaseLMS/Debug64</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,5 +0,0 @@
<RCC>
<qresource prefix="/">
<file>resources/lms.png</file>
</qresource>
</RCC>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
<context>
<name>MainWindow</name>
<message>
<location filename="../mainwindow.ui" line="19"/>
<source>Learning management system (LMS)</source>
<translation>Система управления обучением (СУО)</translation>
</message>
</context>
</TS>

View File

@@ -1,618 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2024-12-28T11:57:36. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{00ce76f6-77cf-4587-a216-9a8e243377cb}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/BUILDS/LMS/DB_IaT/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB_IaT/Release64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_32_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/Release64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_32_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_32_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,390 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2025-01-10T12:59:45. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{15ef2478-2444-4b00-88b8-fead51c6fef5}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">4</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_IaT/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_IaT/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_IaT/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_IaT/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_IaT/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,319 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.2, 2024-05-27T09:37:39. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{88628a15-8b1c-4544-92e6-5683c5f27136}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">8</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ec5f7042-f1c7-4b2e-9c22-2340fe1a69bd}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="CMake.Build.Type">Debug</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="CMake.Build.Type">Release</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/build-InstructorsAndTrainees-Desktop-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="CMake.Build.Type">RelWithDebInfo</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/build-InstructorsAndTrainees-Desktop-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release with Debug Information</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<value type="QString" key="CMake.Build.Type">MinSizeRel</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/build-InstructorsAndTrainees-Desktop-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,12 +0,0 @@
#include "notifycontroller.h"
#include "specialmessagebox.h"
NotifyController::NotifyController(QObject *parent) : QObject(parent)
{
}
void NotifyController::showWarning(QString text)
{
SpecialMessageBox(nullptr, SpecialMessageBox::TypeSpecMsgBox::warningClose, text).exec();
}

View File

@@ -1,18 +0,0 @@
#ifndef NOTIFYCONTROLLER_H
#define NOTIFYCONTROLLER_H
#include <QObject>
#include <QMessageBox>
class NotifyController : public QObject
{
Q_OBJECT
public:
explicit NotifyController(QObject *parent = nullptr);
void showWarning(QString text);
signals:
};
#endif // NOTIFYCONTROLLER_H

View File

@@ -1,531 +0,0 @@
#include "connectortoserver.h"
#include <QThread>
ConnectorToServer::ConnectorToServer(QWidget* parentWidget, QObject *parent) :
QObject(parent),
parentWidget(parentWidget),
connectionThread(nullptr),
client(nullptr),
dataParser(nullptr),
sendSystem(nullptr),
recognizeSystem(nullptr),
versionSelectWidget(nullptr),
versionContainer(nullptr),
notifyController(nullptr),
fl_GetedOfflineMessages(false)
{
initialize();
}
ConnectorToServer::~ConnectorToServer()
{
delete client;
delete versionSelectWidget;
delete notifyController;
delete versionContainer;
delete recognizeSystem;
delete sendSystem;
delete dataParser;
connectionThread->quit();
connectionThread->wait();
delete connectionThread;
}
bool ConnectorToServer::authorizationInstructorLocal(QString login, QString password)
{
if (!client->getIsConnected())
{
return false;
}
ClientAutorization *autorization = new ClientAutorization;
autorization->Login = login;
autorization->Password = password;
autorization->TypeClient = TypeClientAutorization::TYPE_GUI;
QByteArray array = dataParser->createAuthMessage(autorization);
emit sigSendAnswerToServer(array);
return true;
}
bool ConnectorToServer::deAuthorizationInstructorLocal(QString login)
{
if (!client->getIsConnected())
{
return false;
}
ClientDeAutorization *deAutorization = new ClientDeAutorization;
deAutorization->Login = login;
QByteArray array = dataParser->createDeAuthMessage(deAutorization);
emit sigSendAnswerToServer(array);
return true;
}
bool ConnectorToServer::sendQueryToDB(TypeQueryToDB typeQuery, int id, void* data)
{
if (!client->getIsConnected())
{
return false;
}
ClientQueryToDB *queryToDB = new ClientQueryToDB;
queryToDB->typeQuery = typeQuery;
QByteArray array = dataParser->createQueryToDBMessage(queryToDB, id, data);
emit sigSendAnswerToServer(array);
return true;
}
bool ConnectorToServer::sendMessage(ClientMessage clientMessage)
{
if (!client->getIsConnected())
{
return false;
}
QByteArray array = dataParser->createMessage(clientMessage);
emit sigSendAnswerToServer(array);
return true;
}
bool ConnectorToServer::sendClientNotify(QString command)
{
QByteArray answer = dataParser->xmlAnswer_notify(command);
emit sigSendAnswerToServer(answer);
return true;
}
bool ConnectorToServer::sendQueryTasksXML(QString type)
{
if (!client->getIsConnected())
{
return false;
}
QByteArray array = dataParser->createQueryTasksXMLMessage(type);
emit sigSendAnswerToServer(array);
return true;
}
void ConnectorToServer::setLoginName(QString name)
{
versionSelectWidget->setAuthor(name);
}
ServerSettings ConnectorToServer::getServerSettings()
{
return serverSettings;
}
bool ConnectorToServer::getIsConnected()
{
return client->getIsConnected();
}
void ConnectorToServer::SetConnectToServer()
{
serverSettings = *dataParser->getServerSettings();
emit sigSetConnect(dataParser->getServerSettings(),connectionThread);
}
void ConnectorToServer::StopConnectToServer()
{
emit sigStopConnect();
clearListModelDB();
}
QByteArray ConnectorToServer::getListTaskFimArray()
{
return listTaskFimArray;
}
QByteArray ConnectorToServer::getListTaskAmmArray()
{
return listTaskAmmArray;
}
QList<Instructor> ConnectorToServer::getListInstructors()
{
return listInstructors;
}
QList<Trainee> ConnectorToServer::getListTrainees()
{
return listTrainees;
}
QList<Group> ConnectorToServer::getListGroups()
{
return listGroups;
}
QList<Computer> ConnectorToServer::getListComputers()
{
return listComputers;
}
QList<Classroom> ConnectorToServer::getListClassrooms()
{
return listClassrooms;
}
QList<TaskAmmFim> ConnectorToServer::getListTasksAMMforTrainee(int trainee_id)
{
if(mapTasksAMM.contains(trainee_id))
return mapTasksAMM.value(trainee_id);
else
return QList<TaskAmmFim>();
}
QList<TaskAmmFim> ConnectorToServer::getListTasksFIMforTrainee(int trainee_id)
{
if(mapTasksFIM.contains(trainee_id))
return mapTasksFIM.value(trainee_id);
else
return QList<TaskAmmFim>();
}
int ConnectorToServer::getCountTasksAMMforTrainee(int trainee_id)
{
if(mapTasksAMM.contains(trainee_id))
return mapTasksAMM.value(trainee_id).count();
else
return 0;
}
int ConnectorToServer::getCountTasksFIMforTrainee(int trainee_id)
{
if(mapTasksFIM.contains(trainee_id))
return mapTasksFIM.value(trainee_id).count();
else
return 0;
}
bool ConnectorToServer::isArchivedInstructor(int id)
{
for(Instructor instructor : listInstructors)
{
if(instructor.getID() == id)
{
if(instructor.getArchived()) return true; else return false;
}
}
return false;
}
bool ConnectorToServer::isAdminInstructor(int id)
{
for(Instructor instructor : listInstructors)
{
if(instructor.getID() == id)
{
if(instructor.getIsAdmin()) return true; else return false;
}
}
return false;
}
bool ConnectorToServer::isLoggedInInstructor(int id)
{
for(Instructor instructor : listInstructors)
{
if(instructor.getID() == id)
{
if(instructor.getLoggedIn()) return true; else return false;
}
}
return false;
}
Instructor ConnectorToServer::getInstructor(int id)
{
for(Instructor instructor : listInstructors)
{
if(instructor.getID() == id)
return instructor;
}
return Instructor();
}
QList<Trainee> ConnectorToServer::getListTraineesInGroup(int id)
{
QList<Trainee> list;
for(Trainee trainee : listTrainees)
{
if(trainee.getGroup().getID() == id)
list.append(trainee);
}
return list;
}
bool ConnectorToServer::isArchivedTrainee(int id)
{
for(Trainee trainee : listTrainees)
{
if(trainee.getID() == id)
{
if(trainee.getArchived()) return true; else return false;
}
}
return false;
}
bool ConnectorToServer::isLoggedInTrainee(int id)
{
for(Trainee trainee : listTrainees)
{
if(trainee.getID() == id)
{
if(trainee.getLoggedIn()) return true; else return false;
}
}
return false;
}
Trainee ConnectorToServer::getTrainee(int id)
{
for(Trainee trainee : listTrainees)
{
if(trainee.getID() == id)
return trainee;
}
return Trainee();
}
Group ConnectorToServer::getGroup(int id)
{
for(Group group : listGroups)
{
if(group.getID() == id)
return group;
}
return Group();
}
int ConnectorToServer::getIdTraineeByLogin(QString login)
{
for(Trainee trainee : listTrainees)
{
if(trainee.getLogin() == login)
return trainee.getID();
}
return 0;
}
int ConnectorToServer::getIdInstructorByLogin(QString login)
{
for(Instructor instructor : listInstructors)
{
if(instructor.getLogin() == login)
return instructor.getID();
}
return 0;
}
void ConnectorToServer::showVersionSelect()
{
QByteArray answer = dataParser->xmlAnswer_notify(cmd_CheckVersionList);
emit sigSendAnswerToServer(answer);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors)
{
this->listInstructors = listInstructors;
emit signal_UpdateDB(true, false);
QList<User> listUsers;
for(Instructor instructor : listInstructors)
{
listUsers.append(instructor);
}
emit signal_reInitMessangerByUsers(listUsers);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListGroups(QList<Group> listGroups)
{
this->listGroups = listGroups;
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListTrainees(QList<Trainee> listTrainees)
{
this->listTrainees = listTrainees;
emit signal_UpdateDB(false, true);
QList<User> listUsers;
for(Trainee trainee : listTrainees)
{
listUsers.append(trainee);
}
emit signal_reInitMessangerByUsers(listUsers);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListComputers(QList<Computer> listComputers)
{
this->listComputers = listComputers;
//emit signal_UpdateDB(false, true); //TODO
}
void ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms)
{
this->listClassrooms = listClassrooms;
//emit signal_UpdateDB(false, true); //TODO
}
void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
{
//Удаляем старые задачи этого обучаемого
mapTasksAMM.remove(trainee_id);
//Добавляем новые
mapTasksAMM.insert(trainee_id, listTasks);
emit signal_UpdateTasksAMMforTrainee(trainee_id);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
{
//Удаляем старые задачи этого обучаемого
mapTasksFIM.remove(trainee_id);
//Добавляем новые
mapTasksFIM.insert(trainee_id, listTasks);
emit signal_UpdateTasksFIMforTrainee(trainee_id);
}
void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array)
{
this->listTaskFimArray = array;
emit signal_UpdateTasksFIM();
}
void ConnectorToServer::slot_AnswerQueryTasksXML_AMM(QByteArray array)
{
this->listTaskAmmArray = array;
emit signal_UpdateTasksAMM();
//Запрос старых оффлайн-сообщений
if(!fl_GetedOfflineMessages)
{
sendClientNotify(cmd_GetOfflineMessages);
fl_GetedOfflineMessages = true;
}
}
void ConnectorToServer::slot_sendMessage(ClientMessage clientMessage)
{
sendMessage(clientMessage);
}
void ConnectorToServer::showServerList(QList<StreamingVersionData *> *serverList)
{
versionSelectWidget->fillView(serverList);
}
void ConnectorToServer::slot_HashReady()
{
//sendQueryTasksXML("fim");
//sendQueryTasksXML("amm");
}
void ConnectorToServer::slot_Auth(ServerAuthorization *serverAuth)
{
this->serverAuth = *serverAuth;
emit sigLoginResult(serverAuth);
}
void ConnectorToServer::initialize()
{
createObjects();
bindConnection();
emit sigInitializeClient(recognizeSystem,sendSystem,connectionThread);
SetConnectToServer();
}
void ConnectorToServer::bindConnection()
{
connect(this,&ConnectorToServer::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection);
connect(this,&ConnectorToServer::sigSetConnect,client,&TCPClient::setConnect,Qt::AutoConnection);
connect(this,&ConnectorToServer::sigStopConnect,client,&TCPClient::setDisconnect,Qt::AutoConnection);
//Sconnect(this,&ConnectorToServer::signal_sendXMLmsgGUItoServer,sendSystem,&SendSystem::sendXMLmsgGUItoServer);
connect(this,&ConnectorToServer::sigSendAnswerToServer,sendSystem,&SendSystem::sendXMLAnswer,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::slot_Auth); // ::sigLoginResult);
connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult);
connect(recognizeSystem,&RecognizeSystem::signal_ReceiveMessage,this,&ConnectorToServer::signal_receiveMessage,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigShowServerDataList,this,&ConnectorToServer::showServerList);
connect (recognizeSystem,&RecognizeSystem::sigSetVersion,versionContainer,&VersionContainer::setServerVersionData);
//connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB,this,&ConnectorToServer::slot_AnswerQueryToDB);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListInstructors,this,&ConnectorToServer::slot_AnswerQueryToDB_ListInstructors);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListGroups,this,&ConnectorToServer::slot_AnswerQueryToDB_ListGroups);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTrainees);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListComputers,this,&ConnectorToServer::slot_AnswerQueryToDB_ListComputers);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListClassrooms,this,&ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksFIMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM);
connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigHashReady,this,&ConnectorToServer::slot_HashReady);
}
void ConnectorToServer::createObjects()
{
connectionThread = new QThread;
client = new TCPClient;
client->moveToThread(connectionThread);
dataParser = new DataParser;
sendSystem = new SendSystem;
sendSystem->moveToThread(connectionThread);
recognizeSystem = new RecognizeSystem;
recognizeSystem->moveToThread(connectionThread);
notifyController = new NotifyController;
versionContainer = new VersionContainer;
versionSelectWidget = new VersionSelectWidget(parentWidget);
versionSelectWidget->initialize(sendSystem,versionContainer,notifyController, recognizeSystem);
connectionThread->start();
connectionThread->setPriority(QThread::HighestPriority);
}
void ConnectorToServer::clearListModelDB()
{
listInstructors.clear();
listGroups.clear();
listTrainees.clear();
listComputers.clear();
listClassrooms.clear();
mapTasksAMM.clear();
mapTasksFIM.clear();
listTaskFimArray.clear();
listTaskAmmArray.clear();
}
SendSystem *ConnectorToServer::getSendSystem() const
{
return sendSystem;
}

View File

@@ -1,29 +0,0 @@
#include "dialogauthorizationinstructor.h"
#include "ui_dialogauthorizationinstructor.h"
DialogAuthorizationInstructor::DialogAuthorizationInstructor(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogAuthorizationInstructor)
{
ui->setupUi(this);
ui->editLogin->setProperty("mandatoryField", true);
ui->editPassword->setProperty("mandatoryField", true);
ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password);
#ifdef PROJECT_TYPE_DEBUG
ui->editLogin->setText("admin");
ui->editPassword->setText("admin");
#endif
}
DialogAuthorizationInstructor::~DialogAuthorizationInstructor()
{
delete ui;
}
void DialogAuthorizationInstructor::on_btnLogIn_clicked()
{
this->accept();
}

View File

@@ -1,37 +0,0 @@
#ifndef DIALOGAUTHORIZATIONINSTRUCTOR_H
#define DIALOGAUTHORIZATIONINSTRUCTOR_H
#include <QDialog>
#include "ui_dialogauthorizationinstructor.h"
namespace Ui {
class DialogAuthorizationInstructor;
}
class DialogAuthorizationInstructor : public QDialog
{
Q_OBJECT
public:
explicit DialogAuthorizationInstructor(QWidget *parent = nullptr);
~DialogAuthorizationInstructor();
public:
QString getLogin()
{
return ui->editLogin->text();
}
QString getPassword()
{
return ui->editPassword->text();
}
private slots:
void on_btnLogIn_clicked();
private:
Ui::DialogAuthorizationInstructor *ui;
};
#endif // DIALOGAUTHORIZATIONINSTRUCTOR_H

View File

@@ -1,110 +0,0 @@
#include <QMessageBox>
#include "editorinstructors.h"
#include "viewerinstructors.h"
#include "ui_viewerinstructors.h"
ViewerInstructors::ViewerInstructors(ConnectorToServer* connectorToServer, QWidget *parent) :
InstructorsView(connectorToServer, CommonView::TypeView::onlyView, parent),
dlgRedactor(nullptr),
ui(new Ui::ViewerInstructors)
{
ui->setupUi(this);
connect(treeWidget, &QTreeWidget::itemClicked, this, &ViewerInstructors::on_treeWidgetItemClicked);
ui->horizontalLayout_1->addWidget(treeWidget);
//treeWidget->setSelectionMode(QAbstractItemView::NoSelection);
preparationTreeWidget();
setNotLoggedInVisible(true);
ui->btnEditorInstructors->setVisible(false);
}
ViewerInstructors::~ViewerInstructors()
{
if(dlgRedactor)
dlgRedactor->close();
delete ui;
}
void ViewerInstructors::setAuthComplited(bool authComplited)
{
this->authComplited = authComplited;
updateButtons();
}
void ViewerInstructors::deactivate()
{
if(dlgRedactor)
dlgRedactor->close();
CommonView::deactivate();
updateButtons();
}
void ViewerInstructors::changeEvent(QEvent *event)
{
// В случае получения события изменения языка приложения
if (event->type() == QEvent::LanguageChange)
{// переведём окно заново
ui->retranslateUi(this);
reSetHeadTreeWidget();
slot_NeedUpdateUI(true, false);
}
}
void ViewerInstructors::on_btnEditorInstructors_clicked()
{
Q_EMIT signal_BlockAutorization(true);
dlgRedactor = new DialogRedactorInstructors(connectorToServer, adminMode, this);
dlgRedactor->exec();
if(dlgRedactor)
{
delete dlgRedactor;
dlgRedactor = nullptr;
}
if(authComplited)
loadInstructorsFromDB();
Q_EMIT signal_BlockAutorization(false);
}
void ViewerInstructors::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column)
{
if(item == nullptr)
return;
//if(current->childCount() == 0)
{//Выбран обучаемый
QString login = item->text(ColumnsTreeUsers::clmn_Login);
//if(login != "")
{
int newCurrentID = connectorToServer->getIdInstructorByLogin(login);
//if(newCurrentID == lastCurrentID)
//return;
lastCurrentID = newCurrentID;
Q_EMIT signal_instructorSelected(newCurrentID);
}
}
}
void ViewerInstructors::updateButtons()
{
if(adminMode && authComplited)
{
ui->btnEditorInstructors->setEnabled(true);
}
else
{
ui->btnEditorInstructors->setEnabled(false);
}
}

View File

@@ -1,476 +0,0 @@
#include <QMessageBox>
#include <QThread>
#include "instructorsandtraineeswidget.h"
#include "ui_instructorsandtraineeswidget.h"
#include "dialogauthorizationinstructor.h"
#include "dialogsettings.h"
#include "specialmessagebox.h"
const QString InstructorsAndTraineesWidget::languageENG = "en_EN";
const QString InstructorsAndTraineesWidget::languageRUS = "ru_RU";
InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
QWidget(parent),
connectorToServer(nullptr),
viewerTrainees(nullptr),
viewerInstructors(nullptr),
messangerWidget(nullptr),
messangerController(nullptr),
adminMode(false),
loginInstructorLoggedInLocal(QStringLiteral("")),
nameInstructorLoggedInLocal(QStringLiteral("")),
idInstructorLoggedInLocal("0"),
language(languageENG),
flSettingsServerIsChanged(false),
ui(new Ui::InstructorsAndTraineesWidget)
{
ui->setupUi(this);
ui->widget_Control->setObjectName("widgetControl");
registerMetaType();
qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId();
updateMyStyleSheet();
setLanguageInterfase();
connectorToServer = new ConnectorToServer(this);
connect(connectorToServer, &ConnectorToServer::sigLoginResult, this, &InstructorsAndTraineesWidget::slot_checkLoginResult);
connect(connectorToServer, &ConnectorToServer::sigDeLoginResult, this, &InstructorsAndTraineesWidget::slot_checkDeLoginResult);
messangerController = new MessangerController(connectorToServer, this);
viewerTrainees = new ViewerTrainees(connectorToServer, messangerController, this);
viewerInstructors = new ViewerInstructors(connectorToServer, this);
connect(this, &InstructorsAndTraineesWidget::signal_NeedUpdateUI, viewerTrainees, &ViewerTrainees::slot_NeedUpdateUI);
connect(this, &InstructorsAndTraineesWidget::signal_NeedUpdateUI, viewerInstructors, &ViewerInstructors::slot_NeedUpdateUI);
connect(viewerInstructors, &ViewerInstructors::signal_BlockAutorization, this, &InstructorsAndTraineesWidget::signal_BlockAutorization);
connect(viewerTrainees, &ViewerTrainees::signal_BlockAutorization, this, &InstructorsAndTraineesWidget::signal_BlockAutorization);
connect(connectorToServer, &ConnectorToServer::signal_ConnectedToServer, this, &InstructorsAndTraineesWidget::slot_ConnectedToServer);
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, this, &InstructorsAndTraineesWidget::slot_traineeSelected);
connect(viewerInstructors, &ViewerInstructors::signal_instructorSelected, this, &InstructorsAndTraineesWidget::slot_instructorSelected);
viewerTrainees->clearSelection();
viewerInstructors->clearSelection();
//Размещение
ui->verticalLayout_Trainees->addWidget(viewerTrainees);
ui->verticalLayout_Instructors->addWidget(viewerInstructors);
ui->groupBox_Messenger->setMinimumHeight(600);
ui->groupBox_Messenger->setMaximumWidth(500);
ui->groupBox_Messenger->setMinimumWidth(500);
ui->groupBox_Instructors->setMinimumHeight(200);
ui->groupBox_Instructors->setMaximumHeight(300);
ui->groupBox_Trainees->setMinimumHeight(400);
ui->groupBox_Trainees->setMinimumWidth(600);
ui->groupBox_Instructors->setMinimumWidth(600);
//Доступность кнопок
ui->btnAuthorizationInstructor->setEnabled(false);
ui->btnEditorTrainees->setEnabled(false);
ui->btnEditorInstructors->setEnabled(false);
}
InstructorsAndTraineesWidget::~InstructorsAndTraineesWidget()
{
if(authorizationIsCompleted())
deAuthorizationInstructor(loginInstructorLoggedInLocal);
delete messangerController;
delete viewerInstructors;
delete viewerTrainees;
delete connectorToServer;
delete ui;
}
QString InstructorsAndTraineesWidget::getLanguage()
{
return language;
}
void InstructorsAndTraineesWidget::changeEvent(QEvent *event)
{
// В случае получения события изменения языка приложения
if (event->type() == QEvent::LanguageChange)
{// переведём окно заново
ui->retranslateUi(this);
updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal);
updateLabelServer();
}
}
void InstructorsAndTraineesWidget::updateMyStyleSheet()
{
QString styleSheet = loadStyleSheet();
styleSheet = styleSheet.replace("\n", "");
this->setStyleSheet(styleSheet);
}
QString InstructorsAndTraineesWidget::loadStyleSheet()
{
QString fileName = "./resources/css/styleSheetMain.css";
QFile styleSheetFile(fileName);
if (!styleSheetFile.open(QFile::ReadOnly | QFile::Text))
{
SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("The file could not be opened ") + fileName).exec();
return QStringLiteral("");
}
else
{
QByteArray byteArray = styleSheetFile.readAll();
styleSheetFile.close();
QString style = byteArray;
return style;
}
}
void InstructorsAndTraineesWidget::slot_LanguageChanged(QString language)
{
qtLanguageTranslator.load(QString(QStringLiteral("translations/InstructorsAndTraineesWidget_")) + language, QStringLiteral("."));
qApp->installTranslator(&qtLanguageTranslator);
emit signal_LanguageChanged(language);
}
void InstructorsAndTraineesWidget::slot_UpdateStyleSheet()
{
updateMyStyleSheet();
}
void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *serverAuth)
{
if (serverAuth->Result)
{
loginInstructorLoggedInLocal = serverAuth->Login;
nameInstructorLoggedInLocal = serverAuth->ClientName;
idInstructorLoggedInLocal = serverAuth->Id;
if(loginInstructorLoggedInLocal == QStringLiteral("admin"))
adminMode = true;
else
adminMode = false;
viewerInstructors->setAdminMode(adminMode);
viewerTrainees->setAdminMode(adminMode);
viewerInstructors->setAuthComplited(true);
viewerTrainees->setAuthComplited(true);
ui->btnEditorTrainees->setEnabled(true);
if(adminMode)
ui->btnEditorInstructors->setEnabled(true);
emit signal_NeedUpdateUI(true, true);
updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName);
connectorToServer->setLoginName(nameInstructorLoggedInLocal);
messangerController->setUserLocalGUI_ID(serverAuth->Id.toInt());
connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm");
viewerTrainees->activate();
viewerInstructors->activate();
}
else
{
ui->btnAuthorizationInstructor->setChecked(false);
SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Instructor authorization.") + "\n" + tr("Invalid login or password!")).exec();
}
}
void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization *serverDeAuth)
{
if (serverDeAuth->Result)
{
loginInstructorLoggedInLocal = QStringLiteral("");
nameInstructorLoggedInLocal = QStringLiteral("");
adminMode = false;
viewerInstructors->setAdminMode(adminMode);
viewerTrainees->setAdminMode(adminMode);
viewerInstructors->setAuthComplited(false);
viewerTrainees->setAuthComplited(false);
ui->btnEditorTrainees->setEnabled(false);
ui->btnEditorInstructors->setEnabled(false);
updateLabelLoggedInInstructor("","");
}
else
{
ui->btnAuthorizationInstructor->setChecked(true);
SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Instructor deauthorization") + "\n" + tr("Error!")).exec();
}
}
void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
{
if(state)
{//Сервер подключен
ui->btnConnectionToServer->setEnabled(false);
ui->btnAuthorizationInstructor->setEnabled(true);
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal);
updateLabelServer();
}
else
{//Сервер отключен
ui->btnConnectionToServer->setEnabled(true);
ui->btnAuthorizationInstructor->setEnabled(false);
ui->btnAuthorizationInstructor->setChecked(false);
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
viewerInstructors->setAuthComplited(false);
viewerTrainees->setAuthComplited(false);
ui->btnEditorTrainees->setEnabled(false);
ui->btnEditorInstructors->setEnabled(false);
viewerTrainees->deactivate();
viewerInstructors->deactivate();
messangerController->deleteAllWidgets();
loginInstructorLoggedInLocal = "";
nameInstructorLoggedInLocal = "";
updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal);
updateLabelServer();
if(!flSettingsServerIsChanged)
SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningClose, tr("The server is not available!")).exec();
else
flSettingsServerIsChanged = false;
}
}
void InstructorsAndTraineesWidget::slot_traineeSelected(int id_trainee)
{
viewerInstructors->clearSelection();
/*Messanger*/
messangerController->deleteWidget(messangerWidget);
if(id_trainee)
{
Trainee trainee = connectorToServer->getTrainee(id_trainee);
if(trainee.getID())
messangerWidget = messangerController->newWidget(this, &trainee, ui->verticalLayout_Messenger);
}
}
void InstructorsAndTraineesWidget::slot_instructorSelected(int id_instructor)
{
viewerTrainees->clearSelection();
/*Messanger*/
messangerController->deleteWidget(messangerWidget);
if(id_instructor && id_instructor != idInstructorLoggedInLocal.toInt())
{
Instructor instructor = connectorToServer->getInstructor(id_instructor);
if(instructor.getID())
messangerWidget = messangerController->newWidget(this, &instructor, ui->verticalLayout_Messenger);
}
}
bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent)
{
DialogAuthorizationInstructor dlg(parent);
dlg.setWindowTitle(tr("Instructor authorization"));
dlg.setWindowFlags(dlg.windowFlags() & ~Qt::WindowContextHelpButtonHint);
dlg.setStyleSheet(this->styleSheet());
do
{
switch( dlg.exec() )
{
case QDialog::Accepted:
{
QString login = dlg.getLogin();
QString password = dlg.getPassword();
connectorToServer->authorizationInstructorLocal(login, password);
return true;
}
case QDialog::Rejected:
return false;
default:
return false;
}
}
while(true);
return false;
}
bool InstructorsAndTraineesWidget::deAuthorizationInstructor(QString login)
{
connectorToServer->deAuthorizationInstructorLocal(login);
return true;
}
bool InstructorsAndTraineesWidget::authorizationIsCompleted()
{
if(loginInstructorLoggedInLocal == QStringLiteral(""))
return false;
else
return true;
}
void InstructorsAndTraineesWidget::on_btnConnectionToServer_clicked()
{
connectorToServer->SetConnectToServer();
}
void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{
bool stateIsChecked = ui->btnAuthorizationInstructor->isChecked();
if(stateIsChecked)
{//Авторизация Инструктора локальная (Администратора)
if(authorizationInstructorDialog(this))
{
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers);
}
else
ui->btnAuthorizationInstructor->setChecked(false);
}
else
{//ДеАвторизация Инструктора локальная (Администратора)
if(authorizationIsCompleted())
{
if(deAuthorizationInstructor(loginInstructorLoggedInLocal))
{
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers);
viewerTrainees->deactivate();
viewerInstructors->deactivate();
messangerController->deleteAllWidgets();
}
else
ui->btnAuthorizationInstructor->setChecked(true);
}
}
}
void InstructorsAndTraineesWidget::updateLabelLoggedInInstructor(QString login, QString name)
{
if(authorizationIsCompleted())
{
QString nameLoggedInInstructor = QString("%1 (%2)").arg(name, login);
ui->lblLoggedInInstructor->setText(nameLoggedInInstructor);
if(loginInstructorLoggedInLocal == QStringLiteral("admin"))
ui->lblLoggedIn->setPixmap(QPixmap(QStringLiteral(":/resources/icons/admin.png")));
else
ui->lblLoggedIn->setPixmap(QPixmap(QStringLiteral(":/resources/icons/instructor.png")));
}
else
{
ui->lblLoggedInInstructor->setText(tr("none"));
ui->lblLoggedIn->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
}
}
void InstructorsAndTraineesWidget::updateLabelServer()
{
if(!connectorToServer)
return;
if(connectorToServer->getIsConnected())
{
ServerSettings serverSettings = connectorToServer->getServerSettings();
ui->lblServer->setText(serverSettings.Address + " : " +serverSettings.Port);
}
else
ui->lblServer->setText(tr("none"));
}
void InstructorsAndTraineesWidget::setLanguageInterfase()
{
ServerSettings settings;
DialogSettings::loadSettings(&settings);
if(settings.Language == "ENG")
{
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + languageENG, ".");
language = languageENG;
}
else
{
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + languageRUS, ".");
language = languageRUS;
}
qApp->installTranslator(&qtLanguageTranslator);
emit signal_LanguageChanged(language);
}
void InstructorsAndTraineesWidget::on_btnSettings_clicked()
{
DialogSettings dlg(connectorToServer, (loginInstructorLoggedInLocal != ""), this);
dlg.setWindowFlags(dlg.windowFlags() & ~Qt::WindowContextHelpButtonHint);
connect(&dlg, &DialogSettings::signal_LanguageChanged, this, &InstructorsAndTraineesWidget::slot_LanguageChanged);
connect(&dlg, &DialogSettings::signal_UpdateStyleSheet, this, &InstructorsAndTraineesWidget::slot_UpdateStyleSheet);
switch( dlg.exec() )
{
case QDialog::Accepted:
{
language = dlg.getSettings().Language;
if(dlg.settingsServerIsChanged())
{
SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningClose, tr("Server settings have been changed. Please reconnect to the server.")).exec();
flSettingsServerIsChanged = true;
if(authorizationIsCompleted())
deAuthorizationInstructor(loginInstructorLoggedInLocal);
connectorToServer->StopConnectToServer();
}
break;
}
case QDialog::Rejected:
break;
default:
break;
}
}
void InstructorsAndTraineesWidget::on_btnEditorTrainees_clicked()
{
this->viewerTrainees->on_btnEditorTrainees_clicked();
}
void InstructorsAndTraineesWidget::on_btnEditorInstructors_clicked()
{
this->viewerInstructors->on_btnEditorInstructors_clicked();
}

View File

@@ -1,341 +0,0 @@
/*Обязательные поля*/
*[mandatoryField="true"] {
background-color: #fffdfd
}
/*Общие настройки виджетов*/
QWidget {
font-family: Tahoma;
font-size: 12pt;
icon-size: 24px;
/*background-color: green;*/
}
QWidget#widgetControl {
/*border: 1px solid gray;*/
background: #E0E0E0;
}
QWidget#viewerTrainees
{
padding-left: 20px;
}
QLineEdit, QTextEdit, QComboBox {
border: 1px solid gray;
border-radius: 2px;
padding: 0px 8px;
background: #fafafafa;
selection-background-color: darkgray;
}
QLineEdit[echoMode="2"] {
lineedit-password-character: 9679; /*Сокрытие пароля*/
}
QLineEdit:read-only {
background: lightblue;
}
QGroupBox {
background: #E0E0E0;
border: 1px solid gray;
border-radius: 3px;
margin-top: 5ex; /* leave space at the top for the title */
}
QGroupBox::title {
border: 1px solid gray;
border-bottom: none;
border-radius: 4px;
subcontrol-origin: margin;
subcontrol-position: top left;
padding-left: 10px;
padding-right: 10px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF);
}
QPushButton, QToolButton {
border: 2px solid #8f8f91;
border-style: outset;
border-radius: 5px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #f6f7fa, stop: 1 #dadbde);
min-width: 75px;
height: 50px;
padding: 1px;
qproperty-iconSize: 32px;
}
QPushButton {
height: 25px;
width: 100px;
}
QToolButton {
width: 180px;
height: 55px;
}
QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive,
QToolButton#btnSave, QToolButton#btnUpdateStyle, QToolButton#btnSetVersion,
QToolButton#btnAssignTask {
width: 80px;
height: 55px;
}
QPushButton:flat, QToolButton:flat {
border: none; /* no border for a flat push button */
}
QPushButton:default, QToolButton:default {
border-color: darkblue; /*make the default button prominent */
}
QPushButton:hover , QToolButton:hover {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #fafafa, stop: 0.4 #f4f4f4,
stop: 0.5 #e7e7e7, stop: 1.0 #fafafa);
}
QPushButton:pressed, QToolButton:pressed {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);
border-style: inset;
}
QPushButton:checked, QToolButton:checked {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);
border-style: inset;
}
/*
QDialogButtonBox {
border: 2px solid #8f8f91;
border-style: outset;
border-radius: 5px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #f6f7fa, stop: 1 #dadbde);
}
*/
QCheckBox {
spacing: 20px;
}
QCheckBox#checkAutoStart {
spacing: 0px;
}
QCheckBox::indicator:checked {
width: 24px;
height: 24px;
image: url(:/resources/icons/chekYes.png);
}
QCheckBox::indicator:!checked {
width: 24px;
height: 24px;
image: url(:/resources/icons/chekNo.png);
}
QTreeWidget {
font-size: 13pt;
font-family: Tahoma;
icon-size: 32px;
}
QTreeWidget::item {
height: 34px;
}
/*Бранчи*/
QTreeWidget::branch:has-siblings:!adjoins-item {
border-image: url(:/resources/icons/vline.png) 0;
}
QTreeWidget::branch:has-siblings:adjoins-item {
border-image: url(:/resources/icons/branch-more.png) 0;
}
QTreeWidget::branch:!has-children:!has-siblings:adjoins-item {
border-image: url(:/resources/icons/branch-end.png) 0;
}
QTreeWidget::branch:closed:has-children:!has-siblings,
QTreeWidget::branch:closed:has-children:has-siblings {
border-image: none;
image: url(:/resources/icons/branch-closed.png);
}
QTreeWidget::branch:open:has-children:!has-siblings,
QTreeWidget::branch:open:has-children:has-siblings {
border-image: none;
image: url(:/resources/icons/branch-open.png);
}
QTreeWidget::item:hover,
QTreeWidget::branch:hover {
background: #aee1ff;
}
QTreeWidget::item:selected {
/*background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);*/
background: #6ea1f1;
color: #ffffff;
}
QHeaderView::section {
/*
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 #c1c1c1, stop: 0.5 #505050,
stop: 0.6 #434343, stop:1 #656565);*/
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF);
color: black;
padding-left: 4px;
border: 1px solid #6c6c6c;
font-size: 13pt;
}
QTabWidget::pane { /* The tab widget frame */
border-top: 1px solid #C2C7CB;
/*background-image: url(:/resources/icons/messengerPrint.png);*/
}
QTabWidget::pane#tabWidgetTasks { /* The tab widget frame */
border-top: 1px solid #C2C7CB;
/*background-image: url(:/resources/icons/messengerPrint.png);*/
/*
padding-left: -18px;
padding-right: -18px;
padding-top: -8px;
padding-bottom: -8px;
*/
}
QTabWidget::tab-bar {
left: 0px; /* move to the right by 0px */
}
QTabBar::tab {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,
stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);
border: 2px solid #C4C4C3;
border-bottom-color: #C2C7CB; /* same as the pane color */
border-top-left-radius: 4px;
border-top-right-radius: 4px;
min-width: 40ex;
padding: 2px;
font-size: 12pt;
}
/*
QTabBar::tab:selected {
border-color: #9B9B9B;
border-bottom-color: #C2C7CB;
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);
color: #ffffff;
}
*/
QTabBar::tab:selected {
background: #ffffff;
}
QTabBar::tab:!selected {
margin-top: 5px; /* make non-selected tabs look smaller */
/*background: #ffffff;*/
}
QTabBar::tab:hover {
background: #aee1ff;
}
QTabBar::scroller { /* the width of the scroll buttons */
width: 80px;
}
QTabBar QToolButton { /* the scroll buttons are tool buttons */
min-width: 30px;
width: 30px;
padding: 0px;
margin-top: 5px;
}
QListWidget::item {
/*padding: -5px;*/
}
QListWidget {
/*background: pink;*/
background: transparent;
/*background: #ffffff;*/
background: #ddeeff;
}
QTextEdit {
padding: -20px;
font-size: 12pt;
}
QTextEdit#editMsg {
height: 65px; /**/
background: #ddeeff;
}
QTextEdit#MsgWidgetEditTextLocal {
/*background: tlightgreen;*/
background: #ddffdd;
border-radius: 8px;
}
QTextEdit#MsgWidgetEditTextRemote {
/*background: lightblue;*/
/*background: #ddeeff;*/
background: #ffffff;
border-radius: 8px;
}
QLabel#MsgWidgetLblTimeLocal {
font-size: 9pt;
/*background: yellow;*/
}
QLabel#MsgWidgetLblTimeRemote {
font-size: 9pt;
/*background: yellow;*/
}
QLabel#MsgWidgetLblNameLocal {
font-size: 9pt;
/*background: yellow;*/
}
QLabel#MsgWidgetLblNameRemote {
font-size: 9pt;
/*background: yellow;*/
}
QLabel#MsgWidgetLblAvatar {
/*background: pink;*/
}
QLabel#MessangerWidgetLblUser {
background: #ddeeff;
padding-left: 4px;
border-radius: 8px;
}
QLabel#MessangerWidgetLblAvatar {
}
QLabel#MessangerWidgetLblLoggedIn {
}
QWidget {
}
QPlainTextEdit#plainText{ /*Репорт*/
margin-left: 50pt;
margin-right: 100pt;
}
/**/
QComboBox {
/*background: #ffffff;
border-radius: 5px;*/
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,35 +0,0 @@
#ifndef SPECIALMESSAGEBOX_H
#define SPECIALMESSAGEBOX_H
#include <QDialog>
namespace Ui {
class SpecialMessageBox;
}
class SpecialMessageBox : public QDialog
{
Q_OBJECT
public:
enum TypeSpecMsgBox {
warningYesNo,
warningClose,
critical,
info
};
public:
explicit SpecialMessageBox(QWidget *parent, TypeSpecMsgBox type, const QString& text);
~SpecialMessageBox();
private slots:
void on_btnYes_clicked();
void on_btnNo_clicked();
private:
Ui::SpecialMessageBox *ui;
};
#endif // SPECIALMESSAGEBOX_H

View File

@@ -1,371 +0,0 @@
#include <QFile>
#include <QXmlStreamReader>
#include <QDomDocument>
#include <QMessageBox>
#include <QThread>
#include <QResizeEvent>
#include "ammtaskswidget.h"
#include "ui_ammtaskswidget.h"
#include "checkertask.h"
#include "specialmessagebox.h"
AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTreeAMMFIM type, QWidget *parent) :
QWidget(parent),
ui(new Ui::AMMtasksWidget),
connectorToServer(connectorToServer),
treeWidget(nullptr),
type(type),
idTraineeSelected(0),
threadPreparation(nullptr),
taskTreePreparation(nullptr),
waitAnimationWidget(nullptr),
dlgCheckerTask(nullptr),
flOnlyActive(false)
{
ui->setupUi(this);
qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId();
treeWidget = new QTreeWidget();
ui->horizontalLayout_Tree->addWidget(treeWidget);
connect(treeWidget, &QTreeWidget::currentItemChanged, this, &AMMtasksWidget::on_treeWidgetCurrentItemChanged);
preparationTreeWidget();
threadPreparation = new QThread();
taskTreePreparation = new TaskAMMFIMTreePreparation(type);
taskTreePreparation->moveToThread(threadPreparation);
threadPreparation->start();
threadPreparation->setPriority(QThread::HighestPriority);
connect(this, &AMMtasksWidget::signal_prepareAMMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItems);
connect(this, &AMMtasksWidget::signal_prepareAMMListItemsForTrainee, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee);
connect(taskTreePreparation, &TaskAMMFIMTreePreparation::signal_listAMMItemsReady, this, &AMMtasksWidget::slot_AMMlistItemsReady);
connect(this, &AMMtasksWidget::signal_stopParserPreparation, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_stopParserPreparation);
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->setParent(this);
waitAnimationWidget->initialize(movie,this);
ui->btnDelete->setObjectName("btnDelete");
ui->btnDelete->setEnabled(false);
ui->btnCheck->setObjectName("btnCheck");
ui->btnCheck->setEnabled(false);
ui->btnOnlyActive->setObjectName("btnOnlyActive");
ui->btnOnlyActive->setEnabled(false);
ui->btnAssignTask->setObjectName("btnAssignTask");
ui->btnAssignTask->setEnabled(false);
if(type == TypeListTreeAMMFIM::listCommon)
{
//ui->horizontalLayout_3->addWidget(ui->btnAssignTask);
//ui->horizontalLayout_3->addWidget(ui->btnOnlyActive);
//ui->horizontalLayout_3->addWidget(ui->btnCheck);
//ui->horizontalLayout_3->addWidget(ui->btnDelete);
//ui->horizontalLayout_3->setAlignment(Qt::AlignmentFlag::AlignLeft);
ui->btnDelete->setVisible(false);
ui->btnCheck->setVisible(false);
}
else
{
ui->btnOnlyActive->setVisible(false);
ui->btnAssignTask->setVisible(false);
//ui->verticalLayout->setAlignment(Qt::AlignmentFlag::AlignBottom);
//ui->horizontalLayout_3->setAlignment(Qt::AlignmentFlag::AlignLeft);
}
//ui->btnCheck->setVisible(false);
}
AMMtasksWidget::~AMMtasksWidget()
{
waitAnimationWidget->hideWithStop();
emit signal_stopParserPreparation();
threadPreparation->quit();
threadPreparation->wait();
delete threadPreparation;
delete taskTreePreparation;
delete waitAnimationWidget;
delete treeWidget;
delete ui;
}
void AMMtasksWidget::deactivate()
{
ui->btnAssignTask->setEnabled(false);
ui->btnOnlyActive->setEnabled(false);
treeWidget->clear();
idTraineeSelected = 0;
}
void AMMtasksWidget::waitAnimationWidgetShowWithPlay()
{
waitAnimationWidget->showWithPlay();
}
void AMMtasksWidget::resizeEvent(QResizeEvent *event)
{
QSize size = event->size();
waitAnimationWidget->resize(size);
int width = treeWidget->width();
treeWidget->setColumnWidth(ColumnsTreeAMM::clmnAMM_ID, 50);
treeWidget->setColumnWidth(ColumnsTreeAMM::clmnAMM_code, 250);
treeWidget->setColumnWidth(ColumnsTreeAMM::clmnAMM_status, 130);
int widthPMorDM;
if(type == TypeListTreeAMMFIM::listCommon)
widthPMorDM = width - (270 + 10);
else
{
#ifdef PROJECT_TYPE_DEBUG
widthPMorDM = width - (430 + 10);
#else
widthPMorDM = width - (380 + 10);
#endif
}
treeWidget->setColumnWidth(ColumnsTreeAMM::clmnAMM_PMorDM, widthPMorDM);
}
void AMMtasksWidget::closeDlgCheckTask()
{
if(dlgCheckerTask)
dlgCheckerTask->close();
}
void AMMtasksWidget::changeEvent(QEvent *event)
{
// В случае получения события изменения языка приложения
if (event->type() == QEvent::LanguageChange)
{// переведём окно заново
ui->retranslateUi(this);
reSetHeadTreeWidget();
if(type == TypeListTreeAMMFIM::listCommon)
{
//slot_NeedUpdateUI();
}
else if(type == TypeListTreeAMMFIM::listForTrainee)
if(idTraineeSelected)
slot_UpdateTasksAMMforTrainee(idTraineeSelected);
}
}
void AMMtasksWidget::on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
{
ui->btnDelete->setEnabled(false);
ui->btnCheck->setEnabled(false);
return;
}
else
{
ui->btnCheck->setEnabled(true);
ui->btnDelete->setEnabled(true);
}
int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt();
if(taskTreePreparation->getTypeModuleAMMbyID(id) == ModuleType::TYPE_PM)
ui->btnAssignTask->setEnabled(false);
else
ui->btnAssignTask->setEnabled(true);
}
void AMMtasksWidget::slot_NeedUpdateUI()
{
qDebug() << "AMMtasksWidget::slot_NeedUpdateUI thread ID " << QThread::currentThreadId();
loadTasksAMM();
}
void AMMtasksWidget::slot_traineeSelected(int id_trainee)
{
qDebug() << "AMMtasksWidget::slot_traineeSelected thread ID " << QThread::currentThreadId();
idTraineeSelected = id_trainee;
if(type == TypeListTreeAMMFIM::listForTrainee)
{
waitAnimationWidget->showWithPlay();
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE, idTraineeSelected);
}
}
void AMMtasksWidget::slot_UpdateTasksAMMforTrainee(int trainee_id)
{
qDebug() << "slot_UpdateTasksAMMforTrainee" << QThread::currentThreadId();
if(type == TypeListTreeAMMFIM::listForTrainee)
{
if(idTraineeSelected == trainee_id)
{
QList<TaskAmmFim> listTask = connectorToServer->getListTasksAMMforTrainee(trainee_id);
signal_prepareAMMListItemsForTrainee(listTask);
emit signal_countTasksAMMforTraineeChanged(trainee_id, listTask.count());
}
}
}
void AMMtasksWidget::loadTasksAMM(bool flRequestFirst)
{
//Обновление дерева
treeWidget->clear();
waitAnimationWidget->showWithPlay();
QByteArray arrayAMM;
//if(flRequestFirst)
arrayAMM = connectorToServer->getListTaskAmmArray();
emit signal_prepareAMMListItems(arrayAMM, flOnlyActive, flRequestFirst);
}
void AMMtasksWidget::slot_AMMlistItemsReady(QList<QTreeWidgetItem *> listItems)
{
//Обновление дерева
treeWidget->clear();
for(QTreeWidgetItem * item : listItems)
treeWidget->addTopLevelItem(item);
QTreeWidgetItem * item = treeWidget->topLevelItem(0);
if(item != nullptr)
treeWidget->setCurrentItem(item);
waitAnimationWidget->hideWithStop();
ui->btnOnlyActive->setEnabled(true);
}
void AMMtasksWidget::preparationTreeWidget()
{
treeWidget->setColumnCount(clmnAMM_count);
reSetHeadTreeWidget();
if(type == TypeListTreeAMMFIM::listCommon)
{
treeWidget->setColumnHidden(ColumnsTreeAMM::clmnAMM_ID, true);
treeWidget->setColumnHidden(ColumnsTreeAMM::clmnAMM_status, true);
}
else
{
#ifdef PROJECT_TYPE_DEBUG
treeWidget->setColumnHidden(ColumnsTreeAMM::clmnAMM_ID, false);
#else
treeWidget->setColumnHidden(ColumnsTreeAMM::clmnAMM_ID, true);
#endif
}
}
void AMMtasksWidget::reSetHeadTreeWidget()
{
QStringList listHeaders;
if(type == TypeListTreeAMMFIM::listForTrainee)
listHeaders = QStringList{tr("Task AMM"), tr("DM code"), tr("ID"), tr("Status")};
else
listHeaders = QStringList{tr("Task AMM"), tr("DM code"), tr("ID"), tr("Status")};
treeWidget->setHeaderLabels(listHeaders);
}
void AMMtasksWidget::assignTaskAMMtoTrainee()
{
QTreeWidgetItem *current = treeWidget->currentItem();
if(current == nullptr)
return;
int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt();
TaskAmmFim taskNew = taskTreePreparation->getTaskAMMbyID(id);
if(taskNew.getID())
{
emit signal_AssignedTask();
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, idTraineeSelected, &taskNew);
}
}
void AMMtasksWidget::on_btnDelete_clicked()
{
QTreeWidgetItem *treeItemCurrent = treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{
QTreeWidgetItem *treeItemParent = treeItemCurrent->parent();
if(treeItemParent == nullptr)
{//Выбрана задача
int id = treeItemCurrent->text(ColumnsTreeAMM::clmnAMM_ID).toInt();
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, tr("The deletion will be irrevocable.\nDelete it anyway?")).exec() == QDialog::Accepted)
{
waitAnimationWidget->showWithPlay();
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DEL_TASK_AMM_TO_TRAINEE, id);
}
}
}
}
void AMMtasksWidget::on_btnCheck_clicked()
{
QTreeWidgetItem *treeItemCurrent = treeWidget->currentItem();
if(treeItemCurrent != nullptr)
{//Выбрана задача
int id = treeItemCurrent->text(ColumnsTreeAMM::clmnAMM_ID).toInt();
TaskAmmFim task = taskTreePreparation->getTaskAMMbyID(id);
if(!task.getID())
return;
dlgCheckerTask = new DialogChekerTask(connectorToServer, "amm", this);
dlgCheckerTask->setTask(&task);
dlgCheckerTask->exec();
if(dlgCheckerTask->getFlChanged())
waitAnimationWidget->showWithPlay();
if(dlgCheckerTask)
{
delete dlgCheckerTask;
dlgCheckerTask = nullptr;
}
}
}
void AMMtasksWidget::on_btnAssignTask_clicked()
{
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, tr("Assign this task?")).exec() == QDialog::Accepted)
assignTaskAMMtoTrainee();
}
void AMMtasksWidget::on_btnOnlyActive_clicked()
{
if(ui->btnOnlyActive->isChecked())
{
flOnlyActive = true;
}
else
{
flOnlyActive = false;
}
loadTasksAMM(false);
}

View File

@@ -1,184 +0,0 @@
#include "checkertask.h"
#include "specialmessagebox.h"
#include "ui_checkertask.h"
#include "fimtaskswidget.h"
CheckerTask::CheckerTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent) :
QWidget(parent),
ui(new Ui::CheckerTask),
connectorToServer(connectorToServer),
fimTasksWidget(nullptr),
flChanged(false),
id_task(0),
type("fim")
{
ui->setupUi(this);
this->type = type;
if(type == "fim")
{
fimTasksWidget = new FIMtasksWidget(nullptr, TypeListTreeAMMFIM::listOneTask, this);
ui->verticalLayout_3->addWidget(fimTasksWidget);
ui->plainText->setReadOnly(true);
ui->plainText->setObjectName("plainText");
}
else
{
ui->plainText->setVisible(false);
ui->label->setVisible(false);
ui->label_2->setVisible(false);
ui->btnRight->setText(tr("Completed"));
ui->btnWrong->setText(tr("New"));
ui->btnWrong->setIcon(QIcon(QStringLiteral(":/resources/icons/circleGray.png")));
ui->btnRight->setEnabled(false);
ui->btnWrong->setEnabled(false);
}
}
CheckerTask::~CheckerTask()
{
if(fimTasksWidget)
{
delete fimTasksWidget;
fimTasksWidget = nullptr;
}
delete ui;
}
void CheckerTask::closeEvent(QCloseEvent *event)
{
}
void CheckerTask::setTask(TaskAmmFim* task)
{
this->task = *task;
id_task = task->getID();
if(type == "fim")
{
//Задача
fimTasksWidget->setOneTaskFim(&this->task);
//Репорт
outReport(this->task.report);
}
else if(type == "amm")
{
if(this->task.status == "new")
ui->btnRight->setEnabled(true);
else
ui->btnWrong->setEnabled(true);
}
}
TaskAmmFim CheckerTask::getTask()
{
return this->task;
}
void CheckerTask::setModule(Module *module)
{
this->module = *module;
id_task = this->module.getID();
}
void CheckerTask::outReport(FIMReport report)
{
QString str;
/*
str = QString("<b>Report ID: %1</b>").arg(QString::number(report.id));
ui->plainText->appendHtml(str);
ui->plainText->appendHtml("<br>");
*/
for(FIMReportItem item : report.itemList)
{
/*
//Item ID
str = QString("<p>Item ID: %1</p>").arg(QString::number(item.id));
ui->plainText->appendHtml(str);
*/
//Title
str = QString("<b>%1</b>").arg(item.procedure.title);
ui->plainText->appendHtml(str);
//DMcode
str = QString("<p>%1</p>").arg(item.procedure.dmCode);
ui->plainText->appendHtml(str);
//Result
str = item.procedure.result;
if(str == "viewed")
str = tr("viewed");
else if(str == "completed")
str = tr("completed");
str = QString("<p>%1</p>").arg(str);
ui->plainText->appendHtml(str);
//Text
str = QString("<p style=\"color:green;\">%1</p>").arg(item.text);
ui->plainText->appendHtml(str);
ui->plainText->appendHtml("<br>");
}
}
void CheckerTask::on_btnWrong_clicked()
{
TypeQueryToDB typeQuery;
QString status;
QString msgString;
if(type == "fim")
{
typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE;
status = "failed";
msgString = tr("Change task status?\nThe status will be set:\n'failed'");
}
else
{
typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE;
status = "new";
msgString = tr("Change task status?\nThe status will be set:\n'new'");
}
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, msgString).exec() == QDialog::Accepted)
{
connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status);
this->parentWidget()->close();
flChanged = true;
}
}
void CheckerTask::on_btnRight_clicked()
{
TypeQueryToDB typeQuery;
QString status;
QString msgString;
if(type == "fim")
{
typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_FIM_TO_TRAINEE;
status = "completed";
msgString = tr("Change task status?\nThe status will be set:\n'completed'");
}
else
{
typeQuery = TypeQueryToDB::TYPE_QUERY_CHANGE_STATUS_REPORT_TASK_AMM_TO_TRAINEE;
status = "completed";
msgString = tr("Change task status?\nThe status will be set:\n'completed'");
}
if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningYesNo, msgString).exec() == QDialog::Accepted)
{
connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status);
this->parentWidget()->close();
flChanged = true;
}
}

View File

@@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CheckerTask</class>
<widget class="QWidget" name="CheckerTask">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>628</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Task</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Completion Report</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>100</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QPlainTextEdit" name="plainText">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="btnWrong">
<property name="minimumSize">
<size>
<width>50</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>Failed</string>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/resources/icons/circleRed.png</normaloff>:/resources/icons/circleRed.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnRight">
<property name="minimumSize">
<size>
<width>50</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>Right</string>
</property>
<property name="icon">
<iconset resource="../resources.qrc">
<normaloff>:/resources/icons/circleGreen.png</normaloff>:/resources/icons/circleGreen.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
<resources>
<include location="../resources.qrc"/>
</resources>
<connections/>
</ui>

View File

@@ -1,79 +0,0 @@
#include "dialogedittrainee.h"
#include "ui_dialogedittrainee.h"
#include <QPushButton>
DialogEditTrainee::DialogEditTrainee(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogEditTrainee),
traineeInput()
{
ui->setupUi(this);
verify();
ui->editName->setProperty("mandatoryField", true);
ui->editLogin->setProperty("mandatoryField", true);
ui->editPassword->setProperty("mandatoryField", true);
}
DialogEditTrainee::~DialogEditTrainee()
{
delete ui;
}
void DialogEditTrainee::setTrainee(Trainee trainee)
{
traineeInput = trainee;
ui->editName->setText(trainee.getName());
ui->editLogin->setText(trainee.getLogin());
ui->editPassword->setText(trainee.getPassword());
ui->checkArchived->setChecked(trainee.getArchived());
ui->checkLoggedIn->setChecked(trainee.getLoggedIn());
ui->btnOK->setEnabled(false);
}
Trainee DialogEditTrainee::getTrainee()
{
Trainee trainee = traineeInput;
trainee.setName(ui->editName->text());
trainee.setLogin(ui->editLogin->text());
trainee.setPassword(ui->editPassword->text());
trainee.setArchived(ui->checkArchived->isChecked());
trainee.setLoggedIn(ui->checkLoggedIn->isChecked());
return trainee;
}
void DialogEditTrainee::on_editName_textChanged(const QString &arg1)
{
verify();
}
void DialogEditTrainee::on_editLogin_textChanged(const QString &arg1)
{
verify();
}
void DialogEditTrainee::on_editPassword_textChanged(const QString &arg1)
{
verify();
}
void DialogEditTrainee::verify()
{
if(ui->editName->text().trimmed() == QStringLiteral("") ||
ui->editLogin->text().trimmed() == QStringLiteral("") ||
ui->editPassword->text().trimmed() == QStringLiteral(""))
ui->btnOK->setEnabled(false);
else
ui->btnOK->setEnabled(true);
}
void DialogEditTrainee::on_btnOK_clicked()
{
this->accept();
}

View File

@@ -1,44 +0,0 @@
#include "newversionwidget.h"
#include "ui_newversionwidget.h"
NewVersionWidget::NewVersionWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::NewVersionWidget)
{
ui->setupUi(this);
setWindowFlags(Qt::SubWindow);
setAttribute(Qt::WA_ShowModal,true);
}
void NewVersionWidget::initialize(VersionSelectWidget *versionSelectWidget, QString prevName)
{
this->versionSelectWidget = versionSelectWidget;
ui->prevVerValue->setText(prevName);
validator = new QRegExpValidator(QRegExp("^[A-Za-z0-9]{20}$"));
ui->lineEdit->setValidator(validator);
}
void NewVersionWidget::on_createButton_clicked()
{
if(ui->lineEdit->text() != "")
{
versionSelectWidget->sendCopyEmit(ui->lineEdit->text());
hide();
}
}
void NewVersionWidget::on_cancelButton_clicked()
{
hide();
}
NewVersionWidget::~NewVersionWidget()
{
delete ui;
}
void NewVersionWidget::on_lineEdit_inputRejected()
{
QToolTip::showText(QCursor::pos(),tr("Only Latin letters and numbers"));
}

View File

@@ -1,36 +0,0 @@
#ifndef NEWVERSIONWIDGET_H
#define NEWVERSIONWIDGET_H
#include <Widgets/versionselectwidget.h>
#include <QWidget>
#include <QLineEdit>
#include <QToolTip>
namespace Ui {
class NewVersionWidget;
}
class VersionSelectWidget;
class NewVersionWidget : public QWidget
{
Q_OBJECT
public:
explicit NewVersionWidget(QWidget *parent = nullptr);
void initialize(VersionSelectWidget *versionSelectWidget,QString prevName);
~NewVersionWidget();
private slots:
void on_createButton_clicked();
void on_cancelButton_clicked();
void on_lineEdit_inputRejected();
private:
Ui::NewVersionWidget *ui;
VersionSelectWidget *versionSelectWidget;
QRegExpValidator *validator;
};
#endif // NEWVERSIONWIDGET_Hvoid on_lineEdit_inputRejected();

View File

@@ -1,259 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NewVersionWidget</class>
<widget class="QWidget" name="NewVersionWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>344</width>
<height>200</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Create copy...</string>
</property>
<property name="windowIcon">
<iconset resource="../resources.qrc">
<normaloff>:/resources/icons/lms.png</normaloff>:/resources/icons/lms.png</iconset>
</property>
<property name="autoFillBackground">
<bool>true</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QFrame" name="NewVerBackground">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="baseVerLayout">
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QLabel" name="prevVerTitle">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Basic version:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="prevVerValue">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>150</horstretch>
<verstretch>30</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="newNameLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QLabel" name="newNameVersionTitle">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>99</horstretch>
<verstretch>40</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>New name version:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>150</horstretch>
<verstretch>30</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>30</height>
</size>
</property>
<property name="toolTipDuration">
<number>1000</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="createButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Create</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="cancelButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../resources.qrc"/>
</resources>
<connections/>
</ui>

View File

@@ -1,174 +0,0 @@
#include "versionselectwidget.h"
#include "ui_versionselectwidget.h"
#include "ui_versionselectwidget.h"
#include <QMessageBox>
#include <QResizeEvent>
VersionSelectWidget::VersionSelectWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::VersionSelectWidget),
selectedVersion(nullptr),
waitAnimationWidget(nullptr),
recognizeSystem(nullptr)
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
setAttribute(Qt::WA_ShowModal,true);
}
void VersionSelectWidget::initialize(SendSystem *sendSystem,VersionContainer *versionContainer,NotifyController *notifyController, RecognizeSystem *recognizeSystem)
{
this->recognizeSystem = recognizeSystem;
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->setParent(this);
waitAnimationWidget->initialize(movie,this);
connect(this,&VersionSelectWidget::sigSendSwitchVersion,sendSystem,&SendSystem::sendChangeVersion,Qt::AutoConnection);
connect(this,&VersionSelectWidget::sigSendCopyVersion,sendSystem,&SendSystem::sendCopyVersion,Qt::AutoConnection);
connect(this,&VersionSelectWidget::sigSendDeleteVersion,sendSystem,&SendSystem::sendDeleteVersion,Qt::AutoConnection);
connect(this,&VersionSelectWidget::sigSendNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigAnimationActivated,this,&VersionSelectWidget::slot_activateLoadAnimation,Qt::AutoConnection);
this->versionContainer = versionContainer;
hide();
setWindowTitle(tr("Version control"));
}
void VersionSelectWidget::fillView(QList<StreamingVersionData *> *serverData)
{
show();
ui->verListView->clear();
serverDataList = serverData;
ui->verValue->setText(versionContainer->getServerVersionData()->getViewName());
foreach(StreamingVersionData *data,*serverData)
{
ui->verListView->addItem(data->getViewName());
}
}
void VersionSelectWidget::on_verListView_itemClicked(QListWidgetItem *item)
{
foreach(StreamingVersionData *data,*serverDataList)
{
if(data->getViewName() == item->text())
{
QString info = tr("Version name: ") + data->getViewName() + "\n";
info.append(tr("Created: ") + data->getCreateData().toString() + "\n");
info.append(tr("Changeable: ") + changableText(data->getIsChangeable()) + "\n");
info.append(tr("Author: ") + data->getAuthor());
ui->infoValue->setText(info);
selectedVersion = data;
}
}
}
QString VersionSelectWidget::changableText(bool flag)
{
if(flag) return tr("Yes");
else return tr("No");
}
void VersionSelectWidget::on_createDuplicateButton_clicked()
{
if (selectedVersion == nullptr)
{
emit sigSendNotify(tr("Version not selected"));
return;
}
NewVersionWidget *newVersionWidget = new NewVersionWidget();
newVersionWidget->initialize(this,selectedVersion->getViewName());
/*
QDialog* dialog = new QDialog(this);
QHBoxLayout *layout = new QHBoxLayout(dialog);
layout->addWidget(newVersionWidget);
dialog->setWindowTitle(tr("Editor of instructors"));
dialog->setMinimumSize(200, 100);
dialog->setStyleSheet(this->styleSheet());
dialog->exec();
delete newVersionWidget;
*/
newVersionWidget->show();
}
void VersionSelectWidget::sendCopyEmit(QString newName)
{
QString result = selectedVersion->getViewName() + ";" + newName + ";" + authorName;
if (selectedVersion == nullptr)
{
emit sigSendNotify(tr("Version not selected"));
return;
}
//versionContainer->setLocalVersionData(selectedVersion);
emit sigSendCopyVersion(result);
}
void VersionSelectWidget::on_DeleteVersionButton_clicked()
{
if (selectedVersion == nullptr)
{
emit sigSendNotify(tr("Version not selected"));
return;
}
emit sigSendDeleteVersion(selectedVersion);
}
void VersionSelectWidget::on_switchServerVersionButton_clicked()
{
if (selectedVersion == nullptr)
{
emit sigSendNotify(tr("Version not selected"));
return;
}
versionContainer->setServerVersionData(selectedVersion);
ui->verValue->setText(selectedVersion->getViewName());
emit sigSendSwitchVersion(selectedVersion);
}
void VersionSelectWidget::slot_activateLoadAnimation(bool flag)
{
if (flag)
{
waitAnimationWidget->showWithPlay();
}
else
{
waitAnimationWidget->hideWithStop();
}
}
void VersionSelectWidget::setAuthor(QString name)
{
authorName = name;
}
void VersionSelectWidget::resizeEvent(QResizeEvent *event)
{
QSize size = event->size();
waitAnimationWidget->resize(size);
}
VersionSelectWidget::~VersionSelectWidget()
{
waitAnimationWidget->hideWithStop();
delete waitAnimationWidget;
delete ui;
}

View File

@@ -0,0 +1,78 @@
project(DataBaseInterface LANGUAGES CXX)
common_info_for_project(DataBaseInterface)
add_library(DataBaseInterface SHARED
DataBaseLMS_global.h
databaselms.cpp
databaselms_tasks_amm.cpp
databaselms_tasks_fim.cpp
databaselms_groups.cpp
databaselms_users.cpp
databaselms_instructors.cpp
databaselms_trainees.cpp
databaselms_Postgresql.cpp
databaselms.h
interfacedatabaselms.cpp
interfacedatabaselms.h
basicentity.cpp
basicentity.h
user.cpp
user.h
instructor.cpp
instructor.h
trainee.cpp
trainee.h
group.cpp
group.h
computer.cpp
computer.h
classroom.cpp
classroom.h
tasksAmmFim.cpp
tasksAmmFim.h
typeQueryToDB.h
timingoftrainee.cpp
timingoftrainee.h
contactModel.h
hashtools.cpp
hashtools.h
DataBaseInterface.qrc
)
target_link_libraries(DataBaseInterface PRIVATE Qt5::Widgets)
target_link_libraries(DataBaseInterface PRIVATE Qt5::Sql)
target_link_libraries(DataBaseInterface PRIVATE Qt5::Xml)
target_compile_definitions(DataBaseInterface PRIVATE DATABASELMS_LIBRARY)
if(PROJECT_TYPE_DEBUG)
add_custom_command(TARGET DataBaseInterface
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Debug64/ProgramServerMTD)
add_custom_command(TARGET DataBaseInterface
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Debug64/ProgramAWSinstructorMTD)
else()
add_custom_command(TARGET DataBaseInterface
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Release64/ProgramServerMTD)
add_custom_command(TARGET DataBaseInterface
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Release64/ProgramAWSinstructorMTD)
endif()

View File

@@ -3,16 +3,18 @@
#include <QtSql> #include <QtSql>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver> #include <QSqlDriver>
#include <QMessageBox>
#include <QDomDocument> #include <QDomDocument>
#include <QProcess>
const QString DataBaseLMS::TypeUserDBInstructor = "instructor"; const QString DataBaseLMS::TypeUserDBInstructor = "instructor";
const QString DataBaseLMS::TypeUserDBTrainee = "trainee"; const QString DataBaseLMS::TypeUserDBTrainee = "trainee";
DataBaseLMS::DataBaseLMS(QWidget *ownerWidget, QObject *parent): QString DataBaseLMS::UserNamePostgres = "";
QString DataBaseLMS::PasswordPostgres = "";
DataBaseLMS::DataBaseLMS(QObject *parent):
QObject(parent), QObject(parent),
db(nullptr), db(nullptr)
ownerWidget(ownerWidget)
{ {
} }
@@ -22,12 +24,6 @@ DataBaseLMS::~DataBaseLMS()
deleteConnection(); deleteConnection();
} }
void DataBaseLMS::slot_LanguageChanged(QString language)
{
qtLanguageTranslator.load(QString(QStringLiteral("translations/DataBaseLMS_")) + language, QStringLiteral("."));
QCoreApplication::installTranslator(&qtLanguageTranslator);
}
bool DataBaseLMS::createConnection() bool DataBaseLMS::createConnection()
{ {
dbSettings = getDataBaseSettings(); dbSettings = getDataBaseSettings();
@@ -35,6 +31,7 @@ bool DataBaseLMS::createConnection()
dbSettings.connectionName = "Connection_" + dbSettings.dbName; dbSettings.connectionName = "Connection_" + dbSettings.dbName;
db = new QSqlDatabase(QSqlDatabase::addDatabase(dbSettings.dbType, dbSettings.connectionName)); db = new QSqlDatabase(QSqlDatabase::addDatabase(dbSettings.dbType, dbSettings.connectionName));
db->setDatabaseName(dbSettings.dbName); db->setDatabaseName(dbSettings.dbName);
db->setUserName(dbSettings.dbUserName); db->setUserName(dbSettings.dbUserName);
db->setPassword(dbSettings.dbPassword); db->setPassword(dbSettings.dbPassword);
@@ -89,10 +86,8 @@ DataBaseSettings DataBaseLMS::getDataBaseSettings()
DataBaseSettings settings; DataBaseSettings settings;
QFile file("config/settings.xml"); QFile file("config/settings.xml");
if(!file.open(QIODevice::ReadOnly)) if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::critical(ownerWidget, tr("Attention!"), tr("The file could not be opened:") + "config/settings.xml");
return settings; return settings;
}
QXmlStreamReader xmlReader(&file); QXmlStreamReader xmlReader(&file);
while (!xmlReader.atEnd()){ while (!xmlReader.atEnd()){
@@ -228,10 +223,10 @@ void DataBaseLMS::messageWarningErrorQuery(QString queryStr, QSqlQuery* query)
} }
} }
//Сообщение об ошибке //Сообщение об ошибке
QMessageBox::warning(ownerWidget, dbSettings.dbName, QString textError = "";
"Error query:\n" + query->lastError().text() + "\n" + textError = "Error query:\n" + query->lastError().text() + "\n" +
"String of query:\n" + queryStr + "\n" + "String of query:\n" + queryStr + "\n" +
"Executed query:\n" + query->executedQuery()); "Executed query:\n" + query->executedQuery();
emit signal_ErrorPostgreSQL(textError);
} }

View File

@@ -4,7 +4,6 @@
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QMutex> #include <QMutex>
#include <QWidget> #include <QWidget>
#include <QTranslator>
#include "instructor.h" #include "instructor.h"
#include "trainee.h" #include "trainee.h"
@@ -12,7 +11,10 @@
#include "tasksAmmFim.h" #include "tasksAmmFim.h"
#include "timingoftrainee.h" #include "timingoftrainee.h"
class DataBaseSettings static const QString backupEmptyName = ".\\DBLMS_EMPTY.backup";
static const QString restoreDBscriptName = ".\\restoreDB\\restoreDBscript.bat";
class DATABASELMS_EXPORT DataBaseSettings
{ {
public: public:
QString dbName = ""; QString dbName = "";
@@ -24,20 +26,33 @@ public:
int dbPort = 0; int dbPort = 0;
}; };
class DataBaseLMS : public QObject class DATABASELMS_EXPORT DataBaseLMS : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
DataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr); DataBaseLMS(QObject *parent = nullptr);
~DataBaseLMS(); ~DataBaseLMS();
public Q_SLOTS: signals:
void slot_LanguageChanged(QString language); void signal_ErrorPostgreSQL(QString text);
public: public:
static const QString TypeUserDBInstructor; static const QString TypeUserDBInstructor;
static const QString TypeUserDBTrainee; static const QString TypeUserDBTrainee;
protected:
static QString UserNamePostgres;
static QString PasswordPostgres;
public:
//PostgreSQL
static bool checkDriverQPSQLavailable();
static bool setUserPasswordPostgres(QString userName, QString password);
bool checkUserLMSexist();
bool checkDataBaseLMSexist();
bool createUser();
bool createDB();
bool prepareRestoreDBscript();
protected: protected:
//Подключение //Подключение
@@ -105,8 +120,9 @@ protected:
//int insertReportFIMforTask(TaskAmmFim task); //int insertReportFIMforTask(TaskAmmFim task);
int updateReportFIMforTask(TaskAmmFim task); int updateReportFIMforTask(TaskAmmFim task);
public:
static DataBaseSettings getDataBaseSettings();
private: private:
DataBaseSettings getDataBaseSettings();
int queryExecInt(QString queryStr); int queryExecInt(QString queryStr);
QString queryExecString(QString queryStr); QString queryExecString(QString queryStr);
bool queryExecBool(QString queryStr); bool queryExecBool(QString queryStr);
@@ -116,10 +132,6 @@ private:
protected: protected:
QSqlDatabase* db; QSqlDatabase* db;
DataBaseSettings dbSettings; DataBaseSettings dbSettings;
QTranslator qtLanguageTranslator;
private:
QWidget* ownerWidget;
}; };
#endif // DATABASELMS_H #endif // DATABASELMS_H

View File

@@ -0,0 +1,255 @@
#include "databaselms.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QDomDocument>
#include <QProcess>
bool DataBaseLMS::setUserPasswordPostgres(QString userName, QString password)
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName(userName);
dbCheck.setPassword(password);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
if (dbCheck.open())
{
UserNamePostgres = userName;
PasswordPostgres = password;
dbCheck.close();
return true;
}
else
{
qDebug() << "PostgreSQL connection error.";
return false;
}
}
bool DataBaseLMS::checkDriverQPSQLavailable()
{
return QSqlDatabase::isDriverAvailable("QPSQL");
}
bool DataBaseLMS::checkUserLMSexist()
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
if (dbCheck.open())
{
QSqlQuery query = QSqlQuery(dbCheck);
query.prepare("SELECT 1 FROM pg_roles WHERE rolname = :username");
query.bindValue(":username", settings.dbUserName);
if (query.exec() && query.next())
{
qDebug() << "The user exists.";
return true;
}
else
{
qDebug() << "The user does not exist.";
return false;
}
}
else
{
qDebug() << "PostgreSQL connection error.";
return false;
}
}
bool DataBaseLMS::checkDataBaseLMSexist()
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
bool flDBexist = false;
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
if (dbCheck.open())
{
QString queryStr = QString("SELECT datname FROM pg_database");
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
while (query.next())
{
QString nameDB = "";
nameDB = query.value(0).toString();
if(nameDB == dbSettings.dbName)
{
flDBexist = true;
break;
}
}
}
}
else
{
qDebug() << "PostgreSQL connection error.";
return false;
}
return flDBexist;
}
bool DataBaseLMS::createUser()
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
if (dbCheck.open())
{
QString queryStr = QString("CREATE USER %1 WITH ENCRYPTED PASSWORD '%2'").arg(settings.dbUserName, settings.dbPassword);
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
qDebug() << "User created.";
return true;
}
else
{
qDebug() << "User not created.";
return false;
}
}
else
{
qDebug() << "PostgreSQL connection error.";
return false;
}
}
bool DataBaseLMS::createDB()
{
DataBaseSettings settings = getDataBaseSettings();
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
dbCheck.setUserName(UserNamePostgres);
dbCheck.setPassword(PasswordPostgres);
dbCheck.setHostName(settings.dbHostName);
dbCheck.setPort(settings.dbPort);
if (dbCheck.open())
{
//Создание БД
QString queryStr = QString("CREATE DATABASE %1").arg(settings.dbName);
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
qDebug() << "The database has been created.";
//Залитие БД
if(prepareRestoreDBscript())
{
QProcess process;
QString pgRestorePath = restoreDBscriptName;
process.start("cmd /C " + pgRestorePath);
process.waitForFinished(-1); // Ждать бесконечно, пока процесс не завершится
}
//Назначение владельца
QString queryStr = QString("ALTER DATABASE %1 OWNER TO %2").arg(settings.dbName, settings.dbUserName);
QSqlQuery query = QSqlQuery(dbCheck);
if(queryExec(queryStr, &query))
{
qDebug() << "The owner of database has been changed.";
}
else
return false;
}
else
{
qDebug() << "The database was not created..";
return false;
}
}
else
{
qDebug() << "PostgreSQL connection error.";
return false;
}
dbCheck.close();
QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL");
dbCheck2.setUserName(UserNamePostgres);
dbCheck2.setPassword(PasswordPostgres);
dbCheck2.setHostName(settings.dbHostName);
dbCheck2.setPort(settings.dbPort);
dbCheck2.setDatabaseName(settings.dbName);
if (dbCheck2.open())
{
QString newOwner = settings.dbUserName;
// Получаем список таблиц
QSqlQuery query(dbCheck2);
query.exec("SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public';");
while (query.next())
{
QString tableName = query.value(0).toString();
QString alterQueryStr = QString("ALTER TABLE %1 OWNER TO %2;").arg(tableName).arg(newOwner);
QSqlQuery alterQuery(dbCheck2);
//dbCheck2.exec(alterQueryStr);
if(!queryExec(alterQueryStr, &alterQuery))
{
qDebug() << "Error changing owner for table " << tableName << ":" << dbCheck2.lastError().text();
return false;
}
}
}
return true;
}
bool DataBaseLMS::prepareRestoreDBscript()
{
DataBaseSettings settings = getDataBaseSettings();
QFile file(restoreDBscriptName);
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&file);
out << "set CURRENT_DIR=%~dp0\n";
out << "cd %CURRENT_DIR%\n";
out << QString("set \"PGPASSWORD=%1\"\n").arg(PasswordPostgres);
out << QString("pg_restore -U %1 -h %2 -p %3 -d %4 %5\n").arg(UserNamePostgres,
settings.dbHostName,
QString::number(settings.dbPort),
settings.dbName,
backupEmptyName);
file.close();
return true;
}
else
return false;
}

View File

@@ -3,7 +3,6 @@
#include <QtSql> #include <QtSql>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver> #include <QSqlDriver>
#include <QMessageBox>
QList<Group> DataBaseLMS::selectAllGroups() QList<Group> DataBaseLMS::selectAllGroups()

View File

@@ -3,7 +3,6 @@
#include <QtSql> #include <QtSql>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver> #include <QSqlDriver>
#include <QMessageBox>
QList<Instructor> DataBaseLMS::selectAllInstructors() QList<Instructor> DataBaseLMS::selectAllInstructors()

View File

@@ -0,0 +1,314 @@
#include "databaselms.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlDriver>
int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee)
{
QString queryStr;
bool resBool = false;
resBool = db->transaction();
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) "
"VALUES ('%1', '%2', %3) "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
QString::number(id_trainee));
int task_id = queryExecInt(queryStr);
if(!task_id)
{
resBool = db->rollback();
return 0;
}
for(SubProc subProc : task.listSubProc)
{
subProc.setTitle(subProc.getTitle().replace("'", "''")); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.subprocs (dm_code, title, canplay, fk_task_amm_id) "
"VALUES ('%1', '%2', '%3', %4) "
"RETURNING subprocs.subproc_id").arg(
subProc.getDmCode(),
subProc.getTitle(),
subProc.getModeListStr(),
QString::number(task_id));
int subproc_id = queryExecInt(queryStr);
if(!subproc_id)
{
resBool = db->rollback();
return 0;
}
}
resBool = db->commit();
return task_id;
}
int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
{
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' "
"WHERE task_id = %4 "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
task.status,
QString::number(task.getID()) );
return queryExecInt(queryStr);
}
int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(task_id));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("UPDATE public.tasks_amm SET status = '%1' "
"WHERE task_id = %2 "
"RETURNING tasks_amm.task_id").arg(
status,
QString::number(task_id) );
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
int DataBaseLMS::deleteTaskAMM(int id_task)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(id_task));
QSqlQuery queryUserSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryUserSEL))
{
if (queryUserSEL.first())
{//Обучаемый
id_trainee = queryUserSEL.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.subprocs "
"WHERE fk_task_amm_id = %1 ").arg(
QString::number(id_task));
QSqlQuery querySubProcDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &querySubProcDEL))
{
resBool = db->rollback();
return 0;
}
//--------------------
queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE task_id = %1 "
"RETURNING tasks_amm.task_id").arg(
QString::number(id_task));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksAMMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, "
"users.user_id "
"FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.fk_trainee_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_trainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Задача
TaskAmmFim task;
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
//Выгребаем все subproc для этой задачи
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
"tasks_amm.task_id "
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
"WHERE subprocs.fk_task_amm_id = %1 "
"ORDER BY subprocs.subproc_id ASC").arg(
task.getID());
QSqlQuery querySubProc = QSqlQuery(*db);
if(queryExec(queryStr, &querySubProc))
{
while (querySubProc.next())
{//Подпроцедура
SubProc subProc;
int subproc_id = 0;
subproc_id = querySubProc.value(0).toString().toInt();
subProc.setDmCode(querySubProc.value(1).toString());
subProc.setTitle(querySubProc.value(2).toString());
subProc.setModeListStr(querySubProc.value(3).toString());
task.listSubProc.append(subProc);
};
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
listTasks.append(task);
}
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
resBool = db->commit();
return listTasks;
}
TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task)
{
TaskAmmFim task;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status "
"FROM public.tasks_amm "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_task);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Задача
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
//Выгребаем все subproc для этой задачи
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
"tasks_amm.task_id "
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
"WHERE subprocs.fk_task_amm_id = %1 "
"ORDER BY subprocs.subproc_id ASC").arg(
task.getID());
QSqlQuery querySubProc = QSqlQuery(*db);
if(queryExec(queryStr, &querySubProc))
{
while (querySubProc.next())
{//Подпроцедура
SubProc subProc;
int subproc_id = 0;
subproc_id = querySubProc.value(0).toString().toInt();
subProc.setDmCode(querySubProc.value(1).toString());
subProc.setTitle(querySubProc.value(2).toString());
subProc.setModeListStr(querySubProc.value(3).toString());
task.listSubProc.append(subProc);
};
}
else
{
resBool = db->rollback();
return TaskAmmFim();
}
}
}
else
{
resBool = db->rollback();
return TaskAmmFim();
}
resBool = db->commit();
return task;
}

View File

@@ -3,185 +3,6 @@
#include <QtSql> #include <QtSql>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver> #include <QSqlDriver>
#include <QMessageBox>
int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee)
{
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) "
"VALUES ('%1', '%2', %3) "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
QString::number(id_trainee));
return queryExecInt(queryStr);
}
int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
{
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' "
"WHERE task_id = %4 "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
task.status,
QString::number(task.getID()) );
return queryExecInt(queryStr);
}
int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(task_id));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("UPDATE public.tasks_amm SET status = '%1' "
"WHERE task_id = %2 "
"RETURNING tasks_amm.task_id").arg(
status,
QString::number(task_id) );
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
int DataBaseLMS::deleteTaskAMM(int id_task)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(id_task));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE task_id = %1 "
"RETURNING tasks_amm.task_id").arg(
QString::number(id_task));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksAMMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, "
"users.user_id "
"FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.fk_trainee_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_trainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Задача
TaskAmmFim task;
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
listTasks.append(task);
}
}
return listTasks;
}
TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task)
{
TaskAmmFim task;
QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status "
"FROM public.tasks_amm "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_task);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Задача
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
}
}
return task;
}
int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee)
{ {
@@ -209,12 +30,14 @@ int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee)
{ {
malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, fk_task_fim_id) " queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, go_name, obj_name, fk_task_fim_id) "
"VALUES ('%1', '%2', '%3', %4) " "VALUES ('%1', '%2', '%3', '%4', '%5', %6) "
"RETURNING malfunctions.malfunction_id").arg( "RETURNING malfunctions.malfunction_id").arg(
malfanction.num, malfanction.num,
malfanction.dmCode, malfanction.dmCode,
malfanction.description, malfanction.description,
malfanction.goName,
malfanction.objName,
QString::number(task_id)); QString::number(task_id));
int malfunction_id = queryExecInt(queryStr); int malfunction_id = queryExecInt(queryStr);
@@ -304,6 +127,65 @@ int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status)
return 0; return 0;
} }
if(status == "new")
{//Удаляем отчет
queryStr = QString("SELECT reports.report_id "
"FROM public.reports "
"WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
QString::number(task_id));
int report_id = 0;
QSqlQuery queryReportsSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryReportsSEL))
{
if (queryReportsSEL.first())
{//Отчет
report_id = queryReportsSEL.value(0).toInt();
}
}
else
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.report_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryItemsDEL))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.reports "
"WHERE report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryReportsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryReportsDEL))
{
resBool = db->rollback();
return 0;
}
}
resBool = db->commit(); resBool = db->commit();
return id_trainee; return id_trainee;
} }
@@ -422,6 +304,17 @@ int DataBaseLMS::deleteTaskFIM(int id_task)
return 0; return 0;
} }
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.reports " queryStr = QString("DELETE FROM public.reports "
"WHERE report_id = %1 ").arg( "WHERE report_id = %1 ").arg(
QString::number(report_id)); QString::number(report_id));
@@ -478,7 +371,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
task.status = query.value(2).toString(); task.status = query.value(2).toString();
//Выгребаем все malfunction для этой задачи //Выгребаем все malfunction для этой задачи
queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, malfunctions.go_name, malfunctions.obj_name, "
"tasks_fim.task_id " "tasks_fim.task_id "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 " "WHERE malfunctions.fk_task_fim_id = %1 "
@@ -498,6 +391,8 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
malfanction.num = queryMalf.value(1).toString(); malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).toString(); malfanction.dmCode = queryMalf.value(2).toString();
malfanction.description = queryMalf.value(3).toString(); malfanction.description = queryMalf.value(3).toString();
malfanction.goName = queryMalf.value(4).toString();
malfanction.objName = queryMalf.value(5).toString();
//Выгребаем сигналы для этой неисправности //Выгребаем сигналы для этой неисправности
queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description "
@@ -518,6 +413,11 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
malfanction.malfunctionSigns.append(sign); malfanction.malfunctionSigns.append(sign);
}; };
} }
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
task.addMalfunction(malfanction); task.addMalfunction(malfanction);
}; };
@@ -531,7 +431,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
//Выгребаем отчет для этой задачи //Выгребаем отчет для этой задачи
int report_id = 0; int report_id = 0;
queryStr = QString("SELECT reports.report_id " queryStr = QString("SELECT reports.report_id, reports.mmel "
"FROM public.reports " "FROM public.reports "
"WHERE fk_task_fim_id = %1 " "WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg( "ORDER BY reports.report_id ASC").arg(
@@ -545,6 +445,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
{//Отчет {//Отчет
report_id = queryReport.value(0).toInt(); report_id = queryReport.value(0).toInt();
task.report.id = report_id; task.report.id = report_id;
task.report.mmel = queryReport.value(1).toBool();
} }
} }
else else
@@ -587,6 +488,36 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
resBool = db->rollback(); resBool = db->rollback();
return QList<TaskAmmFim>(); return QList<TaskAmmFim>();
} }
//Выгребаем все wh_item отчета
queryStr = QString("SELECT report_wh_items.wh_item_id, report_wh_items.status, report_wh_items.go_name, report_wh_items.obj_name, report_wh_items.code, report_wh_items.fk_report_id, report_wh_items.number "
"FROM public.report_wh_items "
"WHERE fk_report_id = %1 "
"ORDER BY report_wh_items.number ASC").arg(
QString::number(report_id));
QSqlQuery queryWhItems = QSqlQuery(*db);
if(queryExec(queryStr, &queryWhItems))
{
while (queryWhItems.next())
{//report_wh_item
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = queryWhItems.value(0).toInt();
reportWhItem.status = queryWhItems.value(1).toInt();
reportWhItem.goName = queryWhItems.value(2).toString();
reportWhItem.objName = queryWhItems.value(3).toString();
reportWhItem.code = queryWhItems.value(4).toString();
task.report.warehouseItemList.append(reportWhItem);
}
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
} }
listTasks.append(task); listTasks.append(task);
@@ -629,7 +560,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
task.status = query.value(2).toString(); task.status = query.value(2).toString();
//Выгребаем все malfunction для этой задачи //Выгребаем все malfunction для этой задачи
queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, malfunctions.go_name, malfunctions.obj_name, "
"tasks_fim.task_id " "tasks_fim.task_id "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 " "WHERE malfunctions.fk_task_fim_id = %1 "
@@ -649,6 +580,8 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
malfanction.num = queryMalf.value(1).toString(); malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).toString(); malfanction.dmCode = queryMalf.value(2).toString();
malfanction.description = queryMalf.value(3).toString(); malfanction.description = queryMalf.value(3).toString();
malfanction.goName = queryMalf.value(4).toString();
malfanction.objName = queryMalf.value(5).toString();
//Выгребаем сигналы для этой неисправности //Выгребаем сигналы для этой неисправности
queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description "
@@ -669,6 +602,11 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
malfanction.malfunctionSigns.append(sign); malfanction.malfunctionSigns.append(sign);
}; };
} }
else
{
resBool = db->rollback();
return TaskAmmFim();
}
task.addMalfunction(malfanction); task.addMalfunction(malfanction);
}; };
@@ -676,13 +614,13 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
else else
{ {
resBool = db->rollback(); resBool = db->rollback();
return task; return TaskAmmFim();
} }
//Выгребаем отчет для этой задачи //Выгребаем отчет для этой задачи
int report_id = 0; int report_id = 0;
queryStr = QString("SELECT reports.report_id " queryStr = QString("SELECT reports.report_id, reports.mmel "
"FROM public.reports " "FROM public.reports "
"WHERE fk_task_fim_id = %1 " "WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg( "ORDER BY reports.report_id ASC").arg(
@@ -696,12 +634,13 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
{//Отчет {//Отчет
report_id = queryReport.value(0).toInt(); report_id = queryReport.value(0).toInt();
task.report.id = report_id; task.report.id = report_id;
task.report.mmel = queryReport.value(1).toBool();
} }
} }
else else
{ {
resBool = db->rollback(); resBool = db->rollback();
return task; return TaskAmmFim();
} }
if(report_id) if(report_id)
@@ -736,7 +675,37 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
else else
{ {
resBool = db->rollback(); resBool = db->rollback();
return task; return TaskAmmFim();
}
//Выгребаем все wh_item отчета
queryStr = QString("SELECT report_wh_items.wh_item_id, report_wh_items.status, report_wh_items.go_name, report_wh_items.obj_name, report_wh_items.code, report_wh_items.fk_report_id, report_wh_items.number "
"FROM public.report_wh_items "
"WHERE fk_report_id = %1 "
"ORDER BY report_wh_items.number ASC").arg(
QString::number(report_id));
QSqlQuery queryWhItems = QSqlQuery(*db);
if(queryExec(queryStr, &queryWhItems))
{
while (queryWhItems.next())
{//report_wh_item
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = queryWhItems.value(0).toInt();
reportWhItem.status = queryWhItems.value(1).toInt();
reportWhItem.goName = queryWhItems.value(2).toString();
reportWhItem.objName = queryWhItems.value(3).toString();
reportWhItem.code = queryWhItems.value(4).toString();
task.report.warehouseItemList.append(reportWhItem);
}
}
else
{
resBool = db->rollback();
return TaskAmmFim();
} }
} }
}; };
@@ -744,7 +713,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
else else
{ {
resBool = db->rollback(); resBool = db->rollback();
return task; return TaskAmmFim();
} }
resBool = db->commit(); resBool = db->commit();
@@ -783,10 +752,11 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
if(!report_id) if(!report_id)
{ {
queryStr = QString("INSERT INTO public.reports (fk_task_fim_id) " queryStr = QString("INSERT INTO public.reports (fk_task_fim_id, mmel) "
"VALUES (%1) " "VALUES (%1, %2) "
"RETURNING reports.report_id").arg( "RETURNING reports.report_id").arg(
task.getID()); QString::number(task.getID()),
(task.report.mmel ? "true" : "false"));
report_id = queryExecInt(queryStr); report_id = queryExecInt(queryStr);
if(!report_id) if(!report_id)
@@ -807,6 +777,17 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
resBool = db->rollback(); resBool = db->rollback();
return 0; return 0;
} }
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{
resBool = db->rollback();
return 0;
}
} }
int number = 0; int number = 0;
@@ -830,6 +811,26 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
} }
} }
number = 0;
for(FIMReportWarehouseItem reportWhItem : task.report.warehouseItemList)
{
queryStr = QString("INSERT INTO public.report_wh_items (status, go_name, obj_name, code, fk_report_id, number) "
"VALUES ('%1', '%2', '%3', '%4', %5, %6) "
"RETURNING report_wh_items.wh_item_id").arg(
QString::number(reportWhItem.status),
reportWhItem.goName,
reportWhItem.objName,
reportWhItem.code,
QString::number(report_id),
QString::number(++number));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
}
queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " queryStr = QString("UPDATE public.tasks_fim SET status = '%1' "
"WHERE task_id = %2 ").arg( "WHERE task_id = %2 ").arg(
"checkup", "checkup",

View File

@@ -3,7 +3,6 @@
#include <QtSql> #include <QtSql>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver> #include <QSqlDriver>
#include <QMessageBox>
QList<Trainee> DataBaseLMS::selectAllTrainees() QList<Trainee> DataBaseLMS::selectAllTrainees()
@@ -84,6 +83,7 @@ QList<Trainee> DataBaseLMS::selectAllTrainees()
return QList<Trainee>(); return QList<Trainee>();
} }
resBool = db->commit();
return listTrainees; return listTrainees;
} }
@@ -261,6 +261,39 @@ int DataBaseLMS::deleteTrainee(int id_trainee)
//Удаление задач AMM //Удаление задач AMM
/*Выборка задач AMM для этого обучаемого*/
queryStr = QString("SELECT tasks_amm.task_id "
"FROM public.tasks_amm "
"WHERE tasks_amm.fk_trainee_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_trainee);
QSqlQuery queryTasksAMMSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryTasksAMMSEL))
{
while (queryTasksAMMSEL.next())
{//Задача
int task_id = queryTasksAMMSEL.value(0).toInt();
queryStr = QString("DELETE FROM public.subprocs "
"WHERE fk_task_amm_id = %1 ").arg(
QString::number(task_id));
QSqlQuery querySubProcDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &querySubProcDEL))
{
resBool = db->rollback();
return 0;
}
}
}
else
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.tasks_amm " queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE fk_trainee_id = %1 ").arg( "WHERE fk_trainee_id = %1 ").arg(
QString::number(id_trainee)); QString::number(id_trainee));
@@ -351,8 +384,19 @@ int DataBaseLMS::deleteTrainee(int id_trainee)
queryStr = QString("DELETE FROM public.report_items " queryStr = QString("DELETE FROM public.report_items "
"WHERE report_items.fk_report_id = %1 ").arg( "WHERE report_items.fk_report_id = %1 ").arg(
report_id); report_id);
QSqlQuery queryReportDEL = QSqlQuery(*db); QSqlQuery queryItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryReportDEL)) if(!queryExec(queryStr, &queryItemsDEL))
{
resBool = db->rollback();
return 0;
}
/*Удаление wh_items для этого отчета*/
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE report_wh_items.fk_report_id = %1 ").arg(
report_id);
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{ {
resBool = db->rollback(); resBool = db->rollback();
return 0; return 0;

View File

@@ -3,7 +3,7 @@
#include <QtSql> #include <QtSql>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver> #include <QSqlDriver>
#include <QMessageBox>
int DataBaseLMS::selectUserID(QString type, QString login, QString password) int DataBaseLMS::selectUserID(QString type, QString login, QString password)
{ {

View File

@@ -0,0 +1,14 @@
#include "hashtools.h"
#include <QCryptographicHash>
HashTools::HashTools()
{
}
QString HashTools::hashingMD5string(QString str)
{// Вычисление MD5 хэша строки
QByteArray md5Hash = QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Md5).toHex();
return QString(md5Hash);
}

View File

@@ -0,0 +1,15 @@
#ifndef HASHTOOLS_H
#define HASHTOOLS_H
#include <QString>
#include "DataBaseLMS_global.h"
class DATABASELMS_EXPORT HashTools
{
public:
HashTools();
public:
static QString hashingMD5string(QString str);
};
#endif // HASHTOOLS_H

View File

@@ -1,13 +1,11 @@
#include <QMessageBox>
#include <QCoreApplication> #include <QCoreApplication>
#include <QSqlError> #include <QSqlError>
#include <QDateTime> #include <QDateTime>
#include <QTime> #include <QTime>
#include "interfacedatabaselms.h" #include "interfacedatabaselms.h"
InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent): InterfaceDataBaseLMS::InterfaceDataBaseLMS(QObject *parent):
DataBaseLMS(ownerWidget, parent), DataBaseLMS(parent)
ownerWidget(ownerWidget)
{ {
} }
@@ -16,12 +14,10 @@ bool InterfaceDataBaseLMS::connectionToDB()
{ {
if(!createConnection()) if(!createConnection())
{ {
QMessageBox::critical(ownerWidget, dbSettings.dbName, tr("Connection error") /*+ db->lastError().text()*/);
return false; return false;
} }
else else
{ {
//QMessageBox::information(ownerWidget, dbName, tr("Connection is successful!"));
return true; return true;
} }
} }
@@ -29,7 +25,6 @@ bool InterfaceDataBaseLMS::connectionToDB()
bool InterfaceDataBaseLMS::disConnectionFromDB() bool InterfaceDataBaseLMS::disConnectionFromDB()
{ {
deleteConnection(); deleteConnection();
//QMessageBox::information(ownerWidget, dbName, tr("Disconnection is successful!"));
return true; return true;
} }
@@ -41,16 +36,32 @@ bool InterfaceDataBaseLMS::DBisConnected()
//Инструкторы //Инструкторы
bool InterfaceDataBaseLMS::authorizationInstructor(QString login, QString password) bool InterfaceDataBaseLMS::authorizationInstructor(QString login, QString password, ErrorAuth& error)
{ {
error = ErrorAuth::errNo;
if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login, password)) if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login, password))
{ {
if(selectUserArchived(DataBaseLMS::TypeUserDBInstructor, id) || selectUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id)) if(selectUserArchived(DataBaseLMS::TypeUserDBInstructor, id))
{
error = ErrorAuth::errArchived;
return false; return false;
}
if(selectUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id))
{
error = ErrorAuth::errAlreadyLogIn;
return false;
}
if(updateUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id, true)) if(updateUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id, true))
return true; return true;
else
error = ErrorAuth::errDB;
} }
else
error = ErrorAuth::errLoginOrPassword;
return false; return false;
} }
@@ -122,16 +133,32 @@ bool InterfaceDataBaseLMS::isLoggedInInstructor(int id)
//Инструкторы //Инструкторы
bool InterfaceDataBaseLMS::authorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name) bool InterfaceDataBaseLMS::authorizationTrainee(QString login, QString password, ErrorAuth& error, QString classroom_name, QString computer_name)
{ {
error = ErrorAuth::errNo;
if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login, password)) if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login, password))
{ {
if(selectUserArchived(DataBaseLMS::TypeUserDBTrainee, id) || selectUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id)) if(selectUserArchived(DataBaseLMS::TypeUserDBTrainee, id))
{
error = ErrorAuth::errArchived;
return false; return false;
}
if(selectUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id))
{
error = ErrorAuth::errAlreadyLogIn;
return false;
}
if(updateUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id, true)) if(updateUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id, true))
return true; return true;
else
error = ErrorAuth::errDB;
} }
else
error = ErrorAuth::errLoginOrPassword;
return false; return false;
} }

View File

@@ -11,7 +11,16 @@
class DATABASELMS_EXPORT InterfaceDataBaseLMS : public DataBaseLMS class DATABASELMS_EXPORT InterfaceDataBaseLMS : public DataBaseLMS
{ {
public: public:
InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr); enum ErrorAuth
{
errNo = 0,
errDB,
errLoginOrPassword,
errArchived,
errAlreadyLogIn
};
public:
InterfaceDataBaseLMS(QObject *parent = nullptr);
public: public:
//Соединение //Соединение
@@ -22,7 +31,7 @@ public:
//Инструкторы //Инструкторы
bool authorizationInstructor(QString login, QString password); bool authorizationInstructor(QString login, QString password, ErrorAuth& error);
bool deAuthorizationInstructor(QString login); bool deAuthorizationInstructor(QString login);
bool deAuthorizationAllInstructors(); bool deAuthorizationAllInstructors();
@@ -43,7 +52,7 @@ public:
//Обучаемые //Обучаемые
bool authorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name); bool authorizationTrainee(QString login, QString password, ErrorAuth& error, QString classroom_name, QString computer_name);
bool deAuthorizationTrainee(QString login); bool deAuthorizationTrainee(QString login);
bool deAuthorizationAllTrainees(); bool deAuthorizationAllTrainees();
@@ -96,9 +105,6 @@ public:
int replaceReportFIM(TaskAmmFim task); int replaceReportFIM(TaskAmmFim task);
int changeStatusTaskFIM(int id_task, QString status); int changeStatusTaskFIM(int id_task, QString status);
int changeStatusTaskAMM(int id_task, QString status); int changeStatusTaskAMM(int id_task, QString status);
private:
QWidget* ownerWidget;
}; };
#endif // INTERFACEDATABASELMS_H #endif // INTERFACEDATABASELMS_H

View File

@@ -0,0 +1,181 @@
#include "tasksAmmFim.h"
#include <QDomDocument>
#include <QFile>
int TaskAmmFim::lastID = 1;
void TaskAmmFim::initialize(int id, QString type, QString title, QString status, QString created_date, QString changed_date)
{
this->id = id;
this->type = type;
this->title = title;
this->status = status;
this->created_date = created_date;
this->changed_date = changed_date;
}
void TaskAmmFim::addMalfunction(Malfunction malfunction)
{
malfunctionList.append(malfunction);
}
QString TaskAmmFim::buildStatisticTasksAMM(QList<TaskAmmFim> listTasks)
{
int cntAll = 0;
int cntCompleted = 0;
for(TaskAmmFim task : listTasks)
{
cntAll++;
if(task.status == "completed")
cntCompleted++;
}
QString statHTML = QString("<p><span style=\"color: green;\">%1</span> / "
"<span style=\"color: black;\">%2</span></p>").arg(
QString::number(cntCompleted),
QString::number(cntAll));
return statHTML;
}
QString TaskAmmFim::buildStatisticTasksFIM(QList<TaskAmmFim> listTasks)
{
int cntAll = 0;
int cntCompleted = 0;
int cntCheckup = 0;
int cntFailed = 0;
for(TaskAmmFim task : listTasks)
{
cntAll++;
if(task.status == "completed")
cntCompleted++;
else if(task.status == "checkup")
cntCheckup++;
else if(task.status == "failed")
cntFailed++;
}
QString statHTML = QString("<p><span style=\"color: green;\">%1</span>/"
"<span style=\"color: red;\">%2</span>/"
"<span style=\"color: darkorange;\">%3</span> / "
"<span style=\"color: black;\">%4</span></p>").arg(
QString::number(cntCompleted),
QString::number(cntFailed),
QString::number(cntCheckup),
QString::number(cntAll));
return statHTML;
}
void Malfunction::initialize(QString dmCode, QString num, QString description, QString goName, QString objName)
{
this->dmCode = dmCode;
this->num = num;
this->description = description;
this->goName = goName;
this->objName = objName;
}
void Malfunction::addMalfunctionSign(MalfunctionSign sign)
{
malfunctionSigns.append(sign);
}
void MalfunctionSign::initialize(int type, QString description)
{
this->type = type;
this->description = description;
}
QString SubProc::getDmCode() const
{
return dmCode;
}
QString SubProc::getTitle() const
{
return title;
}
void SubProc::setDmCode(const QString &value)
{
dmCode = value;
}
void SubProc::setTitle(const QString &value)
{
title = value;
}
QString SubProc::getModeListStr() const
{
return modeListStr;
}
ModeList SubProc::getModeList() const
{
return modeList;
}
void SubProc::setModeList(const ModeList &value)
{
this->modeList = value;
this->modeListStr = buildCanplay(value);
}
void SubProc::setModeListStr(const QString &value)
{
this->modeListStr = value;
this->modeList = parseCanplay(value);
}
QString SubProc::buildCanplay(ModeList modeList)
{
QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-");
return canplay;
}
ModeList SubProc::parseCanplay(QString canplay)
{
ModeList modeList;
if(canplay == "")
{
modeList.demo = false;
modeList.train = false;
modeList.exam = false;
modeList.autoM = false;
}
else
{
QStringList list = canplay.split("/");
if(list.at(0) == "+")
modeList.demo = true;
else
modeList.demo = false;
if(list.at(1) == "+")
modeList.train = true;
else
modeList.train = false;
if(list.at(2) == "+")
modeList.exam = true;
else
modeList.exam = false;
if(list.at(3) == "+")
modeList.autoM = true;
else
modeList.autoM = false;
}
return modeList;
}

View File

@@ -5,6 +5,54 @@
#include <QList> #include <QList>
#include "DataBaseLMS_global.h" #include "DataBaseLMS_global.h"
struct ModeList
{
bool demo = false;
bool train = false;
bool exam = false;
bool autoM = false;
};
class DATABASELMS_EXPORT SubProc
{
public:
SubProc()
{
modeListStr = buildCanplay(modeList);
};
~SubProc(){};
public:
bool operator==(const SubProc& other) const
{
// Сравнение членов класса
return (this->dmCode == other.dmCode && this->title == other.title && this->modeListStr == other.modeListStr);
}
public:
void setModeList(const ModeList &modeList);
ModeList getModeList() const;
void setModeListStr(const QString &modeListStr);
QString getModeListStr() const;
void setDmCode(const QString &value);
QString getDmCode() const;
void setTitle(const QString &value);
QString getTitle() const;
public:
static QString buildCanplay(ModeList modeList);
static ModeList parseCanplay(QString canplay);
private:
QString dmCode = "";
QString title = "";
ModeList modeList;
QString modeListStr = "";
};
class DATABASELMS_EXPORT ProcedureID class DATABASELMS_EXPORT ProcedureID
{ {
public: public:
@@ -36,13 +84,15 @@ public:
Malfunction(){}; Malfunction(){};
~Malfunction(){}; ~Malfunction(){};
public: public:
void initialize(QString dmCode, QString num, QString description); void initialize(QString dmCode, QString num, QString description, QString goName, QString objName);
void addMalfunctionSign(MalfunctionSign sign); void addMalfunctionSign(MalfunctionSign sign);
public: public:
QString dmCode; // dmCode процедуры QString dmCode; // dmCode процедуры
QString num; // номер по-порядку в пункте "2. Возможные причины" процедуры QString num; // номер по-порядку в пункте "2. Возможные причины" процедуры
QString description; // описание QString description; // описание
QList<MalfunctionSign> malfunctionSigns;// список соответствующих неисправности признаков QList<MalfunctionSign> malfunctionSigns;// список соответствующих неисправности признаков
QString goName; // имя GameObject (со скриптом DismantleData) - неисправный прибор
QString objName;
}; };
class DATABASELMS_EXPORT FIMReportItem class DATABASELMS_EXPORT FIMReportItem
@@ -56,6 +106,23 @@ public:
ProcedureID procedure; // ссылка на процедуру, при необходимости ProcedureID procedure; // ссылка на процедуру, при необходимости
}; };
class DATABASELMS_EXPORT FIMReportWarehouseItem
{
public:
FIMReportWarehouseItem(){};
~FIMReportWarehouseItem(){};
public:
int id = 0; // для идентификации в БД
// статус GameObject-а в сцене
int status = 0; // 0 - демонтировано, 1 - неисправно, 2 - заменено на новое со склада
// имя GameObject-а в сцене
QString goName = "";
// человеческое название прибора
QString objName = "";
// его код из документации
QString code = "";
};
class DATABASELMS_EXPORT FIMReport class DATABASELMS_EXPORT FIMReport
{ {
public: public:
@@ -63,7 +130,9 @@ public:
~FIMReport(){}; ~FIMReport(){};
public: public:
int id = 0; // для идентификации в БД int id = 0; // для идентификации в БД
QList<FIMReportItem> itemList; QList<FIMReportItem> itemList; // список выполненных/просмотренных процедур
QList<FIMReportWarehouseItem> warehouseItemList;
bool mmel = false; // выпуск самолета по MMEL
}; };
class DATABASELMS_EXPORT TaskAmmFim class DATABASELMS_EXPORT TaskAmmFim
@@ -78,6 +147,10 @@ public:
public: public:
void setID(int id){this->id = id;}; void setID(int id){this->id = id;};
int getID(){return id;}; int getID(){return id;};
public:
static QString buildStatisticTasksAMM(QList<TaskAmmFim> listTasks);
static QString buildStatisticTasksFIM(QList<TaskAmmFim> listTasks);
public: public:
int id; // для идентификации в БД int id; // для идентификации в БД
@@ -105,6 +178,8 @@ public:
QList<Malfunction> malfunctionList; // список неисправностей QList<Malfunction> malfunctionList; // список неисправностей
FIMReport report; // отчет по выполнению "fim" FIMReport report; // отчет по выполнению "fim"
QList<SubProc> listSubProc;
static int lastID; static int lastID;
}; };

View File

@@ -5,6 +5,9 @@
enum TypeQueryToDB{ enum TypeQueryToDB{
TYPE_QUERY_GET_ALL_LISTS, TYPE_QUERY_GET_ALL_LISTS,
TYPE_QUERY_GET_ALL_INSTRUCTORS,
TYPE_QUERY_GET_ALL_TRAINEES,
TYPE_QUERY_GET_ALL_GROUPS,
TYPE_QUERY_NEW_INSTRUCTOR, TYPE_QUERY_NEW_INSTRUCTOR,
TYPE_QUERY_DEL_INSTRUCTOR, TYPE_QUERY_DEL_INSTRUCTOR,
TYPE_QUERY_EDIT_INSTRUCTOR, TYPE_QUERY_EDIT_INSTRUCTOR,

View File

@@ -1,4 +1,6 @@
#include "user.h" #include "user.h"
#include "hashtools.h"
#include <QCryptographicHash>
const QString User::TypeUserDBInstructor = "instructor"; const QString User::TypeUserDBInstructor = "instructor";
const QString User::TypeUserDBTrainee = "trainee"; const QString User::TypeUserDBTrainee = "trainee";
@@ -10,7 +12,14 @@ User::User():
archived(), archived(),
loggedIn(), loggedIn(),
TypeUserDB(), TypeUserDB(),
isAdmin(false) isAdmin(false),
needSetPassword(false)
{ {
} }
void User::hashingPassword()
{
// Вычисление MD5 хэша
password = HashTools::hashingMD5string(password);
}

View File

@@ -25,6 +25,11 @@ public:
QString getTypeUserDB(){return TypeUserDB;} QString getTypeUserDB(){return TypeUserDB;}
bool getNeedSetPassword(){return this->needSetPassword;}
void setNeedSetPassword(bool needSetPassword){this->needSetPassword = needSetPassword;}
void hashingPassword();
private: private:
QString login; QString login;
QString password; QString password;
@@ -34,6 +39,7 @@ protected:
QString TypeUserDB; QString TypeUserDB;
bool isAdmin; bool isAdmin;
bool needSetPassword;
}; };
#endif // USER_H #endif // USER_H

View File

@@ -11,16 +11,26 @@ add_library(InstructorsAndTrainees SHARED
instructorsandtraineeswidget.h instructorsandtraineeswidget.h
instructorsandtraineeswidget.ui instructorsandtraineeswidget.ui
dialogsettings.cpp
dialogsettings.h
dialogsettings.ui
commonview.cpp commonview.cpp
commonview.h commonview.h
specialmessagebox.cpp settings/dialogsettings.cpp
specialmessagebox.h settings/dialogsettings.h
specialmessagebox.ui settings/dialogsettings.ui
settings/dialognewversion.cpp
settings/dialognewversion.h
settings/dialognewversion.ui
settings/dialogversioncontrol.cpp
settings/dialogversioncontrol.h
settings/dialogversioncontrol.ui
specialmessagebox/specialmessagebox.cpp
specialmessagebox/specialmessagebox.h
specialmessagebox/specialmessagebox.ui
authorization/dialogauthorization.cpp
authorization/dialogauthorization.h
authorization/dialogauthorization.ui
trainees/editortrainees.cpp trainees/editortrainees.cpp
trainees/editortrainees.h trainees/editortrainees.h
@@ -55,9 +65,6 @@ add_library(InstructorsAndTrainees SHARED
instructors/dialogeditinstructor.cpp instructors/dialogeditinstructor.cpp
instructors/dialogeditinstructor.h instructors/dialogeditinstructor.h
instructors/dialogeditinstructor.ui instructors/dialogeditinstructor.ui
instructors/dialogauthorizationinstructor.cpp
instructors/dialogauthorizationinstructor.h
instructors/dialogauthorizationinstructor.ui
instructors/instructorsview.cpp instructors/instructorsview.cpp
instructors/instructorsview.h instructors/instructorsview.h
instructors/dialogredactorinstructors.cpp instructors/dialogredactorinstructors.cpp
@@ -65,6 +72,9 @@ add_library(InstructorsAndTrainees SHARED
connectorToServer/connectortoserver.cpp connectorToServer/connectortoserver.cpp
connectorToServer/connectortoserver.h connectorToServer/connectortoserver.h
connectorToServer/connectortoserver_LocalModelDB.cpp
connectorToServer/connectortoserver_AnswerQueryToDB.cpp
connectorToServer/connectortoserver_Send.cpp
connectorToServer/Core/sendsystem.cpp connectorToServer/Core/sendsystem.cpp
connectorToServer/Core/sendsystem.h connectorToServer/Core/sendsystem.h
connectorToServer/Core/dataparser.cpp connectorToServer/Core/dataparser.cpp
@@ -76,8 +86,6 @@ add_library(InstructorsAndTrainees SHARED
connectorToServer/Core/tools.cpp connectorToServer/Core/tools.cpp
connectorToServer/Core/tools.h connectorToServer/Core/tools.h
connectorToServer/Core/FileData.h connectorToServer/Core/FileData.h
connectorToServer/Core/notifycontroller.cpp
connectorToServer/Core/notifycontroller.h
connectorToServer/Core/versioncontainer.cpp connectorToServer/Core/versioncontainer.cpp
connectorToServer/Core/versioncontainer.h connectorToServer/Core/versioncontainer.h
connectorToServer/Datas.h connectorToServer/Datas.h
@@ -110,17 +118,43 @@ add_library(InstructorsAndTrainees SHARED
tasks/dialogchekertask.cpp tasks/dialogchekertask.cpp
tasks/dialogchekertask.h tasks/dialogchekertask.h
widgets/newversionwidget.cpp tasks/dialogtaskscommon.cpp
widgets/newversionwidget.h tasks/dialogtaskscommon.h
widgets/newversionwidget.ui
widgets/versionselectwidget.cpp tasks/viewertaskscommon.cpp
widgets/versionselectwidget.h tasks/viewertaskscommon.h
widgets/versionselectwidget.ui tasks/viewertaskscommon.ui
tasks/dialoglistsubproc.cpp
tasks/dialoglistsubproc.h
tasks/listsubproc.cpp
tasks/listsubproc.h
tasks/listsubproc.ui
tasks/subprocitemwidget.cpp
tasks/subprocitemwidget.h
tasks/subprocitemwidget.ui
tasks/reportfimwidget.cpp
tasks/reportfimwidget.h
tasks/reportfimwidget.ui
tasks/actionwidget.cpp
tasks/actionwidget.h
tasks/actionwidget.ui
tasks/devicewidget.cpp
tasks/devicewidget.h
tasks/devicewidget.ui
widgets/waitanimationwidget.cpp widgets/waitanimationwidget.cpp
widgets/waitanimationwidget.h widgets/waitanimationwidget.h
widgets/waitanimationwidget.ui widgets/waitanimationwidget.ui
widgets/widgettools.cpp
widgets/widgettools.h
resources.qrc InstructorsAndTrainees.qrc
) )
target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Widgets) target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Widgets)
@@ -128,36 +162,50 @@ target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Sql)
target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Xml) target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Xml)
target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Network) target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Network)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/authorization)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/instructors) target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/instructors)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/trainees) target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/trainees)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tasks) target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tasks)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/docTasks)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/connectorToServer) target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/connectorToServer)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/connectorToServer/Core) target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/connectorToServer/Core)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/messanger) target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/messanger)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/settings)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/specialmessagebox)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/widgets)
target_compile_definitions(InstructorsAndTrainees PRIVATE INSTRUCTORSANDTRAINEES_LIBRARY) target_compile_definitions(InstructorsAndTrainees PRIVATE INSTRUCTORSANDTRAINEES_LIBRARY)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../DataBaseLMS) target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../LibDataBaseInterface)
if(PROJECT_TYPE_DEBUG) if(PROJECT_TYPE_DEBUG)
target_link_directories(InstructorsAndTrainees PUBLIC ${REPO_PATH}/BUILDS/Debug64/DataBaseLMS) target_link_directories(InstructorsAndTrainees PUBLIC ${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface)
else() else()
target_link_directories(InstructorsAndTrainees PUBLIC ${REPO_PATH}/BUILDS/Release64/DataBaseLMS) target_link_directories(InstructorsAndTrainees PUBLIC ${REPO_PATH}/BUILDS/Release64/LibDataBaseInterface)
endif() endif()
target_link_libraries(InstructorsAndTrainees PRIVATE libDataBaseLMS.dll) target_link_libraries(InstructorsAndTrainees PRIVATE libDataBaseInterface.dll)
if(PROJECT_TYPE_DEBUG) if(PROJECT_TYPE_DEBUG)
add_custom_command(TARGET InstructorsAndTrainees add_custom_command(TARGET InstructorsAndTrainees
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/InstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Debug64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Debug64/GUIdataBaseLMS) ${REPO_PATH}/BUILDS/Debug64/ProgramAWSinstructorMTD)
add_custom_command(TARGET InstructorsAndTrainees
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Debug64/ProgramServerMTD)
else() else()
add_custom_command(TARGET InstructorsAndTrainees add_custom_command(TARGET InstructorsAndTrainees
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/InstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Release64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Release64/GUIdataBaseLMS) ${REPO_PATH}/BUILDS/Release64/ProgramAWSinstructorMTD)
add_custom_command(TARGET InstructorsAndTrainees
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Release64/ProgramServerMTD)
endif() endif()
#Только для TSMP! #Только для TSMP!

View File

@@ -4,9 +4,6 @@
<file>resources/icons/addTrainee.png</file> <file>resources/icons/addTrainee.png</file>
<file>resources/icons/admin.png</file> <file>resources/icons/admin.png</file>
<file>resources/icons/archive.png</file> <file>resources/icons/archive.png</file>
<file>resources/icons/branch-closed.png</file>
<file>resources/icons/branch-end.png</file>
<file>resources/icons/branch-more.png</file>
<file>resources/icons/branch-open.png</file> <file>resources/icons/branch-open.png</file>
<file>resources/icons/chekNo.png</file> <file>resources/icons/chekNo.png</file>
<file>resources/icons/chekYes.png</file> <file>resources/icons/chekYes.png</file>
@@ -18,7 +15,6 @@
<file>resources/icons/deleteGroup.png</file> <file>resources/icons/deleteGroup.png</file>
<file>resources/icons/deleteInstructor.png</file> <file>resources/icons/deleteInstructor.png</file>
<file>resources/icons/deleteTrainee.png</file> <file>resources/icons/deleteTrainee.png</file>
<file>resources/icons/docTasks.png</file>
<file>resources/icons/edit.png</file> <file>resources/icons/edit.png</file>
<file>resources/icons/group.png</file> <file>resources/icons/group.png</file>
<file>resources/icons/instructor.png</file> <file>resources/icons/instructor.png</file>
@@ -33,7 +29,6 @@
<file>resources/icons/trainee.png</file> <file>resources/icons/trainee.png</file>
<file>resources/icons/traineeArchive.png</file> <file>resources/icons/traineeArchive.png</file>
<file>resources/icons/traineeFromArchive.png</file> <file>resources/icons/traineeFromArchive.png</file>
<file>resources/icons/vline.png</file>
<file>resources/icons/sign.png</file> <file>resources/icons/sign.png</file>
<file>resources/icons/procedure.png</file> <file>resources/icons/procedure.png</file>
<file>resources/icons/malfunction.png</file> <file>resources/icons/malfunction.png</file>
@@ -47,10 +42,16 @@
<file>resources/icons/settings.png</file> <file>resources/icons/settings.png</file>
<file>resources/icons/style.png</file> <file>resources/icons/style.png</file>
<file>resources/icons/updateVersion.png</file> <file>resources/icons/updateVersion.png</file>
<file>resources/icons/editorDB.png</file>
<file>resources/icons/lms.png</file> <file>resources/icons/lms.png</file>
<file>resources/icons/critical.png</file> <file>resources/icons/critical.png</file>
<file>resources/icons/warning.png</file> <file>resources/icons/warning.png</file>
<file>resources/icons/info.png</file> <file>resources/icons/info.png</file>
<file>resources/icons/personalCard.png</file>
<file>resources/icons/eye.png</file>
<file>resources/icons/exchange.png</file>
<file>resources/icons/new.png</file>
<file>resources/icons/branch-closed.png</file>
<file>resources/icons/save.png</file>
<file>resources/icons/lock.png</file>
</qresource> </qresource>
</RCC> </RCC>

Some files were not shown because too many files have changed in this diff Show More