跟着视频使用QT做一个串口调试助手

文件工程网盘:

可执行文件:

链接:https://pan.baidu.com/s/1oyJDISwJZRfUjb4fhNl23w?pwd=f5de 
提取码:f5de 
--来自百度网盘超级会员V4的分享

项目工程(下面代码的具体位置可以跟着下面项目工程中的文件进行对比):

链接:https://pan.baidu.com/s/183MNSYEjDzN5uuz7TSD8tg?pwd=dc0k 
提取码:dc0k 
--来自百度网盘超级会员V4的分享

设计界面:

https://www.bilibili.com/video/BV1tp4y1i7EJ?p=10&vd_source=f738cb9bab54cc5b145b41cdb71328ee

实现逻辑功能:

QT上位机开发之串口助手(下)_哔哩​​​​​​哔哩_bilibili

将串口调试助手打包成windows端的软件:

https://www.bilibili.com/video/BV1tp4y1i7EJ?p=12&vd_source=f738cb9bab54cc5b145b41cdb71328ee第一次跟着视频做:

最终结果:

链接:https://pan.baidu.com/s/1bQ2fMhkrGrVOPuqnlZlS1A?pwd=ci5q 
提取码:ci5q 
--来自百度网盘超级会员V4的分享

第二次做:

首先画出界面,并且修改必要的控件名称,设置合理的布局,以及规定窗口和各个模块的大小,最后设置默认值:这一步可以对照着自己的设置进行对接,设置QComboBox的默认值时,首先选中控件QComboBox,然后选择下面的内容:

 第二步就是实现逻辑功能:

参考文章:

QT串口通信_梅樱的博客-CSDN博客https://blog.csdn.net/mt0206/article/details/129634037?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169200370116800188541194%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169200370116800188541194&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-129634037-null-null.142%5Ev92%5EchatsearchT0_1&utm_term=%E6%80%8E%E6%A0%B7%E5%9C%A8qt%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0%E4%B8%AD%E8%8E%B7%E5%BE%97%E4%B8%B2%E5%8F%A3%E5%8F%B7&spm=1018.2226.3001.4187

第一步:    添加对应的模块,会用到串口模块:serialport所以添加上:
QT       += core gui serialport
#第一步:    添加对应的模块,会用到串口模块:serialport所以添加上
第二步:    下面修改的代码中需要用到SerialPor头文件(类),这个头文件的作用可以帮助创建一个串口对象
#include <QSerialPort> 
//第二步:    下面修改的代码中需要用到SerialPor头文件(类),这个头文件的作用可以帮助创建一个串口对象
第三步:     声明一个串口对象,串口对象的名称是serialport,在声明对象是要注意的是需要在类QSerialPort之后加一个*,不然会报错。
QSerialPort* serialport;
 //第三步:     声明一个串口对象,串口对象的名称是serialport,在声明对象是要注意的是需要在类QSerialPort之后加一个*,不然会报错。
第四步:      在这里添加QString类。是为了在对应的cpp文件中使用对应的类型定义变量,在这里对应的是mywidget.cpp中的第9行,也就是QStringList SerialPortName;//在QT的形目工程文件中中进行注释,使用的是#,而在别的文件中使用的是//
#include <QString>  
//第四步:      在这里添加QString类。是为了在对应的cpp文件中使用对应的类型定义变量,在这里对应的是mywidget.cpp中的第9行,也就是QStringList SerialPortName;

 

//第五步:    定义了一个字符串列表,list1: [ "Android", "Qt Creator"," ", "Java", "C++" ],List1是一个QStringList类型,//当List1显示时,就是以上面的信号是显示,并且,QStringList类型的变量添加内容是,可以通过不同方式:QStringList list;list << "Bill Murray" << "John Doe" ;
  setWindowTitle("串口调试助手");#设置窗口的标题
    QStringList SerialPortName;#声明一个字符串列表类型的对象
//第六步:  填写foreach()函数里面的参数,第一个参数是var,因为我们要得到的是串口的信息,所以选择定义串口的信息有关的
    //变量info,并且取地址,第二个参数是容器,所以就是var在container中取出,这样var和container是相同类的
    //不断地进行遍历,并且不断地将串口的名字添加到字符串列表SerialPortName中去,
    //QSerialPortInfo::availablePorts(),可以在帮助中查到,这个函数的作用取得系统的可以获得的串口:Returns a list of available serial ports on the system.
 //foreach(var,container)函数是用来遍历的,其中var是容器内的变量,container是容器,
foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) {


        SerialPortName<<info.portName();
    }
//第七步:这个串口可以提供与串口相关的信息
#include <QSerialPortInfo>    //第七步:这个串口可以提供与串口相关的信息

 

//第八步:  将获得的字符串列表SerialPortName中的信息加到SerialNameCb中去,在帮助中查找那个QComboBox的additems()函数
    //因为加的是字符串列表类型,所以使用的是addItems()函数,void QComboBox::addItems(const QStringList &texts) 

 


    ui->SerialNameCb->addItems(SerialPortName);
//第九步;   创建了一个串口的对象serialport,这个对象之前就在mywidget.h文件中声明,这个对象的父类是窗口
 serialport = new QSerialPort(this);
  //第十步:  将openCb按钮转到槽,写函数
void MyWidget::on_OpenBtn_clicked()   //第十步:  将openCb按钮转到槽,写函数
{
                                      //10.1:    首先定义一些系列的变量,数据位,波特率。停止位,校验位
    QSerialPort::BaudRate  baudrate;
    QSerialPort::DataBits  databits;
    QSerialPort::Parity    checkbits;
    QSerialPort::StopBits  stopbits;


                                       //10.2:     使用一系列if命令来给上边定义的变量进行赋值
                                        //10.3:    使用一系列的标准命令根据BaudRateCb,DataCb,ParityCb,StopCb按钮上的文本信息,对数据为进行赋值
    if(ui->BaudRateCb->currentText()=="1200")
    {
        baudrate=QSerialPort::Baud1200;
    }else if(ui->BaudRateCb->currentText()=="2400")
    {
        baudrate=QSerialPort::Baud2400;
    }else if(ui->BaudRateCb->currentText()=="4800")
    {
        baudrate=QSerialPort::Baud4800;
    }else if(ui->BaudRateCb->currentText()=="9600")
    {
        baudrate=QSerialPort::Baud9600;
    }else if(ui->BaudRateCb->currentText()=="115200")
    {
        baudrate=QSerialPort::Baud115200;
    }


    if(ui->DataCb->currentText()=="5")
    {
        databits=QSerialPort::Data5;
    }else if(ui->DataCb->currentText()=="6")
    {
        databits=QSerialPort::Data6;
    }else if(ui->DataCb->currentText()=="7")
    {
        databits=QSerialPort::Data7;
    }else if(ui->DataCb->currentText()=="8")
    {
        databits=QSerialPort::Data8;
    }


    if(ui->ParityCb->currentText()=="none")
    {
        checkbits=QSerialPort::NoParity;
    }


    if(ui->StopCb->currentText()=="1")
    {
        stopbits=QSerialPort::OneStop;
    }else if(ui->StopCb->currentText()=="1.5")
    {
        stopbits=QSerialPort::OneAndHalfStop;
    }else if(ui->StopCb->currentText()=="2")
    {
        stopbits=QSerialPort::TwoStop;
    }
//第十一步:   将信息方式到串口中去
   serialport->setPortName(ui->SerialNameCb->currentText());//将串口名放置到串口中去
   serialport->setBaudRate(baudrate);
   serialport->setDataBits(databits);
   serialport->setParity(checkbits);
   serialport->setStopBits(stopbits);

 

 //第十二步:  查看串口是否打开,可以在帮助中查找QIODevice::ReadWrite的使用方法
   // This enum is used with open() to describe the mode in which a device is opened. It is also returned by openMode().

 

if(serialport->open(QIODevice::ReadWrite))
   {
      QMessageBox::information(this,"提示","成功");
  }else {
      QMessageBox::critical(this,"提示","失败");
  }
}
//第十三步:  使接收框可以收到信息;
 connect(serialport,SIGNAL(readyRead()),this,SLOT(serialPortReadyRead_Slot()));
//第十四步:  添加对应的槽函数,注意起名字时要合理
  void serialPortReadyRead_Slot();//第十四步:  添加对应的槽函数,注意起名字时要合理
//第十五步:实现接收框可以接受信息
void MyWidget::serialPortReadyRead_Slot()
{
    QString buf;
    buf=QString(serialport->readAll());
    ui->ReceiveEdit->appendPlainText(buf);

}
//第十六步:   点击按钮转到槽关闭串口
void MyWidget::on_CloseBtn_clicked()//第十六步:   点击按钮转到槽关闭串口
{
    serialport->close();
}
/第十七步:  将发送框里面的信息发送到串口,然后在第十五步中可以实现接收框接受串口的信息
/第十八步:引用中的代码 ui->textEdit->toPlainText().toLocal8Bit() 是用于获取文本编辑框中的内容,并将其转换为本地字节序列。这段代码返回的是一个 QByteArray 类型的数据。    
//而 toLocal8Bit().data() 则是将这个字节序列转换为 char* 类型的指针
void MyWidget::on_SendBtn_clicked()//第十七步:  将发送框里面的信息发送到串口,然后在第十五步中可以实现接收框接受串口的信息
{
    //第十八步:引用中的代码 ui->textEdit->toPlainText().toLocal8Bit() 是用于获取文本编辑框中的内容,并将其转换为本地字节序列。这段代码返回的是一个 QByteArray 类型的数据。
    //而 toLocal8Bit().data() 则是将这个字节序列转换为 char* 类型的指针
    serialport->write(ui->SendBtn->text().toLocal8Bit().data());
}
//第十九步:  实现将接收框清除
void MyWidget::on_ClearBtn_clicked()
{
    ui->ReceiveEdit->clear();//第十九步:  实现将接收框清除
}
#第二十步: 将图标(.ico文件)复制到 工程名文件下例如:D:\Qt514\workspace\serialtwo之下有一个serialport.ico文件,添加下面代码后运行(或者D:\Qt514\workspace\serialport\serial之下,然后将QT平台切换到Release模式下,在运行一遍就可以了)

 

RC_ICONS=serialport.ico#第二十步: 将图标(.ico文件)复制到 工程名文件下例如:D:\Qt514\workspace\serialtwo之下有一个serialport.ico文件

打包方法;

QT生成可执行文件_小破孩 != ERR的博客-CSDN博客

出现问题:

打包之后的可执行文件无法正常启动,可能是因为32bit写的使用的是64bit打包的记得换成32bit的反之亦然:本电脑是64bit

 

解决方法:

QT出现应用程序无法正常启动0xc000007b的错误_qt 0xc000007b_水军总督的博客-CSDN博客

 qt打包exe程序出现应用程序无法正常启动0xc000007b或者其他的错误_路奇怪的博客-CSDN博客

 如有不妥之处或者侵权行为,请及时联系本人删除。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值