您的位置:首页 > 编程语言 > Qt开发

Qt之基本布局管理器

2015-07-02 14:09 716 查看
       本文简单的用到了网格布局,水平布局,竖直布局的一些方法,模仿了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()

{


}


















































运行效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Qt布局管理