VS2022+Qt串口上位机控制系统

程序示例精选
VS2022+Qt串口上位机控制系统
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《VS2022+Qt串口上位机控制系统》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. VS2022, Qt
       2. C++

二、使用步骤

代码如下(示例):

#include "SerialPort.h"
#include "ui_SerialPort.h"

#include <QSettings>
#include <qt_windows.h>
#include <QMessageBox>
#include <QDebug>

SerialPort::SerialPort(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::SerialPort)
{
    ui->setupUi(this);

    this->setWindowTitle(tr("串口调试助手 Qt版 V1.0"));
    this->setFixedSize(this->width(), this->height());

    m_nRecvNum = 0;
    m_nSendNum = 0;
    m_bOpen = false;
}

SerialPort::~SerialPort()
{
    delete ui;
    delete m_SerStateLbl;
    delete m_RecvNumLbl;
    delete m_SendNumLbl;
    delete m_ResetNumBtn;
}

/***************************************************************************/
/*                              初始化状态栏                                 */
/***************************************************************************/

void SerialPort::InitStatusBar()
{
    m_SerStateLbl = new QLabel();
    m_RecvNumLbl = new QLabel();
    m_SendNumLbl = new QLabel();
    m_ResetNumBtn = new QPushButton();
    connect(m_ResetNumBtn, SIGNAL(clicked()), this, SLOT(slot_ResetNumBtn_clicked()));

    m_SerStateLbl->setMinimumSize(180, 20);
    m_RecvNumLbl->setMinimumSize(180, 20); // 标签最小尺寸

}

void SerialPort::SetSerState()
{
    QString strState;
    if ( m_bOpen )
        strState = tr("打开");
    else
        strState = tr("关闭");

    m_SerStateLbl->setText(tr("串口状态:%1").arg(strState));
}

void SerialPort::SetRecvNum()
{
    QString strRecvNum = QString::number(m_nRecvNum);
    m_RecvNumLbl->setText(tr("接收字节数:%1").arg(strRecvNum));
}

void SerialPort::SetSendNum()
{
    QString strSendNum = QString::number(m_nSendNum);
    m_SendNumLbl->setText(tr("发送字节数:%1").arg(strSendNum));
}

/***************************************************************************/
/*                            初始化CombBox                                 */
/***************************************************************************/

void SerialPort::InitCommCmb()
{
    SetPortNumCmb();    // 串口号
    SetBaudCmb();       // 波特率
    SetDPaityCmb();     // 校验位
    SetDataBCmb();      // 数据位

}

// 设置串口号
void SerialPort::SetPortNumCmb()
{
    QStringList commPortList = GetEnableCommPortQt();
    if ( !commPortList.isEmpty() )
        ui->PortNumCmb->addItems(commPortList);
}

// 获取计算机可用串口 QSerialPort QSerialPortInfo类
QStringList SerialPort::GetEnableCommPortQt()
{
    QStringList CommPortList;

    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        if (serial.open(QIODevice::ReadWrite))
        {
            CommPortList.append(serial.portName());
            serial.close();
        }
    }

    return CommPortList;
}

// 获取计算机可用串口 Windows API
QStringList SerialPort::GetEnableCommPortWin()
{
    QStringList CommPortList;

    QString strCommPath = tr("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM");
    QSettings *settings = new QSettings(strCommPath, QSettings::NativeFormat);
    QStringList keyList = settings->allKeys();


    return CommPortList;
}

// nIndex为索引号 bValue选择返回值为key还是value,默认为value
QString SerialPort::GetComm(int nIndex, bool bValue)
{
    QString strCommRet = tr("");
    HKEY hKey;

    // RegOpenKeyEx windowsApi 成功返回0 需要加<qt_windows.h>头文件
    if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hKey) != 0)
    {
        QMessageBox::warning(this, tr("注册表"), tr("无法打开注册表!"), QMessageBox::Ok);
        return tr(""); // 无法打开注册表
    }

    QString strKeyMsg;      // 键名
    QString strValueMsg;    // 键值
    wchar_t keyName[256];   // 键名数组
    char keyValue[256];     // 键值数组


    if (::RegEnumValue(hKey, nIndex, keyName, &nKeySize, 0, &nType, (BYTE*)keyValue, &nValueSize) == 0) // 列举键名
    {
        // 读取键名
        for (uint i = 0; i < nKeySize; i++)
        {
            if (keyName[i] != 0x00)
                strKeyMsg.append(keyName[i]);
        }

        // 读取键值
        for (uint j = 0; j < nValueSize; j++)
        {
            if (keyValue[j] != 0x00)
                strValueMsg.append(keyValue[j]);
        }


    }//if
    else
    {
        ::RegCloseKey(hKey); // 关闭注册表
        return tr("");  // 无可用串口
    }

    return strCommRet;
}

运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: QT是一种GUI(图形用户界面)开发工具,在串口通信方面非常强大。QT提供了一些串口通信库和类,可以很方便地用来制作串口上位机。以下是在QT中制作串口上位机的基本步骤: 1.配置串口QT可以通过QSerialPort类来配置串口,设置参数如波特率、数据位、停止位、校验位等,以达到和目标串口的通信。 2.打开串口:打开串口是进行通信的前提条件,需要使用open()函数打开串口。 3.发送数据:使用write()函数向串口发送数据,可以发送二进制数据或ASCII码数据。 4.接收数据:使用readyRead()函数来获取串口接收到的数据。如果需要实时接收数据,需要在槽函数中处理接收到的数据。 5.关闭串口:使用close()函数关闭串口。 在这个基本框架下,你可以自己定义需要实现的功能。例如实现字节发送、循环发送、数据展示等。QT还提供了很多基于串口通信的实际应用,例如控制机器人、自动化系统等。 ### 回答2: Qt是一款功能强大的跨平台GUI开发框架,它不仅可以开发图形化界面,还可以进行串口通信。如果想要制作串口上位机,可以通过以下步骤实现: 1. 打开Qt Creator,并新建一个Qt Widgets应用程序工程,命名为SerialPortUppercomputer。 2. 在工程树中添加一个按钮控件,用于发送数据给串口设备。 3. 在程序中通过Qt串口库进行串口通信的配置和读写操作。 4. 配置串口参数,例如串口号、波特率、数据位等。 5. 使用信号和槽机制来响应串口设备的数据,例如当数据到达串口时,自动读取并在上位机界面上显示出来。 6. 设计界面并添加交互控件,例如文本框控件用于显示串口设备的返回信息。 7. 编写程序逻辑,例如当用户点击发送按钮时,将数据发送到串口设备。 8. 测试程序,调试完善。 总结:使用Qt开发串口上位机可以快速完成串口通信功能的开发和优化,而且具有跨平台特性,可适用于多种操作系统和设备。在具体实现时需要考虑一些细节问题,例如串口参数的正确设置、数据的读写方式等,可以根据具体情况进行调整。 ### 回答3: Qt是一个跨平台的C++开发框架,同时也提供了强大的GUI界面设计功能和丰富的库函数。在Qt中,制作串口上位机非常容易,只需要引用Qt SerialPort模块,就能轻松地与串口进行通信。 下面是制作串口上位机的具体步骤: 1.创建Qt工程并选定SerialPort模块。在Qt Creator中新建Qt Widgets Application项目,选定SerialPort项目模板。 2.添加串口通信的参数设置。例如:波特率、停止位、数据位、校验位等。 3.编写串口通信的代码。qt中使用QSerialPort类进行串口通信。首先需要调用QSerialPort构造函数创建串口对象,然后使用setPortName()函数、setBaudRate()函数等设置串口参数,调用open()函数打开串口,调用write()函数向串口发送数据,调用read()函数读取串口数据。 4.设计上位机界面。在Qt Creator的设计器中,拖拽需要的控件,如按钮、文本框等,布局好后,使用信号槽机制,将按钮点击和串口通信的代码连接起来,实现通信的启动、关闭和数据的显示等功能。 5.编译运行。使用Qt Creator对工程进行编译,生成可执行文件和动态链接库。然后可以进行运行和测试,观察串口数据是否正确地被获取和显示。 总之,使用Qt制作串口上位机相对简单,只需要具备一定的C++编程能力和序列通信的基本知识,就可以轻松实现自己的上位机应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷塘月色2

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值