【译】QSerialPort类

http://www.cnblogs.com/ppffs/p/3212373.html

详细描述:

       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>>()的重载函数读取之前有足够的数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值