首页 Qt官方示例解析系列8:Flow Layout流式布局
文章
取消

Qt官方示例解析系列8:Flow Layout流式布局

实现了什么功能

可以根据窗口大小,自动将控件换行.

elesos

用到哪些重要的类

QLayout

部分源码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
子类化QLayout,需要重新实现一些函数。具体见帮助文档

addItemitem放在一个list中。takeAt删除并返回。


计算水平和垂直间距时,用到了QStyle::PixelMetric

style()->pixelMetric,先获取QWidgetQStyle,然后调用其pixelMetric函数以获取适当的像素度量值。

minimumSize方法:
QSize::expandedTo  QSize 类的成员函数,用于获取两个尺寸中的较大值。最后将边距的左右值与 size 的宽度相加,并将边距的上下值与 size 的高度相加,

它最重要的函数是 doLayout

QStyle::layoutSpacing 返回2个控件之间的间距。
nextX  :计算下一个布局项的 x 坐标,为当前 x 坐标加上当前布局项的推荐宽度和水平间距。
如果下一个布局项的 x 坐标减去水平间距大于 effectiveRect 的右边界,并且当前行的高度大于 0,则表示当前行已满,需要换行:将 y 坐标增加当前行的高度和垂直间距。

如何知道有几行?
可添加一个变量 mutable int m_lines;,在 doLayout 中每次换行时将其加 1即可。

参考

https://doc.qt.io/qt-6/layout.html

https://doc.qt.io/qt-6/qtwidgets-layouts-flowlayout-example.html

本文由作者按照 CC BY 4.0 进行授权