Я использую подкласс QDockWidget с небольшой хитростью. Сигнал "topLevelChanged" подключен к этому слоту члена:
void MyDockWidget::updateWindowFlags(bool topLevel)
{
if (topLevel == true)
{
setWindowFlags(Qt::Dialog|Qt::CustomizeWindowHint|Qt::WindowTitleHint|Qt::WindowMaximizeButtonHint|Qt::WindowCloseButtonHint);
// "setWindowFlags" hides the widget, show it again
show();
}
}
Это хорошо работает (по крайней мере, в Windows, которая является моей целью) и отображает кнопку «развернуть» в строке заголовка.
Теперь я хочу, чтобы виджет док-станции вел себя как виджет «верхнего уровня»: не всегда поверх главного окна и появляется на панели задач.
Я пытался:
- изменить виджет док-станции на NULL, когда он отсоединен от главного окна
- изменить виджет док-станции на предыдущий родитель, когда он повторно прикреплен к главному окну
Но есть еще некоторые проблемы: пользователь больше не может использовать перетаскивание, чтобы повторно прикрепить док к главному окну.
Я думаю, это потому, что родитель имеет значение NULL, поэтому виджет док-станции не знает, куда он должен повторно прикрепляться при перетаскивании.
Есть ли способ добиться желаемого поведения (виджет док-станции не всегда находится сверху и отображается на панели задач) без повторной привязки его к NULL? Игра с некоторыми флагами?
Или в любом случае виджет док-станции должен вести себя правильно, когда его родитель имеет значение NULL?
Спасибо