crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в grabMouse() и потеря событий
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ernie Дата 26.4.2011, 13:25
  wiz29 ,ага ,но пока вроде не вылазит глюк с grab'ом,придётся им пользоваться,вроде как в 4.8 они там с этим собираются что-то решать
wiz29 Дата 26.4.2011, 11:57
  :( последнее средство, попробовать написать платформозависимый участок кода, но не факт, что это не глюк видов.
ernie Дата 26.4.2011, 9:33
  wiz29,нет.Поглядел исходники DockWidget , там они юзают grabMouse() сами,плюс для винды у них используется приватное api grabMouseWhileInWindow();
wiz29 Дата 26.4.2011, 8:26
  а принудительно устанавливать фокус не помогает?
ernie Дата 25.4.2011, 18:05
  С виджета фокус уходит,это точно ,ибо hasFocus() возвращает false , это даже с учётом того,что я поставил eventFilter и офильтровал ParentChangeEvent и LeaveEvent у виджета

QApplication::focusWidget возвращает ноль,т.е. как я понимаю фокус вообще уходит

В моем случае на виджете вообще фокуса нет,как я понимаю,ибо даже до смены парента,hasFocus возвращает false

посмотрел moveEvent,пока кнопку не отожмёшь ни один виджет приложения не воспринимает event этот
wiz29 Дата 25.4.2011, 17:44
 
Цитата(ernie @ 25.4.2011, 18:42) *
а как я могу посмотреть кому в денный момент события мыши приходят и на ком фокус?просто на виджетах в обработчиках поглядеть или есть другой способ что-нибудь вроде QWidget::mouseGrabber?

Через QApplication статические методы. а мышиные события только через соответствующие обработчики, конкретных типов виджетов
ernie Дата 25.4.2011, 17:42
  а как я могу посмотреть кому в денный момент события мыши приходят и на ком фокус?просто на виджетах в обработчиках поглядеть или есть другой способ что-нибудь вроде QWidget::mouseGrabber?
wiz29 Дата 25.4.2011, 17:39
 
Цитата(ernie @ 25.4.2011, 18:32) *
но при этом press на виджете теряется,т.е. надо еще раз на него жать,чтобы тащить его куда-нибудь

на ком остается фокус ввода (мыши) и кому продолжают приходить события мыши в этом случае?

в твоем случае получается grabMouse() некий костыль, для того чтобы не делать свой DocWidgetArea по сути, мне такая задача предстоит в ближайшей перспективе, тк многие вещи из стандартной реализации библиотеки не устраивают.
ernie Дата 25.4.2011, 17:32
  wiz29,проблема в том,что в принципе всё работает,может месяц спокойно отпахать без глюков,но иногда всё ломается,причем по неизвестной причине,помогает только перезагрузка компьютера.Где-то читал,что в винде есть глюк с releaseMouse(),но главная проблема то в том что виджет перестаёт принимать события

В общем задача,есть виджет,что-то типа дока,на нём расположены еще виджеты,нужно реализовать перемещение виджетов вне дока по зажатию левой кнопки мыши и движению мыши.Чтобы снять виджет с дока,я ему меняю парента в 0 и двигаю в область нажатия,но при этом press на виджете теряется,т.е. надо еще раз на него жать,чтобы тащить его куда-нибудь
wiz29 Дата 25.4.2011, 17:26
  чтобы понять что происходит, нужно детально смотреть код твоего виджета - "перехватчика" мыши. скорее всего просто не вызываешь releaseMouse() в определенный момент.

Цитата(ernie @ 25.4.2011, 18:23) *
ибо надо чтобы pressEvent сохранился у виджета при смене парента.

Что нужно конкретно опиши подробнее.

если нужно просто транслировать перемещение мыши из одного виджета в другой то проблем вообще никаких нет... можно и без захвата мыши обойтись.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 20:19