Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Апрель 12, 2010, 09:14



Название: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: Гурман от Апрель 12, 2010, 09:14
утром в понедельник не могу сразу сообразить, как сделать, чтобы если айтем полностью или частично перекрыт другим айтемом (например, перекрывающий меньше перекрываемого), то при пересечении границы перекрывающего, чтобы у перекрываемого сначала вызывался hoverLeaveEvent(), а потом вызывался hoverEnterEvent() перекрывающего

вроде по описанию похож флаг ItemClipsToShape, но он работает совершенно иначе

иначе, кроме как влоб самому вызывать при в методе входа потомка метод выхода у его родителя - ничего не видно

наверно есть другой флаг какой-то, но с недосыпа не вижу  :(

...

ага, фик, влоб в реализованной схеме наследования просто сделать

Код:
	if( parentItem() )
parentItem()->hoverLeaveEvent(event);

нельзя, ругается, что этот метод protected, придется ломать все :(

и если перекрывающий айтем начнет двигаться, то вообще бред получается, надо руками отслеживать на кого он потом может наехать, в зависимости от его положения в стеке и т.д.  >:(

должен же быть флаг для таких случаев...


Название: Re: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: lit-uriy от Апрель 12, 2010, 09:48
>>чтобы у перекрываемого сначала вызывался hoverLeaveEvent(), а потом вызывался hoverEnterEvent()
А как происходит сейчас?

Я так понимаю речь про графическое представление?


Название: Re: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: Гурман от Апрель 12, 2010, 09:56
сейчас при наезде на перекрывающий, вызывается только его метод hoverEnterEvent(), при этом мы остаемся "над" перекрытым, из его пространства мы не выходим (наверняка, если итемы частично перекрыты, то возможна ситуация, когда останемся над перекрывающим, но выйдем из перекрытого)

по-умолчанию работает правильно "с геометрической точки зрения", но мне надо выйти из перекрытого, чтобы его по-другому отрисовать, поскольку уже не он, а перекрывающий будет принимать мышиные клики и пр.


Название: Re: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: Авварон от Апрель 12, 2010, 10:24
там есть метод для получения перекрытых айтемов. Можно от него плясать


Название: Re: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: Гурман от Апрель 12, 2010, 10:34
в прицнипе, можно, но надо тогда выяснять, какие из перекрытых айтемов перекрыты частично, поскольку если въехать в перекрывающий "с другой стороны", то с перекрытыми ничего делать не надо, а если въехать над кем-то, то делать надо только с одним перекрытым, со стороны которого собственно въехали

в общем, глупая колбаса пока получается, с какой стороны ни подойти  >:(

хотя должен быть просто флаг "айтем монополизирует ховер", который если взведен, все это проделывает на уровне тулкита

задача ведь достаточно часто встречающаяся...


Название: Re: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: Авварон от Апрель 12, 2010, 10:50
я проблемы не вижу. У вас же 1 активный элемент. Подсвечивать его надо в момент ховер энтрер, при этом предыдущий подсветку убирать. А ховер лив юзать только для убирания подсветки когда нет активных айтемов. Чтобы это реализовать, нужна 1 переменная и 2 проверки.


Название: Re: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: Гурман от Апрель 12, 2010, 10:57
ха! так оно еще и не так банально по-умолчанию работает

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

Цитировать
Подсвечивать его надо в момент ховер энтрер, при этом предыдущий подсветку убирать

ну и как узнать, у кого убирать подсветку? тупо у "родителя" - не годится

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

потому как при выходе из перекрывающего в перекрытый, последний должен засветиться, а перекрывающий погаснуть

так что не "1 переменная и 2 проверки"


Название: Re: как покинуть перекрытый элемент, входя в перекрывающий?
Отправлено: Гурман от Апрель 12, 2010, 13:50
не, барахло получается...

написал запрос на багтрекере (http://bugreports.qt.nokia.com/browse/QTBUG-9778), поддержите плз