视口坐标系是对物理坐标系而言,也就是我们平常画图使用的坐标系(通常相对屏幕或者父窗口部件);窗口坐标系是我们自己定义的逻辑坐标系,根据画图的方面而自定义的。在默认情况下,视口坐标系与窗口坐标系是一致的。在Qt中我们画图时坐标都是相对于窗口坐标系,而与视口坐标系无关。
比如:比如我们要一个矩形(0,0,320,200)(视口坐标)内画图,而我们可以定义这个矩形的窗口坐标为(-50,-50,100,100);窗口坐标系统相对与视口坐标系做了平移与缩放。在视口坐标系矩形的左上角坐标为(0,0),宽度为320,高度为200的长方形;而在窗口坐标系中这个矩形的左上角坐标为(-50,-50),宽度为100,高度为100的正方形。
坐标的转换公式:(x0-m)*Rx=(X-0)(Y0-n)*Ry=Y-0
Rx为X轴的缩放因子,Ry为Y轴的缩放因子.
Qt学习之路(1)
Qt是一个著名的C++库——或许并不能说这只是一个GUI库,因为Qt十分庞大,并不仅仅是GUI。使用Qt,在一定程序上你获得的是一个“一站式”的服务:不再需要研究STL,不再需要C++的,因为Qt有它自己的QString等等。或许这样说很偏激,但Qt确实是一个“伟大的C++库”。
首先说wxWidget,这是一个标准的C++库,和Qt一样庞大。它的语法看上去和MFC类似,有大量的宏。据说,一个MFC程序员可以很容易的转换到wxWidget上面来。wxWidget有一个很大的优点,就是它的界面都是原生风格的。这是其他的库
所不能做到的。wxWidget的运行效率很高,据说在Windows平台上比起微软自家的MFC也不相上下。
gtk++其实是一个C库,不过由于C++和C之间的关系,这点并没有很大的关系。但是,gtk++是一个使用C语言很优雅的实现了面向对象程序设计的范例。不过,这也同样带来了一个问题——它的里面带有大量的类型转换的宏来模拟多态,并且它的函数名“又臭又长(不过这点我倒是觉得无所谓,因为它的函数名虽然很长,但是同样很清晰)”,使用下划线分割单词,看上去和Linux如出一辙。由于它是C语言实现,因此它的运行效率当然不在话下。gtk++并不是模拟的原生界面,而有它自己的风格,所以有时候就会和操作系统的界面显得格格不入。
再来看Qt,和wxWidget一样,它也是一个标准的C++库。但是它的语法很类似于Java的Swing,十分清晰,而且SIGNAL/SLOT机制使得程序看起来很明白——这也是我首先选择Qt的一个很重要的方面,因为我是学Java出身的。不过,所谓“成也萧何,败也萧何”,这种机制虽然很清楚,但是它所带来的后果是你需要使用Qt的qmake对程序进行预处理,才能够再使用make或者nmake进行编译。并且它的界面也不是原生风格的,尽管Qt使用style机制十分巧妙的模拟了本地界面。另外值得一提的是,Qt不仅仅运行在桌面环境中,Qt已经被Nokia收购,它现在已经会成为Symbian系列的主要界面技术——Qt是能够运行于嵌入式平台的。
闲话少说,还是尽快开始下面的学习吧!
Qt学习之路(2/3):Hello,world!
任何编程技术的学习第一课基本上都会是Hello,world!,我也不想故意打破这个惯例——照理说,应该首先回顾一下Qt的历史,不过即使不说这些也并无大碍。或许有人总想知道,Qt这个单词是什么意思。其实,这并不是一个缩写词,仅仅是因为它的发明者,TrollTech公司的CEO,HaarardNord和Trolltech公司的总裁EirikChambe-Eng在联合发明Qt的时候并没有一个很好的名字。在这里,字母Q是Qt库中所有类的前缀——这仅仅是因为在Haarard的emacs的字体中,这个字母看起来特别的漂亮;而字母t则代表“toolkit”,这是在Xt(Xtoolkit)中得到的灵感。
好了,闲话少说,先看看Qt的开发吧!事先说明一下,我是一个比较懒的人,不喜欢配置很多的东西,而Qt已经提供了一个轻量级的IDE,并且它的网站上也有forEclipse和VS的开发插件,不过在这里我并不想用这些大块头。
Qt有两套协议——商业版本和开源的LGPL版本。不同的是前者要收费,而后者免费,当然,后者还要遵循LGPL协议的规定,这是题外话。
安装完成后会有个QtCreator的东西,这就是官方提供的一个轻量级IDE,不过它的功能还是蛮强大的。运行这个就会发现,其实Qt不仅仅是LinuxKDE桌面的底层实现库。而且是这个IDE的实现的这个IDE就是用Qt完成的。
QtCreator左面从上到下依次是Welcome(欢迎页面,就是一开始出现的那个);Edit(我们的代码编辑窗口);Debug(调试窗口);Projects(工程窗口);Help(帮助,这个帮助完全整合的Qt的官方文档,相当有用);Output(输出窗口)。
下面我们来试试我们的Hello,world!吧!
在Edit窗口空白处点右键,有Newproject...这里我们选第三项,QtGuiApplication。