Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vintik от Декабрь 27, 2013, 19:47



Название: Особый режим работы окна приложения
Отправлено: vintik от Декабрь 27, 2013, 19:47
Привет, товарищи!

Есть приложение. Работать оно должно под 7кой и иксами.
У приложения есть главное окно.
Главному окну необходимо задать некий режим работы:
 - чтобы оно отображалось во весь экран
 - чтобы его нельзя было свернуть/закрыть комбинациями клавиш, характерными для графической среды
 - чтобы его нельзя было бы заменить другим окном (запретить возможность смены текущего приложения через Alt+tab)

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

Код:
main_window::main_window(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::main_window)
{
    ui->setupUi(this);
    showFullScreen();
    setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
}

void main_window::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::WindowStateChange)
    {
        if (isMinimized())
        {
            showFullScreen();
            return event->ignore();
        }
    }

    return QMainWindow::changeEvent(event);
}

Да, окно развёрнуто во весь экран, да, оно всегда самое верхнее... но мне кажется, что можно сделать лучше

Подскажите, есть ли решение на Qt?
Если нет, то куда копать применительно к иксам и винде?
Или хотя бы как искать ответ в гугле. Может быть у подобного режима есть какое-то англоязычное специальное название?


Название: Re: Особый режим работы окна приложения
Отправлено: ammaximus от Декабрь 27, 2013, 20:01
Уточните цели. Инфобезопасность или как в компьютерном клубе, чтобы дети не лазили? Содержимое окна форма или рисуется (2d/opengl)?
Что именно не устраивает сейчас? Блокировка системных комбинаций отдельный разговор и к Qt отношения не имеет.


Название: Re: Особый режим работы окна приложения
Отправлено: vintik от Декабрь 28, 2013, 12:22
Уточните цели.

Приложение должно быть установлено на рабочем месте оператора. И у оператора не должно быть возможности как-то свернуть приложение
или перевести его в фон. Т.е. у оператора перед глазами должен быть или выключенный монитор, или запущенное приложение.
Программа представляет собой QMainWindow, центральный виджет которого использует opengl для отображения картинки

Что именно не устраивает сейчас?

Текущее решение выглядит "топорно" и вряд ли оно корректно для поставленной цели..
Думаю, что можно сделать лучше


Название: Re: Особый режим работы окна приложения
Отправлено: Bepec от Декабрь 28, 2013, 16:54
В винде заменяйте шелл и отключайте нафиг все левые контролирующие фишки типа диспетчера задач.

В linux хз.


Название: Re: Особый режим работы окна приложения
Отправлено: vintik от Декабрь 28, 2013, 17:16
В винде заменяйте шелл и отключайте нафиг все левые контролирующие фишки типа диспетчера задач.

Спасибо, буду пробовать!


Название: Re: Особый режим работы окна приложения
Отправлено: Fregloin от Декабрь 29, 2013, 10:42
еще можно попробовать установить системные хуки на клаву и прехватывать ввод с клавы, фильтровать что то типа alt+tab,ctrl+alt+del и т.п. клав.сокращения и игнорировать их, запретитьь передавать дальше системе. при выходе из приложения убирать эти хуки и ось будет работать как прежде.


Название: Re: Особый режим работы окна приложения
Отправлено: Bepec от Декабрь 29, 2013, 11:56
Не получится на винде хуки такие ставить.
Система хуков Windows в этом случае не поможет. Ибо первый хук - всегда системный. Потому ток отключать диспетчер задач.


Название: Re: Особый режим работы окна приложения
Отправлено: vintik от Декабрь 29, 2013, 23:37
по-поводу хуков нашёл вот такой пост http://www.codeguru.com/cpp/misc/misc/keyboard/article.php/c433/Disabling-the-AltTab-key-combination.htm (http://www.codeguru.com/cpp/misc/misc/keyboard/article.php/c433/Disabling-the-AltTab-key-combination.htm).
Хз работает ли, буду на работе проверять.

Ещё была мысль про grabKeyboard(). Но похоже, что это ложный путь..
Я правильно понимаю, что комбинации клавиш графического менеджера, кутешный виджет заграбать не может?

Кстати, нашёл название режима работы апликухи, который мне нужен) Kiosk Mode


Название: Re: Особый режим работы окна приложения
Отправлено: vbv от Декабрь 30, 2013, 05:45
Под линухами у меня была подобная задача.
Заменил wm на мною же правленый evilvm и в нем и запускаю прогу.