Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Jora от Март 07, 2012, 22:23



Название: Фокус ввода при переключении приложений
Отправлено: Jora от Март 07, 2012, 22:23
Всем привет!
Имеется программа, которая выполняет как бы функцию диспетчера, и запускает другие приложения (3-4) через QProcess.
Запускаются приложения в полноэкранном режиме. Причем все время видно только одно приложение. Переключение между ними реализовано через pipe. Таким образом, когда мы переключаемся, одно приложение скрывается (setvisible(false)) другое же, появляется (setvisible(true)).
Вот тут и начинаются проблемы. Иногда!! фокус теряется, и запущенное приложение не реагирует на нажатия клавиш.
Пробовал вместе с setvisible(true) делать setFocus();
setActivateWindow() (в документации написано что, приложение должно быть в top level однако этого не происходит)
пробовал через библиотеку X11 реализовать активацию окна с получением фокуса, однако тоже бесполезно.
Примечательно, что иногда фокус срабатывает, а иногда нет.
Тестировал на Ubuntu 10.04, 10.10, 11.10 (x86, x64). Везде одна и таже проблема. Версия Qt 4.7.4
Подскажите, что можно здесь сделать?
Заранее спасибо


Название: Re: Фокус ввода при переключении приложений
Отправлено: LisandreL от Март 08, 2012, 00:19
Если запускаемые приложения ваши - попробуйте вслед за setVisible(true) вызывать QWidget::raise и QWidget::activateWindow.


Название: Re: Фокус ввода при переключении приложений
Отправлено: Jora от Март 08, 2012, 00:58
Приложения мои. Все команды через pipe лично обрабтываю. Вот что делаю когда хочу показать приложение:
Код:
this->setWindowState(Qt::WindowFullScreen);
show();
this->raise();
this->activateWindow();
это не помогает. Притом при первом запуске фокус ловиться, а вот уже при переключении между запущенными приложениями. он пропадает.


Название: Re: Фокус ввода при переключении приложений
Отправлено: mutineer от Март 08, 2012, 01:02
У убунтовского виндоу-менеджера есть определенная особенность - когда пытаешься программно рэйзить окно, которое уже есть на экране, но не на верху стека окон, то оно не рэйзится, а просто мигает в доке/тасбаре/etc

Видел хак этого поведения через установку и тут же сбрасывание флага allwaysOnTop при рэйзе