Russian Qt Forum
Ноябрь 23, 2024, 04:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Как запретить закрытие окон под Astra Linux  (Прочитано 26887 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #30 : Апрель 26, 2019, 12:25 »

[offtop]
Плюс, еще и резервирование АРМ операторов делают обычно... Если на одном АРМ-е какой-то кирдык со скадой, то на резервном (или одном из резервных АРМ-ов) запускается "виу-виу-виу" чтобы привлечь внимание оператора. Также все события логируются в базу, как все действия оператора, так и прочее... И если в логе видно, что оператор закрыл главное окошко - то он ССЗБ, т.к. никогда в операторы не берут идиотов, все операторы технически грамотные и подкованные (да и расписываются в журнале, о том что ознакомлены с особенностями скады и пр.) и дадут фору любому программисту.. Улыбающийся

Плюс ко всему, в каждой отрасти есть свои очень жесткие требования к СКАДАМ и пр. фишки (алгоритм дейстий и реакции оператора и/или СКАДЫ на то или иное событие)... Если таких требований нет - и программист сам придумывает всякие штучки-дрючки (а вот, запрещу ка я закрытие окошек) - то тут у меня нет слов (а в этой теме именно такая дичь).
[/offtop]
« Последнее редактирование: Апрель 26, 2019, 12:31 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #31 : Апрель 26, 2019, 12:36 »

Да все так и есть, все пульты и прочие вычислительные средства резервированно-троированные, локальная сеть дублированная. Вот оператор только живой и не может он смотреть на три экрана одновременно. Звук не прижился от слова совсем.
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #32 : Апрель 26, 2019, 17:23 »

можно перезапускать приложение без потери данных
mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
main.cpp
Код:
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    while (1) {
        w.show();
        a.exec();
    }
    return 0;
}
mainwindow.ui
Код
XML
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
 <property name="geometry">
  <rect>
   <x>0</x>
   <y>0</y>
   <width>287</width>
   <height>265</height>
  </rect>
 </property>
 <property name="windowTitle">
  <string>MainWindow</string>
 </property>
 <widget class="QWidget" name="centralWidget">
  <layout class="QGridLayout" name="gridLayout">
   <item row="0" column="0">
    <widget class="QLineEdit" name="lineEdit"/>
   </item>
   <item row="1" column="0">
    <widget class="QSpinBox" name="spinBox"/>
   </item>
  </layout>
 </widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
 
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #33 : Апрель 27, 2019, 13:18 »

Требуется полностью запретить пользователю закрывать и перемещать некоторые окна (не имеющие X или заголовка), а также запретить завершение приложений.
ну вот как вариант - неубираемое, незакрываемое и не перемещаемое окно
Код:
//respawn.cpp
#include <QApplication>
#include <QWidget>
#include <QString>

int main(int argc, char** argv) {
    QApplication app(argc,argv);
    QWidget w;
    int ax=100,ay=100,aw=400,ah=300;
    if (argc == 5) {
        ax = QString::fromLocal8Bit(argv[1]).toInt();
        ay = QString::fromLocal8Bit(argv[2]).toInt();
        aw = QString::fromLocal8Bit(argv[3]).toInt();
        ah = QString::fromLocal8Bit(argv[4]).toInt();
    }
    w.setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
    w.setGeometry(ax,ay,aw,ah);
    while (1) {
        w.show();
        app.exec();
    }
}
запуск
Код
Bash
#!/bin/sh
 
./respawn &
./respawn 100 450 500 400 &
 
останов
Код
Bash
#!/bin/sh
 
pkill respawn
 
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #34 : Апрель 27, 2019, 13:40 »

Я, все-таки, кое-чего нашел: во-первых - настройки, при которых окна не попадают в панель инструментов (соответственно, нет и меню), может, есть и еще чего-нибудь хорошее; во-вторых - kiosk-mode для организации разных терминалов, позволяет запускать приложение вообще без рабочего стола либо организовывать песочницу. Не устраивает ведь не весь WM, а только DE.
У перезапуска есть побочный эффект - если приложение падает по сбою железа или от программной ошибки, может получиться циклический перезапуск. Тут надо думать.
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #35 : Апрель 28, 2019, 11:00 »

Код:
#include <QApplication>
#include <QWidget>
#include <QString>
//#include <QDebug>
#include <QMessageBox>

int main(int argc, char** argv) {
    QApplication app(argc,argv);
    QWidget w;
    int ax=100,ay=100,aw=400,ah=300;
    if (argc == 5) {
        ax = QString::fromLocal8Bit(argv[1]).toInt();
        ay = QString::fromLocal8Bit(argv[2]).toInt();
        aw = QString::fromLocal8Bit(argv[3]).toInt();
        ah = QString::fromLocal8Bit(argv[4]).toInt();
    }
    //w.setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
    w.setGeometry(ax,ay,aw,ah);
    while (1) {
        w.show();
        app.exec();
        QMessageBox box;
        box.setIcon(QMessageBox::Warning);
        box.setText("<font color=red>Приложение остановлено<br>Перезапустить?</font>");
        box.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
        box.setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
        int ok = box.exec();
        if (ok != QMessageBox::Ok) break;
    }
}
перезапуск с сообщением например. но по моему опыту - если комп нужен для контроля технологических процессов - ничего лишнего быть не должно. я бы максимум Openbox поставил как WM, без всяких Fly-kiosk
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #36 : Апрель 28, 2019, 19:33 »

OpenBox тоже рассматривался. Здесь, скорее всего будут проблемы с сертификацией под версию Special Edition, надо выяснять. /offtop Ну и кой-какой опыт я тоже накопил, заничвясь разработкой этого сорта ПО с 1983 г. :-) offtop/
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #37 : Апрель 29, 2019, 08:57 »

У перезапуска есть побочный эффект - если приложение падает по сбою железа или от программной ошибки, может получиться циклический перезапуск. Тут надо думать.

делать перезапуск при сбое ограниченное число раз, например 5
и всегда выжидать паузу между перезапусками 5 сек

Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #38 : Апрель 29, 2019, 08:59 »

останов
Код
Bash
pkill respawn
 

от этого тоже можно защититься, если это не SIGKILL
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 90


Просмотр профиля
« Ответ #39 : Апрель 29, 2019, 10:44 »

OpenBox тоже рассматривался. Здесь, скорее всего будут проблемы с сертификацией под версию Special Edition, надо выяснять. /offtop Ну и кой-какой опыт я тоже накопил, заничвясь разработкой этого сорта ПО с 1983 г. :-) offtop/
вангую вы с линухами мало знакомы.
у астры есть свой сертифицированный репозиторий, можете из него скачать все что нужно.
по факту - тот же дебиан тока рабочий стол перепиленый
посмотрел на LiveCD с mirror.yandex.ru - опенбокс там есть по дефолту, можно выбрать при входе в выборе типа сессии, при подключении репы с яндекса ставится qtcreator





« Последнее редактирование: Апрель 29, 2019, 12:24 от vic57 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #40 : Апрель 29, 2019, 13:29 »

никогда в операторы не берут идиотов, все операторы технически грамотные и подкованные (да и расписываются в журнале, о том что ознакомлены с особенностями скады и пр.) и дадут фору любому программисту.. Улыбающийся
"Портовому мальчонке" - возможно и дадут Улыбающийся, а за всех программистов расписываться не надо. Но в целом офф весьма здравый - такие проблемы не решаются дизайблом кнопок. По меньшей мере нужно фиксировать факт ошибки, и неплохо бы уточнить - а что это? Что значит невнятное "оператор может проморгать"? Закрыл приложение (или оно само закрылось по объективным причинам), и важный запрос не был принят и ...утерян, так что ли? Значит недопустимо терять, нужно сохранять запрос и факт  "неответа" и предъявлять это при след запуске.

Видимо это кажется слишком банальным, нужно нагородить что-нибудь "эдакое"  Улыбающийся
Записан
AlexEx
Чайник
*
Offline Offline

Сообщений: 76


Просмотр профиля
« Ответ #41 : Апрель 29, 2019, 13:31 »

Не спорю, с Linuxaми мало знаком. Последний раз имел дело с Mandriva 2007. Ну а общее направление действий в общем-то прояснилось.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #42 : Май 07, 2019, 15:40 »

Только собирался сказать про kiosk-mode. Уже один раз сталкивался - то что вам нужно. По поводу падения софта, напишите демон, который остлеживает жизнеспособность вашего GUI приложения, и по таймауту или вачдогу перезапускает его.
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.148 секунд. Запросов: 23.