介绍
在Qt界面设计中,布局(Layout)算是用的比较多的一个类了。布局主要用于管理界面的各个控件元素,保证界面在缩放时,各个控件的相对位置保持不变,这里记录一些与布局有关的一些操作。
常用的布局类型
- 水平布局 QHBoxLayout
- 垂直布局 QVBoxLayout
- 网格布局 QGridLayout
- 栈布局 QStackedLayout
根据名称可以知道这些布局的基本作用,按照哪些排列顺序进行布局显示,基本的用法很简单,比如可以这样:
//初始化时,如果不指定parent,就需要调用 setLayout 来设置布局的界面了。
QHBoxLayout* layout = new QHBoxLayout();
layout->addWidget(widget);
...
this->setLayout(layout); //指定是哪一个界面的布局
常用的操作方法
使用这些布局的时候,可以在QDesigner里面使用,直接鼠标拖动就可以,不再多说,在写代码控制界面控件的时候,就需要对各个控件的排列方式有一个大致的了解,比如说在 QHoxLayout 中的每一个控件都是垂直居中的,如果想让控件排列在上或者在下,就需要调用 addStreach(),创建一个占位符,也就是界面中的弹框。垂直布局也是这样。如果对于占位符有特殊的要求,比如说只能空出20像素,那么可以使用 addSpace(20) 去创建一个20占位符的空间。
在网格布局中,经常遇到一个网格需要占用多行多列,在调用AddWidget 和 AddLayout 的时候,可以在参数 rowSpan 和 columnSpan中指定这项控件占用多少行或列。
void
addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void
addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
void
addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void
addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
栈布局 QStackedLayout 这个是我自己这样叫的,这个类可以管理多个布局(界面),每次只显示一个界面,这一点与QStackedWidget 差不多。但值得注意的是,这个类提供了一个StackingMode属性,如果是QStackedLayout::StackAll类型,可以同时显示多个界面,当前界面(currentIndex)
显示在最上面。这种显示方式,可以用来处理界面控件 显示与隐藏时候的界面跳动,比如说动态显示一个进度条,进度条出现的时候,就会导致之前的界面跳动一下位置。这时如果采用QStackedWidget,在不需要显示的时候隐藏,就可以避免这种控件跳动的出现。
先写这么多吧,感觉目前对于MarkDown的用法还是不熟啊,端首的缩进没打出来。
网友评论