| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Потеря фокуса ввода. |
| Автор: OlegIT 18.7.2014, 09:55 |
| На форме есть виджет к которому «прикреплены» несколько других виджетов. Эти «прикреплённые» виджеты можно перемещать мышкой. При определённых условиях происходит перестройка этих виджетов, hide, show, изменение координат и поэтому фокус ввода мыши теряется. Его можно возобновить только заново щёлкнув мышкой. Ни какими setFocus, при перестройке конфигурации, решить вопрос не получается. Можно ли как-то ещё перенаправить сообщение он мыши в новый виджет, который находится под курсором? |
| Автор: OlegIT 21.7.2014, 14:51 |
| В приложении простенький код показывающий проблему. Не получается "протащить" виджет без остановки. |
| Автор: Amp 21.7.2014, 16:02 |
| Не разберу что там у тебя с фокусом, но grabMouse/releaseMouse определенно нужно вызывать. Так хотя бы mouseMoveEvent будет прилетать, когда мышь вылезет за пределы диалога. |
| Автор: OlegIT 21.7.2014, 19:56 |
| Когда мыш выходит за пределы диалога сообщения всё равно приходят в тот виджет на котором был клик, а когда происхолит hide, show сообщение mouseMoveEvent перестают приходить. |
| Автор: OlegIT 23.7.2014, 12:23 |
| grabMouse/releaseMouse не работает. То есть grabMouse срабатывает, окна перемещаются свободно, без остановке, но сообщение mouseReleaseEvent не вызывается и releaseMouse не вызывается. Больше на окне ни чего не работает и кнопка закрыть программу тоже не доступна. |
| Автор: Amp 24.7.2014, 16:12 |
| Странно. В твоем примере вызываю grabMouse в mousePressEvent и releaseMouse в mouseReleaseEvent - все хорошо отрабатывает. |
| Автор: OlegIT 24.7.2014, 20:54 |
| ... Заработало, почему-то. Что было не так, в очередной раз так и не понял:) А в рабочем коде у меня структура посложней и путанней была, видно путанней не только для меня. Но получается, что сообщение mouseMoveEvent дочерние окна не получают или опять я где-то напутал? |
| Автор: math64 25.7.2014, 07:46 |
| Возможно, нужно было пометить, что событие обработано: event->accept() ; Когда я этого не делал в обработчке правой кнопки мыши после моего контектного меню вызывалось системное. |