一、布局管理器
 
1.1、布局管理器的作用
 
 
- 自动调整控件的位置,包括控件之间的间距、对齐等
- 当用户调整窗口大小时,位于布局管理器内的控件也会随之调整大小,从而保持整个界面的美观
1.2、布局管理器类继承结构图
 
 

 
二、使用布局管理器
 
2.1、QVBoxLayout(垂直布局)
 
 

 
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	
	QWidget widget;
	
	widget.setWindowTitle("QVBoxLayout");
	
	widget.resize(500, 250);
	
	QVBoxLayout *layout = new QVBoxLayout;
	
	layout->setDirection(QBoxLayout::BottomToTop);
	
	QLabel lab1("Label1");
	lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}");
	lab1.setAlignment(Qt::AlignCenter);
	QLabel lab2("Label2");
	lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}");
	lab2.setAlignment(Qt::AlignCenter);
	QLabel lab3("Label3");
	lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}");
	lab3.setAlignment(Qt::AlignCenter);
	
	layout->addWidget(&lab3, 1);
	layout->addWidget(&lab2, 1);
	layout->addWidget(&lab1, 1);
	
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}
 
2.2、QHBoxLayout(水平布局)
 
 

 
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	
	QWidget widget;
	
	widget.setWindowTitle("QHBoxLayout");
	
	widget.resize(500, 250);
	
	QHBoxLayout *layout = new QHBoxLayout;
	
	layout->setDirection(QBoxLayout::RightToLeft);
	
	QLabel lab1("Label1");
	lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}");
	lab1.setAlignment(Qt::AlignCenter);
	QLabel lab2("Label2");
	lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}");
	lab2.setAlignment(Qt::AlignCenter);
	QLabel lab3("Label3");
	lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}");
	lab3.setAlignment(Qt::AlignCenter);
	
	layout->addWidget(&lab3, 1);
	layout->addWidget(&lab2, 1);
	layout->addWidget(&lab1, 1);
	
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}
 
2.3、QGridLayout(网格布局)
 
 

 
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	
	QWidget widget;
	
	widget.setWindowTitle("QGridLayout");
	
	widget.resize(500, 250);
	
	QGridLayout *layout = new QGridLayout;
	
	QLabel lab1("Label1");
	lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}");
	lab1.setAlignment(Qt::AlignCenter);
	QLabel lab2("Label2");
	lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}");
	lab2.setAlignment(Qt::AlignCenter);
	QLabel lab3("Label3");
	lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}");
	lab3.setAlignment(Qt::AlignCenter);
	QLabel lab4("Label4");
	lab4.setStyleSheet("QLabel{background:#aaaaaa;font:20px;}");
	lab4.setAlignment(Qt::AlignCenter);
	QLabel lab5("Label5");
	lab5.setStyleSheet("QLabel{background:#bbbbbb;font:20px;}");
	lab5.setAlignment(Qt::AlignCenter);
	
	layout->addWidget(&lab1, 0, 0);
	layout->addWidget(&lab2, 0, 1);
	layout->addWidget(&lab3, 1, 0, 1, 2);
	layout->addWidget(&lab4, 2, 0);
	layout->addWidget(&lab5, 2, 1);
	
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}
 
2.4、QFormLayout(表单布局)
 
 

 
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	
	QWidget widget;
	
	widget.resize(500, 250);
	
	widget.setWindowTitle("QFormLayout");
	
	QFormLayout* layout = new QFormLayout();
	
	layout->setRowWrapPolicy(QFormLayout::WrapAllRows);
	
	layout->addRow("Name:", new QLineEdit());
	layout->addRow("Email:", new QLineEdit());
	layout->addRow("Adress:", new QLineEdit());
	
	layout->setSpacing(10);
	
	widget.setLayout(layout);
	widget.show();
	return a.exec();
}
 
2.5、QStackedLayout(分组局管理器)
 
 

 
int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	
	QWidget widget;
	
	widget.setWindowTitle("QStackedLayout");
	
	widget.resize(500, 250);
	
	QListWidget *listWidget = new QListWidget(&widget);
	listWidget->setMinimumWidth(150);
	listWidget->setFont(QFont("宋体", 14));
	listWidget->addItem("QPushButton");
	listWidget->addItem("QLabel");
	listWidget->addItem("QLineEdit");
	
	QWidget widget1;
	widget1.setMinimumSize(200, 200);
	QPushButton but1("PushButton", &widget1);
	QWidget widget2;
	widget2.setMinimumSize(200, 200);
	QLabel lab1("This is a Label", &widget2);
	QWidget widget3;
	widget3.setMinimumSize(200, 200);
	QLineEdit edit("This is a QLineEdit", &widget3);
	
	QStackedLayout *stackedLayout = new QStackedLayout;
	stackedLayout->addWidget(&widget1);
	stackedLayout->addWidget(&widget2);
	stackedLayout->addWidget(&widget3);
	
	QHBoxLayout *layout = new QHBoxLayout;
	layout->addWidget(listWidget, 1);
	layout->addLayout(stackedLayout, 4);
	
	widget.setLayout(layout);
	widget.show();
	
	QObject::connect(listWidget, &QListWidget::currentRowChanged, stackedLayout, &QStackedLayout::setCurrentIndex);
	return a.exec();
}