《Qt编程的艺术》——5.1 手动布局
来源:互联网 发布:wps mac版本 编辑:程序博客网 时间:2024/05/16 08:25
在传统的GUI设计中,每个控件(Widget)都要手动地绑定在窗口之上的一个点上(也就是说,这个控件被指定成了给定GUI元素的父对象),同时还要指定这个控件的高度和宽度。作为所有图形元素的基础类,QWidget类提供了setGeometry()方法。这个方法需要4个整型参数:前两个参数指定相对于父控件(parent widget)的x、y坐标,后面两个参数指定控件的高度和宽度。在目前情况下,父控件的最终显示大小可能还未定。
作为一个例子,我们可以看一下一个继承自QWidget的窗口(如图5.1):
// manually/window.cpp#include <QtGui>#include "window.h"Window::Window(QWidget *parent) : QWidget(parent){ setFixedSize(640,480); QTextEdit *txt =new QTextEdit(this); txt->setGeometry(20, 20, 600,400); QPushButton *btn=new QPushButton(tr("&Close"),this); btn->setGeometry(520,440,100, 20);}
setFixedSize()方法指示窗口接收一个固定的再也不能改变的大小。之后,我们放置了一个编辑窗口(一个QTextEdit控件)和一个按钮。
从这些setGeometry()调用中可以明显地看出,要猜出这些控件的正确放置位置,是相当困难的。用这种方式建立布局,就是不停地选择候选数值、编译、然后调整数值,来增强显示效果,就是这样一种循环。如果控件(widget)或对话框(dialog)要做出调整的话,这种方式显得太笨拙了:举例说,如果你想在布局的中间位置添加一个新的按钮,所有放在它下面的元素的位置都要做出调整。
现在,也许有人会说,在实践中这不是问题,因为Qt Designer大力简化了上述位置调整的工作。但是我要说,任何GUI Designer都不能解决所有问题,除非采用自动布局。
无法解决的所有问题中的一个就是,当一个控件(widget)变大或缩小时,它要做出相应的变化:在一个不灵活的布局中且没有附加的帮助的情况下,这些元素——比如上例中的编辑窗口(editor window)——总是保持相同的大小。尽管它可能会根据屏幕大小做出一定适应,或者向用户提供选项,来选择其大小,但这仍然是个问题。
要让对话框的大小可以灵活调整,我们可以将setFixSize()调用换成resize()方法,这个方法也需要两个整型参数,或者一个QSize参数。这个方法只调整大小,却并不锁定它。用户现在可以通过鼠标改变对话框的大小,尽管窗口里的控件仍保持原来的位置、大小不变。
作为一种选择,你可以重新实现QWidget的resizeEvent()方法:当控件大小改变时,Qt总是调用这个方法。你可以编代码,在每次resizeEvent调用时,计算出窗口元素的新的大小和位置。但是在大多数情况下,这个步骤都太麻烦了,还需要手工计算控件(widget)的比例。
除此之外,重新实现resizeEvent()还会在国际化上遇到一个特别的问题:在地区化的软件上,一个标签控件(Label)的大小取决于它显示的语言。一个英语中叫Close的按钮,若按照德语来翻译,叫做Schließen,变长了不少。这样,除非有预先的解决方案,否则多余的部分只能被切掉了。
如果我们采用这种方案,最终,我们只能打补丁。要根本解决潜在的问题,我们不能避免使用自动布局。
- 《Qt编程的艺术》——5.1 手动布局
- 《Qt编程的艺术》——第五章 放置控件
- 《Qt编程的艺术》——8.2 显示目录层次
- 《Qt编程的艺术》——第九章 QtSql模块
- Qt之手动布局
- 《Qt编程的艺术》——8.1model/view结构的底层概念
- 《Qt编程的艺术》——8.2.2 实现文件选择对话框里面的功能
- 《Qt编程的艺术》——9.1 QtSql模块的结构
- 《Qt编程的艺术》——第八章 使用Interview显示数据
- 《Qt编程的艺术》——8.1.1 显示类(The View Classes)
- 《Qt编程的艺术》——8.1.2 模型类(Model Classes)
- 《Qt编程的艺术》——8.2.1 在Designer中使用View类
- qt界面手动布局测试
- Qt——布局
- Qt手动布局和添加控件
- Qt入门(6)——Qt的界面布局
- 编程艺术——13个惊人的Code Demo
- Java并发编程的艺术——互动出版网
- Apache与Nginx的优缺点比较
- GBK转unicode码查询表
- oracle 系统表介绍
- Java 日期的一些算法
- UVA 10282 (STL map的应用 13.08.18)
- 《Qt编程的艺术》——5.1 手动布局
- Localhost 与127.0.0.1和IP的区别?
- Java Web基础教程四 ---------配置篇三mysql数据库的安装配置使用
- 开源测试项目:spring mvc+springsecurity3+ehcache+bootstrap+mysql
- 【Cocos2d-X开发学习笔记】第25期:游戏背景之瓦片地图集类(CCTMXTiledMap)的使用
- HDOJ 1574
- 打开.mpp文件有感
- 淡入淡出
- 润乾——超链接注意事项