zoukankan      html  css  js  c++  java
  • 【译】QSerialPort类

    详细描述:

           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;
    }
    View Code

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

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

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

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

  • 相关阅读:
    php常用函数总结
    PHP常用函数(收集)
    Web开发者的最爱 5个超实用的HTML5 API
    打开MySQL数据库远程访问的权限
    centos yum 安装问题
    CentOS6.4安装VNC
    删:Centos 7安装Nginx 1.8
    centos6.3安装nginx
    MySQL5.7重置root密码
    CentOS下MySQL忘记root密码解决方法【转载】
  • 原文地址:https://www.cnblogs.com/ppffs/p/3212373.html
Copyright © 2011-2022 走看看