c – Qt在布局中自动排列小部件

我是Qt的新手,有一个我无法解决的问题.

我所拥有的是一个滚动区域,我添加了小部件(小部件无关紧要).每个小部件都有一个静态大小,它们都具有相同的宽度(这可能很重要).我要做的是进行布局/设置,使所有这些小部件水平显示在滚动区域上,直到没有足够的空间容纳另一个小部件,此时它开始将小部件放在新行上,继续直到没有人离开.

我已经考虑过手动实现这个的方法,但我觉得这是Qt已经支持的东西,我只是无法找到它的文档.

最佳答案 您可以看到
Flow Layout Example.它演示了一个自定义布局,可以从左到右,从上到下排列子窗口小部件.首先,当布局中的每一行都没有空间时,项目首先水平布局,然后垂直布局.

FlowLayout类继承QLayout.它是一个自定义布局类,可以水平和垂直排列其子窗口小部件.您可以如链接中所示实现它,并创建一个包含流布局的自定义窗口小部件,并将其设置为QScrollArea的窗口小部件.

scrollArea->setWidgetResizable(true); // Important or else the widget won't expand to the size of the QScrollArea, resulting in the FlowLayout showing up as a vertical list of items rather than a flow layout
scrollArea->setWidget(new CustomWidget);

在CustomWidget的构造函数中:

// Create FlowLayout
FlowLayout *flowLayout = new FlowLayout;

// Populate FlowLayout with your widgets
for (int i=0; i<n; i++) 
{
    ...
    flowLayout->addWidget(widget);
}

setLayout(flowLayout);
点赞