Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vux от Апрель 10, 2012, 15:17



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

(http://s18.postimage.org/dujd0w9t5/Untitled_1.png) (http://postimage.org/)


Название: Re: снаппинг виджетов друг к другу при перемищении
Отправлено: RealDuke от Апрель 10, 2012, 15:21
У меня вариант только переопределить мув эвент, и сравнивать положение с каждым child'ом в parent'e. Может есть более изящный способ. Кстати видел подобную задачку в одной из тестовых работ, при устройстве на работу.


Название: Re: снаппинг виджетов друг к другу при перемищении
Отправлено: Bepec от Апрель 10, 2012, 15:25
У меня подобное реализовано как и говорит RealDuke.

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

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

Соответственно такой менеджер в linux  и используется :)


Название: Re: снаппинг виджетов друг к другу при перемищении
Отправлено: vux от Апрель 10, 2012, 15:30
Я сам себе реализовывал примерно так:
1. При нажатие на виджете, перед тасканием (MouseMoveEvent) в масив записывались x-ы и y-и всех видимых потомков
2. При MoveEvent сравнивалось пересикание со значениями из масива и если шо то прилипало.

Хотел услышать чтото более изящное


Название: Re: снаппинг виджетов друг к другу при перемищении
Отправлено: vux от Апрель 10, 2012, 15:33
Правда потом дошло, что проще было бы создать 1 класс менеджер, который содержал бы указатели на виджеты. И следил за их перемещением и "прилипанием".

а можно немного подробнее - как действовал энтот класс?


Название: Re: снаппинг виджетов друг к другу при перемищении
Отправлено: Bepec от Апрель 10, 2012, 15:44
Очень просто. В него передавались указатели типа <QWidget *>. И при добавлении автоматом цеплялись сигналы "MoveEvent".

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

Дальше правда сложнее чуток ;) Так ещё список прицепленных виджетом имелся, дабы если потащил одного - вся прилепленная толпа попёрлась :D


Название: Re: снаппинг виджетов друг к другу при перемищении
Отправлено: vux от Апрель 10, 2012, 21:25
Всем спасиба за советы.