Название: QVideoWidget и mouseTracking Отправлено: torwig от Март 02, 2015, 12:41 Здравствуйте.
Необходимо получать события движения мыши поверх QVideoWidget. Вроде ничего сложного. Создал своего наследника, переопределил mouseMoveEvent(), написал в конструкторе setMouseTracking(true). Но, не работает) Гугл из внятного показывает это https://bugreports.qt.io/browse/QTBUG-30728. Пробовал отнаследоваться от обычного виджета и на нем разместить QVideoWidget, установив ему Qt::WA_TransparentForMouseEvents. Но и в этом случае все равно не пропускает событий без нажатий кнопки мыши. Как можно выкрутиться с возникшей ситуации? Нечто вроде "накрыть QVideoWidget прозрачным виджетом, который будет ловить события мыши". Спасибо. п.с. Действие происходит на Убунте 14, Qt версии 5.2. Название: Re: QVideoWidget и mouseTracking Отправлено: Igors от Март 02, 2015, 13:38 Могу ошибаться, но стоит проверить банальный eventFilter который срабатывает и без mouseTracking
Название: Re: QVideoWidget и mouseTracking Отправлено: torwig от Март 02, 2015, 16:42 Написал такой код:
Код: bool VideoWidget::eventFilter(QObject* obj, QEvent* ev) Код: mVideoWidget->installEventFilter(this); где VideoWidget - моя форма, на которой есть QVideoVidget(mVideoWidget). Сообщения "filter" появляются только при движении мыши с нажатой левой кнопкой мыши, если отпустить - никаких сообщений не наблюдается. Название: Re: QVideoWidget и mouseTracking Отправлено: Igors от Март 02, 2015, 17:01 Перекройте QApplication::notify, напр
Код И в консоли смотрите кто там такой умный получает 5 (MouseMove) Название: Re: QVideoWidget и mouseTracking Отправлено: Bepec от Март 02, 2015, 17:07 По идеологии Qt внутри скрывается виджет, который как раз и получает ваши передвижения. Другой вопрос, как до него добраться :)
Название: Re: QVideoWidget и mouseTracking Отправлено: torwig от Март 02, 2015, 17:34 Igors, спасибо.
Сделал как Вы написали, оказалось что получает событие виджет (MainWidget), который я устанавливаю центральным для QMainWindow, и который задаю родителем для виджета с QVideoWidget. Может ли такое быть из-за того, что "виджет с QVideoWidget" непосредственно не компонуется на MainWidget, а просто имеет его родителем (сделал так чтобы можно было мышкой перетягивать "виджет с QVideoWidget" внутри окна программы)? Название: Re: QVideoWidget и mouseTracking Отправлено: Igors от Март 02, 2015, 18:38 Может ли такое быть из-за того, что "виджет с QVideoWidget" непосредственно не компонуется на MainWidget, а просто имеет его родителем (сделал так чтобы можно было мышкой перетягивать "виджет с QVideoWidget" внутри окна программы)? Нет, если мыша над верхним виджетом, то mouseMove он должен получать. Выкладывайте тестовый проект, посмотрим где собака порылась.Название: Re: QVideoWidget и mouseTracking Отправлено: torwig от Март 03, 2015, 10:54 Прикрепляю тестовый проект, урезал как мог :)
Использование: вызвать контекстное меню, выбрать видеофайл, подвигать мышкой над QVideoWidget - сообщения с mouseMoveEvent не приходят. Если попробовать переместить виджет с нажатой левой кнопкой мыши, сообщения есть. п.с. вторая проблема проявится, если попробовать нажать на кнопку "Открыть", возможно это связано с первой проблемой. Спасибо. Буду рад любым замечаниям по коду. п.с. Qt нужен 5.2 и выше, где есть уже multimediawidgets Название: Re: QVideoWidget и mouseTracking Отправлено: Igors от Март 03, 2015, 13:41 Qt 5.4 платформа OSX
Qt 5.3.2 платформа Вындоуз В обоих случаях все работает "как доктор прописал" (и на notify приходит, и "mme" печать). Да, сначала приходит main окну (не виджету) - это нормально Название: Re: QVideoWidget и mouseTracking Отправлено: torwig от Март 03, 2015, 14:55 Igors, большое спасибо за тестирование.
На Виндовс у меня вывод Код: 1470 QWidgetWindow(0xa37020, name = "QVideoWidgetClassWindow") 5 Код: 9587 QWidgetWindow(0xe425e0, name = "MainWidgetClassWindow") 5 "mme" не печатает совсем, разве что если мышкой водить с нажатой левой кнопкой. Скажите, а при нажатии кнопки "Открыть" на форме у Вас форма не "уезжает" в левый верхний угол? На Убунте при этом появляется сообщение: Код: void QWindow::setTransientParent(QWindow*) QWidgetWindow(0xf7a7a0, name = "VideoFormWindow") must be a top level window. Название: Re: QVideoWidget и mouseTracking Отправлено: Igors от Март 03, 2015, 15:25 Скажите, а при нажатии кнопки "Открыть" на форме у Вас форма не "уезжает" в левый верхний угол? На Убунте при этом появляется сообщение: Нет, не наблюдал. Может Вам, не мудрствуя лукаво, обновить версию Qt? Если это сложно, то ловить или в notify или навесить фильтр на приложение (все что приходит в notify придет и туда, причем до того как будет послано виджету)Код: void QWindow::setTransientParent(QWindow*) QWidgetWindow(0xf7a7a0, name = "VideoFormWindow") must be a top level window. |