Qt Designer布局宝典
使用窗体前,需要将部件对象拖放到布局中,以确保预览或在应用程序中使用时可以正确显示。将对象放置在布局中也可以确保在窗体放大缩小时对象的大小也能随之改变。
一旦部件对象被置于布局中,其位置和大小就不能再被单独设置。因为布局本身控制着每个部件的几何空间结构,同时还考虑到看不到的空间间隔器(spacer)。spacer 被置于layout后会影响部件的几何空间结构。
布局可以在窗体中层级嵌套。例如,一个典型的带有水平按钮行的对话框布局,对话元素可以使用垂直布局,而底部按钮需要被包含在水平布局中。有关Qt 布局的详细介绍,请参考 Layout Management 官方文档。
若要分拆布局,请按 Ctrl + 0
或者选中布局使用右键菜单布局-分拆布局
,如下图。
工具栏中的拆分布局图标也能完成同样的功能。
设置顶级布局
窗体的顶级布局需要取消选定内容(鼠标单击窗体空白处)后才能应用布局。顶级布局非常必要,其决定窗体被放大缩小后其中的部件布局也随之变化。检测是否设置了顶级布局的方法也很简单,预览窗体并缩放窗体大小。
应用布局
同样的,顶级布局在容器部件 (QGroupBox) 或基于容器的部件 (QTabWidget, QToolBox and QStackedWidget)上。容器部件需要选中后布局设置才能生效。
在对象检查器中,顶级布局不作为单独的对象可见。其属性显示在在主窗体、容器部件或者容器部件页面的属性列表中。
布局对象
对象布局即在现有多个对象作为一组并创建布局。其实现方式无非就是选择对象后使用工具、菜单或窗体右键菜单进行操作。
如上图所示,布局对象在窗体上以红色线框进行标注,且其作为对象在对象检查器中显示。在属性编辑器中也可以查看其属性。
可以选择布局对象并将其置于其他布局对象中以建立布局层级。
当某个子布局被选中,可以通过Shift+左键选中其父级布局。这样在复杂布局中选择特定布局也变得更加简单。
在布局中插入对象
拖动部件对象到布局即可完成对象的插入。对象拖放到某处会出现一个蓝色的光标,其意味着对象可以放置到此处。
布局类型
水平和垂直(Horizontal and Vertical )布局
窗体上排列对象的最简单方法就是将其水平或垂直布局排放。水平布局将部件水平对齐; 垂直布局则将其垂直对齐。
垂直和水平布局可以无限级组合嵌套。如果需要更多的排列方式,网格布局是个不错的方案。
网格(Grid )布局
复杂的表单布局可以通过网格布局实现。这种布局给了表单设计者更自由的方式。虽然有失灵活性,但是特定情况下,网格布局比水平和垂直布局更加适用。
表单(Form )布局
QFormLayout 类以两列表单形式管理部件;左侧一列放置lable标签而右侧一列放置文本部件(例如line edit,spin box等等) QFormLayout 类遵循各平台外观设计规范并支持整行排列。
上面的 UI 文件在不同平台下的效果预览。
拆分器(Splitter )布局
使用拆分器布局也是一种常见的布局方式。拆分器也可以如常规布局一样对部件对象进行水平或垂直布局,但其允许用户根据需求拖动调整每个对象的空间大小(预览或运行时可用)。
尽管QSplitter 是一个容器部件,Qt designer 仍将其视为应用于现有部件的布局。选中将要放入拆分器的部件,使用工具栏按钮、快捷键或者布局右键菜单对其进行拆分器布局
快捷键
除了标准的工具栏和右键菜单外,还有一组用于部件布局的快捷键。
布局 | 快捷键 | 描述 |
---|---|---|
Horizontal | Ctrl+1 | 将选定的对象放置在水平布局中 |
Vertical | Ctrl+2 | 将选定的对象放置在垂直布局中 |
Grid | Ctrl+5 | 将选定的对象放置在网格布局中 |
Form | Ctrl+6 | 将选定的对象放置在表单布局中 |
Horizontal splitter | Ctrl+3 | 创建一个水平拆分器,并将选定的对象放在其中 |
Vertical splitter | Ctrl+4 | 创建一个垂直拆分器,并将选定的对象放在其中 |
Adjust size | Ctrl+J | 调整布局的大小,以确保每个子对象有足够的空间显示其内容QWidget::adjustSize() 了解详情 |
注意:
Ctrl + 0用于分拆布局。