博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt之布局管理——(1)基本布局管理
阅读量:7226 次
发布时间:2019-06-29

本文共 3638 字,大约阅读时间需要 12 分钟。

Qt提供的布局类以及他们之间的继承关系(如下图):

常用到的布局类有:QHBoxLayout、QVBoxLayout、QGridLayout三种,分别是水平排列布局、垂直排列布局、表格排列布局。

常用的方法有addWidget()和addLayout()。addWidget()用于在布局中插入控件,addLayout()用于在布局中插入子布局。


在布局管理中还常用到setMargin()用于设定边距,setSpacing()用于设定控件间距。

setColumnStretch()用于设置列的占空比。



示例:实现如下图的布局

basiclayout.h

#ifndef BASICLAYOUT_H#define BASICLAYOUT_H#include 
class BasicLayout : public QDialog{ Q_OBJECTpublic: BasicLayout(QWidget *parent = 0, Qt::WFlags flags = 0); ~BasicLayout();private: QLabel *labUser; QLabel *labName; QLabel *labSex; QLabel *labDepartment; QLabel *labAge; QLabel *labRemark; QLineEdit *edtUser; QLineEdit *edtName; QComboBox *cbbSex; QTextEdit *edtDepartment; QLineEdit *edtAge; QLabel *labHead; QLabel *labIcon; QLabel *labIndividual; QPushButton *btnChange; QTextEdit *edtIndividual; QPushButton *btnOk; QPushButton *btnCancel;};#endif // BASICLAYOUT_H

basiclayout.cpp

#include "basiclayout.h"BasicLayout::BasicLayout(QWidget *parent, Qt::WFlags flags)	: QDialog(parent, flags){	setWindowTitle(tr("User Infomation"));		//Left Loyout:	labUser = new QLabel(tr("User Name:"));	labName = new QLabel(tr("Name;"));	labSex = new QLabel(tr("Sex:"));	labDepartment = new QLabel(tr("Department:"));	labAge = new QLabel(tr("Age:"));	labRemark = new QLabel(tr("Remark:"));	labRemark->setFrameStyle(QFrame::Panel|QFrame::Sunken);	edtUser = new QLineEdit;	edtName = new QLineEdit;	cbbSex = new QComboBox;	cbbSex->insertItem(0,tr("Female"));	cbbSex->insertItem(1,tr("Male"));	edtDepartment = new QTextEdit;	edtAge = new QLineEdit;	QGridLayout *leftLayou = new QGridLayout;	int col_Lab = 0;	int col_Content = 1;	leftLayou->addWidget(labUser,0,col_Lab);	leftLayou->addWidget(edtUser,0,col_Content);	leftLayou->addWidget(labName,1,col_Lab);	leftLayou->addWidget(edtName,1,col_Content);	leftLayou->addWidget(labSex,2,col_Lab);	leftLayou->addWidget(cbbSex,2,col_Content);	leftLayou->addWidget(labDepartment,3,col_Lab);	leftLayou->addWidget(edtDepartment,3,col_Content);	leftLayou->addWidget(labAge,4,col_Lab);	leftLayou->addWidget(edtAge,4,col_Content);	leftLayou->addWidget(labRemark,5,col_Lab,1,2);	leftLayou->setColumnStretch(0,1);	//设置两列分别占有空间的比例	leftLayou->setColumnStretch(1,3);	//Right Layout:	labHead = new QLabel(tr("Head:"));	labIcon = new QLabel;	QPixmap m_icon("head.gif");	labIcon->resize(m_icon.width(),m_icon.height());	labIcon->setPixmap(m_icon);	btnChange = new QPushButton(tr("Change"));	QHBoxLayout *headLayout = new QHBoxLayout;	headLayout->addWidget(labHead);	headLayout->addWidget(labIcon);	headLayout->addWidget(btnChange);	headLayout->setSpacing(20);	//控件间距为20像素	labIndividual = new QLabel(tr("Individual:"));	edtIndividual = new QTextEdit;	QVBoxLayout *rightLayout = new QVBoxLayout;	rightLayout->addLayout(headLayout);	rightLayout->addWidget(labIndividual);	rightLayout->addWidget(edtIndividual);	rightLayout->setMargin(10);	//Bottom Layout:	btnOk = new QPushButton(tr("Ok"));	btnCancel = new QPushButton(tr("Cancel"));	QHBoxLayout *bottomLayout = new QHBoxLayout;	bottomLayout->addStretch();	//添加一个占位符	bottomLayout->addWidget(btnOk);	bottomLayout->addWidget(btnCancel);	bottomLayout->setSpacing(10);	//Main Layout:	QGridLayout *mainLayout = new QGridLayout(this);	mainLayout->addLayout(leftLayou,0,0);	mainLayout->addLayout(rightLayout,0,1);	mainLayout->addLayout(bottomLayout,1,0,1,2);	mainLayout->setMargin(15);	mainLayout->setSpacing(10);	mainLayout->setSizeConstraint(QLayout::SetFixedSize);	//设置对话框大小固定,不允许用户改变}BasicLayout::~BasicLayout(){}

setFrameStyle()是QFrame的方法,参数以或的方式设定控件的风格,参数1(QFrame::Shape)用于设定控件的形状,参数2(QFrame::Shadow)用于设定控件俺的阴影。

形状有:NoFrame、Panel、Box、HLine、VLine、WinPanel 6种;阴影有:Plain、Raised、Sunken三种。


转载地址:http://jrbfm.baihongyu.com/

你可能感兴趣的文章
SMB简介sabma服务(一)
查看>>
ANT简明教程
查看>>
Eclipse Luna WTP 与 Tomcat 8 的整合存在一个很头疼的 Bug
查看>>
小数在计算机里面的存放
查看>>
数据结构中的各种树简单解释
查看>>
我的朗科运维第七课
查看>>
CentOS的进程管理二
查看>>
https客户端证书导入
查看>>
用 PreparedStatement 向 SqlServer 中一次性插入多条记录
查看>>
Slackware-2014-0903
查看>>
CentOS下安装JDK1.7
查看>>
LDAP DIT设计参考
查看>>
iptables详解
查看>>
Protostuff 介绍
查看>>
一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别...
查看>>
参数验证其实可以更简明一点
查看>>
Set up Mule runtime env with mule-standalone-3.6.0
查看>>
Linux基础-linux命令:csplit
查看>>
core_framework —— 基于libev的轻量级lua网络开发框架
查看>>
回到顶部
查看>>