Win 7, Qt 5.3
Я использую QDockWidget
с моим заявлением. Работает как задумано.
Теперь я скрываю строку заголовка, установив setTitleBarWidget(new QWidget(this))
на построенный виджет по умолчанию. Это стандартный способ согласно документации Qt. Также работает, заголовок исчез.
Чтобы открепить мой виджет как окно, я использую myDockWidget->setFloating(true)
(в моем собственном слоте). Но теперь, когда виджет отстыкован, плавающее окно больше не имеет границ (следовательно, не может быть перемещено).
Если я закомментирую setTitleBarWidget
, также myDockWidget->setFloating(true)
работает. Таким образом, оригинальная строка заголовка, кажется, включает некоторую логику. Однако, глядя на исходный код, я не смог найти ничего особенного.
Любой намек, что я могу сделать, чтобы преодолеть проблему?
Это ожидаемое поведение. Увидеть QDockWidget::setTitleBarWidget
документы:
Если установлен виджет в строке заголовка, QDockWidget не будет использовать собственные декорации окон, когда он перемещается.
Цель этого поведения — позволить реализовать полностью настроенную строку заголовка для виджета дока.
Обходной путь должен соединиться с QDockWidget::topLevelChanged
сигнал, который испускается, когда виджет становится плавающим или закрепленным, и устанавливает виджет строки заголовка в 0, пока он плавающий, чтобы восстановить поведение по умолчанию.
Обратите внимание, что предыдущий виджет в строке заголовка не удаляется, если задан виджет по умолчанию, поэтому вы должны либо удалить ранее использованный QWidget, либо сохранить указатель на него и использовать его в следующий раз.