【Qt】串口调试工具

前言

Qt框架式一个可以用c++语言来开发的框架,对于嵌入式开发来说,Qt框架可以用来开发上位机,用来对设备进行操纵,也可以用来开发图形界面,当做Linux系统的gui。所以说,基于Qt框架来开发软件,是嵌入式工程师必备的一项技能。
这里写的是一款所有嵌入式工程师都要用到的软件,串口调试工具。这里我是用c++写的,我写的功能比较简陋,也就只有串口收发之类的简单功能。对比一些成熟的串口调试工具肯定是不如的,但是不妨当作练手的小项目。

一、功能设计

项目要实现什么功能,最好在一开始就能定下来,写起来也方便,bug也少。
在实际开发中,很多时候都会在写完后加需求,或者在项目进行中加需求,这很麻烦,因为会打乱事先设计好的软件框架。

1串口接收数据

2串口发送数据

3带有时间戳

4不论是收发都能在窗口看到

5能设置波特率、数据网、验证位、停止位等功能

6能把接收数据转化为十六进制或者ascii字符格式

二、UI布局

在这里插入图片描述创建widget任务,先把UI界面弄好,Qt提供了方便快速的界面设计方式,很多东西用代码来实现是很复杂的,既麻烦,效果还不好。
直接在widget里,用拖动控件的方法,很容易就把这个UI搞好了。
也就用到了几个很基础的控件,pushbutton、textedit、tatel、checkbox。

三、写代码

widget.cpp中的代码,注释都差不多写了。
就是有个奇怪的问题,本来想改个背景图片,变得好看点的,但加入图片之后,运行就会变得很卡,也不知道为什么。

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMessageBox>

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

    resize(750,500);//窗口大小

    QPixmap pixmap(":/image/image/yp.jpg"); // 加载图片
    QPalette palette;
    palette.setBrush(this->backgroundRole(), QBrush(pixmap.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); // 调整图片大小以适应窗口大小
    this->setPalette(palette); // 设置调色板
    this->setAutoFillBackground(true); // 自动填充背景
    ui->textEdit->setStyleSheet("QTextEdit { background-color: rgba(255, 255, 255, 128); }");
    ui->textEdit_2->setStyleSheet("QTextEdit { background-color: rgba(255, 255, 255, 128); }");

    setWindowTitle("串口调试助手(●′ω`●)");//窗口标题
    time1= new QTimer(this);
    serial=new QSerialPort(this);
    time1->start(500);//开启一个200ms的定时器
    connect(time1,&QTimer::timeout,this,&Widget::timerEvent);//时间到后,发出timeout信号,触发槽函数timerevent
    ui->comboBox_2->setCurrentIndex(4);
    ui->comboBox_3->setCurrentIndex(3);
    ui->comboBox_4->setCurrentIndex(2);
    ui->comboBox_5->setCurrentIndex(0);
    rx_len=0;
    tx_len=0;
    connect(serial,QSerialPort::readyRead,this,&Widget::serial_port);//当串口有数据时,转到槽
    ui->checkBox->setCheckState(Qt::Checked);//默认选中ascii

}

Widget::~Widget()
{
   
   
    delete ui;
}


void Widget::timerEvent()
{
   
   

    QStringList newPortStringList;//创建容器
    newPortStringList.clear();
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())//foreach关键字,遍历列表,放到info中
    {
   
   
        newPortStringList+=info.portName();//将可用串口的名字放到字符串容器中

        //qDebug()<<newPortStringList;
    }

    if(newPortStringList.size()!=PortStringList.size())
    {
   
   
        PortStringList=newPortStringList;//PortStringList是私有成员,是全局的,保存上一次的串口名字
        ui->comboBox->clear();//将下拉栏清空
        ui->comboBox->addItems(PortStringList);//上次串口名字加入
    }</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值