@功能:
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. HDU 1698 Just a Hook (线段树 成段更新 lazy-tag思想)

    题目链接 题意: n个挂钩,q次询问,每个挂钩可能的值为1 2 3,  初始值为1,每次询问 把从x到Y区间内的值改变为z.求最后的总的值. 分析:用val记录这一个区间的值,val == -1表示这 ...

  2. 计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)

    转载自 http://blog.csdn.net/william001zs/article/details/6213485 矢量 如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如果 ...

  3. eval绑定decimal数据后,如何去掉后面没有意义的0?

    假如有个数字是 25.00 就应该只显示 25   ,而如果是25.3 则还是显示 25.3   Score.ToString("g0")  这样就可以去掉 decimal 后面多 ...

  4. ViewPager设置 缓存个数、页卡间距、数据更新

    在使用ViewPager常用设置 1)mViewPager.setOffscreenPageLimit(2);//设置缓存view 的个数(实际有3个,缓存2个+正在显示的1个)2)mViewPage ...

  5. linux编程获取本机网络相关参数

    getifaddrs()和struct ifaddrs的使用,获取本机IP 博客分类: Linux C编程   ifaddrs结构体定义如下: struct ifaddrs { struct ifad ...

  6. HDU 5489 Removed Interval

    题意:求一段序列中删掉L个连续元素后的LIS. 解法:我的想法很复杂= =怎么说呢……首先用nlogn的方法求LIS得到的序列dp的第i项的意义为上升子序列所有长度为i的序列结尾元素的最小值,那么先倒 ...

  7. HDU 5744 Keep On Movin

    Keep On Movin Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  8. Storm入门教程 第五章 一致性事务【转】

    Storm是一个分布式的流处理系统,利用anchor和ack机制保证所有tuple都被成功处理.如果tuple出错,则可以被重传,但是如何保证出错的tuple只被处理一次呢?Storm提供了一套事务性 ...

  9. codeforces 681D Gifts by the List dfs+构造

    题意:给你一个森林,表示其祖先关系(自己也是自己的祖先),每个人有一个礼物(要送给这个人的固定的一个祖先) 让你构造一个序列,使得的对于每个人,这个序列中第一个出现的他的祖先,是他要送礼物的的那个祖先 ...

  10. String.Format格式说明

    原文地址:http://www.cnblogs.com/tuyile006/archive/2006/07/13/449884.aspx C#格式化数值结果表 字符 说明 示例 输出 C 货币 str ...