Qextserialport类介绍

 在Qt中并没有特定的串口控制类,我这里使用了qextserialport类。
 下面介绍文件为qextserialport-1.2win-alpha的目录下的内容
(1)doc文件夹中的文件内容是QextSerialPort类和QextBaseType的简单的说明,我们可以使用记事本程序将它们打开。
(2)examples文件夹中是几个例子程序,可以看一下它的源码,不过想运行它们好像会出很多问题啊。
(3)html文件夹中是QextSerialPort类的使用文档。
(4)然后就是剩下的几个文件了。其中qextserialenumerator.cpp及qextserialenumerator.h文件中定义的QextSerialEnumerator类是用来获取平台上可用的串口信息的。
不过,这个类好像并不怎么好用,而且它不是我们关注的重点,所以下面就不再介绍它了。
(5)qextserialbase.cpp和qextserialbase.h文件定义了一个QextSerialBase类,win_qextserialport.cpp和win_qextserialport.h文件定义了一个Win_QextSerialPort类,
posix_qextserialport.cpp和posix_qextserialport.h文件定义了一个Posix_QextSerialPort类,qextserialport.cpp和qextserialport.h文件定义了一个QextSerialPort类。
这个QextSerialPort类就是我们上面所说的那个,它是所有这些类的子类,是最高的抽象,它屏蔽了平台特征,使得在任何平台上都可以使用它。


  1、它们都继承自QIODevice类,所以该类的一些函数我们也可以直接来使用。


  QextBaseType类,其实它只是一个标识,没有具体的内容,它用来表示Win_QextSerialPort或Posix_QextSerialPort 中的一个类,因为在QextSerialPort类中使用了条件编译,
  所以QextSerialPort类既可以继承自Win_QextSerialPort类,也可以继承自Posix_QextSerialPort类,所以使用了QextBaseType来表示。


  这一点我们可以在qextserialport.h文件中看到。再说QextSerialPort类,其实它只是为了方便程序的跨平台编译,使用它可以在不同的平台上,根据不同的条件编译继承不同的类。
  所以它只是一个抽象,提供了几个构造函数而已,并没有具体的内容。
  所以,其实我们没有必要使用这个类,直接使用Win_QextSerialPort或Posix_QextSerialPort就可以了。




  2、QextSerialBase类继承自QIODevice类,它提供了操作串口所必需的一些变量和函数等,而Win_QextSerialPort和Posix_QextSerialPort均继承自QextSerialBase类,
  Win_QextSerialPort类添加了Windows平台下操作串口的一些功能,
  Posix_QextSerialPort类添加了Linux平台下操作串口的一些功能。


  3、在QextSerialBase类中还涉及到了一个枚举变量QueryMode。
  它有两个值Polling和EventDriven 。QueryMode指的是读取串口的方式,下面我们称为查询模式,我们将Polling称为查询方式Polling,将EventDriven称为事件驱动方式。
  事件驱动方式EventDriven就是使用事件处理串口的读取,一旦有数据到来,就会发出readyRead()信号,我们可以关联该信号来读取串口的数据。
  在事件驱动的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。
  查询方式Polling则不同,读写函数是同步执行的,信号不能工作在这种模式下,而且有些功能也无法实现。但是这种模式下的开销较小。
  我们需要自己建立定时器来读取串口的数据。
  在Windows下支持以上两种模式,而在Linux下只支持Polling模式。


  小结:
  我们在Qt中使用这个类编写串口程序,根据平台的不同只需要分别使用四个文件。
   在Windows下是:
   qextserialbase.cpp和qextserialbase.h 以及win_qextserialport.cpp和win_qextserialport.h
   在Linux下是:
   qextserialbase.cpp和qextserialbase.h 以及posix_qextserialport.cpp和posix_qextserialport.h
  而在Windows下我们可以使用事件驱动EventDriven方式,也可以使用查询Polling方式,但是在Linux下我们只能使用查询Polling方式。

你可能感兴趣的:(QT,串口通信)