Qt共提供了5种布局管理器,每种布局管理器对应一个类,分别是QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)、QFormLayout(表单布局)和QStackedLayout(分组布局)。本文介绍如何通过代码的方式创建布局管理。一、QHBoxLayout水平布局 下列代码创建一个水平布局QHBoxLayout,管理5个QPushButton控件:QWidgetwindownewQWQPushButtonbutton1newQPushButton(One);QPushButtonbutton2newQPushButton(Two);QPushButtonbutton3newQPushButton(Three);QPushButtonbutton4newQPushButton(Four);QPushButtonbutton5newQPushButton(Five);QHBoxLayoutlayoutnewQHBoxLlayoutaddWidget(button1);layoutaddWidget(button2);layoutaddWidget(button3);layoutaddWidget(button4);layoutaddWidget(button5);windowsetLayout(layout);windowshow(); 界面效果如下图所示: 在上面代码中,只需将QHBoxLayout替换为QVBoxLayout,即可实现垂直布局效果,因此不再复述。二、QGridLayout网格布局 网格布局QGridLayout有一点不同,因为需要指定子控件在布局中的行列位置:QWidgetwindownewQWQPushButtonbutton1newQPushButton(One);QPushButtonbutton2newQPushButton(Two);QPushButtonbutton3newQPushButton(Three);QPushButtonbutton4newQPushButton(Four);QPushButtonbutton5newQPushButton(Five);QGridLayoutlayoutnewQGridLlayoutaddWidget(button1,0,0);layoutaddWidget(button2,0,1);layoutaddWidget(button3,1,0,1,2);layoutaddWidget(button4,2,0);layoutaddWidget(button5,2,1);windowsetLayout(layout);windowshow(); 界面效果如下图所示: 第三个QPushButton占用了两列,这是通过在QGridLayout::addWidget()函数中将第5个参数设置为2实现的。三、QFormLayout表单布局 表单布局QFormLayout,在一行上放置两个控件,一般第一个是QLabel,第二个是QLineEdit,这时QLineEdit将被自动设置为QLabl的伙伴(buddy)。示例代码如下:QWidgetwindownewQWQPushButtonbutton1newQPushButton(One);QLineEditlineEdit1newQLineEdit();QPushButtonbutton2newQPushButton(Two);QLineEditlineEdit2newQLineEdit();QPushButtonbutton3newQPushButton(Three);QLineEditlineEdit3newQLineEdit();QFormLayoutlayoutnewQFormLlayoutaddRow(button1,lineEdit1);layoutaddRow(button2,lineEdit2);layoutaddRow(button3,lineEdit3);windowsetLayout(layout);windowshow(); 界面效果如下图所示: 四、QStackedLayout分组布局 QStackedLayout布局管理器可以容纳多个控件或者窗口,但每次只显示其中的一个。简单的示例代码如下:QW向主窗口中添加一个水平布局控件QHBoxLayoutlayoutnewQHBoxL创建一个列表QListWidgetlistWidget(widget);listWidget。addItem(QPushButton);listWidget。addItem(QLabel);listWidget。addItem(QLineEdit);新建3个窗口,分别放置文本框、按钮和单行输入框QWidgetwidget1;QPushButtonbut1(这是一个按钮,widget1);QWidgetwidget2;QLabellab1(这是一个文本框,widget2);QWidgetwidget3;QLineEditedit(这是一个单行输入框,widget3);创建一个分组布局,将3个窗口添加到分组控件中QStackedLayoutstackedLayoutnewQStackedLstackedLayoutaddWidget(widget1);stackedLayoutaddWidget(widget2);stackedLayoutaddWidget(widget3);layout第一列添加QListWidget控件,第二列添加分组布局控件layoutaddWidget(listWidget,1);layoutaddLayout(stackedLayout,4);将layout水平布局控件添加到widget窗口中widget。setLayout(layout);widget。show();连接信号和槽,实现当点击列表中的某一项,切换分组布局管理器显示的控件QObject::connect(listWidget,QListWidget::currentRowChanged,stackedLayout,QStackedLayout::setCurrentIndex); 界面效果如下图所示: QStackedLayout自身无法切换当前显示的控件或窗口,实际应用时通常和QListWidget或者QComboBox搭配使用。