提示:以下是本篇文章正文内容,下面案例可供参考
布局管理器是什么
可以把一些组件按一定的次序排列,这就是布局管理器。
他可以自动排列窗口中的界面组件
窗口变化后自动更新界面组件。
使用代码添加布局管理器
QVBoxLayout
QVBoxLayout:按垂直的顺序排列组件
添加组件/其他的布局管理器:
addWidget(QWidget*); addLayout(Layout*);
设置布局管理器管理指定窗口:
Widget->setLayout(Layout*);
设置组件和窗口一起变大变小:
QWidget->setSizePolicy(); 大家可以查帮助文档,我现在列出一部分 QSizePolicy::Fixed QSizePolicy::Minimum QSizePolicy::Maximum QSizePolicy::Preferred QSizePolicy::Expanding
设置组件的间隔:
setSpacing(int)
设置组件的比例因子:
setStretch(int index,int stretch)
使用部分:
//构造函数: Form::Form(QWidget *parent) : QWidget(parent),btn0(this),btn1(this),btn2(this), ui(new Ui::Form) { ui->setupUi(this); QVBoxLayout *layout = new QVBoxLayout(this); btn0.setText("Button 0"); btn1.setText("Button 1"); btn2.setText("Button 2"); btn0.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); layout->setSpacing(10); layout->addWidget(&btn0); layout->addWidget(&btn1); layout->addWidget(&btn2); setLayout(layout); } //头文件: #ifndef FORM_H #define FORM_H #include <QWidget> #include <QPushButton> namespace Ui { class Form; } class Form : public QWidget { Q_OBJECT QPushButton btn0; QPushButton btn1; QPushButton btn2; public: explicit Form(QWidget *parent = 0); ~Form(); private: Ui::Form *ui; private slots: }; #endif // FORM_H
QHBoxLayout
他和QVBoxLayout基本一致,在这我就不讲了
使用ui文件添加布局管理器
1、把下列的组件拖出,把组件放在里面
2、点击按钮,排序某个Widget
先添加组件
首先选中你要排序的Widget
然后点击下面的东西:
想要不用也是很简单,选中指定的Widget,点击打破布局。
布局管理器的嵌套
把QHbox放到QVbox中,组成一个网格布局。
代码如下:
//Widget,h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPushButton> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT QPushButton btn0; QPushButton btn1; QPushButton btn2; QPushButton btn3; public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; }; #endif // WIDGET_H //Widget.cpp #include "widget.h" #include "ui_widget.h" #include <QVBoxLayout> #include <QHBoxLayout> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); QVBoxLayout *layout = new QVBoxLayout(this); QHBoxLayout *hbox1 = new QHBoxLayout(this); QHBoxLayout *hbox2 = new QHBoxLayout(this); btn0.setText("Button 0"); btn1.setText("Button 1"); btn2.setText("Button 2"); btn3.setText("Button 3"); btn0.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); btn1.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); btn2.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); btn3.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); layout->addLayout(hbox1); layout->addLayout(hbox2); hbox1->addWidget(&btn0); hbox1->addWidget(&btn1); hbox2->addWidget(&btn2); hbox2->addWidget(&btn3); setLayout(layout); } Widget::~Widget() { delete ui; }
效果如下: