Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потеря фокуса ввода. 
:(
    Опции темы
OlegIT
Дата 18.7.2014, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



На форме есть виджет к которому «прикреплены» несколько других виджетов. Эти «прикреплённые» виджеты можно перемещать мышкой. При определённых условиях происходит перестройка этих виджетов, hide, show, изменение координат и поэтому фокус ввода мыши теряется. Его можно возобновить только заново щёлкнув мышкой. Ни какими setFocus, при перестройке конфигурации, решить вопрос не получается. Можно ли как-то ещё перенаправить сообщение он мыши в новый виджет, который находится под курсором?

PM MAIL   Вверх
Avazart
Дата 18.7.2014, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 6.4.2013

Репутация: нет
Всего: нет



Цитата(OlegIT @  18.7.2014,  09:55 Найти цитируемый пост)
Ни какими setFocus, при перестройке конфигурации, решить вопрос не получается. 

Почему ? Должно решаться...

Показывай код и/или выкладывай проект.


Это сообщение отредактировал(а) Avazart - 18.7.2014, 12:38
PM MAIL   Вверх
OlegIT
Дата 21.7.2014, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



В приложении простенький код показывающий проблему.

Не получается "протащить" виджет без остановки.

Это сообщение отредактировал(а) OlegIT - 21.7.2014, 14:53

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  TestMoveWidget.rar 4,74 Kb
PM MAIL   Вверх
Amp
Дата 21.7.2014, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Не разберу что там у тебя с фокусом, но grabMouse/releaseMouse определенно нужно вызывать. Так хотя бы mouseMoveEvent будет прилетать, когда мышь вылезет за пределы диалога.
PM MAIL   Вверх
OlegIT
Дата 21.7.2014, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Когда мыш выходит за пределы диалога сообщения всё равно приходят в тот виджет на котором был клик, а когда происхолит hide, show сообщение mouseMoveEvent перестают приходить.
PM MAIL   Вверх
OlegIT
Дата 23.7.2014, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



grabMouse/releaseMouse не работает. То есть grabMouse срабатывает, окна перемещаются свободно, без остановке, но сообщение mouseReleaseEvent не вызывается и releaseMouse не вызывается. Больше на окне ни чего не работает и кнопка закрыть программу тоже не доступна.
PM MAIL   Вверх
Amp
Дата 24.7.2014, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Странно. В твоем примере вызываю grabMouse в mousePressEvent и releaseMouse в mouseReleaseEvent - все хорошо отрабатывает.
PM MAIL   Вверх
OlegIT
Дата 24.7.2014, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 684
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



... Заработало, почему-то. Что было не так, в очередной раз так и не понял:)
А в рабочем коде у меня структура посложней и путанней была, видно путанней не только для меня.
Но получается, что сообщение  mouseMoveEvent дочерние окна не получают или опять я где-то напутал?
PM MAIL   Вверх
math64
Дата 25.7.2014, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Возможно, нужно было пометить, что событие обработано: event->accept() ;
Когда я этого не делал в обработчке правой кнопки мыши после моего контектного меню вызывалось системное.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.