Запретить автоматическое изменение размера QDockWidget

Qt 5.5.0

В моем приложении у меня есть QGraphicsView в качестве основного виджета и QDockWidget для свойств. Цель состоит в том, чтобы пользователь выбрал элемент в графическом представлении и, в зависимости от элемента, представил соответствующие свойства для этого элемента.

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

Это прекрасно работает! Однако при выборе разных элементов док-станция уменьшается или увеличивается в зависимости от показанного виджета. Это очень неприятно и довольно раздражает. Дело в том, что когда пользователь вручную изменяет размер дока, он сохраняет этот размер. Я хочу, чтобы поддерживаемый размер был по умолчанию, а не это поведение авторазмера.


Вещи, которые я пробовал:

Я попытался изменить sizePolicy() дока и главного окна: безрезультатно.

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


Заключение:

Есть ли флаг или что-то, что устанавливается, когда пользователь изменяет размер дока, который говорит ему поддерживать этот размер? Если так, есть ли способ установить его вручную?

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

Спасибо за любую помощь!

1 ответ

Решение

Все что нужно было позвонить

setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);

в конструкторе моего виджета менеджера свойств (центральный виджет QDockWidget)

Я также перегружен функцией sizeHint(), чтобы вернуть респектабельный размер по умолчанию.

Сначала создайте свой виджет-док:

QDockWidget *dock = new QDockWidget;

Теперь установите политику размера для виджета дока.

Если док-станция вертикальная:

dock->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);

Если док-станция находится в горизонтальном положении:

dock->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);

Установите виджет на док:

QWidget *myWidget = new QWidget;
dock->setWidget(myWidget);

Теперь установите политику размера для виджета дока.

Если док-станция вертикальная:

dock->widget()->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);

Если док-станция находится в горизонтальном положении:

dock->widget()->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);

Наконец, добавьте док в главное окно:

Если док-станция вертикальная:

mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dock);
mainWindow->resizeDocks({dock}, {0}, Qt::Horizontal);

Если док-станция находится в горизонтальном положении:

mainWindow->addDockWidget(Qt::TopDockWidgetArea, dock);
mainWindow->resizeDocks({dock}, {0}, Qt::Vertical);
Другие вопросы по тегам