Qt创建连接注意事项:
一、最好跟上Qt::UniqueConnection这个参数,作用是连接唯一,不会创建多余的连接,由其是在频繁创建连接时,会导致N个相同的连接都在起作用,进而导致逻辑性的内存泄漏。
如下代码:就使用了Qt::UniqueConnection来避免产生N个相同连接
cpp
//创建串口
void SerialUpgradeModule::createSerialSlot()
{
if (serial->isOpen()) {
serial->close();
}
//移远模块优先连接,因为速度快。
// 配置串口参数
serial->clear();
serial->setPortName("/dev/ttyACM2"); // 设置串口号,例如 "COM1" 或 "/dev/ttyACM2"
serial->setBaudRate(QSerialPort::Baud115200); // 设置波特率
serial->setDataBits(QSerialPort::Data8); // 设置数据位
serial->setParity(QSerialPort::NoParity); // 设置校验位
serial->setStopBits(QSerialPort::OneStop); // 设置停止位
serial->setFlowControl(QSerialPort::NoFlowControl); // 设置流控
if (serial->open(QIODevice::ReadWrite)) {
qDebug() << "Serial port '/dev/ttyACM2' "<< "opened successfully.";
// 成功打开后立即清空一次缓冲区,防止残留杂数据影响逻辑
serial->clear();
// 连接信号和槽,注意:接收文件包不能使用异步处理,只能使用同步处理
connect(serial, &QSerialPort::readyRead, this, &SerialUpgradeModule::receiveAndHandleSerialDatagrams,Qt::UniqueConnection);
connect(serial, QOverload<QSerialPort::SerialPortError>::of(&QSerialPort::errorOccurred), this, &SerialUpgradeModule::handleSerialError,Qt::UniqueConnection);
connect(this, &SerialUpgradeModule::signal_processSerialData, this, &SerialUpgradeModule::slot_processSerialData,Qt::UniqueConnection);
connect(this, &SerialUpgradeModule::signal_processSerialOnePieceProtocol, this, &SerialUpgradeModule::slot_processSerialOnePieceProtocol,Qt::UniqueConnection);
} else {
// 如果失败,开启重连定时器
if (reconnectTimer && !reconnectTimer->isActive()) {
reconnectTimer->start();
}
qDebug() << "Failed to open serial port '/dev/ttyACM2' "<< ":" << serial->errorString();
}
}
秋风写于淄博,业务联系与技术交流:Q375172665