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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: снаппинг виджетов друг к другу при перемищении  (Прочитано 3740 раз)
vux
Гость
« : Апрель 10, 2012, 15:17 »

Вобщем нужно реализовать снаппинг виджетов друг к другу. Как это реализовано в линуксовых виндовМенеджерах.
То есть, при приблежении виджета к краям других он прилипает к тому которых находиться ближе с какойто погрешностью(например 5 пикс.).

Записан
RealDuke
Гость
« Ответ #1 : Апрель 10, 2012, 15:21 »

У меня вариант только переопределить мув эвент, и сравнивать положение с каждым child'ом в parent'e. Может есть более изящный способ. Кстати видел подобную задачку в одной из тестовых работ, при устройстве на работу.
Записан
Bepec
Гость
« Ответ #2 : Апрель 10, 2012, 15:25 »

У меня подобное реализовано как и говорит RealDuke.

Реализовывал "для себя", чисто связка из 2-3 окон. Переопределял QMoveEvent обоих и связывал сигналами.

Правда потом дошло, что проще было бы создать 1 класс менеджер, который содержал бы указатели на виджеты. И следил за их перемещением и "прилипанием".

Соответственно такой менеджер в linux  и используется Улыбающийся
Записан
vux
Гость
« Ответ #3 : Апрель 10, 2012, 15:30 »

Я сам себе реализовывал примерно так:
1. При нажатие на виджете, перед тасканием (MouseMoveEvent) в масив записывались x-ы и y-и всех видимых потомков
2. При MoveEvent сравнивалось пересикание со значениями из масива и если шо то прилипало.

Хотел услышать чтото более изящное
Записан
vux
Гость
« Ответ #4 : Апрель 10, 2012, 15:33 »

Правда потом дошло, что проще было бы создать 1 класс менеджер, который содержал бы указатели на виджеты. И следил за их перемещением и "прилипанием".

а можно немного подробнее - как действовал энтот класс?
Записан
Bepec
Гость
« Ответ #5 : Апрель 10, 2012, 15:44 »

Очень просто. В него передавались указатели типа <QWidget *>. И при добавлении автоматом цеплялись сигналы "MoveEvent".

И при перемещении каждого виджета он проходил по списку, получал геометрию окон и присматривал шальному, перемещающемуся окну, подходящую пару. Ну а далее простой расчёт на дальность (область прилипания) и резкий скачок к необходимой поверхности.

Дальше правда сложнее чуток Подмигивающий Так ещё список прицепленных виджетом имелся, дабы если потащил одного - вся прилепленная толпа попёрлась Веселый
Записан
vux
Гость
« Ответ #6 : Апрель 10, 2012, 21:25 »

Всем спасиба за советы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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