From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Modules/QTStarter and the translation is 97% complete.

Other languages:
English • ‎mRussian • ‎Українська
Модуль Имя Версия Лицензия Источник Языки Платформы Тип Автор
QTStarter Qt GUI пускатель 6.0 GPL2 ui_QTStarter.so en,uk,ru,de x86,x86_64,ARM Пользовательские интерфейсы Роман Савоченко
Описание
Предоставляет Qt GUI пускатель. Qt-пускатель является единственным и обязательным компонентом для всех GUI модулей, основанных на библиотеке Qt.
  • Общая трудоёмкость: > 10 ЧД[!]
  • Спонсировано, реализации резервирования на 0.5 ЧД[!]: Хайди Рамезани
  • Задачи (To Do):
- реализовать менеджер подпроектов для их запуска в отдельных процессах, но с их хранением и управлением в одном конфигурационном файле проекта, для высоко-надёжных конфигураций;
- реализовать менеджер фонового исполнения процессов.

Модуль предоставляет в OpenSCADA пускатель GUI модулей, основанных на многоплатформенной библиотеке Qt графического пользовательского интерфейса (GUI), изначально созданной фирмой TrollTech. Также, модуль реализует элементы менеджера проектов OpenSCADA. Отдельный модуль для запуска Qt GUI модулей нужен ввиду необходимости организации однопотокового исполнения всех компонентов визуализации Qt и централизованной инициализации главного объекта Qt-библиотеки — QApplication.

1 Вступление

Изначально этот модуль создаёт отдельный поток для основного потока Qt, где есть возможность формирования экрана динамической заставки, поскольку основные задачи OpenSCADA продолжают исполнение в основном потоке. Однако версия Qt5 стала особенно чувствительной к исполнению в неглавном потоке, поэтому для неё в OpenSCADA добавлена такая возможность, но с обновлением сообщений в заставке из сервисного потока до и после момента переключения на исполнение ним первичных задач. Для контроля этой возможности предусмотрен параметр запуска --QtInNotMainThread, который включает исполнение в неглавном потоке, для Qt4, соответственно, по умолчанию, осуществляется исполнение в главном, что типично для Qt5.

Fig.1. Динамический экран заставки модуля.

Диалоговое окно пускателя (Рис.2) в общем предоставляет:

  • выбор присутствующих Qt GUI модулей, может отсутствовать в случае первичного запуска для выбора только проекта OpenSCADA;
  • выбор присутствующих OpenSCADA проектов для их выбора или переключения;
  • выход из OpenSCADA;
  • меню помощи с пунктами: "Про", "Про Qt", "Руководство QTStarter" (F1), "Руководство OpenSCADA 0.9" и "Что это" (Shift+F1).
Рис.2. Диалоговое окно пускателя этого модуля.

В случае отсутствия диалогового окна запуска и всех окон модулей Qt GUI, программа может быть запущена или свёрнута в системный лоток (Рис.3), созданный этим модулем.

Рис.3. Проект "АГЛКС", запущенный или свёрнутый в системный лоток.

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

Модулем предусматривается поддержка эмуляции правой клавиши мыши для окружений с сенсорным экраном, вроде Android, поскольку интерфейс часто предусматривает контроль исключительно с помощью контекстного меню. Эмуляция включается установкой параметра командной строки --simulRightMKeyTm=<tm>, при старте программы, где указывается время удержания (типично две секунды) нажатия левой клавиши мыши (или на экране) для генерации сообщения правой клавиши мыши и контекстной помощи. Эмуляция правой клавиши не выключает-откладывает первичных сообщений левой клавиши, соответственно её общие действия должны работать корректно, но возможны несоответствия в местах где первичное сообщение что-то переключает и эмулированное сообщение уже пойдёт не по адресу!

2 Qt модули OpenSCADA

Для запуска Qt GUI модулей используется расширенный интерфейс вызова функций модулей. Данный интерфейс подразумевает экспортирование функций внешними модулями. В нашем случае Qt GUI модули должны экспортировать следующие функции:

  • QIcon icon(); — передаёт объект иконки вызываемого модуля, для построения перечня.
  • QMainWindow *openWindow(); — создаёт объект главного окна данного Qt GUI модуля и передаёт его пускателю. Может возвращать NULL в случае невозможности создания нового окна.

Для идентификации, 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).

3 Проекты OpenSCADA

С интеграцией в OpenSCADA элементов менеджера проектов этот модуль получил функцию выбора существующих и создания новых проектов OpenSCADA, в списке проектов и команд проектов (рис.2). На данный момент предусмотрено два режима диалогового окна пускателя (рис.2), это — режим первичного-инициирующего запуска и режим исполнения выбранного проекта.

Первичный-инициирующий режим, по факту, является режимом запуска без определённого проекта и предусматривает именно выбор проекта для переключения в другой режим, и соответственно прячет список Qt GUI модулей, даже если они загружены в инициирующую конфигурацию.

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

В перечне проектов пользователю (через контекстное меню) дополнительно предоставляется возможность удалить неисполняемые проекты, зарезервировать — создать резервную копию, и восстановить проекты из выбранной резервной копии.

Кроме непосредственно названий проектов в перечне проектов, справа от названия, приведено их состояние — "текущий", "выполняется" и "{N} рез.копий". Состояние "текущий" означает, что осуществляется исполнение именно этого проекта. Состояние "исполняется" указывает на наличие файла блокирования множественного запуска, а соответственно и исполнения проекта, и отдельно от этого проекта если рядом не указано состояние "текущий". Выбрать и попробовать переключиться на проект в состоянии "исполняется" можно, приняв предупреждение, но если этот проект реально сейчас исполняется и наличие файла блокировки не является остаточным после аварийного завершения программы то программа, которая переключается, просто завершится! Состояние "{N} рез.копий" указывает на наличие указанного количества резервных копий проекта.

4 Вид и ощущение

В связи с расширением границ использования OpenSCADA на мобильные программные платформы вроде Maemo, MeeGo, Android и частых случаев несоответствия вида программ на библиотеках Qt4 и Qt5 к современным окружениям рабочего стола, этот модуль был расширен собственным механизмом контроля вида и ощущений конечного визуального интерфейсу.

В целом модуль сейчас предусматривает контроль за общим: стилем виджетов Qt, общим шрифтом, палитрой интерфейса и таблицами каскадных стилей. Этот контроль осуществляется через параметры конфигурационного файла "Style", "Font", "Palette", "StyleSheets" и конфигурацией модуля (рис.4).

Также, модулем предусмотрено оформление наработок отдельных видов и ощущений в библиотеке композитного характера, которая формируется в таблице конфигурационного файла со структурой: LookFeel(NAME, FONT, STYLE, PALETTE, STL_SHTS).

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

5 Configuration

To configure the functions shown above, the module provides the ability to configure their parameters through the OpenSCADA control interface (Fig. 4):

  • Section "Module options":
    • Qt modules for startup.
    • Collapse or startup to the system tray.
    • Sessions control-restart — that is applied at the next start and works only for directly started projects without the starter dialog window (Fig.2) of the module. The modes are supported:
      • "if running" — if it is still running when the session is shut down;
      • "anyway" — wants to be started at the start of the next session; At.png on most Linux/X11 desktops that is the same as "if running";
      • "immediately" — wants to be started immediately whenever it is not running; At.png on most Linux/X11 desktops that is the same as "if running";
      • "never" — does not want to be restarted automatically.
  • Section "Look and feels", changes are not applied immediately and require overload:
    • Known profiles — a combobox with a list of profiles in the library and a series of commands over the current profile:
      • "<Clear>" — clear the current profile;
      • "<Read back>" — read back the profile from the current Qt settings, only in the cleaned profile items.
      • "{Profile name}" — read the value from the specified profile name and add-combine with the current one if it is not empty.
    • Widgets style — the profile field allows you to select from the list known styles in this configuration Qt and is not composite.
    • Common font — the Qt common font which specifies icons size also.
    • Palette — the field of the color profile of the interface in three groups of rows: active, disabled, inactive. But with twenty colors in the group line, separated by the character ',': WindowText(0), Button(1), Light(2), Midlight(3), Dark(4), Mid(5), Text(6), BrightText(7), ButtonText(8), Base(9), Window(10), Shadow(11), Highlight(12), HighlightedText(13), Link(14), LinkVisited(15), AlternateBase(16), NoRole(17), ToolTipBase(18), ToolTipText(19). The profile allows you to define only the colors you want, leaving the indeterminate as the empty ones, which determines the composite palette, that is filling the voids with another library profile.
    • Style Sheets — the field of Cascading Style Sheets Profile (CSS), the composite of which is to add CCS rules at the end of the current profile.
Рис.4. Страница конфигурации модуля.

6 API программирования пользователя

Объект модуля (SYS.UI.QTStarter)

  • Array sensors() — получить все доступные сенсоры от Qt mobility, возвращает "false" если не доступно ни одного сенсора.