版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、浅谈qt中的布局管理摘要:qt布局管理的目标是将放置于窗体屮的每一个部件都给定一 个合适的位置和大小,常用的有qhboxlayout水平布局管理器、 qvboxlayout垂直布局管理器、qgridlayout网格布局管理器。qt程序员 在完成窗体界面设计时,可通过可视化的方法搭建界面并布局;也可以纯 粹手工编写c+源代码来实现界面设计,编码的方式更适合较复杂的布局。关键词:qt布局管理;水平布局;垂直布局;网格布局;可视化方式; 编码方式中图分类号:tp311文献标识码:a文章编号:1009-3044 (2014) 25-5883-04qt是一个跨平台的c+图形用户界面库,1991年由奇趣科
2、技开发。 2008年,奇趣科技被诺基亚公司收购,qt也因此成为诺基亚旗下的编程 语言工具,2012年8月digia宣布对qt业务及其技术全面收购。qt技术 的传统优势都在桌面和嵌入式系统,目前digia将移动互联网平台定位为 其主要的发展方向,很快将迎来qt的移动时代。qt布局管理是设计应用程序窗体界面时必须考虑的问题,它的目标是 将放置于窗体中的每一个部件都给定一个合适的位置和大小,即使窗口尺 寸大小被改变了,仍能就保证窗体上的部件始终摆放得美观合适。qt程序 员有两种途径來完成窗体界面的设计和布局:第一种通过可视化的方法搭 建界面,由菜单或工具栏中的布局管理器实现布局,可视化的方式比手工
3、编码更简洁快速;第二种方式纯粹手工编写c+源代码来实现界面设计, 这种方式更适合较复杂的布局。qt提供了多个用于窗口布局的类,编写界面代码时可根据需求定义相 应的布局类对象。常用的有:qhboxlayout> qvboxlayout> qgridlayout 三种,分别是水平布局管理器、垂直布局管理器、网格布局管理器。使用 qt布局管理器可以确保窗体能够自动适应于不同的字体、语言和系统平 台。1水平布局管理器和垂直布局管理器qhboxlayout,水平布局管理器,把窗口部件按照从左到右的顺序排 列布局;qvboxlayout,垂直布局管理器,把窗口部件按照从上到下的顺 序排列布局。
4、比如应用程序需要创建一个登录窗口,我们來看看界面设计 方法。1. 1可视化的方式首先从窗口部件工具箱中拖拽控件图标将其放到窗体中的大概位置, 空白处可放入水平分隔符,这时分隔符会显示为一个蓝色的弹簧,但在最 终结果的窗体中它是不可见的。然后按照功能需求在属性编辑器中修改每 一个窗口部件的属性。此时的界面效果如图1所示。这时在窗体上出现的红线是已创建的布局,但在窗体运行时,它们是 不会出现的。1. 2编码实现方式使用纯粹编码的方式來设计登录窗体界面,首先要在登录窗体的头文件中声明各个控件,再在其源文件的构造函数中创建,布局也在构造函数中实现。代码如下:logindlg:: logindlg (q
5、widget *parent) : qdialog (parent)setwindowtitle ("layout");usernamelabel=new qlabel (tr (用户名:);/创建各个控件 usernameedit=new qlineedit ();passlabel=new qlabel (tr (密码:);passedit二new qlineedit ();okbutton=new qpushbutton (tr (登录);canclebutton=new qpushbutton (tr (取消);qvboxlayout *mainlayout=new
6、 qvboxlayout (this);/整体为垂直布局qhboxlayout *firstlayout=new qhboxlayout (this); /第一行的 两个控件水平排列firstlayoutaddwidget (usernamelabel);firstlayoutaddwidget (usernameedit);mainlayout-addlayout (firstlayout);qhboxlayout *secondlayout=new qhboxlayout (this);/第二行的两个控件水平排列secondlayout-addwidget (passlabel);seco
7、ndlayoul-*addwidget (passedit); mainlayout-addlayout (secondlayout);qhboxlayout *thirdlayout=new qhboxlayout (this); /第三行的两个控件水平排列thirdlayout-addwidget (okbutton);thirdlayoutaddwidget (canclebutton);mainlayout-addlayout (thirdlayout);this-setlayout (mainlayout);窗体运行时效果如图4所示。在这种方式屮,我们使用了3个水平布 局管理器,1个
8、垂直布局管理器,单纯使用这两种布局管理器的组合实现 布局,虽然比较直观,但代码量也比较大。其实,我们还有另外一种更适 合实现这种应用程序窗体布局的方法:使用网格布局管理器qgridlayouto 图42网格布局管理器qgridlayout,网格布局管理器,其含义就是将窗体分隔成行和列的 网格来进行排列,将窗口部件整齐摆放,每个网格的单元格里放一个部件。 如图5所示。类似上图这种5行2列的布局比较容易实现,只需要把各个部件填入 到指定的单元格里即可。在可视化设计环境下把相应窗口部件拖拽到窗口 界面,然后由菜单或工具栏上的按钮实现布局。如果采用编码方式,示例 代码如下:gridlayout-add
9、widget (label 1,0,0);/ 将 label 1 填到(0,0)单元格gridlayoutaddwidget (lineeditl, 0,1 );/ 将 lineeditl填到(0,1)单元格但是很多程序的窗体界面并不是一个规则的网格结构,这时网格布局管理器就显示了它强人的灵活性,对于不规则排列的控件,可以看作跨行或跨列摆放,代码表述为:layout addwidget ( widget ,row ,column ,rowspan ,columnspan );其屮,widget是要布局的窗口部件,(row, column )是该部件所占 用的左上角单元格,rowspan是该部件
10、要占用的行数,而columnspan是该 部件要占用的列数。rowspan和columnspan省略则默认为1。举例来说,比如图6所示界面,第一行的两个部件是比较规短的处于 两个单元格内,但是第二行的qcheckbox部件就横跨了两列,即在水平方 向上占用了两个单元格,那么使用网格排列布局的代码如下:图6gridlayout-addwidget (qlabel, 0,0);/ qlabel 在(0,0)gridlayoutaddwidget (qlineedit, 0,1); / qlineedit 在(0,1)gridlayoutaddwtdget (qcheckbox,1, 0,1, 2)
11、; / qcheckbox起始于(1,0),纵向占1行,横向跨2列再比如图7所示界面,qtreewidget部件纵向跨越了三行(即在垂直方向上占用了这一列三个单元格),对应的布局代码:图7gridlayout addwidget(qtreewidget,0,0,3,1/qtreewidget 起始于(0,0),并纵向跨3行,横向占1列gridlayout f addwidget(qpushbuttonl,0,1); /笫一个qpushbutton 在(0,1)gridlayout f addwidget(qpushbutton2,1,1); /第二个qpushbutton 在(1,1)grid
12、layo ut f addwidge t(qpushbutton3,2,1); /第二个qpushbutton 在(2,1)下面来看一个网格布局编程实例。图8所示界面是一个网络聊天程序 的客户端窗口,由列表控件、行文本编辑器、标签控件、按钮等搭建而成, 我们使用网格布局管理器来编程,对应的构造函数代码:图8tcpclient:: tcpclient (qwidget *parent, qt:: windowflags f):qdialog (parent, f)setwindowtitle (tr (聊天室客户端);contentlistwidget = new qustwidget; /定义
13、各窗口部件sendlineedit = new qlineedit;sendbtn 二 new qpushbutton (tr (发送);usernamelabel = new qlabel (tr ("用户名:);usernamelineedit 二 new qlineedit; serverlplabel = new qlabel (tr (服务器地址:);serverlplineedit = new qlineedit; portlabel = new qlabel (tr (端口: );portlineedit = new qlineedit;enterbtn 二 new q
14、pushbulton (tr (进入聊天室);qgridlayout *mainlayout = new qgridlayout (this);/定义网格布局管理器mainlayout addwidget ( contentlistwidget , 0 , 0 , 1 , 2 );/qlistwidget 横向跨 2 列mainlayout- addwidget(sendlineedit, 1,0);/各部件放入对应单元格中mainlayout-* addwidget(sendbtn, 1, 1);mainlayout-addwi dget(usernamelabel, 2、0);mainlayoutf addwidget(usernamelineedit,2, 1);mainlayoutf addwidget(serverlplabel, 3,0);mainlayoutaddwidget(serverlplineedit,3, 1);mainlayout-* addwidget(portlabel, 4, 0);mainlayout-addwi dget(portlineedit, 4, 1);mainlayoutf addwidget(enterbtn, 5, 0, l 2); /qpushbutton横向跨2列3结束语木文所介绍的这三种布局管理器是qt中最常用的布局管理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初三德育:目标·策略·韧性-中考赋能主题班会教案
- 砌体子分部验收标准
- 2025年二级建造师《建筑工程实物》自我检测I卷附答案
- 建筑施工操作证电工考试试题与答案
- 建筑工地救援保护措施方案
- 飞灰固化系统安装专项方案
- 2025年监理工程师考试理论和法规试题及答案
- 深基坑专项施工方案
- 2026年苏教版高二第二学期语文期末同步检测试卷(附答案可下载)
- 2026年苏教版二年级英语期末核心考点检测试卷(含答案可下载)
- 企业安全生产明白人培训
- 危重症患者管道护理与管理
- 普外科患者术后下肢深静脉血栓形成的预防和护理
- CQI-15特殊过程:焊接系统评估检查表(第二版中文)
- 云南省德宏傣族景颇族自治州梁河县2024-2025学年六年级下学期小升初招生数学试卷(含解析)
- 华为经营管理 -华为质量运营管理 (第8版)
- 危重孕产妇抢救流程操作手册
- (正式版)XJJ 055-2019 《预拌混凝土生产质量管理技术标准》
- 焊接工艺作业指导书详细版
- 2025年无锡市中考数学试卷真题(含答案及解析)
- (正式版)DB61∕T 1803-2023 《水工隧洞软弱围岩变形控制技术规范》
评论
0/150
提交评论