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

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

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

Войти через центр авторизации
Похожие вопросы
АМИКОН Москва
от 100 000 до 180 000 ₽
ROGII Новосибирск
от 120 000 до 200 000 ₽
19 янв. 2021, в 19:21
20000 руб./за проект
19 янв. 2021, в 19:18
160000 руб./за проект
19 янв. 2021, в 18:59
40000 руб./за проект