114 Commits
master ... 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
424 changed files with 8654 additions and 7707 deletions

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.5)
message("Using CMake ${CMAKE_VERSION}\n")
project(MPS LANGUAGES CXX)
project(MTD LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
@@ -21,7 +21,7 @@ endif()
include(cmake/CommonInfoForProject.cmake)
common_info_for_project(MPS)
common_info_for_project(MTD)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt5 COMPONENTS Network REQUIRED)
@@ -33,11 +33,11 @@ find_package(Qt5 COMPONENTS Concurrent REQUIRED)
add_subdirectory(LibDataBaseInterface)
add_subdirectory(LibInstructorsAndTrainees)
add_subdirectory(LibServer)
add_subdirectory(ProgramAWSinstructorMPS)
add_subdirectory(ProgramServerMPS)
add_subdirectory(ProgramAWSinstructorMTD)
add_subdirectory(ProgramServerMTD)
add_dependencies(InstructorsAndTrainees DataBaseInterface)
add_dependencies(Server DataBaseInterface)
add_dependencies(Server InstructorsAndTrainees)
add_dependencies(ProgramAWSinstructorMPS InstructorsAndTrainees)
add_dependencies(ProgramServerMPS Server)
add_dependencies(AWSinstructorMTD InstructorsAndTrainees)
add_dependencies(ServerMTD Server)

View File

@@ -74,14 +74,8 @@ UnityClient
ServerLMS ^EJX4eIpX
Mainthread:
*serverLMS
*dataParser
*MultiThreadServer
*processingSystem
*commonClientHandler
*chatSystem
*processParser
*docsUpdater ^ite9vjus
*ServerLMSWidget
^ite9vjus
ClientHandler: Thread
@@ -96,7 +90,7 @@ UpdateThread:
*updateController
*assetsManager
*docsUpdater
*cfiController
^ZvWgIkFz
Client QT ^sWMT4y6l
@@ -315,587 +309,602 @@ SEND DOCS ^iM67vAqM
потому что по умолчанию он больше не пересылается ^WR3pLokt
ServerThread:
*providerDBLMS
*dataParser
*MultiThreadServer
*processingSystem
*commonClientHandler
*chatSystem
*processParser ^UjfEZdiN
%%
## Drawing
```compressed-json
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
MRStBAAA
```
%%

View File

@@ -8,16 +8,18 @@ kanban-plugin: board
- [ ] проверить работоспособность без Qt - не работает
- [ ] 23 -> связное оборудование -> общая часть
- [ ] Добавить экран первой настройки
## bugs
- [ ] QT клиент, если сервер занят повторно не появляется окно авторизации
- [ ] 16.27 от 22.12
- [ ] Unity: ошибка при проигрывании - нажать на среднюю кнопку мыши
## feature client Unity
- [ ] добавить пресеты для камер
- [ ] Запросить картинки объектов для топливной системы
## feature client QT
@@ -26,6 +28,8 @@ kanban-plugin: board
## feature server
- [ ] добавить чекбокс на изменяемый или нет в во всех версиях кроме базовой
- [ ] Попробовать изменить версию base на "Базовая"
## NOW
@@ -34,6 +38,26 @@ kanban-plugin: board
## 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 путь не закрашивается обратно
- [ ] добавить сохранение предыдущей загруженнной версии

View File

@@ -41,5 +41,29 @@
7. Unity: отправка в базовую версию
Сервер:
1. Выключение сервера -> рассылка все клиентам DISABLE. Клиенты должны отключится от сети
2.
1. Загрузка контента с нуля и логин 2х машин под QT
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

@@ -8,10 +8,15 @@ kanban-plugin: board
- [ ] GUI: Сделать кнопку перезапроса общих списков FIM (по аналогии с АММ)
- [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура
- [ ] выгрузка назначенных задач с оценками в эксель таблицу или любой другой человекочитаемый вид
- [ ] Текстовый поиск в задачах
## Completed
- [ ] Не влазиют слишком большие сообщения
- [ ] FIM процедура добавить кнопку сделать новой
- [ ] Не видно новых пришедших сообщений, если выбран другой Юзер
- [ ] При смене УЗ в ГУИ остается история переписки в мессенджере. При этом Имя инструктора в диалоге подменяется. (Путается только в ГУИ!)
[Возможно, поможет переинициализация мессенджера при переавторизации инструктора?]
- [ ] Отображать текущую версию data в статус баре
@@ -55,6 +60,7 @@ kanban-plugin: board
- [ ] Учет ширины скрола на деревьях (появляется если дерево больше окна)
- [ ] Универсальный пересчет ширин колонок деревьев
- [ ] При обновлении деревьев слетает назначенная колонка сортировки
- [ ] В сообщение о неудачном подключении к PostgreSQL добавить: PSQL не установлен
## Server
@@ -63,17 +69,16 @@ kanban-plugin: board
(Так как сейчас может вызвать проблемы при смене логина юзера!!!)
- [ ] Зарефакторить databaselms_PostgreSQL.cpp
(возможно, нужно использовать транзакции при восстановлении БД!)
- [ ] Сделать поиск в процедурах по названию для удобного поиска задач для назначения
## GUI Messenger
- [ ] Не влазиют слишком большие сообщения
- [ ] Не видно новых пришедших сообщений, если выбран другой Юзер
## GUI общие
- [ ] Текстовый поиск в задачах
- [ ] Общий список АММ. автопролистывание вниз, если раскрывается дерево внизу

View File

@@ -11,3 +11,15 @@ RecognizeSystem - система распознавания типа пакет
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

@@ -9,19 +9,20 @@ 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;
}
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;
@@ -42,34 +43,43 @@ QGroupBox {
background: #E0E0E0;
border: 1px solid gray;
border-radius: 3px;
margin-top: 5ex; /* leave space at the top for the title */
margin-top: 26px;
font-size: 13pt;
}
QGroupBox#groupBox_Report {
background: #FFFFFF;
}
QGroupBox::title {
border: 1px solid gray;
border-bottom: none;
border-radius: 4px;
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 #A0CECE, stop: 1 #FFFFFF);
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: 2px solid #8f8f91;
border-style: outset;
border: 3px outset /*#2d5585*/gray;
/*border: 3px 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);
background-color: #5d85B5;
min-width: 75px;
height: 55px;
padding: 1px;
padding: 1px;
qproperty-iconSize: 32px;
color: white;
}
QToolButton::icon {
background-color: white;
}
QPushButton {
@@ -81,15 +91,15 @@ QToolButton {
height: 55px;
}
QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive,
QToolButton#btnSave, QToolButton#btnUpdateStyle, QToolButton#btnSetVersion,
QToolButton#btnAssignTask, QToolButton#btnCheckDB, QToolButton#btnRepare, QToolButton#btnDocsUpdating,
QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive, QToolButton#btnStatus,
QToolButton#btnDocsUpdating,
QToolButton#btnAssignTask,
QToolButton#btnAssign {
width: 100px;
height: 55px;
}
QToolButton#btnCheckDB, QToolButton#btnUpdateDocs {
width: 100px;
QToolButton#btnCheckDB, QToolButton#btnUpdateDocs, QToolButton#btnRepare, QToolButton#btnSave, QToolButton#btnUpdateStyle, QToolButton#btnSetVersion {
width: 150px;
height: 55px;
}
@@ -99,36 +109,32 @@ QToolButton#btnViewPassword, QToolButton#btnChangePassword {
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: darkblue; /*make the default button prominent */
border-color: #2d5585;
}
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);
background-color: #9dc5f5;
}
QPushButton:pressed, QToolButton:pressed {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);
background-color: #8db5e5;
border-style: inset;
}
QPushButton:checked, QToolButton:checked {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);
background-color: #8db5e5;
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 {
@@ -137,7 +143,6 @@ QCheckBox {
QCheckBox#checkAutoStart, QCheckBox#checkLocalhost {
spacing: 0px;
}
QCheckBox::indicator:checked {
width: 24px;
height: 24px;
@@ -154,46 +159,47 @@ QTreeWidget {
font-size: 13pt;
font-family: Tahoma;
icon-size: 32px;
border-radius: 4px;
border: 2px solid white;
}
QTreeWidget::item {
height: 34px;
height: 34px;
}
/*Бранчи*/
QTreeWidget::branch:has-siblings:!adjoins-item {
border-image: url(:/resources/icons/vline.png) 0;
/*border-image: url(:/resources/icons/vline.png) 0; */
}
QTreeWidget::branch:has-siblings:adjoins-item {
border-image: url(:/resources/icons/branch-more.png) 0;
/*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;
/*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;
/*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;
/*border-image: none;*/
image: url(:/resources/icons/branch-open.png);
}
QTreeWidget::item:hover,
QTreeWidget::branch:hover {
background: #aee1ff;
background: #C0EEEE;
background: #EEEEEE;
/*border: 1px solid #6c6c6c;*/
/*border-radius: 3px;*/
}
QTreeWidget::item:selected {
/*background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);*/
background: #6ea1f1;
background: #A0CECE;
background: #9dc5f5;
color: #000000;
}
QTreeWidget::indicator:checked {
width: 24px;
height: 24px;
@@ -207,33 +213,23 @@ QTreeWidget::indicator:!checked {
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;
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;
/*background-image: url(:/resources/icons/messengerPrint.png);*/
border: 1px solid #C2C7CB;
}
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;
*/
border: 1px solid #C2C7CB;
}
QTabWidget::tab-bar {
left: 0px; /* move to the right by 0px */
@@ -243,41 +239,37 @@ 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;
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-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: 10px; /* make non-selected tabs look smaller */
/*background: #ffffff;*/
border-style: inset;
background: #bbbbbb;
}
QTabBar::tab:hover {
background: #aee1ff;
background: #C0EEEE;
background: #EEEEEE;
background-color: #9dc5f5;
background: #8db5e5;
}
QTabBar::scroller { /* the width of the scroll buttons */
@@ -291,70 +283,79 @@ QTabBar QToolButton { /* the scroll buttons are tool buttons */
}
QListWidget::item {
/*padding: -5px;*/
}
QListWidget#oneDialogMessenger {
/*background: #ddeeff;*/
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF);
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: #ddeeff;
height: 65px;
background: #ffffff;
}
QTextEdit#MsgWidgetEditTextLocal {
/*background: tlightgreen;*/
background: #ddffdd;
background: #EEEEEE;
border-radius: 8px;
}
QTextEdit#MsgWidgetEditTextRemote {
/*background: lightblue;*/
/*background: #ddeeff;*/
background: #ffffff;
background: #9dc5f5;
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;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF);
border-radius: 4px;
background: #9dc5f5;
}
QLabel#MessangerWidgetLblAvatar {
@@ -363,22 +364,80 @@ 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;
}
QWidget#widgetControl {
background: #E0E0E0;
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 {
/*background: #ffffff;
border-radius: 5px;*/
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

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

Binary file not shown.

View File

@@ -5,7 +5,8 @@ common_info_for_project(DataBaseInterface)
add_library(DataBaseInterface SHARED
DataBaseLMS_global.h
databaselms.cpp
databaselms_tasks.cpp
databaselms_tasks_amm.cpp
databaselms_tasks_fim.cpp
databaselms_groups.cpp
databaselms_users.cpp
databaselms_instructors.cpp
@@ -51,26 +52,26 @@ if(PROJECT_TYPE_DEBUG)
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Debug64/ProgramServerMPS)
${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/ProgramAWSinstructorMPS)
${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/ProgramServerMPS)
${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/ProgramAWSinstructorMPS)
${REPO_PATH}/BUILDS/Release64/ProgramAWSinstructorMTD)
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

@@ -9,12 +9,12 @@
const QString DataBaseLMS::TypeUserDBInstructor = "instructor";
const QString DataBaseLMS::TypeUserDBTrainee = "trainee";
DataBaseLMS::DataBaseLMS(QWidget *ownerWidget, QObject *parent):
QString DataBaseLMS::UserNamePostgres = "";
QString DataBaseLMS::PasswordPostgres = "";
DataBaseLMS::DataBaseLMS(QObject *parent):
QObject(parent),
db(nullptr),
UserNamePostgres(""),
PasswordPostgres(""),
ownerWidget(ownerWidget)
db(nullptr)
{
}
@@ -24,12 +24,6 @@ DataBaseLMS::~DataBaseLMS()
deleteConnection();
}
void DataBaseLMS::slot_LanguageChanged(QString language)
{
qtLanguageTranslator.load(QString(QStringLiteral("translations/DataBaseLMS_")) + language, QStringLiteral("."));
QCoreApplication::installTranslator(&qtLanguageTranslator);
}
bool DataBaseLMS::createConnection()
{
dbSettings = getDataBaseSettings();

View File

@@ -4,7 +4,6 @@
#include <QSqlDatabase>
#include <QMutex>
#include <QWidget>
#include <QTranslator>
#include "instructor.h"
#include "trainee.h"
@@ -12,8 +11,8 @@
#include "tasksAmmFim.h"
#include "timingoftrainee.h"
static const QString backupEmptyName = ".\\restoreDB\\DBLMS_EMPTY.backup";
static const QString restoreDBscriptName = "restoreDBscript.bat";
static const QString backupEmptyName = ".\\DBLMS_EMPTY.backup";
static const QString restoreDBscriptName = ".\\restoreDB\\restoreDBscript.bat";
class DATABASELMS_EXPORT DataBaseSettings
{
@@ -32,23 +31,23 @@ class DATABASELMS_EXPORT DataBaseLMS : public QObject
Q_OBJECT
public:
DataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr);
DataBaseLMS(QObject *parent = nullptr);
~DataBaseLMS();
public Q_SLOTS:
void slot_LanguageChanged(QString language);
signals:
void signal_ErrorPostgreSQL(QString text);
public:
static const QString TypeUserDBInstructor;
static const QString TypeUserDBTrainee;
protected:
static QString UserNamePostgres;
static QString PasswordPostgres;
public:
//PostgreSQL
bool setUserPasswordPostgres(QString userName, QString password);
bool checkDriverQPSQLavailable();
static bool checkDriverQPSQLavailable();
static bool setUserPasswordPostgres(QString userName, QString password);
bool checkUserLMSexist();
bool checkDataBaseLMSexist();
bool createUser();
@@ -122,7 +121,7 @@ protected:
int updateReportFIMforTask(TaskAmmFim task);
public:
DataBaseSettings getDataBaseSettings();
static DataBaseSettings getDataBaseSettings();
private:
int queryExecInt(QString queryStr);
QString queryExecString(QString queryStr);
@@ -133,14 +132,6 @@ private:
protected:
QSqlDatabase* db;
DataBaseSettings dbSettings;
QString UserNamePostgres;
QString PasswordPostgres;
QTranslator qtLanguageTranslator;
private:
QWidget* ownerWidget;
};
#endif // DATABASELMS_H

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

@@ -4,316 +4,6 @@
#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;
}
int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee)
{
QString queryStr;
@@ -340,12 +30,14 @@ int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee)
{
malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, fk_task_fim_id) "
"VALUES ('%1', '%2', '%3', %4) "
queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, go_name, obj_name, fk_task_fim_id) "
"VALUES ('%1', '%2', '%3', '%4', '%5', %6) "
"RETURNING malfunctions.malfunction_id").arg(
malfanction.num,
malfanction.dmCode,
malfanction.description,
malfanction.goName,
malfanction.objName,
QString::number(task_id));
int malfunction_id = queryExecInt(queryStr);
@@ -435,6 +127,65 @@ int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status)
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();
return id_trainee;
}
@@ -553,6 +304,17 @@ int DataBaseLMS::deleteTaskFIM(int id_task)
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));
@@ -609,7 +371,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
task.status = query.value(2).toString();
//Выгребаем все 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 "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 "
@@ -629,6 +391,8 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).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 "
@@ -667,7 +431,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
//Выгребаем отчет для этой задачи
int report_id = 0;
queryStr = QString("SELECT reports.report_id "
queryStr = QString("SELECT reports.report_id, reports.mmel "
"FROM public.reports "
"WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
@@ -681,6 +445,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
{//Отчет
report_id = queryReport.value(0).toInt();
task.report.id = report_id;
task.report.mmel = queryReport.value(1).toBool();
}
}
else
@@ -723,6 +488,36 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
resBool = db->rollback();
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);
@@ -765,7 +560,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
task.status = query.value(2).toString();
//Выгребаем все 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 "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 "
@@ -785,6 +580,8 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).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 "
@@ -823,7 +620,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
//Выгребаем отчет для этой задачи
int report_id = 0;
queryStr = QString("SELECT reports.report_id "
queryStr = QString("SELECT reports.report_id, reports.mmel "
"FROM public.reports "
"WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
@@ -837,6 +634,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
{//Отчет
report_id = queryReport.value(0).toInt();
task.report.id = report_id;
task.report.mmel = queryReport.value(1).toBool();
}
}
else
@@ -879,6 +677,36 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
resBool = db->rollback();
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();
}
}
};
}
@@ -924,10 +752,11 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
if(!report_id)
{
queryStr = QString("INSERT INTO public.reports (fk_task_fim_id) "
"VALUES (%1) "
queryStr = QString("INSERT INTO public.reports (fk_task_fim_id, mmel) "
"VALUES (%1, %2) "
"RETURNING reports.report_id").arg(
task.getID());
QString::number(task.getID()),
(task.report.mmel ? "true" : "false"));
report_id = queryExecInt(queryStr);
if(!report_id)
@@ -948,6 +777,17 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
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;
}
}
int number = 0;
@@ -971,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' "
"WHERE task_id = %2 ").arg(
"checkup",

View File

@@ -384,8 +384,19 @@ int DataBaseLMS::deleteTrainee(int id_trainee)
queryStr = QString("DELETE FROM public.report_items "
"WHERE report_items.fk_report_id = %1 ").arg(
report_id);
QSqlQuery queryReportDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryReportDEL))
QSqlQuery queryItemsDEL = QSqlQuery(*db);
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();
return 0;

View File

@@ -4,9 +4,8 @@
#include <QTime>
#include "interfacedatabaselms.h"
InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent):
DataBaseLMS(ownerWidget, parent),
ownerWidget(ownerWidget)
InterfaceDataBaseLMS::InterfaceDataBaseLMS(QObject *parent):
DataBaseLMS(parent)
{
}

View File

@@ -20,7 +20,7 @@ public:
errAlreadyLogIn
};
public:
InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr);
InterfaceDataBaseLMS(QObject *parent = nullptr);
public:
//Соединение
@@ -105,9 +105,6 @@ public:
int replaceReportFIM(TaskAmmFim task);
int changeStatusTaskFIM(int id_task, QString status);
int changeStatusTaskAMM(int id_task, QString status);
private:
QWidget* ownerWidget;
};
#endif // INTERFACEDATABASELMS_H

View File

@@ -20,11 +20,65 @@ void TaskAmmFim::addMalfunction(Malfunction malfunction)
malfunctionList.append(malfunction);
}
void Malfunction::initialize(QString dmCode, QString num, QString description)
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)

View File

@@ -84,13 +84,15 @@ public:
Malfunction(){};
~Malfunction(){};
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);
public:
QString dmCode; // dmCode процедуры
QString num; // номер по-порядку в пункте "2. Возможные причины" процедуры
QString description; // описание
QList<MalfunctionSign> malfunctionSigns;// список соответствующих неисправности признаков
QString goName; // имя GameObject (со скриптом DismantleData) - неисправный прибор
QString objName;
};
class DATABASELMS_EXPORT FIMReportItem
@@ -104,6 +106,23 @@ public:
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
{
public:
@@ -111,7 +130,9 @@ public:
~FIMReport(){};
public:
int id = 0; // для идентификации в БД
QList<FIMReportItem> itemList;
QList<FIMReportItem> itemList; // список выполненных/просмотренных процедур
QList<FIMReportWarehouseItem> warehouseItemList;
bool mmel = false; // выпуск самолета по MMEL
};
class DATABASELMS_EXPORT TaskAmmFim
@@ -126,6 +147,10 @@ public:
public:
void setID(int id){this->id = id;};
int getID(){return id;};
public:
static QString buildStatisticTasksAMM(QList<TaskAmmFim> listTasks);
static QString buildStatisticTasksFIM(QList<TaskAmmFim> listTasks);
public:
int id; // для идентификации в БД

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
</TS>

View File

@@ -5,6 +5,9 @@
enum TypeQueryToDB{
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_DEL_INSTRUCTOR,
TYPE_QUERY_EDIT_INSTRUCTOR,

View File

@@ -136,6 +136,18 @@ add_library(InstructorsAndTrainees SHARED
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.h
widgets/waitanimationwidget.ui
@@ -176,24 +188,24 @@ if(PROJECT_TYPE_DEBUG)
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Debug64/ProgramAWSinstructorMPS)
${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/ProgramServerMPS)
${REPO_PATH}/BUILDS/Debug64/ProgramServerMTD)
else()
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/ProgramAWSinstructorMPS)
${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/ProgramServerMPS)
${REPO_PATH}/BUILDS/Release64/ProgramServerMTD)
endif()
#Только для TSMP!

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

@@ -4,9 +4,6 @@
<file>resources/icons/addTrainee.png</file>
<file>resources/icons/admin.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/chekNo.png</file>
<file>resources/icons/chekYes.png</file>
@@ -18,7 +15,6 @@
<file>resources/icons/deleteGroup.png</file>
<file>resources/icons/deleteInstructor.png</file>
<file>resources/icons/deleteTrainee.png</file>
<file>resources/icons/docTasks.png</file>
<file>resources/icons/edit.png</file>
<file>resources/icons/group.png</file>
<file>resources/icons/instructor.png</file>
@@ -33,7 +29,6 @@
<file>resources/icons/trainee.png</file>
<file>resources/icons/traineeArchive.png</file>
<file>resources/icons/traineeFromArchive.png</file>
<file>resources/icons/vline.png</file>
<file>resources/icons/sign.png</file>
<file>resources/icons/procedure.png</file>
<file>resources/icons/malfunction.png</file>
@@ -47,7 +42,6 @@
<file>resources/icons/settings.png</file>
<file>resources/icons/style.png</file>
<file>resources/icons/updateVersion.png</file>
<file>resources/icons/editorDB.png</file>
<file>resources/icons/lms.png</file>
<file>resources/icons/critical.png</file>
<file>resources/icons/warning.png</file>
@@ -55,6 +49,9 @@
<file>resources/icons/personalCard.png</file>
<file>resources/icons/eye.png</file>
<file>resources/icons/exchange.png</file>
<file>resources/icons/link.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>
</RCC>

View File

@@ -26,6 +26,11 @@ CommonView::CommonView(ConnectorToServer* connectorToServer, TypeView type, QWid
treeWidget->setSortingEnabled(false);
treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->verticalScrollBar()->setSingleStep(10);
treeWidget->setHorizontalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->horizontalScrollBar()->setSingleStep(10);
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->initialize(movie,this);
@@ -39,7 +44,8 @@ CommonView::~CommonView()
void CommonView::setItemColorArchive(QTreeWidgetItem *item)
{
setItemColor(item,QColor(240, 240, 240));
//setItemColor(item,QColor(240, 240, 240));
//setItemColor(item,QColor(250, 200, 150));
}
void CommonView::setItemColorNoArchive(QTreeWidgetItem *item)
@@ -70,7 +76,7 @@ int CommonView::calculateWidth_0Column()
widthRightColumns += w;
}
}
width0Column = widthHeader - widthRightColumns - widthSB;
width0Column = widthHeader - widthRightColumns - widthSB - 20;
return width0Column;
}
@@ -81,8 +87,6 @@ void CommonView::setWidthColumnsTree()
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Name, 100);
listWidthColumn.append(100);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Login, 100);
listWidthColumn.append(100);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Password, 100);
listWidthColumn.append(100);
@@ -97,6 +101,14 @@ void CommonView::setWidthColumnsTree()
listWidthColumn.append(140);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Archived, 100);
listWidthColumn.append(100);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_AMMtasks, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_FIMtasks, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Login, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Messages, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Logged, 80);
listWidthColumn.append(80);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_ID, 40);
@@ -107,7 +119,19 @@ void CommonView::setWidthColumnsTree()
void CommonView::reSetHeadTreeWidget()
{
QStringList listHeaders = {tr("Name"), tr("Login"), tr("Password"), tr("Class"), tr("Computer"), tr("IP address"), tr("Administrator"), tr("Archived"), tr("Online"), tr("ID")};
QStringList listHeaders = { tr("Name"),
tr("Password"),
tr("Class"),
tr("Computer"),
tr("IP address"),
tr("Administrator"),
tr("Archived"),
tr("Tasks AMM"),
tr("Tasks FIM"),
tr("Login"),
tr("Messages"),
tr("Online"),
tr("ID")};
treeWidget->setHeaderLabels(listHeaders);
}
@@ -142,6 +166,8 @@ void CommonView::preparationTreeWidget()
{
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_ID, true);
}
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Messages, true);
}
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Administrator, true);
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Password, true);
@@ -151,6 +177,12 @@ void CommonView::preparationTreeWidget()
if(TypeUserDB == User::TypeUserDBTrainee)
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Administrator, true);
if(TypeUserDB != User::TypeUserDBTrainee)
{
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_AMMtasks, true);
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_FIMtasks, true);
}
//treeWidget->setSortingEnabled(true);
treeWidget->sortItems(ColumnsTreeUsers::clmn_Name, Qt::SortOrder::AscendingOrder);

View File

@@ -32,13 +32,16 @@ public:
protected:
enum ColumnsTreeUsers{
clmn_Name = 0,
clmn_Login,
clmn_Password,
clmn_Class,
clmn_Computer,
clmn_IP_address,
clmn_Administrator,
clmn_Archived,
clmn_AMMtasks,
clmn_FIMtasks,
clmn_Login,
clmn_Messages,
clmn_Logged,
clmn_ID,
clmn_count
@@ -69,6 +72,7 @@ public:
void clearSelection()
{
treeWidget->clearSelection();
treeWidget->setCurrentIndex(QModelIndex());
lastCurrentID = 0;
}
@@ -89,7 +93,7 @@ protected:
void preparationTreeWidget();
private:
protected:
int calculateWidth_0Column();
void setWidthColumnsTree();
@@ -111,7 +115,7 @@ protected:
TypeObject typeObject;
QMutex mtxmapNewMsg;
QMap<int, bool> mapNewMsg;
QMap<int, int> mapNewMsg;
WaitAnimationWidget *waitAnimationWidget;
};

View File

@@ -8,6 +8,7 @@ struct FileData
{
QString path;
QString hash;
QString lastUpdate;
bool operator==(const FileData& other)const{
if(this->path==(other.path) && this->hash == other.hash) return true;

View File

@@ -44,6 +44,7 @@ void DataParser::createFileDataList(QList<FileData> fileDataList,QString filenam
xmlWriter.writeAttribute("Path",data.path);
xmlWriter.writeAttribute("Hash",data.hash);
xmlWriter.writeAttribute("LastUpdate",data.lastUpdate);
xmlWriter.writeEndElement();
}
@@ -201,7 +202,9 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id
xmlWriter.writeStartElement("malfunction");
xmlWriter.writeAttribute("dmCode", malfunction.dmCode);
xmlWriter.writeAttribute("num", malfunction.num);
xmlWriter.writeAttribute("description", malfunction.description);
xmlWriter.writeAttribute("description", malfunction.description);
xmlWriter.writeAttribute("goName", malfunction.goName);
xmlWriter.writeAttribute("objName", malfunction.objName);
for(MalfunctionSign sign : malfunction.malfunctionSigns)
{
@@ -292,7 +295,7 @@ QByteArray DataParser::createDeAuthMessage(ClientDeAutorization *deAuth)
return array;
}
QByteArray DataParser::createQueryBlockAuth(bool block)
QByteArray DataParser::createQueryBlockAuth(bool block, QString type)
{
QByteArray array;
QXmlStreamWriter xmlWriter(&array);
@@ -302,6 +305,7 @@ QByteArray DataParser::createQueryBlockAuth(bool block)
xmlWriter.writeStartElement("BlockAuth");
xmlWriter.writeAttribute("Block", block ? "1" : "0");
xmlWriter.writeAttribute("type", type);
xmlWriter.writeEndElement();
xmlWriter.writeEndElement();
@@ -438,11 +442,6 @@ ServerSettings *DataParser::getServerSettings()
if(name == "Language"){
settings->Language = value;
}
if(name == "AutoStart"){
settings->isAutoStart = value.toInt();
}
}
}
}
@@ -501,6 +500,8 @@ QList<FileData>* DataParser::xmlFileDataParse(QByteArray array, QString filter =
data.path = value;
else if(name == "Hash")
data.hash = value;
else if(name == "LastUpdate")
data.lastUpdate = value;
}
if(data.path.contains(filter))

View File

@@ -29,7 +29,7 @@ public:
QByteArray createQueryListSubProcMessage(QString dmCode);
QByteArray createDeAuthMessage(ClientDeAutorization *deAuth);
QByteArray createQueryBlockAuth(bool block);
QByteArray createQueryBlockAuth(bool block, QString type);
void createAuthData(ServerAuthorization *serverAuth);
void createAuthDataOffline(QString username,QString pass);

View File

@@ -37,7 +37,7 @@ void RecognizeSystem::initialize(DataParser *dataParser/*,MainWindow *mainWindow
void RecognizeSystem::recognize(QTcpSocket *socket)
{
qDebug() << "RecognizeThreadId " << QThread::currentThreadId();
qDebug() << "RecognizeSystem::recognize thread ID " << QThread::currentThreadId();
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
@@ -154,7 +154,7 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
continue;
}
quint64 toFile = file.write(tmpBlock);
qint64 toFile = file.write(tmpBlock);
emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + toFile);
sizeReceiveData += toFile;
@@ -260,12 +260,12 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
if(packetType == PacketType::BUSY)
{
emit sigAnimationActivated(true);
emit signal_ServerBlockState(true);
}
if(packetType == PacketType::FREE)
{
emit sigAnimationActivated(false);
emit signal_ServerBlockState(false);
}
if(packetType == PacketType::HASH_READY)
@@ -278,12 +278,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit signal_AnswerDocsChanged();
}
//if(packetType == PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM)
//{
//}
//А)xml-ответы на запросы к БД
//А)xml-ответы на запросы к БД (или автоматическая рассылка)
//B)перечни Подпроцедур
switch(packetType)
{
@@ -294,6 +290,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
case TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS:
case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE:
case TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE:
case TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES:
case TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES:
case TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM:
{
//ПОЛУЧЕНИЕ РАЗМЕРА ФАЙЛА
@@ -302,15 +300,16 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream.startTransaction();
stream >> fileSize;
if(!stream.commitTransaction()){
if(!stream.commitTransaction())
{
emit sigSendDebugLog(Tools::getTime() + "CLIENT: fileSize - FAIL commitTransaction");
if (!socket->waitForReadyRead(TCP_READ_TIMEOUT)) {
if (!socket->waitForReadyRead(TCP_READ_TIMEOUT))
{
emit sigSendDebugLog(Tools::getTime() + "CLIENT: ERROR! readyRead timeout - fileSize!!!");
return;
}
continue;
}
emit sigSendDebugLog("CLIENT: filesize: " + QString::number(fileSize));
@@ -330,13 +329,16 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream.startTransaction();
stream >> tmpBlock;
if(!stream.commitTransaction()){
if(!stream.commitTransaction())
{
if(socket->state() == QAbstractSocket::UnconnectedState){
if(socket->state() == QAbstractSocket::UnconnectedState)
{
emit sigSocketDisabled();
return;
}
if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){
if(socket->waitForReadyRead(TCP_READ_TIMEOUT))
{
continue;
}
@@ -347,12 +349,14 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + array.size());
sizeReceiveData += array.size();
sizeReceiveData = array.size();
countSend++;
tmpBlock.clear();
if(sizeReceiveData == fileSize){
//if(sizeReceiveData == fileSize)
if(sizeReceiveData >= fileSize)
{
emit sigSendDebugLog(Tools::getTime() + "FINAL Count send: " + QString::number(countSend));
emit sigSendDebugLog(Tools::getTime() + "FINAL Size received: " + QString::number(sizeReceiveData));
emit sigSendDebugLog(Tools::getTime() + "FINAL File size" + QString::number(fileSize));
@@ -379,21 +383,6 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
}
packetType = PacketType::TYPE_NONE;
/*
QByteArray array;
stream.startTransaction();
stream >> array;
if(!stream.commitTransaction())
continue;
xmlParserQueryToDB(packetType, array);
packetType = PacketType::TYPE_NONE;
*/
}
break;
};
@@ -592,6 +581,28 @@ void RecognizeSystem::xmlParser(QByteArray array)
}
if(xmlReader.name() == "TryBlock")
{
bool result = false;
QString type = "";
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes())
{
QString name = attr.name().toString();
QString value = attr.value().toString();
if (name == "Result"){
result = value == "true" ? true : false;
}
if (name == "Type"){
type = value;
}
}
emit sigTryBlock(result, type);
}
if(xmlReader.name() == "VersionList")
{
@@ -862,6 +873,8 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
malfunction.num = malfOrReportNode.toElement().attribute("num");
malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode");
malfunction.description = malfOrReportNode.toElement().attribute("description");
malfunction.goName = malfOrReportNode.toElement().attribute("goName");
malfunction.objName = malfOrReportNode.toElement().attribute("objName");
for(int s = 0; s < malfOrReportNode.childNodes().count(); s++)
{
@@ -883,6 +896,7 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
{//Отчет
FIMReport report;
report.id = malfOrReportNode.toElement().attribute("report_id").toInt();
report.mmel = malfOrReportNode.toElement().attribute("mmel") == "true" ? true : false;
for(int k = 0; k < malfOrReportNode.childNodes().count(); k++)
{
@@ -904,6 +918,17 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
report.itemList.append(reportItem);
}
else if(reportItemNode.nodeName() == "reportWHItem")
{
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = reportItemNode.toElement().attribute("wh_item_id").toInt();
reportWhItem.status = reportItemNode.toElement().attribute("status").toInt();
reportWhItem.goName = reportItemNode.toElement().attribute("goName");
reportWhItem.objName = reportItemNode.toElement().attribute("objName");
reportWhItem.code = reportItemNode.toElement().attribute("code");
report.warehouseItemList.append(reportWhItem);
}
}
task.report = report;
@@ -916,6 +941,164 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
emit sigAnswerQueryToDB_ListTasksFIMforTrainee(listTasks, trainee_id);
}
break;
case TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES:
{
QMap<int, QList<TaskAmmFim> > mapOfLists;
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksAMMofAllTrainees");
for(int i = 0; i < listsAllNode.childNodes().count(); i++)
{
QDomNode listOneNode = listsAllNode.childNodes().at(i);
if(listOneNode.nodeName() == "ListTasksAMM")
{
QList<TaskAmmFim> listTasks;
int trainee_id = 0;
trainee_id = listOneNode.toElement().attribute("trainee_id").toInt();
for(int i = 0; i < listOneNode.childNodes().count(); i++)
{
QDomNode taskNode = listOneNode.childNodes().at(i);
if(taskNode.nodeName() == "taskAMM")
{//Задача
TaskAmmFim task;
task.setID(taskNode.toElement().attribute("task_id").toInt());
task.ammProcedure.title = taskNode.toElement().attribute("title");
task.ammProcedure.dmCode = taskNode.toElement().attribute("dmCode");
task.status = taskNode.toElement().attribute("status");
for(int j = 0; j < taskNode.childNodes().count(); j++)
{
QDomNode subProcNode = taskNode.childNodes().at(j);
if(subProcNode.nodeName() == "SubProc")
{//Подпроцедура
SubProc subProc;
subProc.setDmCode(subProcNode.toElement().attribute("dmCode"));
subProc.setTitle(subProcNode.toElement().attribute("title"));
subProc.setModeListStr(subProcNode.toElement().attribute("canplay"));
task.listSubProc.append(subProc);
}
}
listTasks.append(task);
}
}
mapOfLists.insert(trainee_id, listTasks);
}
}
emit sigAnswerQueryToDB_ListsTasksAMMofAllTrainees(mapOfLists);
}
break;
case TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES:
{
QMap<int, QList<TaskAmmFim> > mapOfLists;
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksFIMofAllTrainees");
for(int i = 0; i < listsAllNode.childNodes().count(); i++)
{
QDomNode listOneNode = listsAllNode.childNodes().at(i);
if(listOneNode.nodeName() == "ListTasksFIM")
{
QList<TaskAmmFim> listTasks;
int trainee_id = 0;
trainee_id = listOneNode.toElement().attribute("trainee_id").toInt();
for(int i = 0; i < listOneNode.childNodes().count(); i++)
{//Задачи
QDomNode taskNode = listOneNode.childNodes().at(i);
if(taskNode.nodeName() == "taskFIM")
{
TaskAmmFim task;
task.setID(taskNode.toElement().attribute("task_id").toInt());
task.title = taskNode.toElement().attribute("title");
task.status = taskNode.toElement().attribute("status");
for(int j = 0; j < taskNode.childNodes().count(); j++)
{
QDomNode malfOrReportNode = taskNode.childNodes().at(j);
if(malfOrReportNode.nodeName() == "malfunction")
{//Неисправность
Malfunction malfunction;
malfunction.num = malfOrReportNode.toElement().attribute("num");
malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode");
malfunction.description = malfOrReportNode.toElement().attribute("description");
malfunction.goName = malfOrReportNode.toElement().attribute("goName");
malfunction.objName = malfOrReportNode.toElement().attribute("objName");
for(int s = 0; s < malfOrReportNode.childNodes().count(); s++)
{
QDomNode signNode = malfOrReportNode.childNodes().at(s);
if(signNode.nodeName() == "malfunctionSign")
{
MalfunctionSign sign;
sign.type = signNode.toElement().attribute("type").toInt();
sign.description = signNode.toElement().attribute("description");
malfunction.malfunctionSigns.append(sign);
}
}
task.malfunctionList.append(malfunction);
}
else
if(malfOrReportNode.nodeName() == "report")
{//Отчет
FIMReport report;
report.id = malfOrReportNode.toElement().attribute("report_id").toInt();
report.mmel = malfOrReportNode.toElement().attribute("mmel") == "true" ? true : false;
for(int k = 0; k < malfOrReportNode.childNodes().count(); k++)
{
QDomNode reportItemNode = malfOrReportNode.childNodes().at(k);
if(reportItemNode.nodeName() == "reportItem")
{
FIMReportItem reportItem;
reportItem.id = reportItemNode.toElement().attribute("item_id").toInt();
reportItem.text = reportItemNode.toElement().attribute("text");
if(reportItemNode.childNodes().count())
{
QDomNode procedureIDNode = reportItemNode.childNodes().at(0);
reportItem.procedure.doc = procedureIDNode.toElement().attribute("doc");
reportItem.procedure.title = procedureIDNode.toElement().attribute("title");
reportItem.procedure.dmCode = procedureIDNode.toElement().attribute("dmCode");
reportItem.procedure.result = procedureIDNode.toElement().attribute("result");
}
report.itemList.append(reportItem);
}
else if(reportItemNode.nodeName() == "reportWHItem")
{
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = reportItemNode.toElement().attribute("wh_item_id").toInt();
reportWhItem.status = reportItemNode.toElement().attribute("status").toInt();
reportWhItem.goName = reportItemNode.toElement().attribute("goName");
reportWhItem.objName = reportItemNode.toElement().attribute("objName");
reportWhItem.code = reportItemNode.toElement().attribute("code");
report.warehouseItemList.append(reportWhItem);
}
}
task.report = report;
}
}
listTasks.append(task);
}
}
mapOfLists.insert(trainee_id, listTasks);
}
}
emit sigAnswerQueryToDB_ListsTasksFIMofAllTrainees(mapOfLists);
}
break;
};
}

View File

@@ -14,6 +14,7 @@
#include "Datas.h"
#include "tasksAmmFim.h"
#include "module.h"
#include "metatypes.h"
class RecognizeSystem : public QObject
@@ -37,6 +38,7 @@ signals:
void sigErrorAuth(QString error);
void sigAuth(ServerAuthorization *serverAuth);
void sigDeAuth(ServerDeAuthorization *serverDeAuth);
void sigTryBlock(bool result, QString type);
void sigAnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees,
QList<Group>* listGroups);
@@ -52,17 +54,22 @@ signals:
void sigAnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void sigAnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void sigAnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void sigAnswerQueryTasksXML_FIM(QByteArray array);
void sigAnswerQueryTasksXML_AMM(QByteArray array);
void sigShowServerDataList(QList<StreamingVersionData*> *versions);
void sigSetVersion(StreamingVersionData* serverVersion);
void sigNotifyVersionControl(QString text);
void sigAnimationActivated(bool flag);
void sigHashReady();
void sigAnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode);
void signal_AnswerDocsChanged();
void signal_ServerBlockState(bool state);
private:
QList<QString> *folderList;
//MainWindow *mainWindow;

View File

@@ -20,7 +20,7 @@ void TCPClient::initialize(RecognizeSystem *recognize,SendSystem *sendSystem)
void TCPClient::setConnect(ServerSettings *serverSettings)
{
socket = new QTcpSocket();
qDebug() << "TCPCLient thread: " << QThread::currentThreadId();
qDebug() << "TCPCLient::setConnect thread ID " << QThread::currentThreadId();
if (socket != NULL && socket->state() == QTcpSocket::ConnectedState)
{
emit sigSendDebugLog("already connected");

View File

@@ -53,6 +53,9 @@ enum PacketType{
TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE = 106,
TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE = 107,
TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES = 108,
TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES = 109,
//xml-ответы на запросы AdditionalFiles
TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130,
TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131,

View File

@@ -9,7 +9,6 @@ public:
QString Address;
QString Port;
QString Language;
bool isAutoStart;
};
class ServerAuthorization{

View File

@@ -9,21 +9,22 @@ ConnectorToServer::ConnectorToServer(QObject *parent) :
sendSystem(nullptr),
recognizeSystem(nullptr),
fl_GetedOfflineMessages(false),
nameInstructorLoggedInLocal("")
nameInstructorLoggedInLocal(""),
serverBlockState(false)
{
initialize();
}
ConnectorToServer::~ConnectorToServer()
{
connectionThread->quit();
connectionThread->wait();
delete connectionThread;
delete client;
delete recognizeSystem;
delete sendSystem;
delete dataParser;
connectionThread->quit();
connectionThread->wait();
delete connectionThread;
}
ServerSettings ConnectorToServer::getServerSettings()
@@ -38,13 +39,17 @@ bool ConnectorToServer::getIsConnected()
void ConnectorToServer::SetConnectToServer()
{
qDebug() << "connectorToServer::SetConnectToServer() thread ID " << QThread::currentThreadId();
serverBlockState = false;
qDebug() << "connectorToServer::SetConnectToServer thread ID " << QThread::currentThreadId();
serverSettings = *dataParser->getServerSettings();
emit sigSetConnect(dataParser->getServerSettings(),connectionThread);
}
void ConnectorToServer::StopConnectToServer()
{
serverBlockState = false;
emit sigStopConnect();
clearListModelDB();
}
@@ -117,6 +122,12 @@ void ConnectorToServer::slot_NotifyVersionControl(QString text)
emit signal_NotifyVersionControl(text);
}
void ConnectorToServer::slot_ServerBlockState(bool state)
{
serverBlockState = state;
emit signal_ServerBlockState(state);
}
void ConnectorToServer::initialize()
{
createObjects();
@@ -139,6 +150,8 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::slot_Auth);
connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult);
connect(recognizeSystem,&RecognizeSystem::sigTryBlock,this,&ConnectorToServer::sigTryBlockResult);
connect(recognizeSystem,&RecognizeSystem::sigServerBlocked,this,&ConnectorToServer::slot_ServerBlocked);
connect(recognizeSystem,&RecognizeSystem::sigErrorAuth,this,&ConnectorToServer::slot_ErrorAuth);
@@ -154,6 +167,9 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksFIMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListsTasksAMMofAllTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListsTasksFIMofAllTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM);
@@ -168,7 +184,8 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::signal_AnswerDocsChanged,this,&ConnectorToServer::slot_AnswerDocsChanged);
connect(recognizeSystem, &RecognizeSystem::sigSetVersion, this, &ConnectorToServer::signal_SetVersion);
connect(recognizeSystem, &RecognizeSystem::sigAnimationActivated, this, &ConnectorToServer::signal_AnimationActivated);
connect(recognizeSystem,&RecognizeSystem::signal_ServerBlockState,this,&ConnectorToServer::slot_ServerBlockState);
connect(this, &ConnectorToServer::signal_SendCopyVersion, sendSystem, &SendSystem::sendCopyVersion);
connect(this, &ConnectorToServer::signal_SendDeleteVersion, sendSystem, &SendSystem::sendDeleteVersion);
@@ -185,6 +202,7 @@ void ConnectorToServer::createObjects()
client->moveToThread(connectionThread);
dataParser = new DataParser;
dataParser->moveToThread(connectionThread);
sendSystem = new SendSystem;
sendSystem->moveToThread(connectionThread);
@@ -196,6 +214,11 @@ void ConnectorToServer::createObjects()
connectionThread->setPriority(QThread::HighestPriority);
}
bool ConnectorToServer::getServerBlockState() const
{
return serverBlockState;
}
SendSystem *ConnectorToServer::getSendSystem() const
{
return sendSystem;

View File

@@ -15,6 +15,7 @@
#include "classroom.h"
#include "Datas.h"
#include "streamingversiondata.h"
#include "metatypes.h"
class ConnectorToServer : public QObject
{
@@ -47,7 +48,7 @@ public:
bool sendQueryTasksXML(QString type);
bool sendQueryListSubProc(QString dmCode);
bool sendQueryBlockAuth(bool block);
bool sendQueryBlockAuth(bool block, QString type);
void sendShowVersionSelect();
bool sendClientNotify(QString command);
@@ -82,6 +83,8 @@ public:
int getIdTraineeByLogin(QString login);
int getIdInstructorByLogin(QString login);
bool getServerBlockState() const;
private:
//Очистка списочной модели БД СУО
void clearListModelDB();
@@ -95,6 +98,10 @@ public slots:
void slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void slot_AnswerQueryTasksXML_FIM(QByteArray array);
void slot_AnswerQueryTasksXML_AMM(QByteArray array);
void slot_AnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode);
@@ -117,6 +124,8 @@ public slots:
void slot_NotifyVersionControl(QString text);
void slot_ServerBlockState(bool state);
signals:
void sigSetConnect(ServerSettings* serverSettings,QThread *thread);
void sigStopConnect();
@@ -126,6 +135,9 @@ signals:
void sigLoginResult(ServerAuthorization * serverAuth);
void sigDeLoginResult(ServerDeAuthorization * serverDeAuth);
void sigTryBlockResult(bool result, QString type);
void sigServerBlocked();
void sigErrorAuth(QString error);
@@ -149,7 +161,6 @@ signals:
void signal_AnswerDocsChanged();
void signal_SetVersion(StreamingVersionData* serverVersion);
void signal_AnimationActivated(bool flag);
void signal_SendDeleteVersion(StreamingVersionData *streaming);
void signal_SendSwitchVersion(StreamingVersionData *selectVersion);
@@ -160,6 +171,8 @@ signals:
void signal_NotifyVersionControl(QString text);
void signal_ServerBlockState(bool state);
private:
void initialize();
void bindConnection();
@@ -192,6 +205,8 @@ private:
bool fl_GetedOfflineMessages;
QString nameInstructorLoggedInLocal;
bool serverBlockState;
};
#endif // CONNECTORTOSERVER_H

View File

@@ -76,6 +76,7 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAm
mtxAccess.unlock();
emit signal_UpdateTasksAMMforTrainee(trainee_id);
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
@@ -91,6 +92,47 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAm
mtxAccess.unlock();
emit signal_UpdateTasksFIMforTrainee(trainee_id);
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists)
{
mtxAccess.lock();
for(int key : mapOfLists.keys())
{
//Удаляем старые задачи этого обучаемого
mapTasksAMM.remove(key);
//Добавляем новые
mapTasksAMM.insert(key, mapOfLists.value(key));
emit signal_UpdateTasksAMMforTrainee(key);
}
mtxAccess.unlock();
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists)
{
mtxAccess.lock();
for(int key : mapOfLists.keys())
{
//Удаляем старые задачи этого обучаемого
mapTasksFIM.remove(key);
//Добавляем новые
mapTasksFIM.insert(key, mapOfLists.value(key));
emit signal_UpdateTasksFIMforTrainee(key);
}
mtxAccess.unlock();
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array)

View File

@@ -95,14 +95,14 @@ bool ConnectorToServer::sendQueryListSubProc(QString dmCode)
return true;
}
bool ConnectorToServer::sendQueryBlockAuth(bool block)
bool ConnectorToServer::sendQueryBlockAuth(bool block, QString type)
{
if (!client->getIsConnected())
{
return false;
}
QByteArray array = dataParser->createQueryBlockAuth(block);
QByteArray array = dataParser->createQueryBlockAuth(block, type);
emit sigSendAnswerToServer(array);
return true;

View File

@@ -17,7 +17,8 @@ DialogRedactorInstructors::DialogRedactorInstructors(ConnectorToServer* connecto
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(editorInstructors);
this->setWindowTitle(tr("Editor of instructors"));
this->setMinimumSize(1400, 700);
this->setMinimumSize(1400, 700);
this->setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint);
//this->setWindowState(Qt::WindowMaximized);
this->setModal(true);
}

View File

@@ -77,7 +77,7 @@ void InstructorsView::loadInstructorsFromDB()
else
{//Не Залогинен
//ItemInstructor->setText(ColumnsTreeUsers::clmn_Logged, tr("no"));
ItemInstructor->setIcon(ColumnsTreeUsers::clmn_Logged, QIcon(QStringLiteral(":/resources/icons/circleGray.png")));
//ItemInstructor->setIcon(ColumnsTreeUsers::clmn_Logged, QIcon(QStringLiteral(":/resources/icons/circleGray.png")));
}
//Скрываем архивных (при необходимости)
@@ -96,13 +96,19 @@ void InstructorsView::loadInstructorsFromDB()
if(mapNewMsg.value(instructor.getID()))
{
if(lastCurrentID == instructor.getID())
mapNewMsg.take(lastCurrentID);
{
//mapNewMsg.take(lastCurrentID);
}
else
{
/*
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
{
ItemInstructor->setBackground(i, QBrush(QColor(250, 210, 1)));
}
*/
ItemInstructor->setIcon(ColumnsTreeUsers::clmn_Messages, QIcon(QStringLiteral(":/resources/icons/sendMsg.png")));
ItemInstructor->setText(ColumnsTreeUsers::clmn_Messages, QString::number(mapNewMsg.value(instructor.getID())));
}
}
}

View File

@@ -6,11 +6,12 @@
ViewerInstructors::ViewerInstructors(ConnectorToServer* connectorToServer, QWidget *parent) :
InstructorsView(connectorToServer, CommonView::TypeView::onlyView, parent),
dlgRedactor(nullptr),
flTryEditorInstructors(false),
ui(new Ui::ViewerInstructors)
{
ui->setupUi(this);
connect(treeWidget, &QTreeWidget::itemClicked, this, &ViewerInstructors::on_treeWidgetItemClicked);
connect(treeWidget, &QTreeWidget::currentItemChanged, this, &ViewerInstructors::on_treeWidgetCurrentItemChanged);
ui->horizontalLayout_1->addWidget(treeWidget);
@@ -20,6 +21,8 @@ ViewerInstructors::ViewerInstructors(ConnectorToServer* connectorToServer, QWidg
setNotLoggedInVisible(true);
ui->btnEditorInstructors->setVisible(false);
connect(connectorToServer, &ConnectorToServer::sigTryBlockResult, this, &ViewerInstructors::slot_checkTryBlockResult);
}
ViewerInstructors::~ViewerInstructors()
@@ -48,6 +51,8 @@ void ViewerInstructors::deactivate()
dlgRedactor = nullptr;
}
flTryEditorInstructors = false;
CommonView::deactivate();
updateButtons();
}
@@ -69,39 +74,51 @@ void ViewerInstructors::slot_receiveMessage(ClientMessage clientMessage)
int id_instructor = clientMessage.fromId.toInt();
mtxmapNewMsg.lock();
mapNewMsg.insert(id_instructor, true);
mapNewMsg.insert(id_instructor, mapNewMsg.value(id_instructor) + 1);
mtxmapNewMsg.unlock();
slot_NeedUpdateUI(true, false);
}
void ViewerInstructors::on_btnEditorInstructors_clicked()
void ViewerInstructors::slot_checkTryBlockResult(bool result, QString type)
{
connectorToServer->sendQueryBlockAuth(true);
dlgRedactor = new DialogRedactorInstructors(connectorToServer, adminMode, this);
dlgRedactor->exec();
if(dlgRedactor)
if(flTryEditorInstructors)
{
delete dlgRedactor;
dlgRedactor = nullptr;
if(type == "EditorInstructors")
{
emit signal_needShowWait(false);
if(result)
{//Одобрено
dialog_EditorInstructors();
}
else
{//Отказ
SpecMsgBox::WarningClose(this, tr("The server rejected your request to access instructors control.\nAnother instructor is managing instructors.\nPlease try again later."));
}
flTryEditorInstructors = false;
}
}
if(authComplited)
loadInstructorsFromDB();
connectorToServer->sendQueryBlockAuth(false);
}
void ViewerInstructors::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column)
void ViewerInstructors::on_btnEditorInstructors_clicked()
{
if(item == nullptr)
emit signal_needShowWait(true);
flTryEditorInstructors = true;
connectorToServer->sendQueryBlockAuth(true, "EditorInstructors");
}
void ViewerInstructors::on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
return;
//if(current->childCount() == 0)
{//Выбран обучаемый
QString login = item->text(ColumnsTreeUsers::clmn_Login);
QString login = current->text(ColumnsTreeUsers::clmn_Login);
//if(login != "")
{
int newCurrentID = connectorToServer->getIdInstructorByLogin(login);
@@ -118,9 +135,11 @@ void ViewerInstructors::on_treeWidgetItemClicked(QTreeWidgetItem *item, int colu
{
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
{
item->setBackground(i, QBrush(Qt::GlobalColor::white));
current->setBackground(i, QBrush(Qt::GlobalColor::white));
}
mapNewMsg.take(newCurrentID);
current->setIcon(ColumnsTreeUsers::clmn_Messages, QIcon());
current->setText(ColumnsTreeUsers::clmn_Messages, "");
}
}
mtxmapNewMsg.unlock();
@@ -141,3 +160,20 @@ void ViewerInstructors::updateButtons()
ui->btnEditorInstructors->setEnabled(false);
}
}
void ViewerInstructors::dialog_EditorInstructors()
{
dlgRedactor = new DialogRedactorInstructors(connectorToServer, adminMode, this);
dlgRedactor->exec();
if(dlgRedactor)
{
delete dlgRedactor;
dlgRedactor = nullptr;
}
if(authComplited)
loadInstructorsFromDB();
connectorToServer->sendQueryBlockAuth(false, "EditorInstructors");
}

View File

@@ -29,21 +29,29 @@ protected:
public slots:
void slot_receiveMessage(ClientMessage clientMessage);
void slot_checkTryBlockResult(bool result, QString type);
public Q_SLOTS:
void on_btnEditorInstructors_clicked();
void on_treeWidgetItemClicked(QTreeWidgetItem *item, int column);
void on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
Q_SIGNALS:
//сигнал о выборе инструктора
void signal_instructorSelected(int id_instructor);
void signal_needShowWait(bool flNeed);
private:
void updateButtons() override;
void dialog_EditorInstructors();
private:
DialogRedactorInstructors* dlgRedactor;
bool flTryEditorInstructors;
private:
Ui::ViewerInstructors *ui;
};

View File

@@ -29,7 +29,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
flTryConnectToServer(false),
cntTryConnectToServer(0),
flTryLogin(false),
flTryReceiveFIM(false),
flTryReceiveAMM(false),
language(languageENG),
versionStr("..."),
ui(new Ui::InstructorsAndTraineesWidget)
{
ui->setupUi(this);
@@ -50,10 +53,16 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connectorToServer = new ConnectorToServer();
connect(connectorToServer, &ConnectorToServer::sigLoginResult, this, &InstructorsAndTraineesWidget::slot_checkLoginResult);
connect(connectorToServer, &ConnectorToServer::sigDeLoginResult, this, &InstructorsAndTraineesWidget::slot_checkDeLoginResult);
connect(connectorToServer, &ConnectorToServer::sigServerBlocked, this, &InstructorsAndTraineesWidget::slot_ServerBlocked);
connect(connectorToServer, &ConnectorToServer::sigErrorAuth, this, &InstructorsAndTraineesWidget::slot_ErrorAuth);
connect(connectorToServer, &ConnectorToServer::signal_SetVersion, this, &InstructorsAndTraineesWidget::slot_SetVersion);
connect(connectorToServer, &ConnectorToServer::signal_AnswerDocsChanged,this, &InstructorsAndTraineesWidget::slot_AnswerDocsChanged);
connect(connectorToServer, &ConnectorToServer::signal_ServerBlockState, this, &InstructorsAndTraineesWidget::slot_ServerBlockState);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksFIM, this, &InstructorsAndTraineesWidget::slot_UpdateTasksFIM);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMM, this, &InstructorsAndTraineesWidget::slot_UpdateTasksAMM);
messangerController = new MessangerController(connectorToServer, this);
@@ -65,7 +74,9 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connect(connectorToServer, &ConnectorToServer::signal_ConnectedToServer, this, &InstructorsAndTraineesWidget::slot_ConnectedToServer);
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, this, &InstructorsAndTraineesWidget::slot_traineeSelected);
connect(viewerTrainees, &ViewerTrainees::signal_needShowWait, this, &InstructorsAndTraineesWidget::slot_needShowWait);
connect(viewerInstructors, &ViewerInstructors::signal_instructorSelected, this, &InstructorsAndTraineesWidget::slot_instructorSelected);
connect(viewerInstructors, &ViewerInstructors::signal_needShowWait, this, &InstructorsAndTraineesWidget::slot_needShowWait);
connect(messangerController, &MessangerController::signal_receiveMessage_fromInstructor, viewerInstructors, &ViewerInstructors::slot_receiveMessage);
connect(messangerController, &MessangerController::signal_receiveMessage_fromTrainee, viewerTrainees, &ViewerTrainees::slot_receiveMessage);
@@ -85,10 +96,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
ui->groupBox_Instructors->setMinimumHeight(200);
ui->groupBox_Instructors->setMaximumHeight(300);
ui->groupBox_Trainees->setMinimumHeight(400);
ui->groupBox_Trainees->setMinimumHeight(500);
ui->groupBox_Trainees->setMinimumWidth(600);
ui->groupBox_Instructors->setMinimumWidth(600);
ui->groupBox_Trainees->setMinimumWidth(1000);
ui->groupBox_Instructors->setMinimumWidth(1000);
//Доступность кнопок
@@ -156,6 +167,7 @@ void InstructorsAndTraineesWidget::changeEvent(QEvent *event)
updateLabelLoggedInInstructor(instructorLoggedInLocal);
updateLabelServer();
updateLabelVersion();
}
}
@@ -194,7 +206,7 @@ QString InstructorsAndTraineesWidget::loadStyleSheet()
void InstructorsAndTraineesWidget::slot_LanguageChanged(QString language)
{
qtLanguageTranslator.load(QString(QStringLiteral("translations/InstructorsAndTraineesWidget_")) + language, QStringLiteral("."));
qtLanguageTranslator.load(QString(QStringLiteral("translations/RRJServer_")) + language, QStringLiteral("."));
qApp->installTranslator(&qtLanguageTranslator);
emit signal_LanguageChanged(language);
@@ -209,6 +221,10 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
{
if (serverAuth->Result)
{
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);
instructorLoggedInLocal.setLogin(serverAuth->Login);
instructorLoggedInLocal.setName(serverAuth->ClientName);
instructorLoggedInLocal.setID(serverAuth->Id.toInt());
@@ -234,13 +250,15 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
messangerController->setUserLocalGUI_ID(serverAuth->Id.toInt());
/*
connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm");
*/
viewerTrainees->activate();
viewerInstructors->activate();
waitAnimationWidget->hideWithStop();
//waitAnimationWidget->hideWithStop();
flTryLogin = false;
}
@@ -248,6 +266,8 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
{
//waitAnimationWidget->hideWithStop();
//ui->btnAuthorizationInstructor->setChecked(false);
flTryReceiveFIM = false;
flTryReceiveAMM = false;
}
}
@@ -255,6 +275,10 @@ void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization
{
if (serverDeAuth->Result)
{
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);
instructorLoggedInLocal.setLogin(QStringLiteral(""));
instructorLoggedInLocal.setName(QStringLiteral(""));
instructorLoggedInLocal.setIsAdmin(false);
@@ -270,10 +294,13 @@ void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization
ui->btnPersonalCard->setEnabled(false);
updateLabelLoggedInInstructor(instructorLoggedInLocal);
waitAnimationWidget->hideWithStop();
}
else
{
ui->btnAuthorizationInstructor->setChecked(true);
waitAnimationWidget->hideWithStop();
SpecMsgBox::CriticalClose(this, tr("Instructor deauthorization") + "\n" + tr("Error!"));
}
}
@@ -283,10 +310,12 @@ void InstructorsAndTraineesWidget::slot_ServerBlocked()
if(flTryLogin)
{
flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false);
SpecMsgBox::WarningClose(this, tr("Instructor authorization.") + "\n" + tr("Server blocked!"));
SpecMsgBox::WarningClose(this, tr("Instructor authorization is temporarily unavailable.") + "\n" + tr("Server blocked!") + "\n" + tr("Try again later."));
}
}
@@ -295,6 +324,8 @@ void InstructorsAndTraineesWidget::slot_ErrorAuth(QString error)
if(flTryLogin)
{
flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false);
@@ -324,8 +355,8 @@ void InstructorsAndTraineesWidget::slot_ErrorAuth(QString error)
void InstructorsAndTraineesWidget::slot_SetVersion(StreamingVersionData *serverVersion)
{
QString viewName = serverVersion->getViewName();
ui->lblVersionText->setText(viewName);
versionStr = serverVersion->getViewName();
ui->lblVersionText->setText(versionStr);
}
void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
@@ -335,8 +366,6 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
ui->btnConnectionToServer->setEnabled(false);
ui->btnAuthorizationInstructor->setEnabled(true);
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
updateLabelLoggedInInstructor(instructorLoggedInLocal);
flTryConnectToServer = false;
@@ -352,7 +381,6 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
//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);
@@ -416,7 +444,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
if(!flTryConnectToServer)
{
WidgetTools::closeAllChildWidgets(this, "SpecMsgBox");
SpecMsgBox::WarningClose(this, tr("The server is not available!"));
waitAnimationWidget->hideWithStop();
SpecMsgBox::WarningClose(this, tr("The server is not available!"));
}
}
else
@@ -426,6 +455,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
updateLabelServer();
flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
}
}
@@ -473,6 +504,39 @@ void InstructorsAndTraineesWidget::slot_TryConnectToServer()
connectorToServer->SetConnectToServer();
}
void InstructorsAndTraineesWidget::slot_ServerBlockState(bool state)
{
updateLabelServer();
}
void InstructorsAndTraineesWidget::slot_needShowWait(bool flNeed)
{
if(flNeed)
waitAnimationWidget->showWithPlay();
else
waitAnimationWidget->hideWithStop();
}
void InstructorsAndTraineesWidget::slot_UpdateTasksAMM()
{
if(flTryReceiveAMM)
{
flTryReceiveAMM = false;
if(!flTryReceiveAMM && !flTryReceiveFIM)
waitAnimationWidget->hideWithStop();
}
}
void InstructorsAndTraineesWidget::slot_UpdateTasksFIM()
{
if(flTryReceiveFIM)
{
flTryReceiveFIM = false;
if(!flTryReceiveAMM && !flTryReceiveFIM)
waitAnimationWidget->hideWithStop();
}
}
bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent)
{
dlgAuthorization = new DialogAuthorization(parent);
@@ -500,6 +564,8 @@ bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent
waitAnimationWidget->showWithPlay();
flTryLogin = true;
flTryReceiveFIM = true;
flTryReceiveAMM = true;
connectorToServer->sendAuthorizationInstructorLocal(login, password);
@@ -523,7 +589,7 @@ bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent
}
bool InstructorsAndTraineesWidget::deAuthorizationInstructor(QString login)
{
{
connectorToServer->sendDeAuthorizationInstructorLocal(login);
return true;
}
@@ -558,9 +624,11 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{//Авторизация Инструктора локальная (Администратора)
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);
@@ -569,11 +637,15 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{//ДеАвторизация Инструктора локальная (Администратора)
if(authorizationIsCompleted())
{
waitAnimationWidget->showWithPlay();
if(deAuthorizationInstructor(instructorLoggedInLocal.getLogin()))
{
/*
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();
@@ -620,14 +692,35 @@ void InstructorsAndTraineesWidget::updateLabelServer()
{
if(connectorToServer->getIsConnected())
{
ServerSettings serverSettings = connectorToServer->getServerSettings();
ui->lblServer->setText(tr("connected") + " " + serverSettings.Address + " : " +serverSettings.Port);
if(connectorToServer->getServerBlockState())
{//Заблокирован!
ServerSettings serverSettings = connectorToServer->getServerSettings();
ui->lblServer->setText(tr("connected") + " " + serverSettings.Address + " : " +serverSettings.Port + ", " + tr("blocked"));
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/lock.png")));
}
else
{
ServerSettings serverSettings = connectorToServer->getServerSettings();
ui->lblServer->setText(tr("connected") + " " + serverSettings.Address + " : " +serverSettings.Port);
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
}
}
else
{
ui->lblServer->setText(tr("not connected"));
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
}
}
}
void InstructorsAndTraineesWidget::updateLabelVersion()
{
ui->lblVersionText->setText(versionStr);
}
void InstructorsAndTraineesWidget::setLanguageInterfase()
{
ServerSettings settings;
@@ -635,12 +728,12 @@ void InstructorsAndTraineesWidget::setLanguageInterfase()
if(settings.Language == "ENG")
{
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + languageENG, ".");
qtLanguageTranslator.load(QString("translations/RRJServer_") + languageENG, ".");
language = languageENG;
}
else
{
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + languageRUS, ".");
qtLanguageTranslator.load(QString("translations/RRJServer_") + languageRUS, ".");
language = languageRUS;
}
@@ -656,6 +749,7 @@ void InstructorsAndTraineesWidget::on_btnSettings_clicked()
connect(dlgSettings, &DialogSettings::signal_LanguageChanged, this, &InstructorsAndTraineesWidget::slot_LanguageChanged);
connect(dlgSettings, &DialogSettings::signal_UpdateStyleSheet, this, &InstructorsAndTraineesWidget::slot_UpdateStyleSheet);
//connect(dlgSettings, &DialogSettings::signal_needShowWait, this, &InstructorsAndTraineesWidget::slot_needShowWait);
switch( dlgSettings->exec() )
{

View File

@@ -68,6 +68,13 @@ public Q_SLOTS:
void slot_TryConnectToServer();
void slot_ServerBlockState(bool state);
void slot_needShowWait(bool flNeed);
void slot_UpdateTasksAMM();
void slot_UpdateTasksFIM();
Q_SIGNALS:
//сигнал смены языка
void signal_LanguageChanged(QString language);
@@ -89,6 +96,7 @@ private:
bool authorizationIsCompleted();
void updateLabelLoggedInInstructor(Instructor& instructor);
void updateLabelServer();
void updateLabelVersion();
void setLanguageInterfase();
private:
@@ -113,10 +121,14 @@ private:
int cntTryConnectToServer;
bool flTryLogin;
bool flTryReceiveFIM;
bool flTryReceiveAMM;
QTranslator qtLanguageTranslator;
QString language;
QString versionStr;
Ui::InstructorsAndTraineesWidget *ui;
};

View File

@@ -108,7 +108,7 @@
</size>
</property>
<property name="text">
<string>Trainee editor</string>
<string>Editor of trainees</string>
</property>
<property name="icon">
<iconset resource="InstructorsAndTrainees.qrc">
@@ -134,7 +134,7 @@
</size>
</property>
<property name="text">
<string>Instructor editor</string>
<string>Editor of instructors</string>
</property>
<property name="icon">
<iconset resource="InstructorsAndTrainees.qrc">

View File

@@ -3,6 +3,7 @@
#include <QAbstractScrollArea>
#include <QMessageBox>
#include <QLabel>
#include <QScrollBar>
#include "instructor.h"
#include "messangerwidget.h"
#include "ui_messangerwidget.h"
@@ -85,6 +86,8 @@ void MessangerWidget::addTabDialogMessenger(User user)
oneDialogMessenger = new OneDialogMessenger(userLocalGUI, userRemote, this);
oneDialogMessenger->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
ui->verticalLayout_ListMsg->addWidget(oneDialogMessenger);
//Обновляем заголовок

View File

@@ -85,7 +85,7 @@
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../ServerLMS/ServerLMS.qrc">:/resources/icons/circleGray.png</pixmap>
<pixmap resource="../InstructorsAndTrainees.qrc">:/resources/icons/circleGray.png</pixmap>
</property>
</widget>
</item>
@@ -128,7 +128,7 @@
<string>Send</string>
</property>
<property name="icon">
<iconset>
<iconset resource="../InstructorsAndTrainees.qrc">
<normaloff>:/resources/icons/sendMsg.png</normaloff>:/resources/icons/sendMsg.png</iconset>
</property>
<property name="iconSize">
@@ -149,7 +149,7 @@
</layout>
</widget>
<resources>
<include location="../../ServerLMS/ServerLMS.qrc"/>
<include location="../InstructorsAndTrainees.qrc"/>
</resources>
<connections/>
</ui>

View File

@@ -139,6 +139,9 @@
<property name="readOnly">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::NoTextInteraction</set>
</property>
</widget>
</item>
</layout>

View File

@@ -15,6 +15,12 @@ OneDialogMessenger::OneDialogMessenger(User userLocalGUI, User userRemote, QWidg
setWordWrap(true);
setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn);
setVerticalScrollMode(ScrollMode::ScrollPerPixel);
verticalScrollBar()->setSingleStep(10);
this->setFocusPolicy(Qt::FocusPolicy::NoFocus);
}
OneDialogMessenger::~OneDialogMessenger()

View File

@@ -1,5 +1,6 @@
#include "metatypes.h"
void registerMetaType()
{
qRegisterMetaType<QList<Instructor>>("QList<Instructor>");
@@ -9,9 +10,9 @@ void registerMetaType()
qRegisterMetaType<QList<Classroom>>("QList<Classroom>");
qRegisterMetaType<QList<Module*>>("QList<Module*>");
qRegisterMetaType<QList<TaskAmmFim>>("QList<TaskAmmFim>");
qRegisterMetaType<MapListsTasksAllTraineeType>("MapListsTasksAllTraineeType");
qRegisterMetaType<PacketType>("PacketType");
qRegisterMetaType<ClientMessage>("ClientMessage");
qRegisterMetaType<QList<QTreeWidgetItem*>>("QList<QTreeWidgetItem*>");
qRegisterMetaType<QList<SubProc>>("QList<SubProc>");
}

View File

@@ -13,6 +13,8 @@
#include "tools.h"
#include "Datas.h"
typedef QMap<int, QList<TaskAmmFim>> MapListsTasksAllTraineeType;
void registerMetaType();
Q_DECLARE_METATYPE(QList<Instructor>)
@@ -22,10 +24,10 @@ Q_DECLARE_METATYPE(QList<Computer>)
Q_DECLARE_METATYPE(QList<Classroom>)
Q_DECLARE_METATYPE(QList<Module*>)
Q_DECLARE_METATYPE(QList<TaskAmmFim>)
Q_DECLARE_METATYPE(MapListsTasksAllTraineeType)
Q_DECLARE_METATYPE(PacketType)
Q_DECLARE_METATYPE(ClientMessage)
Q_DECLARE_METATYPE(QList<QTreeWidgetItem*>)
Q_DECLARE_METATYPE(QList<SubProc>)
#endif // METATYPES_H

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

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