Как выполнить точную обработку событий мыши в QGraphicsScene, когда включен ItemClipsChildrenToShape?

У меня есть QGraphicsItem, который обрезает свои дочерние элементы (я включил его флаг ItemClipsChildrenToShape). Я заметил, что отсечение делает назначение события мыши дочерним элементам неточным: вместо точной формы элементов их ограничивающие прямоугольники используются для определения того, какой элемент расположен в определенной позиции, поэтому дочерние элементы получают события мыши во всем своем ограничивающем прямоугольнике. Когда отсечение не включено, оно работает нормально, как и ожидалось.

Установка детализации ограничивающей области дочерних элементов на 1,0 не помогла. Я использую qt 4.5.0.

Программа, с помощью которой я тестировал эту проблему, доступна по адресу http://pastebin.com/m3d0cfb53.

Я не мог найти ничего об этом поведении в документах qt. Я хотел бы знать, является ли это ошибкой в ​​​​qt и есть ли для нее обходной путь.


person Vik    schedule 02.01.2010    source источник
comment
Ваша ссылка не работает. Вы пробовали последние dll qt?   -  person Dmitriy    schedule 06.05.2011


Ответы (1)


Я знаю, что это старый вопрос, но я столкнулся с той же проблемой.

В документации для QGraphicsItems говорится:

Функция shape() используется для многих вещей, включая обнаружение столкновений, проверку попаданий и функции QGraphicsScene::items().

Реализация по умолчанию вызывает boundingRect() для возврата простой прямоугольной формы, но подклассы могут переопределить эту функцию, чтобы возвращать более точную форму для непрямоугольных элементов.

Поэтому переопределение функции shape() с помощью QPainterPath устранило проблему для меня.

person LeviX    schedule 07.06.2011