**- 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 )
方法
补充:
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。
新闻热点
疑难解答