Russian Qt Forum
Ноябрь 10, 2024, 22:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Невозможно установить размер QDrag  (Прочитано 2791 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Март 02, 2015, 17:51 »

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

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

Или я что-то пропустил? Может можно как-то "размером события" управлять?
« Последнее редактирование: Март 02, 2015, 17:53 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Март 02, 2015, 18:47 »

С год назад было подобное - нужно было дропать не в прямоугольник а "по маске". Решается, там можно добиться чтобы dragMoveEvent приходило при каждом движении внутри. На что-то надо ответить accept или ignore, ну методом втыка разберетесь
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Март 02, 2015, 19:45 »

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

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 03, 2015, 10:02 »

А точнее даже что драгается. Его размер не видно как задать,
Тут однозначно нет, менять имедж DnD нельзя. Для таких целей я делал свое "таскаемое окно".

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

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

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Март 03, 2015, 11:09 »

Не только, можно получать каждый move внутри.

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

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

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

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.094 секунд. Запросов: 22.