<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html class="client-nojs" dir="ltr" lang="en">
<head>
<meta charset="UTF-8" />
<title>Модулі/Пускач Qt GUI - OpenSCADAWiki</title>
<meta content="MediaWiki 1.26.4" name="generator" />
<link href="https://www.gnu.org/copyleft/fdl.html" rel="copyright" />
<link href="../../en/files/doc.css" rel="stylesheet" /></head>
<body><div class="floatright"><a href="../index.html"><img alt="OpenSCADA" src="../../en/files/index.png" /></a></div><div id="mw_header">
			<div class="mw-indicators">
</div>
			<h1 id="firstHeading" lang="uk">Модулі/Пускач Qt GUI</h1>
		</div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="uk"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&amp;group=page-Modules%2FQTStarter&amp;action=page&amp;filter=&amp;language=uk" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Modules/QTStarter" title="Modules/QTStarter">Modules/QTStarter</a> and the translation is 100% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../../en/Modules/QTStarter.html" title="Modules/QTStarter (100% translated)">English</a>&nbsp;• ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../ru/Modules/QTStarter.html" title="Модули/Пускатель Qt GUI (97% translated)">mRussian</a>&nbsp;• ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">Українська</span></div></div>
<table class="wikitable">

<tr>
<th> Модуль </th>
<th> Ім'я </th>
<th> Версія </th>
<th> Ліцензія </th>
<th> Джерело </th>
<th> Мови </th>
<th> Платформи </th>
<th> Тип </th>
<th> Автор
</th></tr>

<tr>
<td> <a href="../Modules/QTStarter.html" title="Special:MyLanguage/Modules/QTStarter">QTStarter</a> </td>
<td> Qt GUI пускач
</td>
<td> 6.0 </td>
<td> GPL2 </td>
<td> ui_QTStarter.so </td>
<td> en,uk,ru,de </td>
<td> x86,x86_64,ARM
</td>
<td> Користувацькі інтерфейси </td>
<td> Роман Савоченко
</td></tr>
<tr>
<th colspan="9"> Опис
</th></tr>
<tr>
<td colspan="9"> Надає Qt GUI пускач. Qt-пускач є єдиним та обов'язковим компонентом для всіх GUI модулів, основаних на бібліотеці Qt.
<ul><li> <b>Загальна працемісткість:</b> &gt; 10 <span title="людино-днів, 1ЛД — 10 годин">ЛД<sup style="color: blue">[!]</sup></span></li>
<li> <b>Спонсорування, реалізації резервування на 0.5 <span title="людино-днів, 1ЛД — 10 годин">ЛД<sup style="color: blue">[!]</sup></span>:</b> Хайді Рамезані</li>
<li> <b><a href="../../en/To_do.html" title="Special:MyLanguage/Works/To do">Завдання (To Do)</a>:</b></li></ul>
<dl><dd> - реалізувати менеджер підпроєктів для їх запуску у окремих процесах, але із їх зберіганням та керуванням у одному конфігураційному файлі проєкту, для високо-надійних конфігурацій;</dd>
<dd> - реалізувати менеджер фонового виконання процесів.</dd></dl>
</td></tr></table>
<p>Модуль надає до OpenSCADA пускач GUI модулів, заснованих на багатоплатформеній бібліотеці <a class="external text" href="http://qt.io" rel="nofollow noreferrer noopener" target="_blank">Qt</a> графічного користувацького інтерфейсу (GUI), початково створеній фірмою <a class="external text" href="http://www.trolltech.com" rel="nofollow noreferrer noopener" target="_blank">TrollTech</a>. Також, модуль реалізує елементи менеджеру проєктів OpenSCADA. Окремий модуль для запуску Qt GUI модулів потрібно через необхідність організації однопотокового виконання всіх компонентів візуалізації Qt та централізованої ініціалізації головного об'єкту Qt-бібліотеки — QApplication.
</p>
<div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.D0.92.D1.81.D1.82.D1.83.D0.BF"><span class="tocnumber">1</span> <span class="toctext">Вступ</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Qt_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D1.96_OpenSCADA"><span class="tocnumber">2</span> <span class="toctext">Qt модулі OpenSCADA</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#.D0.9F.D1.80.D0.BE.D1.94.D0.BA.D1.82.D0.B8_OpenSCADA"><span class="tocnumber">3</span> <span class="toctext">Проєкти OpenSCADA</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#.D0.92.D0.B8.D0.B3.D0.BB.D1.8F.D0.B4_.D1.82.D0.B0_.D0.B2.D1.96.D0.B4.D1.87.D1.83.D1.82.D1.82.D1.8F"><span class="tocnumber">4</span> <span class="toctext">Вигляд та відчуття</span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#.D0.9A.D0.BE.D0.BD.D1.84.D1.96.D0.B3.D1.83.D1.80.D0.B0.D1.86.D1.96.D1.8F"><span class="tocnumber">5</span> <span class="toctext"><span>Конфігурація</span></span></a></li>
<li class="toclevel-1 tocsection-6"><a href="#API_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.D1.8F_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.87.D0.B0"><span class="tocnumber">6</span> <span class="toctext">API програмування користувача</span></a></li>
</ul>
</div>

<h2><span class="mw-headline" id=".D0.92.D1.81.D1.82.D1.83.D0.BF"><span class="mw-headline-number">1</span> Вступ</span></h2>
<p>Від початку цей модуль створює окремий потік для основного потоку Qt, де є можливість формування екрану динамічної заставки, оскільки основні завдання OpenSCADA продовжують виконання у основному потоці. Та версія Qt5 стала особливо чутливою до виконання у неголовному потоці, тому для неї у OpenSCADA додано таку можливість, але із оновленням повідомлень у заставці із сервісного потоку до та після моменту перемикання на виконання ним первинний завдань. Для контролю цієї можливості передбачено параметр запуску <i>--QtInNotMainThread</i>, який вмикає виконання у неголовному потоці, для Qt4, відтак, по замовченню, здійснюється виконання у головному, що типово для Qt5.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:606px;"><a class="image" href="http://oscada.org/wiki/File:QTStarter_splash_uk.png"><img class="thumbimage" height="304" src="../files/QTStarter_splash_uk.png" width="604" /></a>  <div class="thumbcaption">Рис.1. Динамічний екран заставки модуля.</div></div></div></div>
<p>Діалогове вікно пускачу (Рис.2) загалом надає:
</p>
<ul><li> вибір наявних Qt GUI модулів, може бути відсутнім у випадку первинного запуску для обрання лише проєкту OpenSCADA;</li>
<li> вибір наявних OpenSCADA проєктів для їх обрання або перемикання;</li>
<li> вихід з OpenSCADA;</li>
<li> меню допомоги з пунктами: "Про", "Про Qt", "Посібник QTStarter" (F1), "Посібник OpenSCADA 0.9" та "Що це" (Shift+F1).</li></ul>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:427px;"><a class="image" href="http://oscada.org/wiki/File:QTStarter_dialog_uk.png"><img class="thumbimage" height="670" src="../files/QTStarter_dialog_uk.png" width="425" /></a>  <div class="thumbcaption">Рис.2. Діалогове вікно пускачу цього модуля.</div></div></div></div>
<p>У разі відсутності діалогового вікна запуску та всіх вікно модулів Qt GUI, програма може бути запущена або згорнута у системний лоток (Рис.3), створений цим модулем.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:340px;"><a class="image" href="http://oscada.org/wiki/File:QTStarter_systray_uk.png"><img class="thumbimage" height="174" src="../files/QTStarter_systray_uk.png" width="338" /></a>  <div class="thumbcaption">Рис.3. Проєкт "АГЛКС", запущений або згорнутий до системного лотка.</div></div></div></div> 
<p>Модулем здійснюється відключення функції збереження сеансу програми при примусовому закритті системою, для того щоб запобігти спробам відновлення цього сеансу при старті системи, оскільки OpenSCADA цього не потребує.
</p><p>Модулем передбачено підтримку емуляції правої клавіші миші для оточень із сенсорним екраном, на кшталт Android, оскільки інтерфейс часто передбачає контроль виключно за допомогою контекстного меню. Емуляція вмикається встановленням параметру командного рядку <i>--simulRightMKeyTm=&lt;tm&gt;</i>, при старті програми, де вказується час утримання (типово дві секунди) натиску лівої клавіші миші (або на екрані) для генерації повідомлення правої клавіші миші та контекстної допомоги. Емуляція правої клавіші не вимикає-відкладає первинних повідомлень лівої клавіші, відтак її загальні дії мають працювати коректно, але можливі невідповідності у місцях де первинне повідомлення щось перемикає та емульоване повідомлення вже піде не за адресою!
</p>
<h2><span class="mw-headline" id="Qt_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D1.96_OpenSCADA"><span class="mw-headline-number">2</span> Qt модулі OpenSCADA</span></h2>
<p>Для запуску Qt GUI модулів використовується розширений інтерфейс виклику функцій модулів. Цей інтерфейс передбачає експортування функцій зовнішніми модулями. У нашому випадку Qt GUI модулі повинні експортувати наступні функції:
</p>
<ul><li> <i>QIcon icon();</i> — передає об'єкт іконки модуля що викликається, для побудови переліку.</li>
<li> <i>QMainWindow *openWindow();</i> — створює об'єкт головного вікна цього Qt GUI модуля та передає його пускачу. Може повертати NULL у випадку неможливості створення нового вікна.</li></ul>
<p>Для ідентифікації, Qt GUI модуль повинен визначити інформаційний елемент модуля "SubType" як "Qt". Виходячи з цієї ознаки "Пускач" з ним працює.
</p><p>Після отримання об'єкту головного вікна "Пускач" його просто відображає, а вікно модуля може саме додатково додати елементи "Пускача", у вигляді загального переліку Qt модулів OpenSCADA, для їх виклику з цього вікна. Загальний перелік Qt модулів OpenSCADA може додаватися у меню або панель інструментів вікна, шляхом виклику слоту "makeStarterMenu(QWidget *mn = NULL)" класу QApplication від "Пускачу", де у <i>mn</i> вказується віджет контейнеру дій (QAction), або меню головного вікна, для NULL.
</p><p>Для встановлення Qt GUI модулів, які запускаються при старті, модуль стартеру містить конфігураційне поле "StartMod". У цьому полі записуються ідентифікатори модулів, що запускаються. Конфігураційне поле "StartMod" можна визначити у конфігураційному файлі, а також у системній таблиці БД ("SYS") через діалог <a href="#Cfg">конфігурації модуля</a> (рис.4).
</p><p>У випадку закриття вікон всіх Qt GUI модулів або запуску без визначення модуля для запуску у полі "StartMod", "Пускач" створює власне діалогове вікно (рис.2). Якщо поле "CloseToTray" конфігураційного файлу або <a href="#Cfg">конфігурацією модуля</a> (рис.4) встановлено то у цьому випадку відбудеться згортання програми до системного лотку (рис.3).
</p>
<h2><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D1.94.D0.BA.D1.82.D0.B8_OpenSCADA"><span class="mw-headline-number">3</span> Проєкти OpenSCADA</span></h2>
<p>З інтеграцією до OpenSCADA елементів менеджеру проєктів цей модуль отримав функцію обрання чинних та створення нових проєктів OpenSCADA, у переліку проєктів та команд проєктів (рис.2). Наразі передбачено два режими діалогового вікна пускачу (рис.2), це — режим первинного-ініціюючого запуску та режим виконання обраного проєкту.
</p><p>Первинний-ініціюючий режим, по факту, є режимом запуску без визначеного проєкту та передбачає саме обрання проєкту для переключення у другий режим, та відповідно приховує перелік Qt GUI модулів, навіть якщо вони завантажені до ініціюючої конфігурації.
</p><p>У режимі виконання проєкту працюють всі типові механізми, а саме це виклик Qt GUI модулів та запуск-згортання у системний лоток, а діалогове вікно пускачу (рис.2) містить перелік наявних Qt GUI модулів та інформацію про запущений проєкт, у заголовку вікна.
</p><p>У переліку проєктів користувачу (через контекстне меню) додатково надається можливість видалити невиконувані проєкти, зарезервувати — створити резервну копію, та відновити проєкти із обраної резервної копії.
</p><p>Окрім безпосередньо назв проєктів у переліку проєктів, праворуч від назви, наведено їх стан — "поточний", "виконується" та "{N} рез.копій". Стан "поточний" означає, що здійснюється виконання саме цього проєкту. Стан "виконується" вказує на наявність файлу блокування багаторазового запуску, а відтак і виконання проєкту, та окремо від цього проєкту якщо поряд не вказано стану "поточний". Обрати та спробувати перемкнутися на проєкт у стані "виконується" можна, прийнявши попередження, але якщо цей проєкт реально зараз виконується і наявність файлу блокування не є залишковим після аварійного завершення програми то програма, що перемикається, просто завершиться! Стан "{N} рез.копій" вказує на наявність визначеної кількості резервних копій проєкту.
</p>
<h2><span class="mw-headline" id=".D0.92.D0.B8.D0.B3.D0.BB.D1.8F.D0.B4_.D1.82.D0.B0_.D0.B2.D1.96.D0.B4.D1.87.D1.83.D1.82.D1.82.D1.8F"><span class="mw-headline-number">4</span> Вигляд та відчуття</span></h2>
<p>У зв'язку із розширенням меж використання OpenSCADA на мобільні програмні платформи на кшталт Maemo, MeeGo, Android та частих випадків невідповідності вигляду програм на бібліотеках Qt4 та Qt5 до сучасних оточень робочого столу, цей модуль було розширено власним механізмом контролю вигляду та відчуттів кінцевого візуального інтерфейсу.
</p><p>Загалом, модуль наразі передбачає контроль за загальним: стилем віджетів Qt, основним шрифтом, палітрою інтерфейсу та таблицями каскадних стилів. Цей контроль здійснюється через параметри конфігураційного файлу "Style", "Font", "Palette", "StyleSheets" та <a href="#Cfg">конфігурацією модуля</a> (рис.4).
</p><p>Також, модулем передбачено оформлення напрацювань окремих видів та відчуттів у бібліотеці композитного характеру, яка формується у таблиці конфігураційного файлу зі структурою: <b>LookFeel(<u>NAME</u>, FONT, STYLE, PALETTE, STL_SHTS)</b>.
</p><p>Відтак, для мобільних пристроїв або заздалегідь відомих специфічних оточень робочого столу, потрібний вигляд та відчуття можна попередньо встановлювати у конфігураційному файлі пакунків програми, та для всіх можна швидко змінити після встановлення, обравши потрібний з бібліотеки.
</p>
<h2><span class="mw-headline" id=".D0.9A.D0.BE.D0.BD.D1.84.D1.96.D0.B3.D1.83.D1.80.D0.B0.D1.86.D1.96.D1.8F"><span class="mw-headline-number">5</span> <span id="Cfg" title="#Cfg">Конфігурація</span></span></h2>
<p>Для конфігурації функцій, що наведено вище, модулем надається можливість налаштування їх параметрів за посередництвом інтерфейсу управління OpenSCADA (Рис.4):
</p>
<ul><li> Секція "Опції модуля":
<ul><li> <i>Модулі Qt для запуску</i>.</li>
<li> <i>Згортати або запускати у системний лоток</i>.</li>
<li> <i>Керування-перезапуск сеансів</i> — застосовується при наступному запуску та працює лише для прямо запущених проєктів без діалогового вікна пускачу (Рис.2) цього модуля. Підтримуються режими:
<ul><li> "якщо виконується" — якщо він все ще виконується коли сеанс вимикається;</li>
<li> "завжди" — бажає бути запущеним із запуском наступного сеансу; <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../../en/files/At.png" width="22" /></a> на більшості Linux/X11 стільниць це те саме, що й "якщо виконується";</li>
<li> "негайно" — бажає бути запущеним негайно коли не виконується; <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../../en/files/At.png" width="22" /></a> на більшості Linux/X11 стільниць це те саме, що й "якщо виконується";</li>
<li> "ніколи" — не бажає перезапускатися автоматично.</li></ul></li></ul></li>
<li> Секція "Вигляд та відчуття", зміни тут не застосовуються одразу та вимагають перевантаження:
<ul><li> <i>Відомі профілі</i> — комбобокс з переліком профілів у бібліотеці та низка команд над поточним профілем:
<ul><li> "&lt;Очистити&gt;" — очистити поточний профіль;</li>
<li> "&lt;Прочитати назад&gt;" — прочитати профіль з поточних налаштувань Qt, тільки у очищені елементи профілю.</li>
<li> "{Ім'я профілю}" — прочитати значення з вказаного за ім'ям профілю та додати-скомбінувати з поточним, якщо він не порожній.</li></ul></li>
<li> <i>Стиль віджетів</i> — поле профілю, передбачає можливість обрання з переліку відомих у цій конфігурації Qt та не є композитним.</li>
<li> <i>Загальний шрифт</i> — загальний шрифт Qt, який також визначає розмір іконок.</li>
<li> <i>Палітра</i> — поле профілю кольорів інтерфейсу у трьох групах за рядками: активна, вимкнена, неактивна. Та з двадцятьма кольорами у групі-рядку, поділені символом ',': 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). Профіль допускає визначення тільки потрібних кольорів, залишаючи невизначені порожніми, та саме це визначає композитність палітри, а саме — заповнення порожнеч іншим профілем бібліотеки.</li>
<li> <i>Сторінки стилів</i> — поле профілю каскадних таблиць стилів (CSS), композитність якого полягає у доданні CCS правил у кінець поточного профілю.</li></ul></li></ul>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:775px;"><a class="image" href="http://oscada.org/wiki/File:QTStarter_cfg_uk.png"><img class="thumbimage" height="715" src="../files/QTStarter_cfg_uk.png" width="773" /></a>  <div class="thumbcaption">Рис.4. Сторінка конфігурації модуля.</div></div></div></div>
<h2><span class="mw-headline" id="API_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.D1.8F_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.87.D0.B0"><span class="mw-headline-number">6</span> API програмування користувача</span></h2>
<p><b>Об'єкт модуля (SYS.UI.QTStarter)</b>
</p>
<ul><li> <i>Array sensors()</i> — отримати всі наявні сенсори від Qt mobility, повертає "false" якщо не доступно жодного сенсору.</li></ul>






</div><table style="border-top: dotted 2px #999999; margin-top: 20pt; color: gray;" width="100%"><tr><td style="text-align: left;" width="40%"><a href="http://oscada.org/wiki/Modules/QTStarter/uk">Modules/QTStarter/uk</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body>
</html>