QDockWidget — окно без границ при перемещении

Win 7, Qt 5.3

Я использую QDockWidget с моим заявлением. Работает как задумано.

Теперь я скрываю строку заголовка, установив setTitleBarWidget(new QWidget(this)) на построенный виджет по умолчанию. Это стандартный способ согласно документации Qt. Также работает, заголовок исчез.

Чтобы открепить мой виджет как окно, я использую myDockWidget->setFloating(true) (в моем собственном слоте). Но теперь, когда виджет отстыкован, плавающее окно больше не имеет границ (следовательно, не может быть перемещено).

Если я закомментирую setTitleBarWidget , также myDockWidget->setFloating(true) работает. Таким образом, оригинальная строка заголовка, кажется, включает некоторую логику. Однако, глядя на исходный код, я не смог найти ничего особенного.

Любой намек, что я могу сделать, чтобы преодолеть проблему?

2

Решение

Это ожидаемое поведение. Увидеть QDockWidget::setTitleBarWidget документы:

Если установлен виджет в строке заголовка, QDockWidget не будет использовать собственные декорации окон, когда он перемещается.

Цель этого поведения — позволить реализовать полностью настроенную строку заголовка для виджета дока.

Обходной путь должен соединиться с QDockWidget::topLevelChanged сигнал, который испускается, когда виджет становится плавающим или закрепленным, и устанавливает виджет строки заголовка в 0, пока он плавающий, чтобы восстановить поведение по умолчанию.

Обратите внимание, что предыдущий виджет в строке заголовка не удаляется, если задан виджет по умолчанию, поэтому вы должны либо удалить ранее использованный QWidget, либо сохранить указатель на него и использовать его в следующий раз.

2

Другие решения


По вопросам рекламы [email protected]