qt在国产操作系统中的应用
一、引言
在信息化建设过程中,随着计算机技术的快速发展,尤其近几年国家重视支持国产软件的发展,一系列国家政策的发布以及在“核高基”(核心电子器件、高端通用芯片及基础软件产品)的推动下,诞生了中标麒麟、红旗linux等中文操作系统。从某个层面讲,操作系统的天下不再是微软独大了。这些操作系统产品的诞生对打破微软在中国的垄断地位,保护我国信息系统的安全,促进民族软件产业的发展具有重要的战略意义。
但目前针对国产操作系统,许多优秀的界面开发工具因受限于操作系统的限制,不能在国产操作系统上使用,或者说没有在微软操作系统使用那么方便。qt的强大跨平台功能,无疑成为国产操作系统支持可视化软件开发的主要解决方案。
qt是nokia开发的跨平台的c++图形用户界面应用程序框架,完全面向对象的,很容易扩展,移植性好,并且允许真正地组件编程。而良好封装机制使得qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。目前qt的强大功能及诸多优点赢得许多巨头it厂商的青睐。
二、qt的实现结构原理
qt程序是基于c++编写的,图形用户界面变成同时需要运行效率和高水平的灵活性。qt通过结合c++的速度为这一领域提供了qt的对象模型。
qt的实现结构原理如下图:
qt的集成开发环境qt creator,在国产操作系统的安装与windowns上的安装几乎没什么区别,且已经做到相当的人性化了,用户只是根据向导所示的步骤即可。Www.133229.cOM在功能方面,qt creator包括项目生成向导、高级的c++代码编辑器、浏览文件及类的工具、集成了qt designer、图形化的gdb调试前端,集成qmake构建工具等。
在界面事件服务方面,有如下几个特性:一种被称为信号和槽一种非常强大的事件和事件过滤器;可查询和可设计的属性项;根据上下文进行国际化的字符串翻译;完善的时间驱动的计时器等。qt把下面这些特性添加到了c++当中。这些大多是基于qobject的继承,通过标准c++技术实现的。
qapplication是必须构造的qt主对象,需要在一开始的时候就构造这个对象,并把命令行参数传递给这个对象,每个qt应用程序有且仅有一个qapplication对象,该对象必须在做其他事之前创建,这个对象处理一些底层操作,如事件处理,字符串本地化和控制界面外观等。
现今的国产操作系统大多基于linux基础上开发的,所以所使用的编译器与linux上相同即可。而如今的国产操作系统也是做的非常的人性化,如中标麒麟操作系统,操作时几乎与微软的操作系统没什么区别,让不熟悉linux操作系统环境的用户无需再去熟悉linux操作系统命令。在编译运行时只要点击工具条中的编译菜单,系统将自动调用编译器进行编译运行。
三、内部进程通信
在linux系统中开发qt内部进程有如下三个通信常用的三种机制:qcop协议,signal-slot机制和fifo机制,而qcop协议主要用于qt嵌入式版本中。而对于桌面版的国产操作系统,下面我们主要介绍signal-slot机制和fifo机制。
(一)signal-slot机制
要实现一个好的oop库必须解决对象间的通信的问题。在qt中的对象间通信方法被称作“signal-slot”,这也是qt与其它一些方法的区别之一。一个类可以定义多个signal和slot,而且完全是安全的。signal就好像是“论文联盟http://事件”,而slot则是响应事件的“方法”,其实和一般的函数没有太大的区别。而需要实现它们之间通信时,就将某个类的slot和另外一个类的signal“连接”起来,从而实现事件驱动。如下面语句:
connect(ui.confirm_btn,signal(clicked()),this,slot(confirm()));
表示点击界面中的确定按钮,程序将响应槽函数confirm()中的操作;当然,这里的信号是预先定义好的信号,用户在使用该机制时,可以根据需要自行定义信号。
(二)fifo机制
除了qt内部所特有的通信机制之外,一般操作系统中常用的进程间通信机制同样可以用于qt系统内部不同进程之间的通信。如消息队列、共享内存、信号量、管道等机制,其中有些机制,如信号量,在qt中重新进行了封装;有些机制则可以直接调用操作系统的系统调用来实现。这里,管道是一种简单实用的通信机制,用户在对qt内部机制不甚了解的情况下,同样可以使用这种方法实现对象进程之间的通信。
在基于qt的应用中,有很多应用采用了一种客户机-服务器模式,这时就可以利用fifo在客户机和服务器之间传递数据。例如,有一个服务器,它负责接收底层程序发来的消息,同时,它与很多客户机有关,服务器需要将收到的不同消息发送到不同的客户机,而每个客户机也有请求需要发给服务器,进而发给底层程序。服务器接收底层发来的信息,然后根据收到的信息内容,如首字节的内容,将信息发到不同客户端的管道中,实现对信息的正确分发。
四、完美的界面设计要素
使用过qt的编程者都会知道,qt的设计的图形用户界面是诸多开发工具的佼佼者。而结合微软的人机界面和linux内核的国产操作系统也是日渐完善,人机界面流畅完美,美观大方。
qt提供了一个可视化的开发工具设计器qt designer,使用该工具就像在windowns中使用vc++或者delphi那样可以直接向项目中添加各种组件,而无需一步一步地编写代码,这个特点是其它非可视化编程工具望尘莫及的。且在设计器中,可以通过预览功能,随时看界面运行的效果。当新建一个窗体是,系统将自动产生三个文件,即.ui文件,.h文件及.cpp文件,其中.ui就是对应的窗体文件,类似于delphi中的.dfm文件,.h文件及.cpp文件与vc中的一样,用户在.h定义,在.cpp中编写相应的代码。
qt不仅拥有一套完整的组件,而且用户可以在使用其他人或自己所编制的组件加入到组件库中,丰富自己的组件库。用户可以直接基于这些现成的组件开发出优秀的界面;另外,qt的绘画工具类qpainer,在任意一个绘画设备上都可以润色图形,对于更高级的图形可以结合使用oopencgl,用oopencgl就像使用qt中的任意一个组件一样方便,而且比单独使用oopencgl做的3d图形效果更好。再者,qt拥有丰富的api函数,大约有250多个c++类,用户可以根据需要直接引入使用。