前段时间研究了qml后,返回来用qt,发现qt的布局和qml区别挺大(qml比起QWidget下的布局要好用太多了)。写点东西记录一下
1.可能出现的演示控件:
QPushButton: 默认的 HorizontalSizePolicy: QSizePolicy::Minimum ; VerticalSizePolicy: QSizePolicy::Fixed
QComboBox:默认的 HorizontalSizePolicy: QSizePolicy::Preferred ; VerticalSizePolicy: QSizePolicy::Fixed
QLineEdit:默认的HorizontalSizePolicy: QSizePolicy::Expanding ; VerticalSizePolicy: QSizePolicy::Fixed
QTextEdit:默认的HorizontalSizePolicy: QSizePolicy::Expanding ; VerticalSizePolicy: QSizePolicy::Expanding
QTextBrower:默认的HorizontalSizePolicy: QSizePolicy::Expanding ; VerticalSizePolicy: QSizePolicy::Expanding
先从简单的开始。
2.QSizePolicy需要结合布局一起使用,否则不会生效。
main.cpp如下,默认的。
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp也是默认如下:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
简单例子,随便通过ui文件拜访几个控件,不加布局,重新编译后如下。

预览如下图:

此时,没有添加任何布局QLayout的子类,随便鼠标缩放Widget,我们放置的控件并无变化。
3.以QHBoxLayout为例,开始分析控件的QSizePolicy与布局之间的相互影响。这里我们用代码而不以ui拖拽来实现,便于后续分析。代码如下:
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
// ui->setupUi(this);
pHlayout = new QHBoxLayout();
QPushButton *btn1 = new QPushButton(this);
btn1->setText("btn1");
pHlayout->addWidget( btn1 );
QComboBox *combobox = new QComboBox(this);
pHlayout->addWidget( combobox );
QLineEdit *lineedit = new QLineEdit(this);
pHlayout->addWidget( lineedit );
setLayout( pHlayout );
for( int i = 0 ; i < pHlayout->count(); i++ ){
qDebug()<<pHlayout->itemAt(i)->widget()->sizePolicy();
}
}
Widget::~Widget()
{
delete ui;
if