@Inquisitor

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. На лине не проверял. Он у меня под виртуалкой.

Састопорился я… подскажите куда копать?
  • Вопрос задан
  • 2757 просмотров
Решения вопроса 1
@Inquisitor Автор вопроса
Задачу я все же решил.
Пришлось переопределить обработчик событий базового класса main window, там определить тип события, посмотреть кто под мышью и если объекты сцены или сцена — тогда возвращать true и тогда стандартный обработчик в кишках Qt вызывает tablet event и все работает.
Костыыыыль :(
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Gorthauer87
@Gorthauer87
Программист
А вручную есть возможность накатить патчи на сырцы Qt или нет?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы