资讯详情

资讯详情

Qt — 布局管理器

目录1. 垂直布局2. 水平布局3. 网格布局4. 表单布局行为N列固定为25. Spacer之前使⽤ Qt 在界⾯上创建的控件, 都是通过 绝对定位 (手动) 的⽅式来设定的.也就是每个控件所在的位置, 都需要计算坐标, 最终通过 setGeometry 或者 move ⽅式摆放过去.这种设定⽅式其实并不⽅便. 尤其是界⾯如果内容⽐较多, 不好计算. ⽽且⼀个窗⼝⼤⼩往往是可以调整的, 按照绝对定位的⽅式, 也⽆法⾃适应窗⼝⼤⼩.因此 Qt 引⼊ 布局管理器 (Layout) 机制, 来解决上述问题.当然, 布局管理器并非 Qt 独有. 其他的 GUI 开发框架, 像 Android, 前端等也有类似的机制.1. 垂直布局使⽤ QVBoxLayout 表⽰垂直的布局管理器. V 是 vertical 的缩写.核心属性属性说明layoutLeftMargin左侧边距layoutRightMargin右侧边距layoutTopMargin上方边距layoutBottomMargin下方边距layoutSpacing相邻元素之间的间距Layout 只是⽤于界⾯布局, 并没有提供信号.上述三个按钮的父元素就是 layoutlayout 的父元素就是 this都是处在 Qt 的对象树之上的释放无需过多的担心。运行按钮的大小换和位置都是根据窗口的变化而自动变化。每个 widget 中只能设置一个布局管理器。这个操作是先拖的是 layout 过去然后再往 layout 中拖其他控件也可以先拖其它控件后给这些控件套上 layout运行此时窗口大小发生变化里面的大小是不会随之发生变化的。如果在代码中创建 layout其实是只创建了一个 layout。但是如果在 QtDesigner 中创建的 layout先创建了一个 Widget然后再在这个新的 Widget 中添加一个 layout。可以先拖其它控件后给这些控件套上 layout2. 水平布局使⽤ QHBoxLayout 表⽰垂直的布局管理器. H 是 horizontal 的缩写.核心属性 (和 QVBoxLayout 属性是⼀致的)属性说明layoutLeftMargin左侧边距layoutRightMargin右侧边距layoutTopMargin上方边距layoutBottomMargin下方边距layoutSpacing相邻元素之间的间距运行布局管理器之间也是也可进行嵌套的运行3. 网格布局Qt 中还提供了 QGridLayout ⽤来实现⽹格布局的效果. 可以达到 M * N 的这种⽹格的效果.整体和 QVBoxLayout 以及 QHBoxLayout 相似. 但是设置 spacing 的时候是按照垂直⽔平两个⽅向来设置的.核心属性整体和 QVBoxLayout 以及 QHBoxLayout 相似. 但是设置 spacing 的时候是按照垂直⽔平两个⽅向来设置的.属性说明layoutLeftMargin左侧边距layoutRightMargin右侧边距layoutTopMargin上方边距layoutBottomMargin下方边距layoutHorizontalSpacing相邻元素之间⽔平⽅向的间距layoutVerticalSpacing相邻元素之间垂直⽅向的间距layoutRowStretch⾏⽅向的拉伸系数layoutColumnStretch列⽅向的拉伸系数运行运行运行运行拉伸系数以上创建的布局管理器这里的空间尺寸都是均等的。当需要创建出尺寸不同的控件的时候就可以通过拉伸系数来设置拉伸系数就相当于设置空间之间尺寸的 ”比例“运行如果将 拉升系数设为0意思就是不参与拉伸此时按钮的宽度是固定值。运行垂直方向的拉伸运行上述代码直接设置拉伸系数发现无效的这里之所以没有拉伸是因为 SizePolicy 起到的影响。 SizePolicy 这个是 Qwidget 的属性。使⽤ setSizePolicy 设置按钮的尺⼨策略. 可选的值如下:QSizePolicy::Ignored : 忽略控件的尺⼨不对布局产⽣影响。QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值布局时不会超过该值。QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值布局时不会⼩于该值。QSizePolicy::Preferred : 控件的理想尺⼨为固定值布局时会尽量接近该值。QSizePolicy::Expanding : 控件的尺⼨可以根据空间调整尽可能占据更多空间。QSizePolicy::Shrinking : 控件的尺⼨可以根据空间调整尽可能缩⼩以适应空间。由于按钮垂直方向默认没有拉伸开水平方向默认是拉伸的因此垂直方向不会受到拉伸系数的影响了要想让垂直方向的拉伸系数生效就需要让按钮先能够拉伸展开。运行4. 表单布局行为N列固定为2除了上述的布局管理器之外, Qt 还提供了 QFormLayout , 属于是 QGridLayout 的特殊情况, 专⻔⽤于实现两列表单的布局.这种表单布局多⽤于让用户填写信息的场景. 左侧列为提示, 右侧列为输⼊框.运行5. SpacerSpacer不是布局管理器使⽤布局管理器的时候, 可能需要在控件之间, 添加⼀段空⽩. 就可以使⽤ QSpacerItem 来表⽰.核心属性属性说明width宽度height⾼度hData⽔平⽅向的 sizePolicyQSizePolicy::Ignored : 忽略控件的尺⼨不对布局产⽣影响。QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值布局时不会超过该值。QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值布局时不会⼩于该值。QSizePolicy::Preferred : 控件的理想尺⼨为固定值布局时会尽量接近该值。QSizePolicy::Expanding : 控件的尺⼨可以根据空间调整尽可能占据更多空间。QSizePolicy::Shrinking : 控件的尺⼨可以根据空间调整尽可能缩⼩以适应空间。vData垂直⽅向的 sizePolicy选项同上运行图形化操作
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →