最实用的工具(除了上面我们提到的虚拟缓冲帧)是 qmake 和 Qt designer(图形设计器)。
qmake 是一个为编译 Qt/Embedded 库和应用而提供的 Makefile 生成器。它能够根据一个工
程文件(.pro)产生不同平台下的 Makefile 文件。qmake 支持跨平台开发和影子生成
(shadow builds),影子生成是指当工程的源代码共享给网络上的多台机器时,每台机器
编译链接这个工程的代码将在不同的子路径下完成,这样就不会覆盖别人的编 译链接生成
的文件。qmake 还易于在不同的配置之间切换。开发者可以使用 Qt 图形设计器可视化地设
计对话框而不需编写一行代码。使用 Qt 图形设计器的布局管理可以生成具有平滑改变尺寸
的对话框,qmake 和 Qt 图形设计器是完全集成在一起的。
2.2 信号与插槽
信号与插槽机制提供了对象间的通信机制,它易于理解和使用,并完全被 Qt 图形设计器所
支持。图形用户接口的应用需要对用户的动作做出响应。例如,当用户点击了一个菜单项
或是工具栏的按钮时,应用程序会执行某些代码。大部分情况 下,我们希望不同类型的对
象之间能够进行通信。程序员必须把事件和相关代码联系起来,这样才能对事件做出响应
以前的工具开发包使用的事件响应机制是易崩 溃的,不够健壮的,同时也不是面向对象的。
Trolltech 已经创立了一种新的机制,叫做“信号与插槽”。信号与插槽是一种强有力的对象间
通信机制,它完全可以取代原始的回调和消息映射机制;信号与插槽是迅速的, 类型安全
的,健壮的,完全面向对象并用 C++来实现的一种机制。
在以前,当我们使用回调函数机制来把某段响应代码和一个按钮的动作相关联时,我们 通
常把那段响应代码写成一个函数,然后把这个函数的地址指针传给按钮,当那个按钮被按
下时,这个函数就会被执行。对于这种方式,以前的开发包不能够确保回 调函数被执行时
所传递进来的函数参数就是正确的类型,因此容易造成进程崩溃,另外一个问题是,回调
这种方式紧紧的绑定了图形用户接口的功能元素,因而很难 把开发进行独立的分类。Qt 的
信号与插槽机制是不同的。Qt 的窗口在事件发生后会激发信号。例如一个按钮被点击时会
激发一个“clicked”信号。程序 员通过建立一个函数(称作一个插槽),对象 1 图一一些信
号与插槽连接的抽象图然后调用 connect()函数把这个插槽和一个信号连接起来,这样就完
成了 一个事件和响应代码的连接。信号与插槽机制并不要求类之间互相知道细节,这样就
可以相对容易的开发出代码可高重用的类。信号与插槽机制是类型安全的,它以 警告的方
式报告类型错误,而不会使系统产生崩溃。
例如,如果一个退出按钮的 clicked() 信号被连接到了一个应用的退出函数-
信号 1
信号 2
插槽 1
插槽 2
插槽 1
插槽 2
插槽 3
插槽 1
信号 1
信号 1
对象 3
对象 4
connect( 对象 1, 信号 1, 对象 2, 插槽 1 )
connect( 对象 1, 信号 1, 对象 2, 插槽 2 )