使用布局

通常,子Widget是通过使用布局对象在窗口中进行排列的,而不是通过指定位置和大小进行排列的。在此,构造一个并排排列的标签和行编辑框Widget:

QLabel *label = new QLabel(tr("Name:"));

QLineEdit *lineEdit = new QLineEdit();

QHBoxLayout *layout = new QHBoxLayout();

layout->addWidget(label);

layout->addWidget(lineEdit);

window->setLayout(layout);

由于Widget可包含其他Widget,所以布局可用来提供按不同层次分组的Widget。这里,要在显示查询结果的表视图上方、窗口顶部的行编辑框旁,显示一个标签:
QLabel *queryLabel = new QLabel(tr("Query:"));
QLineEdit *queryEdit = new QLineEdit();
QTableView *resultView = new QTableView();
 
QHBoxLayout *queryLayout = new QHBoxLayout();
queryLayout->addWidget(queryLabel);
queryLayout->addWidget(queryEdit);
 
QVBoxLayout *mainLayout = new QVBoxLayout();
mainLayout->addLayout(queryLayout);
mainLayout->addWidget(resultView);
window->setLayout(mainLayout);
Qt提供了QHBoxLayout类、QVBoxLayout类及QGridLayout类等的基本布局管理,分别是水平排列布局、垂直排列布局和网格排列布局。它们之间的继承关系如图:
 
 
addWidget()方法用于向布局中加入需要布局的控件,addWidget()的函数原型如下:
void addWidget
(
    QWidget *widget,                   //需要插入的控件对象
    int  fromRow,                          //插入的行
    int  fromColumn,                   //插入的列
    int  rowSpan,                          //表示占用的行数
    int  columnSpan,                   //表示占用的列数
    Qt::Alignment  alignment=0          //描述各个控件的对齐方式
)
addLayout ()方法用于向布局中加入需要布局的子布局,addLayout ()的函数原型如下:
void addLayout
(
    QLayout *layout,                      //表示需要插入的子布局对象
    int row,                                  //插入的起始行
    int column,                          //插入的起始列
    int rowSpan,                          //表示占用的行数
    int columnSpan,                       //表示占用的列数
    Qt::Alignment alignment=0              //指定对齐方式
)
新建Qt  应用,基类选择“QDialog”,取消“创建界面”复选框的选中状态。
打开“dialog.h”头文件,在头文件中声明对话框中的各个控件。添加代码所示。
添加如下的头文件:

#include <QLabel>

#include <QLineEdit>

#include <QComboBox>

#include <QTextEdit>

#include <QGridLayout>

“dialog.h”头文件,在类中声明对话框中的各个控件。添加代码所示。
private:
    QLabel *UserNameLabel; QLineEdit *UserNameLineEdit;
    QLabel *NameLabel; QLineEdit *NameLineEdit;
    QLabel *SexLabel; QComboBox *SexComboBox;
    QLabel *DepartmentLabel; QTextEdit *DepartmentTextEdit;
    QLabel *AgeLabel; QLineEdit *AgeLineEdit;
    QLabel *OtherLabel; QGridLayout *LeftLayout;

    /*********右侧*********/
    QLabel *HeadLabel; QLabel *HeadIconLabel;
    QPushButton *UpdateHeadBtn; QHBoxLayout *TopRightLayout;
    QLabel *IntroductionLabel; QTextEdit *IntroductionTextEdit;
    QVBoxLayout *RightLayout;

    /*--------------------- 底部 --------------------*/
    QPushButton *OkBtn; QPushButton *CancelBtn;
    QHBoxLayout *ButtomLayout;
“dialog.cpp”文件,在类Dialog的构造函数中添加代码。
在“dialog.cpp”文件的开始部分加入以下头文件:
#include<QLabel>
#include<QLineEdit>
#include<QComboBox>
#include<QPushButton>
#include<QFrame>
#include<QGridLayout>
#include<QPixmap>
#include<QHBoxLayout>
原文地址:https://www.cnblogs.com/shichuan/p/4497894.html