Qt之基本布局管理器

       本文简单的用到了网格布局,水平布局,竖直布局的一些方法,模仿了QQ的个人信息修改窗口,先是对左半步分个人信息进行网格布局,然后对右半步分的头像和个人说明进行布局,最后是底层水平布局确定和取消,这里用到了Qt占位符的知识。最后将这三部分布局用网格布局组成顶级布局,底层布局占用了一行两列。

头文件:

#ifndef DIALOG_H
#define DIALOG_H
 
#include <QtGui/QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QGridLayout>
#include <QPushButton>
 
class Dialog : public QDialog
{
    Q_OBJECT
 
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
 
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
    QLabel *label4;
    QLabel *label5;
    QLabel *label6;
    QLabel *label7;
 
    QLabel *labelOther;
    QLabel *labelIcon;
    QLineEdit *lineEditUser;
    QLineEdit *lineEditName;
    QComboBox *comboBoxSex;
    QTextEdit *textEditDepartment;
    QLineEdit *lineEditAge;
    QTextEdit *textEditDisc;
    QPushButton *pushButtonIcon;
    QPushButton *pushButtonOK;
    QPushButton *pushButtonExit;
};
 
#endif // DIALOG_H
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
源文件:

#include "dialog.h"
 
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("User Name"));
    label1 = new QLabel(tr("User Name"));
    label2 = new QLabel(tr("Name"));
    label3 = new QLabel(tr("Sex"));
    label4 = new QLabel(tr("Department"));
    label5 = new QLabel(tr("Age"));
    labelOther = new QLabel(tr("Remark"));
    //label继承自QFrame,可以设置凹陷或阴影状态,用|即可
    labelOther->setFrameStyle(QFrame::Panel | QFrame::Sunken);
    lineEditUser = new QLineEdit;
    lineEditName = new QLineEdit;
    //QComBox的使用,insertItem插入项
    comboBoxSex = new QComboBox;
    comboBoxSex->insertItem(0,tr("Female"));
    comboBoxSex->insertItem(1,tr("Male"));
    textEditDepartment = new QTextEdit();
    lineEditAge = new QLineEdit;
 
    //左半边子布局网格布局
    QGridLayout *leftLayout = new QGridLayout();
    //只有两列,所以定义两个变量labelCol表示第0列,contentCol表示第一列
    int labelCol=0;
    int contentCol=1;
    leftLayout->addWidget(label1,0,labelCol);
    leftLayout->addWidget(lineEditUser,0,contentCol);
    leftLayout->addWidget(label2,1,labelCol);
    leftLayout->addWidget(lineEditName,1,contentCol);
    leftLayout->addWidget(label3,2,labelCol);
    leftLayout->addWidget(comboBoxSex,2,contentCol);
    //注意这里的部门标签,设置为顶部对齐方式,可以和textEdit对齐,看运行效果
    leftLayout->addWidget(label4,3,labelCol,Qt::AlignTop);
    leftLayout->addWidget(textEditDepartment,3,contentCol);
    leftLayout->addWidget(label5,4,labelCol);
    leftLayout->addWidget(lineEditAge,4,contentCol);
    //labelOther坐标(5,0),占了一行布局中两列的位置,看运行效果
    leftLayout->addWidget(labelOther,5,labelCol,1,2);
 
    //setColumnStretch设置第0列在布局管理中所占比例为1,第1列在布局管理中所占比例为3,
    //即使对话框大小改变了,两列之间的宽度比依然保持不变
    leftLayout->setColumnStretch(0,1);
    leftLayout->setColumnStretch(1,3);
 
    label7  = new QLabel(tr("Head"));
    labelIcon = new QLabel();
    QPixmap icon("man.png");
    labelIcon->resize(icon.width(),icon.height());
    labelIcon->setPixmap(icon);
    pushButtonIcon = new QPushButton;
    pushButtonIcon->setText(tr("Change"));
    QHBoxLayout *hlayout = new QHBoxLayout;
    hlayout->setSpacing(20);
    hlayout->addWidget(label7);
    hlayout->addWidget(labelIcon);
    hlayout->addWidget(pushButtonIcon);
    label6 = new QLabel(tr("Individual"));
    textEditDisc = new QTextEdit;
 
    //右半部分的竖直对齐
    QVBoxLayout *rightLayout = new QVBoxLayout;
    //设置控件到边框的距离
    rightLayout->setMargin(10);
    rightLayout->addLayout(hlayout);
    rightLayout->addWidget(label6);
    rightLayout->addWidget(textEditDisc);
 
    //底布局,两个按钮
    pushButtonOK = new QPushButton(tr("OK"));
    pushButtonExit = new QPushButton(tr("Cancel"));
    QHBoxLayout *bottomLayout = new QHBoxLayout;
    //addStretch在按钮之前插入一个占位符,使两个按钮能始终靠右对齐,
    //并且在整个对话框的大小发生改变时,保证按钮的大小不发生变化
    bottomLayout->addStretch();
    bottomLayout->addWidget(pushButtonOK);
    bottomLayout->addWidget(pushButtonExit);
 
    //顶级布局,布局管理的对象会默认被布局管理所在控件管理,即默认指定父窗口
    QGridLayout *mainLayout = new QGridLayout(this);
    mainLayout->setMargin(15);
    mainLayout->setSpacing(10);
    mainLayout->addLayout(leftLayout,0,0);
    mainLayout->addLayout(rightLayout,0,1);
    mainLayout->addLayout(bottomLayout,1,0,1,2);
    //setSizeConstraint(Qlayout::setFixedSize)设定对话框的控件总是最优化显示,
    //并且用户无法改变对话框的大小,所谓最优化显示,即控件都按其sizeHint()
    //的大小显示,sizeHint表示布局管理器中默认尺寸
    mainLayout->setSizeConstraint(QLayout::SetFixedSize);
}
 
Dialog::~Dialog()
{
 
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
运行效果:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值