@功能:
SerialPortList 类实现当前可用的串口进行实时扫描,当发现有新的串口
或是现有串口消失时,SerialPortList类将发出一个QStringList类型的
信号onNewSerialPort,QStringList类型对象中存放当前可用的串口设备。

@使用方法:
1、Qt版本需要高于5.1以上;

2、在新建Qt工程文件中时需要加入QSerialPort模块;即:在xxx.pro文件
   中加入 Qt += serialport

3、在应用程序中定义一个曹,用于响应SerialPortList信号,获取串口列表
   void onNewPortList(QStringList portName){
    ui->comboBoxComList->clear();
    ui->comboBoxComList->addItems(portName);
   }

4、在应用程序中构建SerialProt对象,连接onNewSerialPort信号:
  portList = new SerialPortList(200);
  connect(portList, SIGNAL(onNewSerialPort(QStringList)),\
          this,     SLOT(onNewPortList(QStringList)));

5、开启扫描
  portList->ScanStart();

 

 

serialPortList.h

#ifndef SERIALPORTLIST_H
#define SERIALPORTLIST_H #include <QTimer>
#include <QDebug>
#include <QSerialPort>
#include <QStringList>
#include <QSerialPortInfo> /* @交流:
* worldsing.cnblogs.com
*
* @功能:
* SerialPortList 类实现当前可用的串口进行实时扫描,当发现有新的串口
* 或是现有串口消失时,SerialPortList类将发出一个QStringList类型的
* 信号onNewSerialPort,QStringList类型对象中存放当前可用的串口设备。
*
* @使用方法:
* 1、Qt版本需要高于5.1以上;
*
* 2、在新建Qt工程文件中时需要加入QSerialPort模块;即:在xxx.pro文件
* 中加入 Qt += serialport
*
* 3、在应用程序中定义一个曹,用于响应SerialPortList信号,获取串口列表
* void onNewPortList(QStringList portName){
* ui->comboBoxComList->clear();
* ui->comboBoxComList->addItems(portName);
* }
*
* 4、在应用程序中构建SerialProt对象,连接onNewSerialPort信号:
* portList = new SerialPortList(200);
* connect(portList, SIGNAL(onNewSerialPort(QStringList)),\
* this, SLOT(onNewPortList(QStringList)));
*
* 5、开启扫描
* portList->ScanStart();
*/ #define DEBUG_INFOR_EN 0 class SerialPortList : public QObject
{
Q_OBJECT public:
SerialPortList();
SerialPortList(quint16);
~SerialPortList(); quint16 scanCycleMs;
QTimer *timer;
QStringList oldPortStringList; void ScanStart();
void ScanStop(); public slots:
void onTimeOut(); signals:
void onNewSerialPort(QStringList);
}; #endif // SERIALPORTLIST_H

 

serialPortList.cpp

#include "serialportlist.h"

//默认构造
SerialPortList::SerialPortList()
{
timer = new QTimer;
scanCycleMs = 200;
oldPortStringList.clear();
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeOut()));
} //自定义扫描周期构造
SerialPortList::SerialPortList(quint16 CycleMs)
{
timer = new QTimer;
scanCycleMs = CycleMs;
oldPortStringList.clear();
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeOut()));
} SerialPortList::~SerialPortList()
{
delete timer;
} //开始扫描
void SerialPortList::ScanStart()
{
timer->stop();
timer->start(scanCycleMs);
} //停止扫描
void SerialPortList::ScanStop(){
timer->stop();
} //周期扫描服务
void SerialPortList::onTimeOut(){ QStringList newPortStringList;
//搜索串口
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
#if DEBUG_INFOR_EN
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
#endif
newPortStringList += info.portName();
} //更新旧的串口列表
if(newPortStringList.size() != oldPortStringList.size())
{
oldPortStringList = newPortStringList;
emit onNewSerialPort(oldPortStringList);
}
}

Qt 自动搜索串口号列表的更多相关文章

  1. Windows系统清除占用的串口号列表批处理

    蛋疼总是无缘无故被占用 @echo off reg query "HKLM\SYSTEM\CurrentControlSet\Control\COM Name Arbiter" / ...

  2. vim 配置文件 ,高亮+自动缩进+行号+折叠+优化

    vim 配置文件 ,高亮+自动缩进+行号+折叠+优化 将一下代码copy到 用户目录下 新建文件为  .vimrc保存即可生效: 如果想所有用户生效 请修改 /etc/vimrc (建议先cp一份)& ...

  3. Android BLE与终端通信(二)——Android Bluetooth基础科普以及搜索蓝牙设备显示列表

    Android BLE与终端通信(二)--Android Bluetooth基础搜索蓝牙设备显示列表 摘要 第一篇算是个热身,这一片开始来写些硬菜了,这篇就是实际和蓝牙打交道了,所以要用到真机调试哟, ...

  4. C++解析头文件-Qt自动生成信号声明

    目录 一.瞎白话 二.背景 三.思路分析 四.代码讲解 1.类图 2.内存结构声明 3.QtHeaderDescription 4.私有函数讲解 五.分析结果 六.下载 一.瞎白话 时间过的ZTMK, ...

  5. selenium 之百度搜索,结果列表翻页查询

    selenium之百度搜索,结果列表翻页查询 by:授客 QQ:1033553122 实例:百度搜索,结果列表翻页查询 解决问题:解决selenium driver获取web页面元素时,元素过期问题 ...

  6. C++解析头文件-Qt自动生成信号定义

    目录 一.概述 二.实现思路 三.代码讲解 1.类图 2.QtCppDescription 3.测试 四.源代码 一.概述 上一篇文章C++解析头文件-Qt自动生成信号声明我们主要讲解了怎么去解析C+ ...

  7. Qt之股票组件-自选股--列表可以拖拽、右键常用菜单

    目录 一.开头嘴一嘴 二.效果展示 三.自选股列表 1.列表初始化 2.添加Item 3.右键菜单 4.拖拽Item 5.刷新数据 四.相关文章 原文链接:Qt之股票组件-自选股--列表可以拖拽.右键 ...

  8. winedt设置自动显示行号[latex]

    options--preferences--appearance 在show line numbers for modes下面的文本框里添加;Tex 这样新建或者打开tex文件的时候就自动显示行号了( ...

  9. 使用AJAX做关键字查询:输入框变化自动搜索、无刷新页面;

    使用AJAX做关键字查询要求:1.无刷新页面2.输入框变化自动搜索 <style type="text/css"> .k{ width:150px; height:30 ...

随机推荐

  1. poj 1185 炮兵阵地(三维状态压缩dP)

    题目:http://poj.org/problem?id=1185 思路: d[i][j][k]表示第i行的状态为第k个状态,第i-1行的状态为第j个状态的时候 的炮的数量. 1表示放大炮, 地形状态 ...

  2. 循环中不要放入openSession()

    for(Shop s:list) { System.out.println(s.getName()); String sql="select shopId,sum(ele_bank+ele_ ...

  3. 一位ACM过来人的心得(转)

    励志下! 刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解.很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是必要条 ...

  4. iOS开发:在Swift中调用oc库

    先列举这个工程中用到的oc源码库: MBProgressHUD:半透明提示器,Loading动画等 SDWebImage:图片下载和缓存的库 MJRefresh: 下拉刷新,上拉加载 Alamofir ...

  5. HDU 1686 (KMP模式串出现的次数) Oulipo

    题意: 求模式串W在母串T中出现的次数,各个匹配串中允许有重叠的部分. 分析: 一开始想不清楚当一次匹配完成时该怎么办,我还SB地让i回溯到某个位置上去. 后来仔细想想,完全不用,直接让模式串向前滑动 ...

  6. 解决IE6下浮动层固定定位的经典方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 使用讯飞SDK,实现文字在线合成语音

    private SpeechSynthesizer mTts; private int isSpeaking = 0; mTts= SpeechSynthesizer.createSynthesize ...

  8. BrowserSync,调试利器--自动刷新(转

    ---恢复内容开始--- 请想象这样一个场面:你开着两个显示器,一边是IDE里的代码,另一边是浏览器里的你正在开发的应用.此时桌上还放着你的手机,手机里也是这个开发中的应用.然后,你新写了一小段代码, ...

  9. apache开源项目 -- Tuscany

    tuscany是Apache组织关于SOA实现的一个开放源码的工程项目,目前处于孵化期阶段. 该项目主要基于SCA,SDO,DAS等技术上实现的. SCA 的基本概念以及 SCA 规范的具体内容并不在 ...

  10. Java [Leetcode 234]Palindrome Linked List

    题目描述: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) ...