QSerialPort类方法解析

QSerialPort Class Header:#include < QSerialPort > qmake:QT += serialport Since:Qt 5.1 Inherits:QIODevice This class was introduced in Qt 5.1. 阅读详情
AI摘要

本文主要解析了QSerialPort类的方法,该类从QT 5.1版本后提供接入串口功能,继承自QIODevice。文中列举了如setPortName、setBaudRate等34个方法,介绍了各方法的功能、用法及相关参数,还提及了串口辅助类QSerialPortInfo。

QSerialPort 类方法解析

QSerialPort类提供的是是一个接入串口的功能,它从QT的5.1版本之后才开始有,它继承自QIODevice。还有一个串口辅助的类QSerialPortInfo,它可以列举出系统里所有的串口,通过这个类,配合setPort和setPortName方法,我们就可以安排一下自己想用的串口了。

下面是这类需要的头文件和工程文件的添加的qmake语句:

Header:#include <QSerialPort>
qmake:QT += serialport

方法列举:

1.QSerialPort::setPortName

设置串口波特率

QSerialPort::setPortName 是 Qt 框架中的一个函数,用于设置串口对象的串口名称。串口名称是用来标识计算机上可用串口的唯一标识符,以字符串的形式表示,比如"COM1"(在Windows上)或"/dev/ttyS0"(在Linux上)等。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1
2.QSerialPort::setPort

设置存储串口信息

3.QSerialPort::portName

返回串口名

QSerialPort::portName 是 Qt Serial Port 模块中的一个属性,用于获取当前串口对象所连接的串口的名称。这个属性是只读的,可以用来查询已打开串口的名称。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    // 获取已打开串口的名称
    QString portName = serialPort.portName();
    qDebug() << "已打开的串口名称:" << portName;
} else {
    qDebug() << "无法打开串口";
}
4.QSerialPort::setBaudRate

设置波特率

QSerialPort::setBaudRate 是 Qt Serial Port 模块中的一个函数,用于设置串口的波特率。波特率是串口通信中一个重要的参数,它指定了数据传输的速率,以每秒传输的比特数(波特)来表示。波特率必须在通信的两端保持一致,以确保正确的数据传输。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 设置波特率为9600
serialPort.setBaudRate(QSerialPort::Baud9600);

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开,波特率设置为" << serialPort.baudRate();
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
5.QSerialPort::baudRate

获取波特率

QSerialPort::baudRate 是 Qt Serial Port 模块中的一个函数,用于获取当前串口的波特率设置。波特率是串口通信中一个重要的参数,它指定了数据传输的速率,以每秒传输的比特数(波特)来表示。波特率必须在通信的两端保持一致,以确保正确的数据传输。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开,当前波特率为" << serialPort.baudRate();
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
6.QSerialPort::setDataBits

QSerialPort::setDataBits 是 Qt Serial Port 模块中的一个函数,用于设置串口的数据位。数据位是串口通信中的一个重要参数,它定义了每个字符包含的数据位数。数据位可以设置为5位、6位、7位或8位,表示每个字符传输的二进制数据位数。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 设置数据位为8位
serialPort.setDataBits(QSerialPort::Data8);

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开,数据位设置为" << serialPort.dataBits();
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
7.QSerialPort::dataBits

获取数据位设置

QSerialPort::dataBits 是 Qt Serial Port 模块中的一个函数,用于获取当前串口的数据位设置。数据位是串口通信中的一个重要参数,它定义了每个字符包含的数据位数。数据位可以设置为5位、6位、7位或8位,表示每个字符传输的二进制数据位数。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    QSerialPort::DataBits dataBits = serialPort.dataBits();
    qDebug() << "串口已成功打开,当前数据位设置为" << dataBits;
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
8.QSerialPort::setParity

设置校验位

QSerialPort::setParity 是 Qt Serial Port 模块中的一个函数,用于设置串口的校验位(parity bit)。校验位是串口通信中的一个重要参数,它用于检测和纠正数据传输中的错误。串口通信可以选择以下几种校验位设置:

  1. NoParity(无校验):不使用校验位,数据直接传输。这是最简单的设置,但没有纠错能力。
  2. EvenParity(偶校验):校验位被设置为确保数据位中有偶数个1。如果数据位中有奇数个1,校验位会被设置为1,以使总共的位数为偶数。
  3. OddParity(奇校验):校验位被设置为确保数据位中有奇数个1。如果数据位中有偶数个1,校验位会被设置为1,以使总共的位数为奇数。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 设置校验位为奇校验
serialPort.setParity(QSerialPort::OddParity);

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开,校验位设置为" << serialPort.parity();
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
9.QSerialPort::parity

获取校验位

QSerialPort::parity 是 Qt Serial Port 模块中的一个函数,用于获取当前串口的校验位(parity bit)设置。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    QSerialPort::Parity parity = serialPort.parity();
    qDebug() << "串口已成功打开,当前校验位设置为" << parity;
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
10.QSerialPort::setStopBits

设置停止位

QSerialPort::setStopBits 是 Qt Serial Port 模块中的一个函数,用于设置串口通信中的停止位(stop bits)参数。停止位是串口通信中的一个重要参数,它指定了每个数据字节之后的停止位数目。串口通信可以选择以下几种停止位设置:

  1. OneStop(1 停止位):每个数据字节之后都有一个停止位。这是最常见的设置,也是串口通信的默认设置。
  2. OneAndHalfStop(1.5 停止位):每个数据字节之后有一个半停止位。这个设置较为不常见,用于特殊应用。
  3. TwoStop(2 停止位):每个数据字节之后有两个停止位。这个设置也比较不常见,但在某些特定情况下可能会使用。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 设置停止位为1停止位
serialPort.setStopBits(QSerialPort::OneStop);

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开,当前停止位设置为" << serialPort.stopBits();
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
11.QSerialPort::stopBits

返回停止位

QSerialPort::stopBits 是 Qt Serial Port 模块中的一个函数,用于获取当前串口的停止位(stop bits)设置。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    QSerialPort::StopBits stopBits = serialPort.stopBits();
    qDebug() << "串口已成功打开,当前停止位设置为" << stopBits;
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
12.QSerialPort::setFlowControl

设置流控制

QSerialPort::setFlowControl 是 Qt Serial Port 模块中的一个函数,用于设置串口通信中的流控制(Flow Control)模式。流控制是一种用于管理串口通信速率的机制,以确保数据正确传输的重要工具。

在串口通信中,有几种流控制模式可供选择,包括以下常见选项:

  1. NoFlowControl(无流控制):不使用流控制,数据的传输速度由发送方和接收方之间的协商来确定。这是最简单的流控制模式,适用于短距离通信或通信双方能够以相同速率进行通信的情况。
  2. HardwareControl(硬件流控制):使用硬件信号线(例如,RTS/CTS)来进行流控制。发送方将通过 RTS(Request to Send)信号通知接收方可以发送数据,而接收方通过 CTS(Clear to Send)信号来确认自己准备好接收数据。这种流控制模式适用于长距离通信或通信速率不匹配的情况。
  3. SoftwareControl(软件流控制):使用特殊的控制字符(XON和XOFF)来进行流控制。发送方在发送数据之前发送XON字符,表示可以继续发送,而接收方在准备好接收数据时发送XON字符,表示可以继续发送数据。这种流控制模式用于较慢的通信链路或通信速率不匹配的情况。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 设置流控制模式为硬件流控制
serialPort.setFlowControl(QSerialPort::HardwareControl);

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开,当前流控制模式为" << serialPort.flowControl();
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
13.QSerialPort::flowControl

获取流控制

QSerialPort::flowControl 是 Qt Serial Port 模块中的一个成员函数,用于获取当前串口对象的流控制(Flow Control)模式。这个函数返回一个枚举类型的值,表示当前串口的流控制模式。

流控制模式用于管理串口通信中数据的流动,以确保数据传输的可靠性。Qt Serial Port 模块支持以下几种流控制模式,它们对应着枚举类型 QSerialPort::FlowControl 中的不同值:

  1. QSerialPort::NoFlowControl:这表示没有启用流控制。在这种模式下,数据的传输速度由发送方和接收方之间的协商来确定,用于简单的串口通信场景。
  2. QSerialPort::HardwareControl:这表示启用硬件流控制。硬件流控制通过控制硬件信号线(如 RTS/CTS)来实现。发送方通过 RTS(Request to Send)信号通知接收方可以发送数据,而接收方通过 CTS(Clear to Send)信号来确认自己准备好接收数据。这种流控制模式适用于长距离通信或通信速率不匹配的情况。
  3. QSerialPort::SoftwareControl:这表示启用软件流控制。软件流控制使用特殊的控制字符(XON和XOFF)来进行流控制。发送方在发送数据之前发送XON字符,表示可以继续发送,而接收方在准备好接收数据时发送XON字符,表示可以继续发送数据。这种流控制模式用于较慢的通信链路或通信速率不匹配的情况。
  4. QSerialPort::UnknownFlowControl:这表示无法确定当前的流控制模式。这种情况发生在无法读取串口的状态或发生错误时。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 获取当前串口的流控制模式
    QSerialPort::FlowControl currentFlowControl = serialPort.flowControl();
    
    qDebug() << "串口当前流控制模式:" << currentFlowControl;
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
14.QSerialPort::open

打开串口,成功返回 true,失败返回 false

bool QSerialPort::open(OpenMode mode)
{
    Q_D(QSerialPort);

    if (isOpen()) {
        d->setError(QSerialPortErrorInfo(QSerialPort::OpenError));
        return false;
    }

    // Define while not supported modes.
    static const OpenMode unsupportedModes = Append | Truncate | Text | Unbuffered;
    if ((mode & unsupportedModes) || mode == NotOpen) {
        d->setError(QSerialPortErrorInfo(QSerialPort::UnsupportedOperationError, tr("Unsupported open mode")));
        return false;
    }

    clearError();
    if (!d->open(mode))
        return false;

    QIODevice::open(mode);
    return true;
}

QSerialPort::open 是 Qt Serial Port 模块中的一个函数,用于打开串口以便进行串口通信。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开";
    // 进行串口通信的相关操作
} else {
    qDebug() << "无法打开串口";
}
15.QSerialPort::close

关闭串口,成功返回 true,失败返回false

void QSerialPort::close()
{
    Q_D(QSerialPort);
    if (!isOpen()) {
        d->setError(QSerialPortErrorInfo(QSerialPort::NotOpenError));
        return;
    }

    d->close();
    d->isBreakEnabled = false;
    QIODevice::close();
}

QSerialPort::close 是 Qt Serial Port 模块中的一个函数,用于关闭已打开的串口连接。这个函数的主要作用是终止与串口的通信并释放与串口相关的资源。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开";
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
16.QSerialPort::setDataTerminalReady

设置 DTR 状态

QSerialPort::setDataTerminalReady 是 Qt Serial Port 模块中的一个成员函数,用于设置数据终端就绪(Data Terminal Ready,DTR)信号的状态。DTR 是串口通信中的一种硬件流控制信号,用于通知外部设备串口已准备好进行通信或传输数据。

该函数接受一个布尔值参数,用于控制 DTR 信号的状态。具体来说:

  • 如果参数为 true,则表示要将 DTR 信号设置为处于就绪状态,用于通知外部设备可以开始通信。
  • 如果参数为 false,则表示要将 DTR 信号设置为非就绪状态,用于通知外部设备停止通信。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 将DTR信号设置为就绪状态
    serialPort.setDataTerminalReady(true);
    
    // 在此处可以执行串口通信操作
    
    // 将DTR信号设置为非就绪状态
    serialPort.setDataTerminalReady(false);
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
17.QSerialPort::isDataTerminalReady

检查 DTR 的状态

QSerialPort::isDataTerminalReady 是 Qt Serial Port 模块中的一个成员函数,用于检查数据终端就绪(Data Terminal Ready,DTR)信号的当前状态。

该函数返回一个布尔值,指示 DTR 信号的状态:

  • 如果函数返回 true,表示 DTR 信号处于就绪状态,即串口已准备好进行通信。
  • 如果函数返回 false,表示 DTR 信号处于非就绪状态,即串口未准备好通信。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 检查DTR信号的状态
    bool isDTRReady = serialPort.isDataTerminalReady();
    
    if (isDTRReady) {
        qDebug() << "DTR信号处于就绪状态";
    } else {
        qDebug() << "DTR信号处于非就绪状态";
    }
    
    // 在此处可以执行串口通信操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
18.QSerialPort::setRequestToSend

设置 RTS 状态

QSerialPort::setRequestToSend 是 Qt Serial Port 模块中的一个成员函数,用于设置请求发送(Request to Send,RTS)信号的状态。RTS 信号是串口通信中的一种硬件流控制信号,用于通知外部设备串口是否准备好接收数据。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 设置RTS信号为激活状态
    serialPort.setRequestToSend(true);
    
    qDebug() << "RTS信号已激活";
    
    // 在此处可以执行向外部设备发送数据的操作
    
    // 设置RTS信号为非激活状态
    serialPort.setRequestToSend(false);
    
    qDebug() << "RTS信号已非激活";
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
19.QSerialPort::isRequestToSend

检查 RTS 状态

在 Qt Serial Port 模块中,QSerialPort::isRequestToSend 是一个成员函数,用于查询请求发送(Request to Send,RTS)信号的当前状态。

该函数不需要参数,它返回一个布尔值,表示 RTS 信号的状态:

  • 如果返回 true,表示 RTS 信号当前处于激活状态,即请求发送数据。
  • 如果返回 false,表示 RTS 信号当前处于非激活状态,即不请求发送数据。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 查询RTS信号的状态
    bool rtsStatus = serialPort.isRequestToSend();
    
    if (rtsStatus) {
        qDebug() << "RTS信号处于激活状态";
    } else {
        qDebug() << "RTS信号处于非激活状态";
    }
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
20.QSerialPort::pinoutSignals

获取串口引脚状态

在 Qt Serial Port 模块中,QSerialPort::pinoutSignals 是一个成员函数,用于获取当前串口的引脚状态信息,包括各种硬件控制信号的状态。这些硬件控制信号包括数据终端就绪(Data Terminal Ready,DTR)、请求发送(Request to Send,RTS)、数据载波检测(Data Carrier Detect,DCD)、数据准备就绪(Data Set Ready,DSR)、奇偶校验错误(Parity Error,PE)等。

pinoutSignals 函数返回一个枚举值,表示当前串口的各个控制信号的状态组合。这个枚举值是一个位掩码,其中每个位代表一个不同的控制信号。可以使用位操作来提取或检查特定的信号状态。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 获取当前控制信号状态
    QSerialPort::SerialPortPinoutSignals signals = serialPort.pinoutSignals();
    
    // 检查DTR信号状态
    bool dtrStatus = signals & QSerialPort::DataTerminalReadySignal;
    if (dtrStatus) {
        qDebug() << "DTR信号处于激活状态";
    } else {
        qDebug() << "DTR信号处于非激活状态";
    }
    
    // 检查RTS信号状态
    bool rtsStatus = signals & QSerialPort::RequestToSendSignal;
    if (rtsStatus) {
        qDebug() << "RTS信号处于激活状态";
    } else {
        qDebug() << "RTS信号处于非激活状态";
    }
    
    // 检查DCD信号状态
    bool dcdStatus = signals & QSerialPort::DataCarrierDetectSignal;
    if (dcdStatus) {
        qDebug() << "DCD信号处于激活状态";
    } else {
        qDebug() << "DCD信号处于非激活状态";
    }
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
21.QSerialPort::flush

刷新串口的输入缓冲区和输出缓冲区

QSerialPort::flush 是 Qt Serial Port 模块中的一个成员函数,用于刷新串口的输入缓冲区和输出缓冲区。刷新操作可以清除未处理的数据,确保串口的输入和输出缓冲区都为空。

这个函数有两个可选参数,用于指定要刷新的缓冲区类型:

  1. QSerialPort::Input:表示刷新输入缓冲区,清除所有未读取的数据。
  2. QSerialPort::Output:表示刷新输出缓冲区,确保所有待发送的数据都被发送出去。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 向串口写入数据
    serialPort.write("Hello, Serial Port!");
    
    // 刷新输出缓冲区,确保数据被发送
    serialPort.flush(QSerialPort::Output);
    
    // 刷新输入缓冲区,清除未读取的数据
    serialPort.flush(QSerialPort::Input);
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
22.QSerialPort::clear

清除串口的输入缓冲区和输出缓冲区中的数据

在 Qt Serial Port 模块中,QSerialPort::clear 是一个成员函数,用于清除串口的输入缓冲区和输出缓冲区中的数据。与 flush 不同,clear 不会尝试将数据发送出去,而只是清除数据。

这个函数没有参数,当调用它时,它会立即清除串口的输入和输出缓冲区中的数据。这可以用于确保在重新开始串口通信时不会处理之前的数据。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 向串口写入数据
    serialPort.write("Hello, Serial Port!");
    
    // 清除输入缓冲区和输出缓冲区中的数据
    serialPort.clear();
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
23.QSerialPort::atEnd

查串口是否已经读取到了输入流的末尾

QSerialPort::atEnd 是 Qt Serial Port 模块中的一个成员函数,用于检查串口是否已经读取到了输入流的末尾。这个函数主要用于串口通信时的输入操作,例如从串口读取数据。

函数的返回值是一个布尔值,表示串口输入流是否已经到达了末尾。如果返回 true,则表示已经读取到了输入流的末尾,不再有可用的数据。如果返回 false,则表示输入流还有数据可供读取。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadOnly)) {
    // 读取串口数据,直到到达输入流的末尾
    while (!serialPort.atEnd()) {
        QByteArray data = serialPort.read(100); // 读取最多100字节的数据
        qDebug() << "Received data:" << data;
    }
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭";
} else {
    qDebug() << "无法打开串口";
}
24.QSerialPort::error

获取串口的错误状态

QSerialPort::error 是 Qt Serial Port 模块中的一个成员函数,用于获取当前串口对象的错误状态。这个函数不接受参数,并返回一个枚举值,表示串口的错误状态。

返回的枚举值是 QSerialPort::SerialPortError 枚举类型的成员,用于表示不同的错误状态。这些错误状态包括但不限于以下几种:

  • QSerialPort::NoError:表示没有错误,串口正常工作。
  • QSerialPort::DeviceNotFoundError:表示找不到指定的串口设备。
  • QSerialPort::PermissionError:表示没有足够的权限打开串口。
  • QSerialPort::OpenError:表示无法打开串口。
  • QSerialPort::ParityError:表示奇偶校验错误。
  • QSerialPort::FramingError:表示帧错误。
  • QSerialPort::BreakConditionError:表示发生了中断条件错误。
  • QSerialPort::WriteError:表示写入数据时发生错误。
  • QSerialPort::ReadError:表示读取数据时发生错误。

可以使用 QSerialPort::error 函数来检查串口是否在操作过程中出现了错误,然后根据需要采取适当的措施来处理这些错误,例如记录错误消息、关闭串口连接或重新尝试操作等。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 进行串口通信操作
    
    // 检查是否有错误发生
    if (serialPort.error() == QSerialPort::NoError) {
        qDebug() << "串口操作成功";
    } else {
        qDebug() << "串口发生错误:" << serialPort.errorString();
    }
    
    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
25.QSerialPort::readBufferSize 和 QSerialPort::setReadBufferSize

获取和设置串口接收缓冲区的大小

QSerialPort::readBufferSize 和 QSerialPort::setReadBufferSize是 QSerialPort 类中的一个属性,用于获取和设置串口接收缓冲区的大小。串口接收缓冲区用于存储从串口设备读取的数据,应用程序可以从缓冲区中读取数据。

  • 获取属性值:要获取当前串口的接收缓冲区大小,可以使用 QSerialPort 对象的 readBufferSize() 函数。这将返回一个整数,表示接收缓冲区的大小(以字节为单位)。
  • 设置属性值:要设置接收缓冲区的大小,可以使用 QSerialPort 对象的 setReadBufferSize(int size) 函数,其中 size 参数是希望设置的新的接收缓冲区大小。

接收缓冲区的大小是一个重要的设置,它会影响到从串口读取数据的方式。如果预计将大量数据从串口读取,可以增加接收缓冲区的大小,以确保不会丢失任何数据。注意,过大的接收缓冲区可能会导致内存消耗过多,根据应用程序的需求来选择合适的大小。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 获取当前接收缓冲区大小
    int bufferSize = serialPort.readBufferSize();
    qDebug() << "当前接收缓冲区大小:" << bufferSize << "字节";

    // 设置新的接收缓冲区大小为1024字节
    serialPort.setReadBufferSize(1024);

    // 继续串口通信操作
} else {
    qDebug() << "无法打开串口";
}
26.QSerialPort::bytesAvailable

获取当前串口接收缓冲区中可用的字节数

QSerialPort::bytesAvailable 是 QSerialPort 类中的一个成员函数,用于获取当前串口接收缓冲区中可用的字节数。

该函数返回一个 qint64 类型的整数,表示在当前时刻串口接收缓冲区中可用的字节数。可以使用这个值来确定是否有足够的数据可供读取,以及要读取的数据量。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 循环读取串口数据
    while (serialPort.bytesAvailable() > 0) {
        QByteArray data = serialPort.readAll(); // 读取所有可用的数据
        qDebug() << "读取的数据:" << data;
    }

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
27.QSerialPort::bytesToWrite

获取当前待写入到串口的字节数

QSerialPort::bytesToWrite 是 QSerialPort 类中的一个成员函数,用于获取当前待写入到串口的字节数。

该函数返回一个 qint64 类型的整数,表示当前等待写入到串口的字节数。可以使用这个值来确定尚未写入的数据量。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    QByteArray dataToSend = "Hello, Serial!"; // 要写入的数据
    qint64 bytesWritten = serialPort.write(dataToSend); // 写入数据到串口

    // 检查是否所有数据都已写入
    if (bytesWritten == dataToSend.size()) {
        qDebug() << "数据已成功写入串口";
    } else {
        qDebug() << "写入数据时出现错误";
    }

    // 获取待写入的字节数
    qint64 remainingBytes = serialPort.bytesToWrite();
    qDebug() << "待写入的字节数:" << remainingBytes;

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
28.QSerialPort::canReadLine

检查串口接收缓冲区中是否有一行可用的数据

QSerialPort::canReadLine 是 QSerialPort 类中的一个函数,用于检查串口接收缓冲区中是否有一行可用的数据(以换行符 \n 或回车符 \r 结尾)。

这个函数返回一个布尔值,如果串口接收缓冲区中存在一行可用的数据,则返回 true,否则返回 false。

在串口通信中,数据以不同的方式进行分隔,例如使用换行符、回车符或其他特定的字符。canReadLine 函数允许检查是否已经接收到一行完整的数据。如果返回 true,可以使用 readLine 函数来读取这一行数据。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 检查是否有一行可用的数据
    if (serialPort.canReadLine()) {
        // 读取一行数据
        QByteArray lineData = serialPort.readLine();
        QString lineString = QString::fromUtf8(lineData); // 将字节数组转换为字符串
        qDebug() << "已读取的行数据:" << lineString;
    } else {
        qDebug() << "没有可用的行数据";
    }

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
29.QSerialPort::waitForReadyRead

阻塞当前线程,直到串口接收缓冲区中有数据可供读取。

QSerialPort::waitForReadyRead 是 QSerialPort 类中的一个函数,用于阻塞当前线程,直到串口接收缓冲区中有数据可供读取。

该函数有两个不同的版本,具体取决于传递的参数:

  1. bool QSerialPort::waitForReadyRead(int msecs):这个版本的函数会阻塞当前线程,直到串口接收缓冲区中有数据可供读取,或者超过了指定的时间(以毫秒为单位)。如果在指定的时间内有数据可供读取,函数将返回 true,否则返回 false。
  2. bool QSerialPort::waitForReadyRead(int msecs, QIODevice::OpenMode mode):这个版本的函数除了等待数据可读取外,还允许指定操作模式(例如读取、写入等)。可以传递一个 QIODevice::OpenMode 枚举值来指定操作模式。这个函数会阻塞当前线程,直到指定操作模式的操作可以继续,并且在指定的时间内有数据可供读取,或者超过了指定的时间。如果条件满足,函数返回 true,否则返回 false。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 设置超时时间为1000毫秒(1秒)
    int timeout = 1000;

    // 等待串口接收缓冲区中有数据可供读取
    if (serialPort.waitForReadyRead(timeout)) {
        // 读取数据
        QByteArray data = serialPort.readAll();
        qDebug() << "已读取的数据:" << data;
    } else {
        qDebug() << "超时:没有可用的数据";
    }

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
30.QSerialPort::waitForBytesWritten

阻塞当前线程,直到所有待写入的数据都已经成功写入到串口

QSerialPort::waitForReadyRead 是 QSerialPort 类中的一个函数,用于阻塞当前线程,直到串口接收缓冲区中有数据可供读取。

该函数有两个不同的版本,具体取决于传递的参数:

  1. bool QSerialPort::waitForReadyRead(int msecs):这个版本的函数会阻塞当前线程,直到串口接收缓冲区中有数据可供读取,或者超过了指定的时间(以毫秒为单位)。如果在指定的时间内有数据可供读取,函数将返回 true,否则返回 false。
  2. bool QSerialPort::waitForReadyRead(int msecs, QIODevice::OpenMode mode):这个版本的函数除了等待数据可读取外,还允许指定操作模式(例如读取、写入等)。可以传递一个 QIODevice::OpenMode 枚举值来指定操作模式。这个函数会阻塞当前线程,直到指定操作模式的操作可以继续,并且在指定的时间内有数据可供读取,或者超过了指定的时间。如果条件满足,函数返回 true,否则返回 false。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 设置超时时间为1000毫秒(1秒)
    int timeout = 1000;

    // 等待串口接收缓冲区中有数据可供读取
    if (serialPort.waitForReadyRead(timeout)) {
        // 读取数据
        QByteArray data = serialPort.readAll();
        qDebug() << "已读取的数据:" << data;
    } else {
        qDebug() << "超时:没有可用的数据";
    }

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
31.QSerialPort::sendBreak

发送一个串口中断信号

QSerialPort::sendBreak 是 Qt 框架中的一个函数,用于发送一个串口中断信号(break signal)。这个信号用于串口通信中的特殊情况,例如在通信协议中需要发送一个特定的中断信号来指示某种操作或条件。

函数签名:

void QSerialPort::sendBreak(int duration = 0);

参数:

duration(可选参数):指定中断信号的持续时间,以毫秒为单位。默认值为0,表示发送一个持续时间为0的中断信号,即一个短暂的中断信号。

功能:

QSerialPort::sendBreak 函数用于发送一个串口中断信号。中断信号的作用和效果取决于串口设备和通信协议,因此它的具体用途可能因情况而异。中断信号用于通知接收方执行某种特定的操作,或者表示某种特殊条件。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 发送一个500毫秒的中断信号
    serialPort.sendBreak(500);

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
32.QSerialPort::setBreakEnabled

设置是否启用串口的中断(break)功能

QSerialPort::setBreakEnabled 是 Qt 框架中的一个函数,用于设置是否启用串口的中断(break)功能。中断(break)是一种特殊的信号,用于串口通信中的特殊情况,用于通知接收方执行某种特定操作或表示特殊条件。

函数签名:

void QSerialPort::setBreakEnabled(bool set = false);

参数:

set:一个布尔值,指定是否启用中断功能。默认值为 false,表示不启用中断功能。如果设置为 true,则启用中断功能。

功能:

QSerialPort::setBreakEnabled 函数用于在串口通信中启用或禁用中断功能。启用中断功能后,可以通过调用 QSerialPort::sendBreak 函数来发送中断信号。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 启用中断功能
    serialPort.setBreakEnabled(true);

    // 在此处可以执行其他串口通信操作,包括发送中断信号

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
33.QSerialPort::isBreakEnabled

查询当前串口是否启用了中断(break)功能

QSerialPort::isBreakEnabled 是 Qt 框架中的一个函数,用于查询当前串口是否启用了中断(break)功能。中断是一种特殊的信号,用于串口通信中的特殊情况,用于通知接收方执行某种特定操作或表示特殊条件。

函数签名:

bool QSerialPort::isBreakEnabled() const;

功能:

QSerialPort::isBreakEnabled 函数用于查询当前串口是否启用了中断功能。如果返回值为 true,表示中断功能已启用;如果返回值为 false,则表示中断功能未启用。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1

// 打开串口连接
if (serialPort.open(QIODevice::ReadWrite)) {
    // 检查是否启用了中断功能
    bool isBreakEnabled = serialPort.isBreakEnabled();
    
    if (isBreakEnabled) {
        qDebug() << "串口启用了中断功能";
    } else {
        qDebug() << "串口未启用中断功能";
    }

    // 在此处可以执行其他串口通信操作

    // 关闭串口连接
    serialPort.close();
} else {
    qDebug() << "无法打开串口";
}
34.setSettingsRestoredOnClose

串口关闭时是否恢复串口的设置

QSerialPort::setSettingsRestoredOnClose 是 Qt 框架中的一个函数,用于配置串口对象的行为。具体来说,这个函数用于设置在串口关闭时是否恢复串口的设置。

在使用串口通信时,需要配置一些参数,比如波特率、数据位、停止位、奇偶校验等等。这些设置是通过调用 QSerialPort 类的函数来完成的。一旦配置了这些参数,串口就可以用于通信了。

QSerialPort::setSettingsRestoredOnClose 函数的作用是控制在串口关闭时是否自动恢复之前配置的串口设置。默认情况下,它是启用的,这意味着当关闭串口后,下次打开串口时会自动恢复之前配置的设置。这对于某些应用场景很有用,因为它可以避免每次打开串口时都需要重新配置串口。

但在某些情况下,可能希望关闭串口时不自动恢复设置,而是保持当前的设置。可以通过调用 setSettingsRestoredOnClose(false) 来禁用这个功能。这样,关闭串口时,串口的设置将保持不变,下次打开串口时仍然使用之前的设置。

基本用法:

QSerialPort serialPort;
serialPort.setPortName("COM1"); // 设置串口名称为COM1
serialPort.setBaudRate(QSerialPort::Baud9600); // 设置波特率为9600

// 配置属性,将设置还原设置为true
serialPort.setSettingsRestoredOnClose(true);

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
    qDebug() << "串口已成功打开";
    
    // 进行串口通信的相关操作
    
    // 关闭串口连接
    serialPort.close();
    qDebug() << "串口已关闭,设置已还原";
} else {
    qDebug() << "无法打开串口";
}

else {
qDebug() << “串口未启用中断功能”;
}

// 在此处可以执行其他串口通信操作

// 关闭串口连接
serialPort.close();

} else {
qDebug() << “无法打开串口”;
}


##### 14.setSettingsRestoredOnClose

> 串口关闭时是否恢复串口的设置

`QSerialPort::setSettingsRestoredOnClose` 是 Qt 框架中的一个函数,用于配置串口对象的行为。具体来说,这个函数用于设置在串口关闭时是否恢复串口的设置。

在使用串口通信时,需要配置一些参数,比如波特率、数据位、停止位、奇偶校验等等。这些设置是通过调用 `QSerialPort` 类的函数来完成的。一旦配置了这些参数,串口就可以用于通信了。

`QSerialPort::setSettingsRestoredOnClose` 函数的作用是控制在串口关闭时是否自动恢复之前配置的串口设置。默认情况下,它是启用的,这意味着当关闭串口后,下次打开串口时会自动恢复之前配置的设置。这对于某些应用场景很有用,因为它可以避免每次打开串口时都需要重新配置串口。

但在某些情况下,可能希望关闭串口时不自动恢复设置,而是保持当前的设置。可以通过调用 `setSettingsRestoredOnClose(false)` 来禁用这个功能。这样,关闭串口时,串口的设置将保持不变,下次打开串口时仍然使用之前的设置。

基本用法:

QSerialPort serialPort;
serialPort.setPortName(“COM1”); // 设置串口名称为COM1
serialPort.setBaudRate(QSerialPort::Baud9600); // 设置波特率为9600

// 配置属性,将设置还原设置为true
serialPort.setSettingsRestoredOnClose(true);

// 尝试打开串口
if (serialPort.open(QIODevice::ReadWrite)) {
qDebug() << “串口已成功打开”;

// 进行串口通信的相关操作

// 关闭串口连接
serialPort.close();
qDebug() << "串口已关闭,设置已还原";

} else {
qDebug() << “无法打开串口”;
}


qserialport异步读写在协议解析中的行为解析 深入探讨qserialport在串口通信中的异步读写机制,解析其在实际协议处理中的表现与注意事项,帮助开发者更好掌握qserialport的数据接收与发送时序控制。 阅读详情

相关推荐

Qt5 串口类QSerialPort

简述: 在Qt5以上提供了QtSerialPort模块,方便编程人员快速的开发应用串口的应用程序。 QtSerialPort模块中提供了两个C++类,分别是QSerialPort 和QSerialPortInfo。 QSerialPort 类是Qt5封装的串口类,可与串口进行通信,提供了操作串口的各种接口。 QSerialPortInfo类是一个辅助类,可以提供计算机中可用串口的各种信息。...

hebbely的博客 8060

Qt扫盲-QSerialPort理论总结

QSerialPort 类其实就是一个打开串口,进行串口通信传输数据的功能类。我们可以使用QSerialPortInfo帮助类获取有关可用串行端口的信息,这个类能直接列举出系统中的所有串行端口。QSerialPortInfo类主要是我们在使用QSerialPort要通信的时候为指定我们具体操作哪一个串口,我们可以将QSerialPortInfo类的对象作为参数传递给setPort()或setPortName()方法,以分配所需的串行设备。Qt中的这个串口指的是 RS232串口,也是全双工的。

洪源兄 7566

qserialport数据帧解析方法:一文说清处理流程

深入讲解qserialport在串口通信中如何高效解析数据帧,涵盖帧头识别、长度判断与校验处理等关键步骤,提升开发效率与稳定性。

weixin_33308579的博客 829

【Qt 学习之路】QSerialPort处理串口通信

QSerialPort提供了访问串口的接口函数。使用辅助类QSerialPortInfo可以获取可用的串口信息。将QSerialPortInfo辅助类对象做为参数,使用setPort()或setPortName()函数可以设置要访问的串口设备。设置好端口后,可以使用open()函数以只读、只写或读写的模式打开使用。注意,串口使用独占方式打开。使用close()函数关闭串口并且取消IO操作。串口成功打开后,QSerialPort会尝试确定串口的当前配置并初始化。

沙师弟专栏 1万+

使用qserialport解析传感器串口指令的小白指南

手把手教你使用qserialport读取传感器数据,从串口通信基础到实际代码实现,轻松掌握qserialport在Qt中的应用,快速搭建稳定的数据解析流程。

weixin_36304957的博客 958

解析带CRC校验的串口协议:qserialport操作指南

深入讲解如何使用qserialport实现串口通信中的CRC校验,提升数据传输可靠性。通过实际操作指导,掌握qserialport在协议解析中的关键应用,确保通信稳定性与完整性。

weixin_30838971的博客 1093

Qt串口QSerialPort的多线程 及 QSerialPort的waitForReadyRead函数的问题

在官方的文档中提到,QSerialPort是不支持跨线程调用。 因此不能在主线程(UI线程)创建QSerialPort,然后传递个指针给子线程,然后在子线程中执行耗时的发送任务。 最好的方式是在子线程里面创建QSerialPort,然后通过信号槽来使用。 但是我想偷个懒,我已经在主线程创建了QSerialPort,并且界面相关的东西都做好了,不想改动太大,因此我想了个办法: 在新线程里面建立一个临时对象,复制传递进去的串口参数,执行完就干掉他。 void MainWindow::on_pushButton_

joyopirate的博客 2万+

【QT史上最全面教程】串口通信(QSerialPort)篇

QT史上最前串口 QSerialPort教程

m0_62599305的博客 6053

Qt 串口通信(QSerialPort)

与下位机,单片机通信少不了使用串口进行通信,Qt 也提供了串口通信的类 QSerialPort https://doc.qt.io/qt-5.9/qserialport.html //小伙伴们具体去看文档 使用的时候在 pro 添加这句导入模块 QT += serialport 1.连接串口 第一步就是 要先获取到 可连接的所有的串口的名字 QSerialPortInfo::ava...

shenmingyi.blog.youkuaiyun.com 17万+

【QT开发】串口通信管理QSerialPort类详解及实战应用

QSerialPort 是 Qt 提供的一个功能强大、简单易用的串口通信类。通过本文的学习,您应该对 QSerialPort 的基本使用、高级应用技巧及相关注意事项有了全面的理解。在实际项目中,QSerialPort 可以帮助实现与外部设备的串口通信,确保数据的可靠传输和接收。希望本文能帮助您更好地理解和使用 QSerialPort,在各种应用场景中实现高效稳定的串口通信。

科技改变人类,技术成就未来 6544

【Qt】详解QSerialPort串口通信实现发送和接收数据的功能

之前,你需要在项目文件(.pro)中添加串口模块的依赖项。通过使用这些函数和方法,你可以方便地进行串口通信操作。请根据你的具体需求来使用和配置。是Qt框架中用于串口通信的类。它提供了对串口进行配置、发送和接收数据的功能。还提供了其他一些辅助函数和信号槽机制来处理串口通信中的事件和状态变化。然后,在代码中包含头文件。除了上述的基本功能外,类来实现串口通信功能。

Fanjufei的博客 3830

QSerialPort

欢迎加入QQ群:853840665,一块学习分享资料 PyQt5类翻译、示例学习 class-learning 描述 提供访问串行端口的功能。 您可以使用QSerialPortInfo帮助类获得关于可用串行端口的信息,该类允许枚举系统中的所有串行端口。这对于获得要使用的串行端口的正确名称非常有用。可以将helper类的对象作为参数传递给setPort() 或setPortName() 方法,以分...

亚洲程序员盟主得博客 4307

【ES】--Elasticsearch的分词器深度研究

分词器是ik_max_word,会将“龙马家书”拆分为“龙马”、“马家”、“家书”。然后filter配置的是edge_ngram_filter,在上面拆分的token词组基础上,按照edge_ngram_filter规则进一步拆分。从结果看:分词器是keyword,filter支持edge_ngram_filter,字符过滤器支持tsconvert【简繁体】。分词器是keyword,表明是不进行分词,但filtet中edge_ngram_filter是按照布长方式拆分token,所以得到如此结果。

寻梦友的博客 2442

Qt串口:QSerialPort、QSerialPortInfo

Qt串口:QSerialPort、QSerialPortInfo

友善啊,朋友的博客 8694

匈牙利算法解决指派问题清晰流程

匈牙利算法解决指派问题清晰流程 百度词条上,指派问题(Assignment problem)是这么定义的:在满足特定指派要求条件下,使指派方案总体效果最佳。如:有若干项工作需要分配给若干人(或部门)来完成;有若干项合同需要选择若干个投标者来承包:有若干班级需要安排在若干教室里上课等。   一、做减法(归约): 行归约:每行元素减去该行最小元素。 列归约:每行元素减去该行最小元素。

siss0siss的博客 6万+

Opencv相机校准之棋盘格标定

Reference: https://yq.aliyun.com/articles/62472

y459541195的博客 3万+

QSerialport多线程方法

QSerialport多线程方法 使用Qt也已经有一段时间了,虽然使用过继承QThread重写run函数,以及继承QObject然后使用MoveToThread两种方法实现多线程,但是在QSerialPort的使用过程中,两种方法都存在一定的问题。 典型的问题: QObject: Cannot create children for a parent that is in a differe...

《好好先生》专栏 8019

基于Python批量获取过去某地某时的天气数据

此段代码为经Visual Weather API官网样例后修改。原代码返回数据格式为json,经测试json风速字段不可用,后改为返回数据格式为csv。若修改weather_api_endpoint,还可获取该地点的预测数据,但返回数据字段可能发生变化,请以官网文档为准。获取到的字段包括:平均温度、露点、湿度、风速、降雨量、能见度、云量、天气类型等。目的:已知某一地址,获取过去某一时间该地的天气数据,并能够批量运行。这一步也会有获取不到的时间和地点,因此为空白。此段代码为经百度地图api官网样例后修改。

wiseman1233的博客 905

QSerialPort 总结

1QSerialPort能读多于512字节的数据吗? 答:可以,需要自己判断数据是否完整,或者根据数据是否有头和尾来判断,参考https://blog.youkuaiyun.com/Kelvin_Yan/article/details/78975147?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribut..

foxgod的专栏 3861

016、自动标注方案实战:用大模型(SAM/Grounding DINO)生成 YOLO 格式伪标签

本文介绍了一种利用大模型自动生成YOLO格式伪标签的实战方案。针对传统人工标注效率低、易出错的问题,作者提出结合Grounding DINO(零样本检测)和SAM(精细分割)的优势:前者快速生成候选框,后者优化边界精度。文章详细阐述了技术选型理由(平衡速度与精度)、环境搭建避坑指南(关键依赖版本)、核心三步流程(检测-分割-格式转换)以及后处理技巧(置信度分级过滤)。实验表明,该方案相比纯人工标注可节省80%时间,且经过SAM优化的边界框精度提升10-15%。特别强调了工程细节:文本描述格式、阈值设定、小目

zzfmlxs的博客 544

飞牛fnNAS存储模式RAID 5数据恢复

中介绍了fnNAS存储空间的几个模式,细心的网友应该能感受到,我是非常推崇RAID 5的。但我认为,一般人出现1块硬盘损坏后,就能够赶紧采取处理措施了,再高的容灾等级也无法满足这个用户的需求了。》就完成了飞牛NAS存储空间的说明,包括了如何创建、怎么选择空间模式、RAID 5 硬盘故障后的更换、系统更换/重装后数据盘的恢复等等。在VMware中新建虚拟机,安装好fnNAS后,再向虚拟机添加“已有硬盘”(这就是所谓崩溃虚拟机的数据盘),此时新的fnNAS出现提示。在“选择要添加的硬盘”中,选择刚添加硬盘。

dgnankai的专栏 3010

Qt Widget 之简易串口助手(QSerialPort)

Qt 作上位机,与硬件连接中,串口是最最最常用的功能。 本文写了一个很容易入手的简单串口程序,演示如下:

火山上的企鹅 6332

YOLOv11改进,YOLOv11结合DynamicConv(动态卷积),CVPR2024,二次创新C3k2结构

DynamicConv(动态卷积)是一个用于提高卷积神经网络(CNN)性能的技术,核心思想是动态地生成卷积核(filter),而不是使用固定的卷积核。通过引入更多的计算灵活性和适应性来增强卷积操作的表达能力,进而提升模型的性能。专家选择:DynamicConv 通过引入多个“专家”(experts),每个专家学习特定的卷积模式。输入图像的不同部分会选择不同的专家进行卷积。动态卷积核生成:根据输入的不同特征,专家网络动态地生成卷积核,而不是使用固定的卷积核。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2266

QT QSerialPort 的坑

最近在做ARM-LINUX GPS信息接收 4G模块是通过串口通讯的 用QSerialPort接收数据 因为数据量比较大,所以把串口接收数据的类放入了线程 结果程序莫名崩溃,一开始还以为哪里指针报错了 尝试了很久 然后我在 QSerialPort 的 readAll() 前后进行了qDebug() 发现 readAll() 后没有打印输出,那就是readAll() 出问题了 readAll()不能放入子线程 当接数据少的时候,在线程readAll()不容易出问题 因为GPS数据量大,所以才发现了这个问题,之

Lj2_jOker的博客 1812

【ffmpeg+cuda实现硬编解码】

最近在搞一个项目,我需要向AI提供视频帧数,本来一开始摄像头是H.264的编码,我直接复制流推到AI层去推理,然后需要将事件回溯成30秒的视频截取。结果摄像头换成了HEVC编码,截取的视频不能在网页直接播放(需要JS实现调用硬解码)。一开始的方案是ffmpeg直接将HEVC转成H.264结果因为事务巨多CPU占用量过大,导致影响到了推理,因为本身选用的模型+杂七杂八的业务逻辑也要占用大量的CPU资源,所以经过研究把ffmpeg和nvcodec结合起来来平衡设备性能,算是解决了这个问题吧。这两个是前提条件,我

jiexijihe945的博客 7232

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++ QT QSerialPort基操

/ 设置DTR为高电平。

Hello___Sunshine的专栏 2211

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: sphinx基础语法:列表
下一篇: C++ std::vector 动态数组容器的深度解析
每天两杯奶茶
博客等级 码龄4年 32粉丝 7原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值