Автор Тема: Как задать фокус окна  (Прочитано 434 раз)

soalvi

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Как задать фокус окна
« : 26 Май 2010, 12:10:25 »
Имеется планшетный ПК без мыши но с клавиатурой. Я написал программу (Qt) в которой через открытое модальное окно оператор с помощью клавиатуры вводит данные.
  Проблема заключается в том, что пока курсор мышки (при отладке на своём рабочем месте пользуюсь мышью) не окажется на модальном окне, клавиатура не работает.
  Пробовал перед вызовом ххх.exec ставить ххх.setFocus, не помогает. Пробовал отключать демон консольной мыши и физически мышь, но после запуска курсор мыши присутствует и проблемы это не решает.
  Программу запускаю из консоли следующим образом xinit ./x --:1
  Подскажите как мне решить эту проблему?

DJm00n

  • Новичок
  • *
  • Сообщений: 13
  • DJm00n - Не только покемон:)
    • ICQ клиент - 190977823
    • Yahoo клиент - skype:DJm00n
    • Просмотр профиля
    • homepage
Re: Как задать фокус окна
« Ответ #1 : 01 Июнь 2010, 20:16:48 »
Может попробовать отлавливать глобальные клавиши(при любом состоянии окна)? Или использовать какой то менеджер окон...поищи легкие менеджеры окон, думаю проблема отпадет сама. Таки да, twm убог :) Может чтото вроде http://en.wikipedia.org/wiki/Awesome_(window_manager)?
ЗЫ: Мысли вслух:)
---
jid: djm00n@jabber.ru
icq: 190977823
skype: djm00n
email: djm00n%@%ya.ru (без % естественно)
Всегда готов пообщаться

overlapped

  • Постоялец
  • ***
  • Сообщений: 181
  • Я
    • ICQ клиент - 22442032
    • MSN клиент - overlapped@hotmail.com
    • Просмотр профиля
    • Email
Re: Как задать фокус окна
« Ответ #2 : 02 Июнь 2010, 09:22:17 »
К моему большому сожалению, никогда не общался с планшетниками, но да ладно! Можно пока поразмышлять!
И очень советую почитать документацию на Qt, там много полезного! Начнём!

1. Уровень модальности окна может быть разный: на уровне приложения, на уровне системы, на уровне виртуального дисплея, на уровне физического экрана. Но например, модальное окно на уровне системы (например вызванное из системного сервиса) фокус получает автоматически и не теряет его!
2. Открываем документацию http://doc.qt.nokia.com/4.6/qwidget.html#setFocus и смотрим: void QWidget::setFocus ( Qt::FocusReason  reason ), параметр reason определяет почему фокус сменился: мышь, клава, клавиша Tab, всплывающее окно, или всяческие sip input panel для встроенных систем. Событие таже отлавливается в QFocusEvent.
3. Свойство focusPolicy : Qt::FocusPolicy определяет как должен менятся фокус.
4. Смотрите какой установлен порядок получения фокуса виджетов в окне.
5. На открытии окна можно сделать захват клавиатуры: void QWidget::grabKeyboard ()
и т.д.
Надеюсь чем то помог!  ;)
FreeBSD 8.0, openSUSE 11.2, JID: overlapped@jabber.org, эл. почта: overlapped@kde.ru

twister

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Как задать фокус окна
« Ответ #3 : 21 Июль 2010, 16:14:26 »
Если еще актуально, то можно попробывать использовать метод activateWindow()