(本文接上篇“概述")
(Qt Library目前的版本为4.8,以下本文的程序将以此版本为主。)
三、Gt的GUI
Qt的优势在于GUI(本人的理解,至少以前如此,现在则未必),所以了解Qt,也是从图形界面的UI开始。
Qt有几百个类,与图形有关的估计有一半以上。本文主要介绍基于window的图形编程接口,另外稍微介绍一下OpenGL,可以为程序添加三维显示。
1.QWidget
这个是所有window的基类,类似于MFC中的CWnd,提供了许多基类方法。在做GUI时,应仔细阅读其说明文档。
2.滚动条
Qt窗口的滚动条是两个"控件“,需要手工添加(当然,Qt中也有一些自带滚动条的窗体类),不如Windows窗口中,滚动条是窗口的一个属性,凭设置就可以添加滚动条,但Windows中的滚动条是”假“的,需要手工编程控制其移动,而Qt在这点上要简单得多。
3.父子窗口
Qt中一个独特的现象是创建一个Widget时,可以指定一个父Widget,当父Widget销毁时,父Widget会遍历其子Widget,自动销毁子Widget,这样我们就不需要delete子窗口了。这是Qt内存管理的一个方法,对窗口来讲是合适的,由于我们不知道窗口何时销毁,所以必须将非窗口的东西(与窗口的生命期不同)拿出来,放到诸如document中存储,我们手工管理其生存周期。
4. 四种图形界面绘制方式
在Qt窗体下,可以有四种方式构成我们的图形界面,两种是基于文本(块)的格式化布局方式:通常的Window控件;QML控件,两种基于图形的任意布局方式:一种是无对象的,自己绘制;另一种是继承于GraphicsItem类的,一个图形是一个对象。以下分别介绍一下。
基于window控件的格式化GUI:这是最通常的一种UI方式,目前我们大量的对话窗口和Web页就是基于这种方式,这种方式是一种文本方式显示和录入方式。在Qt下,也提供了若干显示控件,可以满足基本的用户文本交换功能,当然,与Windows下的大量丰富的控件相比,Qt的控件就太”寒酸“了。
基于QML控件的格式化GUI:Qt中有专门显示html控件的窗口,但不知道为什么自己提出了一个叫QML(Declarative markup langua