Qt 4.8.0 Mac OS. TabletEvent не приходит в QGraphicsView, если у последнего есть Parent
Собственно вот. На Qt 4.7.3 проблемы нет.
Нет проблем под Windows и Linux. Только под Mac.
Обновиться до 4.8.3 не могу (вот такая политика компании). Кстати, там это работает?
Планшет wacom pen and touch.
У меня расположение такое: mainWindow имеет centralWidget, в котором расположен controlContainerWidget, в нем QStackedLayout, а в нем уже несколько виджетов + вот QGraphicsView.
Если вьюшке дать пэрентом 0 и вытащиьт ее из лэйаута — таблет ивенты доходят как надо. Т.е. проблема явно внутри Qt.
События ловлю в QApplication::eventFilter без проблем. А вот дальше определение виджета происходит криво внутри иvплементации Qt и tabletEvent заменяется на mouseEvent.
Как костыль — вызвал обработчик таблет ивента вьюшки. Но конечно же есть недостаток — поверх вьюшки может быть виджет. Даже внутри нее. И тогда имплементация должна быть от Qt. А вот как определить виджет под курсором?
QApplication::widgetAt(QPoint) и topLevelAt() отрабатывает криво и если жмякать не на вьюшку — возвращает мне или QToolButton (за, они есть в аппликухе и их много, но не в центре же тулбара или просто чистого QWidget'a… ), или 0, если жмякаешь на вьюшку.
Вот в Qt где это отрабатывает:
QWidget *QWidget::find(WId id)
{
return QWidgetPrivate::mapper? QWidgetPrivate::mapper->value(id, 0): 0;
}
id в хэше есть, а вот из хэша объектов по id нужный объект не возвращается. Вьюшки там просто нет. В хэше есть QStackedLayout, думаю проблема в этом.
Я понял, если бы возвращался mainwindow или centralwidget, но возвращается 0. Выходит механизм бесполезен с лэйаутами.
Причем так же отрабатывает и под windows. На лине не проверял. Он у меня под виртуалкой.
Задачу я все же решил.
Пришлось переопределить обработчик событий базового класса main window, там определить тип события, посмотреть кто под мышью и если объекты сцены или сцена — тогда возвращать true и тогда стандартный обработчик в кишках Qt вызывает tablet event и все работает.
Костыыыыль :(
Заказчик хочет собирать релизы чистым фрэймворком. Мы вносили правки когда пользовали 4.7.3, но в 4.8.0 они не нужны.
Думаю, что в целом возможен даже переход на 4.8.3. Знать бы что там все Ок.
Я подебажил qt под маком. Ивент принимается главным окном и пэрента у него нет.
А под виндой ивент принимает вьюшка.
Вот буду сейчас изучать ивенты… кто-то шлет ивент не верному виджету.