Qt :: X11BypassWindowManagerHint функциональность в Windows - PullRequest
1 голос
/ 12 марта 2010

В настоящее время я разрабатываю виртуальную клавиатуру с кросс-платформой. В Linux я мог делать все, что захочу, но в Windows у меня возникают проблемы, мешающие виджету получить фокус клавиатуры.

В Linux, используя флаг окна

Qt::X11BypassWindowManagerHint

виджет никогда не получает ввод с клавиатуры, но, конечно, этот флаг не работает в Windows

Есть ли что-то эквивалентное этому флагу или какой-то метод, который я могу использовать вместо этого?

любые идеи будут оценены

спасибо заранее

Ответы [ 2 ]

1 голос
/ 04 сентября 2013

Я отправил ответ на аналогичный вопрос в Сделать плавающий QDockWidget не сфокусированным . На Win32 у вас нет возможности полностью обойти оконный менеджер, но вы должны быть в состоянии получить большинство желаемого поведения, перехватывая nativeEvent для обработки WM_MOUSEACTIVATE.

0 голосов
/ 26 марта 2010

Я бы попытался проигнорировать это событие. Я считаю, что вам нужно игнорировать FocusIn в главном окне приложения - не уверен насчет фактического события, вам может потребоваться его прототипирование. Вы можете игнорировать события, либо установив фильтр событий, либо повторно вручную внедрив один из методов event (возможно, сам event). Я не знаю, какой способ предпочтительнее, но сначала я попробую фильтр событий для этой задачи: http://doc.trolltech.com/4.6/qobject.html#eventFilter

Я никогда не пытался захватить событие фокусировки клавиатуры, но мне удалось успешно игнорировать управляющие клавиши в QDialog, чтобы предотвратить случайное закрытие окна пользователями. Я считаю, что это должно быть возможно.

...