1.布局管理系统
Qt包含了一组布局管理器类来描述怎样在应用窗口界面对部件进行布局,QLayout的几个子类,就成为布局管理器。
所有的QWidget的子类的对象 都可以用布局管理器来进行管理,QWidget::setLayout()可以在一个部件上应用布局管理器。
一旦一个部件设置了布局管理器,他会完成下面的几个任务:
①定位子部件
②感知窗口默认大小
③感知窗口最小大小
④改变大小处理
⑤当内容改变事后会自动更新下面的内容:
a.字体大小,文本伙子部件的其他内容随之改变
b.隐藏或显示子部件
c.移除一个子部件
QLayoutItem类提供了一个供QLayout操作的抽象项目。
类 | 说明 |
QBoxLayout | 给子部件设置水平或垂直布局 |
QButtonGroup | 管理一组按钮部件的容器 |
QFormLayout | 管理输入表格部件和他们相关联的标签部件 |
QGraphicsAnchor | |
QGraphicsAnchorLayout | |
QGridLayout | 栅格布局 |
QGroupBox | 带有标题的组管理容器 |
QHBoxLayout | 水平管理组 |
QLayout | 基类 |
QLayoutItem | |
QSizePolicy | |
QSpacerItem | |
QStackedLayout | |
QStackedWidget | |
QVBoxLayout | |
QWidgetItem |
2.QBoxLayout 布局
其有2种布局,水平布局和垂直布局
QHBoxLayout水平布局
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
window->setLayout(layout);//给部件添加布局
window->show();
效果
QVBoxLayout垂直布局
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
window->setLayout(layout);
window->show();
效果
3.QGridLayout 栅格布局
添加该布局后,使得一个部件区域划分成小格子,即由每个小格子组成。
把子部件添加到该部件后,可以指定其添加到的某个格子上。
MainWindow *w = new MainWindow;
QPushButton *button1 = new QPushButton("按钮1");
QPushButton *button2 = new QPushButton("按钮2");
QPushButton *button3 = new QPushButton("按钮3");
QPushButton *button4 = new QPushButton("按钮4");
w->grid_layout_->addWidget(button1,0,0);
w->grid_layout_->addWidget(button2,1,1);
w->grid_layout_->addWidget(button3,2,2);
w->grid_layout_->addWidget(button4,3,3);
w->show();
效果
4.QFormLayout 表单布局管理器
QFormLayout类用来管理表格的输入部件及其相关的标签,将他的子部件分为两列,左边是标签,右边是输入部件,比如行编辑器或者数字选择框等。
如果仅仅起到这样的作用,那么QGridLayout也可以完成这样的工作。
QFormLayout有其特殊功能。
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QLineEdit *lineEdit1 = new QLineEdit();
QPushButton *button2 = new QPushButton("Two");
QLineEdit *lineEdit2 = new QLineEdit();
QPushButton *button3 = new QPushButton("Three");
QLineEdit *lineEdit3 = new QLineEdit();
QFormLayout *layout = new QFormLayout;
layout->addRow(button1, lineEdit1);
layout->addRow(button2, lineEdit2);
layout->addRow(button3, lineEdit3);
window->setLayout(layout);
window->show();
效果