Прежде всего, если ваши закругленные углы достаточно малы, я бы сказал, не беспокойтесь об этом и просто придерживайтесь прямоугольной области отслеживания. Большинство пользователей вряд ли заметят, так что, по моему мнению, это не стоит вашего времени.
Если вы все еще хотите сделать это, как упомянул Виктор, вам следует проверить, используя какой-либо путь Безье, описывающий форму вашего представления, но это немного сложнее, чем просто проверить это внутри mouseEntered()
и mouseExited()
. Вам также необходимо внедрить mouseMoved()
и выполнить ту же проверку пути там, чтобы правильно реагировать, когда курсор перемещается внутрь и наружу пути в пределах области отслеживания. Не забудьте настроить область отслеживания так, чтобы она действительно отправляла вам эти mouseMoved
события.
Возможно, вам также придется задуматься о производительности. Если вы в конечном итоге реализуете mouseMoved
, тогда ваш тестовый код будет проходить каждый кадр движения курсора через область отслеживания, что потенциально может снизить скорость отклика вашего пользовательского интерфейса. Существует ряд оптимизаций, которые можно использовать, если это приводит к возникновению проблемы, например, использование внутренней области отслеживания (внутри закругленных краев), в которой не используется mouseMoved
, или увеличение flatness
пути для уменьшения сложность тестового расчета. Как вы можете себе представить, оптимизировать это очень сложно.