Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Март 02, 2015, 17:51



Название: Невозможно установить размер QDrag
Отправлено: Гурман от Март 02, 2015, 17:51
Блин... При работе QDrag события для разнообразных dragEnterEvent() и dragMoveEvent() генерятся по заходу курсора в окружающий прямоугольник виджета. А если курсор "удерживает" изображение некого крупного объекта, например, "поднятое" со сцены и засунутое в QDrag - то фик, при заходе этого изображения в пределы другого объекта никакие eventы не генерятся. И даже загрузка всего этого изображения вместо курсора не помогла бы - событие генерится при входе именно "точки акцептуациии" курсора в прямоугольник виджета.

Получается, что задача "запретить ронять поднятый со сцены айтем на другой айтем" стандартным средством QDrag не решается.

Или я что-то пропустил? Может можно как-то "размером события" управлять?


Название: Re: Невозможно установить размер QDrag
Отправлено: Igors от Март 02, 2015, 18:47
С год назад было подобное - нужно было дропать не в прямоугольник а "по маске". Решается, там можно добиться чтобы dragMoveEvent приходило при каждом движении внутри. На что-то надо ответить accept или ignore, ну методом втыка разберетесь


Название: Re: Невозможно установить размер QDrag
Отправлено: Гурман от Март 02, 2015, 19:45
С маской приёмника по идее проблем не должно быть - это режается с помощью PaintPath. Но у меня другая проблема. Не в том, куда дропается. Проблема в том, что дропается. А точнее даже что драгается. Его размер не видно как задать, чтобы ивенты срабатывали, когда угол въезжает в поле приёмника. Они срабатывают только на въезд точки курсора. Не вижу даже куда втыкать.


Название: Re: Невозможно установить размер QDrag
Отправлено: Igors от Март 03, 2015, 10:02
А точнее даже что драгается. Его размер не видно как задать,
Тут однозначно нет, менять имедж DnD нельзя. Для таких целей я делал свое "таскаемое окно".

чтобы ивенты срабатывали, когда угол въезжает в поле приёмника. Они срабатывают только на въезд точки курсора. Не вижу даже куда втыкать.
Не только, можно получать каждый move внутри.

А если курсор "удерживает" изображение некого крупного объекта, например, "поднятое" со сцены и засунутое в QDrag..
DnD "крупного" имеджа ничего хорошего не дает, он бестолково загораживает приемник(и). Ограничьте размер, напр до 64х64 или вообще используйте абстрактную иконку.


Название: Re: Невозможно установить размер QDrag
Отправлено: Гурман от Март 03, 2015, 11:09
Не только, можно получать каждый move внутри.

Не вижу каким образом. Реагирует только на точку курсора.

DnD "крупного" имеджа ничего хорошего не дает, он бестолково загораживает приемник(и).

Это ерунда - имидж полупрозрачный, ничего не загораживает.