出现滚动条时如何调整 QScrollArea 的大小(因此只需要一个滚动条)?

How to resize QScrollArea when a scrollbar appears (so only one bar is necessary)?

我有一个拆分视图,在左侧有一些按钮。我将它们放入滚动条中,这样当容器布局太短时它们就不会被压扁;但我似乎只有两个选择:

1: QScrollArea 不调整视图大小,因此当 window 变得太短时,垂直滚动条会导致按钮被遮挡(左右)并且水平滚动条也会出现。

2:QScrollArea 尝试调整它包含的小部件的大小(使用 setWidgetResizable(true)),但将其调整到相同的较小尺寸内,这会导致按钮上的一些文本从侧面被剪掉。

我想要的是 QScrollArea 保持小部件的默认大小(水平),并在它认为有必要(垂直)时将 ITSELF 扩展滚动条的大小。在这个拆分视图的右侧有很多 space,我希望滚动区域变宽并扩展左侧。

我遇到了类似的情况,通过重写后代中的 QScrollArea::sizeHint() 解决了这个问题。

#include <QScrollBar>
#include <QScrollArea>

class MyScrollArea : public QScrollArea
{
    Q_OBJECT

public:
    QSize sizeHint() const override
    {
        auto newSize = QScrollArea::sizeHint();
        newSize.setWidth(newSize.width()
                         + verticalScrollBar()->sizeHint().width());
        return newSize;
    }
};