Qt5: Увеличьте / уменьшите размер окна с содержимым - PullRequest
0 голосов
/ 13 апреля 2020

Чего я пытаюсь достичь?

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

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

В чем проблема?

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

То, что я пробовал

Я пытался вызвать QWidget::adjustSize на моем окне без какого-либо успеха. Затем я пошёл наповал и позвонил adjustSize на QTreeWidget раньше, но результат был тот же (окно просто отображается с некоторым размером по умолчанию, даже если дерево пусто).

Я также пробовал разные политики размера для QTreeWidget, но, похоже, ни одна из них не дала того эффекта, на который я надеялся.

Затем я попытался не использовать макет в моем окне, который немного меняет поведение, но не достигает sh то, что я ищу тоже.

После этого я подумал, что просто сделаю калибровку сам. Однако для того, чтобы сделать это, мне нужен какой-то способ узнать, какого размера требует дерево в настоящий момент, чтобы показать содержимое, находящееся в нем. Однако после полудня поиска я просто не смог найти способ получить эту информацию. Я пытался использовать sizeHint и minimumSizeHint, но это просто постоянные значения, не зависящие от содержимого дерева. Я также искал способ получить требуемый размер отдельного человека QTreeWidgetItem, но мне тоже не повезло.

Наконец-то я нашел в Интернете статью, утверждающую, что окно сокращается до минимального размера, один должен позвонить resize(0,0) на это. Это действительно имеет эффект (в версии, где в окне есть макет), но теперь оно сжимает окно до некоторого крошечного квадрата, даже если в дереве есть некоторый контент, который обрезается этим (хорошо, что дерево делает покажите полосу прокрутки, но, как я уже сказал выше: я не хочу полосу прокрутки).

Вопрос

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

Или альтернативно: кто-то знает, как я могу получить виджет для расчета размера, который мне потребуется для его содержания для меня? В других средах этот тип функции называется, например, computeSize, который вы можете предложить либо подсказкой по высоте, либо по ширине ...

...