实现了什么功能
可以根据窗口大小,自动将控件换行.
用到哪些重要的类
QLayout
部分源码解析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
子类化QLayout,需要重新实现一些函数。具体见帮助文档
addItem将item放在一个list中。takeAt删除并返回。
计算水平和垂直间距时,用到了QStyle::PixelMetric:
style()->pixelMetric,先获取QWidget的QStyle,然后调用其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