一、需求
扫描电脑可用串口并连接进行通信,该设备一般是一直插在电脑上的,由于电脑可用串口不一定只有一个也不一定就是对应的设备,所以需要在可用串口中筛选,另外还有一个随时插拔的串口设备需要连接通信。
二、实现
在usb插入插出实现串口的扫描并记录串口名字
//第一步监测
void MainWindow::MainWidgetUsbListen()
{
port = new QSerialPort(this); //新建串口类
Main_usb_listener = new usb_listener; //新建热插拔监听
qApp->installNativeEventFilter(Main_usb_listener);
connect(Main_usb_listener, &usb_listener::DevicePlugIn, [=](){
SerialPortConnect();
qDebug("SerialPortConnect");
});
Main_usb_listener->EmitMySignal(); //第一次不管有没有,即使串口插在上面,手动触发一次依旧可以检测
}
//第二步扫描串口并且连接
//初始化串口,热插拔串口检测
void MainWindow::SerialPortConnect()
{
//列出当前系统中可用的串口
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
if(infos.isEmpty())//没有可用的串口
{
QMessageBox::warning(this, "错误提示", "串口配置失败!!!");
return;
}
else
{
//遍历容器中的所以元素
foreach (QSerialPortInfo info, infos) {
if(info.description() == "USB-SERIAL CH340")
{
qDebug()<<"当前串口的名称"<<info.portName()<<endl;
port->setPortName(info.portName());
port->setBaudRate(QSerialPort::Baud115200);
port->setDataBits(QSerialPort::Data8);
port->setStopBits(QSerialPort::OneStop);
port->setParity(QSerialPort::NoParity);
port->open(QIODevice::ReadWrite);
TextSerConnect->setText(" 串口运行 ");
QMessageBox::warning(this, "正确提示", "串口配置成功!!!");
}
if。。。。。。。
}
}
}
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
qDebug() << "isBusy(): " << info.isBusy();
ui->portComboBox->addItem(info.portName());
串口扫描可用检测字符串 参考
void MainWindow::MainWidgetUsbListen()
{
port = new QSerialPort(this); //新建串口类
Main_usb_listener = new usb_listener; //新建热插拔监听
qApp->installNativeEventFilter(Main_usb_listener);
connect(Main_usb_listener, &usb_listener::DevicePlugIn, [=](){
SerialPortConnect();
qDebug("SerialPortConnect");
});
Main_usb_listener->EmitMySignal(); //第一次不管有没有,即使串口插在上面,手动触发一次依旧可以检测
}
//初始化串口,热插拔串口检测
void MainWindow::SerialPortConnect()
{
//列出当前系统中可用的串口
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
if(infos.isEmpty())//没有可用的串口
{
QMessageBox::warning(this, "错误提示", "串口配置失败!!!");
return;
}
else
{
//遍历容器中的所以元素
foreach (QSerialPortInfo info, infos) {
if(info.description() == "USB-SERIAL CH340")
{
qDebug()<<"当前串口的名称"<<info.portName()<<endl;
port->setPortName(info.portName());
port->setBaudRate(QSerialPort::Baud115200);
port->setDataBits(QSerialPort::Data8);
port->setStopBits(QSerialPort::OneStop);
port->setParity(QSerialPort::NoParity);
port->open(QIODevice::ReadWrite);
TextSerConnect->setText(" 串口运行 ");
QMessageBox::warning(this, "正确提示", "串口配置成功!!!");
}
}
}
}
本文介绍如何使用QT实现串口的自动连接与热插拔监测功能。通过监测USB设备的插入和拔出实现串口的动态扫描与连接。文章提供了具体的代码实现示例。
2518

被折叠的 条评论
为什么被折叠?



