http://savepic.ru/3656121.png - кусок интерфейса Audacity.
У каждого трека есть «заголовок» - серая «панелька», содержащая кнопки Mute, Solo, два регулятора и проч.
Представьте, что вам на C++ в Qt захотелось перетаскивать их мышью (менять местами, например). На каждой такой панели есть пиксели, за которое можно ухватиться, а есть элементы, типа кнопок и регуляторов, за которые панель тащить нельзя.
Обычно кнопки/регуляторы являются самостоятельными виджетами, принадлежащими родительскому виджету - панели. При этом, работает такая логика: если событие мыши не досталось никакому дочернему виджету, его получает родительский. То есть если мышь не попадает на кнопки/регуляторы, значит попадает на «голое пространство» (и можно начинать тащить элемент).
Несложно реализовать эту логику на Qt - создать виджет панель, набросать на него виджеты кнопки/регуляторы. А как реализовать перетаскивание?
Есть такая идея: когда виджет «панель» получил нажатие мыши и движение мыши на N пикселей с нажатой кнопкой, он генерирует сигнал «меня тащат» со смещенем в качестве аргумента. Это событие ловит хозяин виджета-панели и меняет его координату в рамках себя.
Ещё варианты?