Qt 学习笔记 11.QSerialPort

1.QSerialPort *serialportname

当一个 QSerialPort 对象 serialportName 成员变量改变时,该对象所指向的串口也会随之改变。要理解这一点,需要了解 QSerialPort 的构造函数和 setPortName() 函数。

QSerialPort 对象构造函数中,会利用 portName 参数打开相应的串口。如果 QSerialPort 对象的 portName 成员变量改变,需要关闭原先的串口,并以新的 portName 参数重新打开一个新的串口。setPortName() 函数也会完成相似的操作,在这个函数中实现:

bool QSerialPort::setPortName(const QString &name)
{
    if (isOpen())
        close();

    d_ptr->systemLocation.clear();
    d_ptr->portName = name;

    return true;
}

这段代码中,如果 QSerialPort 对象当前已打开串口,则通过 close() 函数关闭原先的串口连接,然后将 portName 变量更新为新的 name 参数。然后,无论是通过构造函数还是通过 setPortName() 函数设置 portName 参数,都会重新打开一个新的串口连接。

因此,当 QSerialPort 对象中的 portName 成员变量改变时,该对象所指向的串口也会随之改变,需要使用新的 portName 参数重新与所需串口建立连接,其中如果原先有串口连接需要及时关闭。

2.如何改变 QSerialPort *serial 所指向的串口

在使用 Qt 中的 QSerialPort 类时,如果需要改变 QSerialPort 对象所指向的串口,可以使用 close() 函数先关闭当前串口,然后再重新打开一个新的串口。具体实现如下:

// 假设 serial 是一个已经创建并打开的串口对象,现在需要将其指向另一个串口

// 关闭当前串口
serial->close();

// 设置新的串口名字
serial->setPortName("COM3");

// 打开新的串口
if (serial->open(QIODevice::ReadWrite))
{
    // 串口打开成功
}
else
{
    // 串口打开失败
}

在上述示例中,我们首先调用 close() 函数,关闭当前的串口连接。然后,使用 setPortName() 函数将 QSerialPort 对象 serialportName 成员变量设置为新的串口名字(如 "COM3")。最后,调用 open() 函数重新打开一个新的串口连接。

需要注意的是,如果在新的串口连接之前还需要设置串口的其他参数(例如波特率、数据位、校验位等),可以在重新打开新串口之前先设置它们。

// 设置串口波特率
serial->setBaudRate(QSerialPort::Baud9600);
// 设置串口数据位
serial->setDataBits(QSerialPort::Data8);
// 设置串口校验位
serial->setParity(QSerialPort::NoParity);
// 设置串口停止位
serial->setStopBits(QSerialPort::OneStop);
// 设置串口流控制
serial->setFlowControl(QSerialPort::NoFlowControl);

// 关闭当前串口
serial->close();

// 设置新的串口名字
serial->setPortName("COM3");

// 打开新的串口连接
if (serial->open(QIODevice::ReadWrite))
{
    // 串口打开成功
}
else
{
    // 串口打开失败
}

在上述示例中,我们设置了串口的波特率、数据位、校验位、停止位和流控制等参数,然后再在重新打开新串口之前先关闭当前的串口连接,最后重新打开新的串口连接。

你可能感兴趣的:(qt,学习,开发语言)