Qt - Как установить минимальный размер контейнера, чтобы он не искажал детей - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть контейнер QWidget (на самом деле QFrame) с несколькими виджетами внутри.Содержимое этого контейнера (количество и / или размер дочерних виджетов) может динамически меняться.Сам контейнер находится в области прокрутки.

Как правило, размер контейнера должным образом изменяется (увеличивается или уменьшается) в соответствии с его содержимым.Это работает.

Однако мне также нужно установить минимальный размер для этого контейнера, чтобы он не уменьшался слишком сильно.То есть минимальный размер контейнера должен быть: max(my_minimum_size, contents_size).Вот где это становится проблематичным.

Если я использую container->setMinimumSize(200, 200);, а размер содержимого больше (200, 200), размер контейнера все равно можно изменить на (200, 200) (в отличие от ранее)с игнорируемым размером содержимого и искажением или обрывом.

Есть ли способ исправить это?Я использую Qt 5.9.

Обновление: Этот файл пользовательского интерфейса Qt Designer показывает именно то, что я имею в виду.В контейнере установлено значение minimumSize, и изменение его размера приводит к искажению кнопок.

1 Ответ

0 голосов
/ 12 февраля 2019

Я получил свой ответ в Qt Center:

https://www.qtcentre.org/threads/70015-Set-minimum-size-of-a-container-without-distorting-its-children

  1. Создайте подкласс QFrame
  2. Переопределите минимумSizeHint () так, чтобы он принимал значениеиз базового класса и расширяет его.

Что-то вроде:

QSize MyFrame::minimumSizeHint() const override
{
    const QSize baseSize = QFrame::minimumSizeHint();
    return baseSize.expandedTo(QSize(200, 200));
}
...