Тесты с использованием изменения размера на QDockWidget::widget()
(т.е. виджет, которым управляет QDockWidget
) не всегда работают должным образом.
С добавлением QDockWidget
подкласса (DW), в который добавлен QWidget
с QHBoxLayout
, который имеет два виджета ( левая панель и правая панель ), каждый из которых имеет свои политики размера установлены на QSizePolicy::Minimum
, в DW обычно видны оба виджета панели. Когда DW расположен в боковой док-станции, слот приложения (QMainWindow
), обрабатывающий сигнал DWS dockLocationChanged
, скрывает левую панель и изменяет размеры DW->widget()
до размера правой панели. Когда DW программно перемещается в нижнюю область дока, leftPanel устанавливается видимым, и DW заполняет всю ширину главного окна (конечно). Когда DW затем программно перемещается в боковую область дока, левая панель скрывается, а DW изменяет размеры вниз. Это работает как задумано. Однако, если DW перетаскивается из нижней области дока в боковую область дока, хотя левая панель скрыта, а изменение размера применено, как и раньше, размер DW не уменьшается, как при перепрограммировании. Размер DW можно вручную уменьшить, перетаскивая ручку сплиттера между DW и центральной областью главного окна. Обратите внимание, что центральная область главного окна - QWidget
, имеющая QHBoxLayout
с размерами политик QSizePolicy::Expanding
.
Вызов adjustSize
в главном окне после изменения размера DW не имеет никакого эффекта. Это несмотря на то, что DW переопределил sizeHint
, чтобы вернуть его минимальный размер в зависимости от того, видна ли левая панель или нет.
Либо я что-то упускаю в том, как контролировать размер QDockWidget
(что, учитывая трудности, с которыми я столкнулся с пониманием всех взаимодействий между частями системы управления компоновкой, вполне вероятно), либо QMainWindow
игнорирует или игнорирует инструкции макета, которые ему дают. Тщательное изучение потока событий во время операций репозиции QDockWidget
позволяет предположить следующее: после обработки слота сигнал dockLocationChanged
выполнил свою работу по изменению размера и вернулся в цикл обработки событий. Я вижу, что QMainWindow
, когда репозиционирование пользователя выполнено , применяет дополнительные операции изменения размера к уязвимому QDockWidget
, тем самым отменяя логику приложения, которая пытается контролировать размер дока. Что-то не так в QMainWindow
....