QDockWidget здесь не помошник. Он завязан на
QMainWindow и специальньІх областях прилипания. А тебе, я так понимаю, нужно что-то типа Winamp'а.
Я такое делал, только сразу предупреждение: За стандартньІй заголовок окошка лучше не тягать, ибо попьІтка изменить положение/размер окна по собьІтию SizeEvent/MoveEvent чревата бесконечной рекурсией. Лучше тягать за специальньІе участки или вообще убирать заголовок (как ето сделано в том же винампе).
Вот пример как я делал:
void Minimap::mousePressEvent( QMouseEvent * e )
{
if ( e->button() == Qt::LeftButton )
{
startpos = pos();
mousepos = e->globalPos();
}
}
void Minimap::mouseMoveEvent( QMouseEvent * e )
{
if ( e->buttons() & Qt::LeftButton )
{
QPoint off = e->globalPos() - mousepos;
if ( canDock( startpos + off ) )
dockMe();
else
move( startpos + off );
}
}
В
canDock() проверяем куда можно прилипнуть в зависимости от неких областей прилипания, дистанции прилипания и прочего. Если можем, то липнем (двигаемся в ту точку), иначе - обьІчное движение окошка.