Название: [РЕШЕНО] Пересекающиеся MouseAreas Отправлено: vregess от Сентябрь 01, 2013, 20:22 Есть красный квадрат, а над ним серая "панель" с синим квадратом.
Нужно изолировать мышиные события внутри серой панели (topRect). Частично проблему решил добавлением MouseArea для topRect - теперь клики не передаются ниже. Но вот при наведении на красный квадрат курсор меняет вид. Как исправить? Код
Название: Re: Пересекающиеся MouseAreas Отправлено: vregess от Сентябрь 02, 2013, 07:49 Придумал 2 варианта.
1) Средствами QML У "обычных" MouseArea используем: Код
У "блокирующего" MouseArea: Код Пример во вложении (example1.qml) Недостаток в том, что везде надо указывать hoverEnabled, что по идее генерирует много событий. Плюс containsMouse тоже надо везде. 2) Средствами с++ Наследуемся от QQuickItem и запрещаем дальнейшую обработку событий мыши. Код
Регистрируем Код
и используем Код Недостаток: нужно использовать с++ Есть ли более очевидные решения? Хотелось бы все сделать только на стороне QML. Очень странно, что нет каких-то стандартных способов. Название: Re: Пересекающиеся MouseAreas Отправлено: lighting от Сентябрь 02, 2013, 11:40 Очень странно, что нет каких-то стандартных способов. Ничего странного, сложные расчеты надо проводить в C++. QML не на это заточен, поэтому там и ограничиваются прямоугольной областью MouseAreaНазвание: Re: Пересекающиеся MouseAreas Отправлено: OKTA от Сентябрь 02, 2013, 11:41 у MouseArea всегда была штучка "accepted", которая отвечала за распространение событий.
Название: Re: Пересекающиеся MouseAreas Отправлено: vregess от Сентябрь 02, 2013, 11:57 Ничего странного, сложные расчеты надо проводить в C++. QML не на это заточен, поэтому там и ограничиваются прямоугольной областью MouseArea Даже и не знаю, у меня наверное треугольная область. И где тут сложные расчеты? у MouseArea всегда была штучка "accepted", которая отвечала за распространение событий. Да, у событий есть такое свойство, и вроде как сейчас не надо явно его указывать в обработчике, чтобы запретить дальнейшую обработку. Я пробовал и с ним, на изменение курсора это не повлияло (пробовал onPositionChanged: mouse.accepted = true). Название: Re: Пересекающиеся MouseAreas Отправлено: OKTA от Сентябрь 02, 2013, 18:03 попробовать не могу, к сожалению.( сижу в 4.7.4 еще))
Название: Re: Пересекающиеся MouseAreas Отправлено: vregess от Сентябрь 02, 2013, 20:44 Ничего страшного. Я пока остановился на варианте с++.
Мне кажется это либо баг, либо какое-то упущение в АПИ или реализации. Название: Re: Пересекающиеся MouseAreas Отправлено: lighting от Сентябрь 03, 2013, 10:08 Ничего странного, сложные расчеты надо проводить в C++. QML не на это заточен, поэтому там и ограничиваются прямоугольной областью MouseArea Даже и не знаю, у меня наверное треугольная область. И где тут сложные расчеты? Если больше х1 и меньше х2 и y больше y1 и меньше y2 тогда ... Плюс преобразование координат - масштабирование и поворот. Вот это простые расчеты, ваш случай несколько отличается. Я не говорю что расчеты в вашем случае невероятно трудны, но они несколько сложнее вышеприведенных. QML и JS в применении к QML не для расчетов - для этого есть C++, вот примерно такая логика я думаю была у троллей. Впрочем если вы считаете что это баг то напишите багрепорт, если тролли с вами согласны в этом вопросе то они быстро этот баг устранят. Название: Re: [РЕШЕНО] Пересекающиеся MouseAreas Отправлено: vregess от Сентябрь 10, 2013, 09:50 Да, может пороюсь в багтрекере, когда время появится.
Название: Re: [РЕШЕНО] Пересекающиеся MouseAreas Отправлено: qml_hello от Июнь 10, 2014, 16:40 propagateComposedEvents : bool
This property holds whether composed mouse events will automatically propagate to other MouseAreas that overlap with this MouseArea but are lower in the visual stacking order. Код:
|