2013-11-07 6 views
2

Я использую виджеты док-станции, чтобы пользователь мог организовать инструменты так, как она хочет. Некоторые из моих док-виджета содержат статические элементы управления (FS, фиксированный вертикальный размер), другие - изображения, тем больше (ES, расширяя вертикальный размер).Получение правильного макета QDockWidget

Проблемы я лицо, что я не могу получить конфигурацию подсказок размера, что позволяет мне сделать это:

  1. Сделайте прикрепляемые виджеты переменного размера как можно больше
  2. Пусть всем прикрепляемые виджетам вкладку друг с другом без buggy behavior

Для 1., я могу установить вертикальную политику всех виджетов содержимого FS на «Исправлено». Это заставит контейнер использовать все свободное пространство для виджетов с переменным размером. Однако, как только ES-виджет будет помечен с помощью виджета FS, в то время как виджет FS не отображается, я в лучшем случае получаю упрямое поведение (пользователь не может настроить размер) и худшее поведение в худшем случае (при корректировке размера, ошибок рисования, фактических размер не изменился).

Для 2., я могу установить для всех вертикальных политик либо «Предпочтительный» (FS), либо «Expanding» (ES). Это должно отдавать предпочтение ES, но это не так. Я также пробовал играть с вертикальным растяжением до начала (пока он - полезен в других сценариях, где не задействованы DockWidgets).

Я застрял в ситуации, когда по умолчанию приложение тратит пространство, и пользователь должен выполнять несколько настроек размеров док-виджета всякий раз, когда изменяется размер окна/макет. Это очень утомительно и противоречиво.

Как это сделать правильно?

И следующий вопрос: как научить DockWidget, что его содержимое имеет конкретное соотношение сторон?

+1

Я сомневаюсь, что есть решение. Поведение QDockWidget жестко запрограммировано, и его слишком мало. Если вам нужен полный контроль над поведением виджетов док-станции, вам необходимо реализовать его самостоятельно. –

ответ

0

Я нашел самую большую проблему в том, что я использовал пользовательские виджеты для отображения, которые не перегружали бы метод virtual QSize sizeHint() const.

Перегрузка этого метода и возвращение большого числа, например. 500, для вертикального размера, значительно помогли компоновке.

Похоже, что (частный API) QMainWindowLayout делает первоначальное предположение о размерах виджета док-станции и затем придерживается этого. В этом же курсе он, кажется, игнорирует различия между предпочтительными и расширяющимися политиками или настройками растяжки.

Предоставляя большой размер, пользовательский виджет получает лучший баланс с запасами Qt Widgets (например, QListView), которые делают то же самое.

Результат приемлем, но далек от совершенства.