qt widget实现瀑布流式布局,每个widget高度不同
时间: 2024-01-19 13:05:00 浏览: 42
实现瀑布流式布局可以通过QGridLayout或QHBoxLayout/QVBoxLayout来实现,但是需要考虑到每个widget高度不同的情况。
一种实现方式是使用QGridLayout,并使用QSpacerItem来填充高度差。具体实现步骤如下:
1. 创建QGridLayout,并设置列数。
2. 创建多个widget,并设置它们的高度不同。
3. 计算每列的高度和,并找到最短的一列。
4. 将widget添加到最短的一列中,并使用QSpacerItem填充高度差。
下面是一个简单的示例代码:
```cpp
QGridLayout *layout = new QGridLayout;
layout->setColumnStretch(0, 1); // 设置列的伸缩性
// 创建多个widget
for (int i = 0; i < count; i++) {
QWidget *widget = new QWidget;
widget->setFixedHeight(heights[i]); // 设置widget高度
layout->addWidget(widget, row, col);
// 找到最短的一列
int shortestCol = 0;
int shortestHeight = layout->columnMinimumHeight(0);
for (int j = 1; j < layout->columnCount(); j++) {
int height = layout->columnMinimumHeight(j);
if (height < shortestHeight) {
shortestHeight = height;
shortestCol = j;
}
}
// 填充高度差
int heightDiff = shortestHeight - layout->columnMinimumHeight(shortestCol);
if (heightDiff > 0) {
QSpacerItem *spacer = new QSpacerItem(1, heightDiff);
layout->addItem(spacer, 0, shortestCol);
}
}
setLayout(layout);
```
这样就可以实现瀑布流式布局,每个widget高度不同。