Qt: Как запретить некоторым виджетам получать полосы прокрутки - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть следующий макет виджета:

HBox
 - VBox
    - HBox
        widget "A"
        widget "B"
    - widget "C"
 - widget "D"

Другими словами, у меня есть что-то вроде этого:

+-----+--------------+
|  A  |              |
+-----+       C      |
|  B  |              |
+-----+--------------+
|         D          |
+--------------------+

В зависимости от содержимого, «A» и «B» должны расширяться и занимать столько вертикального пространства, сколько необходимо, без отображения полос прокрутки. «D» может сжиматься при необходимости.

Я попытался установить sizePolicy () для "A" и "B" на "Minimum" и реализовал sizeHint () для "A" и "B" в зависимости от того, что они отображают. Тем не менее, я все еще вижу полосы прокрутки в «A» и «B», в то время как «D» имеет больше места, чем нужно.

Я также пробовал «минимальное расширение» для sizePolicy (), но я все еще продолжаю видеть полосы прокрутки.

Как мне убедиться, что, если есть свободное место, "A" и "B" получают льготный режим, чтобы избежать использования полос прокрутки?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Используйте Expanding в качестве политики размера для A и B.Для виджета 'D' вы должны изменять его размер каждый раз, когда изменяется содержимое A и / или B.Политика размера должна быть минимальной, и вы должны использовать setMinimumHeight.

Если виджет имеет полосы прокрутки, он должен наследоваться от QAbstractScrollArea.Вы можете использовать setHorizontalScrollBarPolicy и setVerticalScrollBarPolicy для отключения полос прокрутки:

A->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
B->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
0 голосов
/ 14 ноября 2011

Вы можете установить свойства minimumHeight и minimumWidth для A и B на минимально возможное значение, когда полос прокрутки нет.Они по-прежнему смогут расширяться, но не будут уменьшаться ниже этого размера.

[Редактировать:] Перечитав ваш вопрос, я понял, что ваше содержание A и B не всегда имеет одинаковый размер.Очевидно, что описанный выше подход возможен только в том случае, если вы знаете размер содержимого при каждом его изменении.В этом случае вы можете просто позвонить setMinimumHeight() / setMinimumWidth() или равным setMinimumSize() из вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...