Модуль | Имя | Версия | Лицензия | Источник | Языки | Платформы | Тип | Автор |
---|---|---|---|---|---|---|---|---|
QTStarter | Qt GUI пускатель | 6.0 | GPL2 | ui_QTStarter.so | en,uk,ru,de | x86,x86_64,ARM | Пользовательские интерфейсы | Роман Савоченко |
Описание | ||||||||
Предоставляет Qt GUI пускатель. Qt-пускатель является единственным и обязательным компонентом для всех GUI модулей, основанных на библиотеке Qt.
|
Модуль предоставляет в OpenSCADA пускатель GUI модулей, основанных на многоплатформенной библиотеке Qt графического пользовательского интерфейса (GUI), изначально созданной фирмой TrollTech. Также, модуль реализует элементы менеджера проектов OpenSCADA. Отдельный модуль для запуска Qt GUI модулей нужен ввиду необходимости организации однопотокового исполнения всех компонентов визуализации Qt и централизованной инициализации главного объекта Qt-библиотеки — QApplication.
Изначально этот модуль создаёт отдельный поток для основного потока Qt, где есть возможность формирования экрана динамической заставки, поскольку основные задачи OpenSCADA продолжают исполнение в основном потоке. Однако версия Qt5 стала особенно чувствительной к исполнению в неглавном потоке, поэтому для неё в OpenSCADA добавлена такая возможность, но с обновлением сообщений в заставке из сервисного потока до и после момента переключения на исполнение ним первичных задач. Для контроля этой возможности предусмотрен параметр запуска --QtInNotMainThread, который включает исполнение в неглавном потоке, для Qt4, соответственно, по умолчанию, осуществляется исполнение в главном, что типично для Qt5.
Диалоговое окно пускателя (Рис.2) в общем предоставляет:
В случае отсутствия диалогового окна запуска и всех окон модулей Qt GUI, программа может быть запущена или свёрнута в системный лоток (Рис.3), созданный этим модулем.
Модулем осуществляется отключение функции сохранения сеанса программы при принудительном закрытии системой, для того чтобы предотвратить попытки восстановления этого сеанса при старте системы, поскольку OpenSCADA этого не нужно.
Модулем предусматривается поддержка эмуляции правой клавиши мыши для окружений с сенсорным экраном, вроде Android, поскольку интерфейс часто предусматривает контроль исключительно с помощью контекстного меню. Эмуляция включается установкой параметра командной строки --simulRightMKeyTm=<tm>, при старте программы, где указывается время удержания (типично две секунды) нажатия левой клавиши мыши (или на экране) для генерации сообщения правой клавиши мыши и контекстной помощи. Эмуляция правой клавиши не выключает-откладывает первичных сообщений левой клавиши, соответственно её общие действия должны работать корректно, но возможны несоответствия в местах где первичное сообщение что-то переключает и эмулированное сообщение уже пойдёт не по адресу!
Для запуска Qt GUI модулей используется расширенный интерфейс вызова функций модулей. Данный интерфейс подразумевает экспортирование функций внешними модулями. В нашем случае Qt GUI модули должны экспортировать следующие функции:
Для идентификации, Qt GUI модуль должен определять информационный элемент модуля "SubType" как "Qt". Исходя из этого признака "Пускатель" с ним работает.
После получения объекта главного окна "Пускатель" его просто отображает, а окно модуля может само дополнительно добавить элементы "Пускателя", в виде общего перечня Qt модулей OpenSCADA, для их вызова из этого окна. Общий перечень Qt модулей OpenSCADA может добавляться в меню или панель инструментов окна, путём вызова слота "makeStarterMenu(QWidget *mn = NULL)" класса QApplication от "Пускателя", где в mn указывается виджет контейнера действий (QAction), или меню главного окна, для NULL.
Для указания Qt GUI модулей, которые запускаются при старте, модуль стартера содержит конфигурационное поле "StartMod". В этом поле записываются идентификаторы модулей, которые запускаются. Конфигурационное поле "StartMod" можно определить в конфигурационном файле, а также в системной таблице БД ("SYS") через диалог конфигурации модуля (рис.4).
В случае закрытия окон всех Qt GUI модулей или запуске без определения модуля для запуска в поле "StartMod", "Пускатель" создаёт собственное диалоговое окно (рис.2). Если поле "CloseToTray" конфигурационного файла или конфигурацией модуля (рис.4) установлено то в этом случае осуществляется сворачивание программы в системный лоток (рис.3).
С интеграцией в OpenSCADA элементов менеджера проектов этот модуль получил функцию выбора существующих и создания новых проектов OpenSCADA, в списке проектов и команд проектов (рис.2). На данный момент предусмотрено два режима диалогового окна пускателя (рис.2), это — режим первичного-инициирующего запуска и режим исполнения выбранного проекта.
Первичный-инициирующий режим, по факту, является режимом запуска без определённого проекта и предусматривает именно выбор проекта для переключения в другой режим, и соответственно прячет список Qt GUI модулей, даже если они загружены в инициирующую конфигурацию.
В режиме исполнения проекта работают все типовые механизмы, а именно это вызов Qt GUI модулей и запуск-сворачивание в системный лоток, а диалоговое окно пускателя (рис.2) содержит перечень присутствующих Qt GUI модулей и информацию про запущенный проект, в заголовке окна.
В перечне проектов пользователю (через контекстное меню) дополнительно предоставляется возможность удалить неисполняемые проекты, зарезервировать — создать резервную копию, и восстановить проекты из выбранной резервной копии.
Кроме непосредственно названий проектов в перечне проектов, справа от названия, приведено их состояние — "текущий", "выполняется" и "{N} рез.копий". Состояние "текущий" означает, что осуществляется исполнение именно этого проекта. Состояние "исполняется" указывает на наличие файла блокирования множественного запуска, а соответственно и исполнения проекта, и отдельно от этого проекта если рядом не указано состояние "текущий". Выбрать и попробовать переключиться на проект в состоянии "исполняется" можно, приняв предупреждение, но если этот проект реально сейчас исполняется и наличие файла блокировки не является остаточным после аварийного завершения программы то программа, которая переключается, просто завершится! Состояние "{N} рез.копий" указывает на наличие указанного количества резервных копий проекта.
В связи с расширением границ использования OpenSCADA на мобильные программные платформы вроде Maemo, MeeGo, Android и частых случаев несоответствия вида программ на библиотеках Qt4 и Qt5 к современным окружениям рабочего стола, этот модуль был расширен собственным механизмом контроля вида и ощущений конечного визуального интерфейсу.
В целом модуль сейчас предусматривает контроль за общим: стилем виджетов Qt, общим шрифтом, палитрой интерфейса и таблицами каскадных стилей. Этот контроль осуществляется через параметры конфигурационного файла "Style", "Font", "Palette", "StyleSheets" и конфигурацией модуля (рис.4).
Также, модулем предусмотрено оформление наработок отдельных видов и ощущений в библиотеке композитного характера, которая формируется в таблице конфигурационного файла со структурой: LookFeel(NAME, FONT, STYLE, PALETTE, STL_SHTS).
Т.е., для мобильных устройств или наперёд известных специфических окружений рабочего стола, нужный вид и ощущения можно предварительно устанавливать в конфигурационном файле пакетов программы, и для всех можно быстро изменить после установки, выбрав нужный из библиотеки.
To configure the functions shown above, the module provides the ability to configure their parameters through the OpenSCADA control interface (Fig. 4):
Объект модуля (SYS.UI.QTStarter)
Modules/QTStarter/ru - GFDL | December 2024 | OpenSCADA 1+r3000 |