现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

QSerialPort类详细描述

2014-10-26 22:40 工业·编程 ⁄ 共 1251字 ⁄ 字号 暂无评论

    QSerialPort类提供了访问串口的功能。你可以用QSerialPortInfo辅助类获得可用的串口信息,辅助类列举了系统所有的串口。这有利于你获取你需要的串口的正确名称。你可以将一个辅助类的对象作为参数传递给setPort() 或者 setPortName()函数,这可以指定你所需要的串口设备。

       在设置串口之后,你可以调用open()函数,以只读(r/o)、只写(w/o)或者读写(r/w)模式打开串口。

注意:串口总是以独占的方式打开的(也即其他的进程或者线程都不能访问一个已经打开的串口)。

       在成功打开串口之后,QSerialPort类设法决定串口的当前配置,并初始化串口。你可以调用 setBaudRate(), setDataBits(), setParity(),setStopBits(), 以及setFlowControl()函数将串口重新配置成为需要的设置。

       控制引脚信号的状态由isDataTerminalReady(), isRequestToSend, 以及pinoutSignals()函数决定。可以通过调用setDataTerminalReady()和setRequestToSend()函数改变控制信号线的状态。

       一旦知道串口已经可以读或写,你可以调用read() 或者write()函数去读或者写串口。另外也可以方便的调用readLine() 和readAll()函数。若没有立即读取所有的数据,那么剩下的数据将会作为新传入的数据追加到QSerialPort类内部的读取缓冲区中。你可以通过调用 setReadBufferSize()函数限制读取缓冲区的大小。

       调用close()函数可以关闭串口并取消I/O操作。

看下面的例子:

int numRead = 0, numReadTotal = 0;

char buffer[50];

forever {

    numRead  = serial.read(buffer, 50);

    // Do whatever with the array

    numReadTotal += numRead;

    if (numRead == 0 && !serial.waitForReadyRead())

        break;

}

       如果waitForReadyRead()返回了false,那么连接已经关闭或者发生了一个错误。

       阻塞的串口编程和不阻塞的串口编程本质上是不一样的。阻塞的串口编程不需要一个事件循环并且通常需要的代码很少。但在一个GUI程序中,阻塞串口只能在非GUI线程中使用,这样可以避免界面冻结。

       关于这些方法的详细信息,可以参阅示例程序。

       QSerialPort类也可以和QTextStream 和QDataStream的流操作(operator<<() 和operator>>())一起使用。但有一点需要注意的是,确保在设法通过operator>>()的重载函数读取之前有足够的数据。

给我留言

留言无头像?