LINUX.ORG.RU

Qt drag-n-drop сложных элементов в интерфейсе.


0

1

http://savepic.ru/3656121.png - кусок интерфейса Audacity.

У каждого трека есть «заголовок» - серая «панелька», содержащая кнопки Mute, Solo, два регулятора и проч.

Представьте, что вам на C++ в Qt захотелось перетаскивать их мышью (менять местами, например). На каждой такой панели есть пиксели, за которое можно ухватиться, а есть элементы, типа кнопок и регуляторов, за которые панель тащить нельзя.

Обычно кнопки/регуляторы являются самостоятельными виджетами, принадлежащими родительскому виджету - панели. При этом, работает такая логика: если событие мыши не досталось никакому дочернему виджету, его получает родительский. То есть если мышь не попадает на кнопки/регуляторы, значит попадает на «голое пространство» (и можно начинать тащить элемент).

Несложно реализовать эту логику на Qt - создать виджет панель, набросать на него виджеты кнопки/регуляторы. А как реализовать перетаскивание?

Есть такая идея: когда виджет «панель» получил нажатие мыши и движение мыши на N пикселей с нажатой кнопкой, он генерирует сигнал «меня тащат» со смещенем в качестве аргумента. Это событие ловит хозяин виджета-панели и меняет его координату в рамках себя.

Ещё варианты?

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

Еще варианты, как в вебе: если по умолчанию DragEvent пробрасывается родителю, перехватить и подавить.

GateKeeper ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.