QT进程间通信介绍

来源:互联网 发布:windows 7旗舰 编辑:程序博客网 时间:2024/05/16 11:39

1、QT通信机制

为了更好的实现QT的信息交互,在QT系统中创建了较为完善的通信机制。QT通信可分为QT内部通信和外部通信两大类。对于这两类通信机制及应用场合做如以下分析:

(1)QT内部对象间通信

在图形用户界面编程中,经常需要将一个窗口部件的变化通知给窗口的其它部件使其产生相应的变化。对于这种内部对象间的通信QT主要采用了信号的机制。这种机制是QT区别于其他GUI工具的核心机制。在大部分的GUI工具中,通常为可能触发的每种行为通过定义回调函数来实现。这种回调函数是一个指向函数的指针,在进行函数回调执行时不能保证所传递的函数参数类型的正确性,因此容易造成进程的崩溃。

QT中,信号的机制取代了这种繁杂的、易崩溃的对象通信机制。信号是当对象状态改变时所发出的。是用来接收发射的信号并响应相应事件的类的成员函数。信号和槽的连接是通过connect()函数来实现的。例如,实现单击按钮终止应用程序运行的代码 connect(button , SIGNAL(clicked()) , qApp , SLOT(quit()) );实现过程就是一个button被单击后会激发clicked信号,通过connect()函数的连接qApp会接收到此信号并执行槽函数quit()。在此过程中,信号的发出并不关心什么样的对象来接收此信号,也不关心是否有对象来接收此信号, 只要对象状态发生改变此信号就会发出。此时槽也并不知晓有什么的信号与自己相联系和是否有信号与自己联系,这样信号和槽就真正的实现了程序代码的封装,提 高了代码的可重用性。同时,信号和槽的连接还实现了类型的安全性,如果类型不匹配,它会以警告的方式报告类型错误,而不会使系统产生崩溃。

(2)QT与外部设备间通信

QT与外部通信主要是将外部发来的消息以事件的方式进行接收处理。外部设备将主要通过socket与QT应用程序进行连接。在此,以输入设备与QT应用程序的通信为例说明QT与外部通信的原理。

在QT的应用程序开始运行时,主程序将通过函数调用来创建并启动qwsServer服务器,然后通过socket建立该服务器与输入硬件设备的连 接。服务器启动后将会打开鼠标与键盘设备,然后将打开的设备文件描述符fd连接到socket上。等到QT应用程序进入主事件循环时,事件处理程序将通过 Linux系统的select函数来检测文件描述符fd的状态变化情况以实现对socket的监听。如果文件描述符fd状态改变,说明设备有数据输入。此 时,事件处理程序将会发出信号使设备输入的数据能及时得到QT应用程序的响应。数据进入服务器内部就会以事件的形式将数据放入事件队列里,等待QT客户应 用程序接收处理。处理结束后再将事件放入请求队列里,通过服务器将事件发送到相应硬件上,完成外部输入设备与QT应用程序的整个通信过程。

0 0
原创粉丝点击