Qt 我如何让QScrollArea在一个方向滚动,在另一个方向尊重儿童尺寸

Qt 我如何让QScrollArea在一个方向滚动,在另一个方向尊重儿童尺寸,qt,qt5,Qt,Qt5,我有一个对话框,其中有一个编程生成的菜单,由QVBoxLayout中的平面QPushButtons组成。我希望它的大小适合按钮水平,并可垂直滚动。我把它放在一个QScrollArea中,并禁用了水平滚动条。我希望滚动区域的宽度与菜单宽度相匹配,以便所有按钮都按宽度显示,即使这意味着缩小按钮,但最好保持滚动区域的宽度足够大,以容纳按钮的最小大小 我没有得到我想要的行为 如果我为QScrollArea的WidgetResizeable属性指定false,则滚动区域为空。即使启用水平滚动,也没有滚动条

我有一个对话框,其中有一个编程生成的菜单,由QVBoxLayout中的平面QPushButtons组成。我希望它的大小适合按钮水平,并可垂直滚动。我把它放在一个QScrollArea中,并禁用了水平滚动条。我希望滚动区域的宽度与菜单宽度相匹配,以便所有按钮都按宽度显示,即使这意味着缩小按钮,但最好保持滚动区域的宽度足够大,以容纳按钮的最小大小

我没有得到我想要的行为

如果我为QScrollArea的
WidgetResizeable
属性指定
false
,则滚动区域为空。即使启用水平滚动,也没有滚动条。我的猜测是,即使在添加按钮并对其调用
updateLayout()
之后,菜单小部件的大小仍然为零


如果我为QScrollArea的
WidgetResizeable
属性指定
true
,则滚动子项(菜单)的大小将调整为超出其需要的宽度,并超出QScrollArea的适合范围。我的按钮被截断。

覆盖
qscrolrea.resizeEvent
并调整
qscrolrea.widget()
中的宽度。

我发现仅仅调整客户端小部件的大小以适应内容就可以完美地工作。这与您的建议基本相同,但是是一个一次性操作,不允许子窗口小部件集中在可用空间中。但是,必须有一个更好的解决方案,它不涉及手动调整客户端小部件的大小。