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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Фокус ввода при переключении приложений  (Прочитано 3048 раз)
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
Подскажите, что можно здесь сделать?
Заранее спасибо
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Март 08, 2012, 00:19 »

Если запускаемые приложения ваши - попробуйте вслед за setVisible(true) вызывать QWidget::raise и QWidget::activateWindow.
Записан
Jora
Гость
« Ответ #2 : Март 08, 2012, 00:58 »

Приложения мои. Все команды через pipe лично обрабтываю. Вот что делаю когда хочу показать приложение:
Код:
this->setWindowState(Qt::WindowFullScreen);
show();
this->raise();
this->activateWindow();
это не помогает. Притом при первом запуске фокус ловиться, а вот уже при переключении между запущенными приложениями. он пропадает.
Записан
mutineer
Гость
« Ответ #3 : Март 08, 2012, 01:02 »

У убунтовского виндоу-менеджера есть определенная особенность - когда пытаешься программно рэйзить окно, которое уже есть на экране, но не на верху стека окон, то оно не рэйзится, а просто мигает в доке/тасбаре/etc

Видел хак этого поведения через установку и тут же сбрасывание флага allwaysOnTop при рэйзе
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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