QT 常用控件二

QT提供QHBoxLayout类、QVBoxlayout类及QGridLayout类等的基本布局管理,分别是水平排列布局,垂直排列布局和网格排列布局
addWidget()方法用于向布局中加入需要布局的控件
addLayout()方法用于向布局中加入需要布局的子布局
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    /*设置窗口标题*/
    setWindowTitle("用户信息");

    /*左侧*/
    /*左侧第一行*/
    label1=new QLabel(tr("用户名"));
    edit1=new QLineEdit();
    QGridLayout * lay1=new QGridLayout();
    lay1->addWidget(label1,0,0);
    lay1->addWidget(edit1,0,1);

    /*左侧第二行*/
    label2=new QLabel(tr("姓名"));
    edit2=new QLineEdit();
    lay1->addWidget(label2,1,0);
    lay1->addWidget(edit2,1,1);

    /*左侧第三行*/
    label3=new QLabel(tr("性别"));
    comb1=new QComboBox();
    comb1->addItem(tr(""));
    comb1->addItem(tr(""));
    lay1->addWidget(label3,2,0);
    lay1->addWidget(comb1,2,1);

    /*左侧第四行*/
    label4=new QLabel(tr("部门"));
    txt1=new QTextEdit();
    lay1->addWidget(label4,3,0);
    lay1->addWidget(txt1,3,1);

    /*左侧第五行*/
    label5=new QLabel(tr("年龄"));
    edit3=new QLineEdit();
    lay1->addWidget(label5,4,0);
    lay1->addWidget(edit3,4,1);

    /*左侧第六行 */
    label6=new QLabel(tr("备注"));
    label6->setFrameStyle(QFrame::Panel||QFrame::Sunken);
    /*addWidget第四个参数表示占据几行,第五个参数表示占据几列*/
    lay1->addWidget(label6,5,0,1,2);

    /*setColumnStretch()设置QGridLayout每列的占位比*/
    /*设置第0列和第1列的占位比,这里设置第0列和第1列的比例是1:3;--setColumnStretch(0,1)设置第0列占位比是1,setColumnStretch(1,3)设置第1列的占位比是3*/
    lay1->setColumnStretch(0,1);
    lay1->setColumnStretch(1,3);

    /*右侧*/
    QVBoxLayout * lay3=new QVBoxLayout();
    /*右侧第一行*/
    QHBoxLayout *lay2=new QHBoxLayout();
    label6=new QLabel(tr("头像"));
    label7=new QLabel();
    /*定义图片对象:注意QT的当前路径是build-untitled-Desktop_Qt_5_2_0_MinGW_32bit-Debug目录下*/
    QPixmap icon("1.png");
    /*设置label7的背景图片*/
    label7->setPixmap(icon);
    /*设置label7的大小*/
    /*这里设置label7的大小为背景图片的大小*/
    label7->resize(icon.width(),icon.height());
    btn1=new QPushButton("更新");
    /*设置QHBoxLayout中控件间的间距*/
    lay2->setSpacing(20);
    lay2->addWidget(label6);
    lay2->addWidget(label7);
    lay2->addWidget(btn1);

    /*右侧第二行*/
    label8=new QLabel(tr("个人说明"));

    /*右侧第三行*/
    txt2=new QTextEdit();

    /*设置边距*/
    lay3->setMargin(10);
    /*addLayout()布局中加入布局*/
    lay3->addLayout(lay2);
    lay3->addWidget(label8);
    lay3->addWidget(txt2);

    /*底层*/
    btn2=new QPushButton(tr("确认"));
    btn3=new QPushButton(tr("取消"));
    QHBoxLayout *lay4=new QHBoxLayout();
    /*加入一个占位符*/
    lay4->addStretch();
    lay4->addWidget(btn2);
    lay4->addWidget(btn3);

    /*创建全局Layout*/
    QGridLayout * mainlay=new QGridLayout(this);
    mainlay->setMargin(15);
    mainlay->setSpacing(10);
    mainlay->addLayout(lay1,0,0);
    mainlay->addLayout(lay3,0,1);
    mainlay->addLayout(lay4,1,0,1,2);
    /*设置layout与控件大小一致,不能随意改变layout的大小*/
    mainlay->setSizeConstraint(QLayout::SetFixedSize);
}

原文地址:https://www.cnblogs.com/zhanggaofeng/p/5978842.html