我是Qt的新手,有一个我无法解决的问题。
我所拥有的是一个滚动区域,我添加了小部件(小部件是什么并不重要)。每个小部件都有一个静态大小,它们都具有相同的宽度(这可能很重要)。我想要做的是进行布局/设置,使所有这些小部件水平显示在滚动区域上,直到没有足够的空间容纳另一个小部件,此时它开始将小部件放在新行上继续,直到没有剩下。
我已经考虑过手动实现此方法的方法,但我觉得这是Qt已经支持的内容,而且我还没有找到相关文档。
答案 0 :(得分:2)
您可以看到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);