首页 > 学院 > 开发设计 > 正文

布局管理器的使用

2019-11-09 18:01:36
字体:
来源:转载
供稿:网友

这里写图片描述

布局管理类 介绍:

**- QHBoxLayout 水平布局 - QVBoxLayout 垂直布局 - QGridLayout 网格布局 - QStackedLayout 把子控件进行分组或者分页,一次只显示一组或者一页,隐藏其他组或者页上的控件。**


布局管理中结合控件的sizePolicy属性,进行调整

结合控件的SizePolicy属性,来控制布局管理中的控件的尺寸自适应方式。

控件的sizePolicy说明控件在布局管理中的缩放方式。Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合所有的布局,开发人员经常需要改变窗体上的某些控件的sizePolicy。一个QSizePolicy的所有变量对水平方向和垂直方向都适用。下面列举了一些最长用的值:

A. Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。

B. Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以

放大。

C. Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小

的允许尺寸。

D. PReferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小

E. Expandint:控件可以自行增大或者缩小

注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)

摘自: http://www.cnblogs.com/QQ78292959/archive/2012/08/13/2637209.html http://blog.csdn.net/lastsoup/article/details/7028243


Demo1。 6个button(编号1~6)水平放置。其中 1,2 之间间隔2个像素;3,4之间间隔10个像素 ;5,6之间间隔20个像素。

解决方式: 每两个放在一个QHBoxLayout中。然后三个loyout 在放到一个总的mainLayout中。

leftLayout->addWidget(button1); leftLayout->addWidget(button2); leftLayout->setSpacing(2); midlayout->addWidget(button3); midlayout->addWidget(button4); midlayout->setSpacing(10); rightlayout->addWidget(button5); rightlayout->addWidget(button6); rightlayout->setSpacing(20); mainLayout->addLayout(leftLayout); mainLayout->addLayout(midlayout); mainLayout->addLayout(rightlayout); this->setLayout(mainLayout);

这样就可以了。其中setSpacing() 设置了布局中 控件之间的距离。 但是 如果布局之间有三个按钮(A,B,C),其中A,B间隔2像素;B,C间隔10像素,这就比较尴尬了。 其实可以使用 addSpacing(int ) 方法

rightlayout->setSpacing(0); rightlayout->addWidget(buttonA); rightlayout->addSpacing(2); rightlayout->addWidget(buttonB); rightlayout->addSpacing(8); rightlayout->addWidget(buttonC);

补充:

bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment) //设置对齐方式void QLayout::setMargin(int margin) //页边距

Demo2 如果button有MinimumSize,导致一行无法容纳下所有的buttons 例如 我们每点击一次就会加一个button,如何让添加的button自动换行。 可以使用QGridLayout 。

layout = new QGridLayout(this); button = new QPushButton(this); layout->setHorizontalSpacing(2); layout->setVerticalSpacing(10); button->setText(QStringLiteral("新建")); button->move(0,0); QObject::connect(button,SIGNAL(clicked(bool)),this,SLOT(on_button_clicked(bool)));void Widget::on_button_clicked(bool){ QPushButton * button = new QPushButton; button->setText(QStringLiteral("button")); button->setMaximumSize(150,50); button->setMinimumSize(150,50); int row = countButton/numCol; int col = countButton%numCol; layout->addWidget(button,row,col); ++countButton;}

这样每点击新建都会给loyout加一个button,可以计算位置放置。 如果依然每两个之间固定间隔,则可以结合Demo1。


上一篇:IPC机制

下一篇:ARC机制下的总结

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表