找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9401|回复: 21
打印 上一主题 下一主题
收起左侧

串口助手源码,利用Qt制作的

  [复制链接]
跳转到指定楼层
楼主
之前学了一下Qt,然后做了一个串口助手。功能测试稳定!初学者可以参考一下!
串口助手-精简版-V3.14

作者:
    付强
    bearfq@126.com

时间:
    2018年1月19日 10:50:53

实现功能:
    1.串口收发
    2.保存数据到本地
    3.打开本地数据文件
    4.调整波特率等参数
   
测试实现:
    性能稳定


源程序如下:
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"


  3. MainWindow::MainWindow(QWidget *parent) :
  4.     QMainWindow(parent),
  5.     ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);

  8.     /*设置窗口图标*/
  9.     this->setWindowIcon(QIcon(":/logo256_256.ico"));

  10.     /*激活参数选择框*/
  11.     activeComboBox(true);

  12.     /*显示所有可用端口*/
  13.     showAllPort();

  14.     /*设置接收文本框的光标一直保持在中心*/
  15.     connect(ui->recvTextEdit, SIGNAL(textChanged()), ui->recvTextEdit, SLOT(centerCursor()));
  16. }

  17. MainWindow::~MainWindow()
  18. {
  19.     delete ui;
  20. }

  21. /*激活/失活参数选择框*/
  22. void MainWindow::activeComboBox(bool status)
  23. {
  24.     ui->serialPortComboBox->setEnabled(status);//端口下选框
  25.     ui->BaudrateComboBox->setEnabled(status);//波特率下选框
  26.     ui->dataBitComboBox->setEnabled(status);//数据位数
  27.     ui->stopBitComboBox->setEnabled(status);//停止位
  28.     ui->parityComboBox->setEnabled(status);//奇偶校验
  29.     ui->flushPortBtn->setEnabled(status);//刷新按钮
  30. }

  31. //反转runFlag标志,并返回标志状态
  32. bool MainWindow::reverseRunFlag()
  33. {
  34.     if (myThread->runFlag)
  35.     {
  36.         myThread->runFlag = false;
  37.     }
  38.     else
  39.     {
  40.         myThread->runFlag = true;
  41.     }

  42.     return myThread->runFlag;
  43. }

  44. /*显示所有可用端口*/
  45. void MainWindow::showAllPort()
  46. {
  47.     const auto infos = QSerialPortInfo::availablePorts();//返回可用的端口

  48.     for (const QSerialPortInfo &info : infos)//将所有可用端口加入到下拉框中
  49.     {
  50.         ui->serialPortComboBox->addItem(info.portName());
  51.     }
  52. }

  53. /*清除接收文本框中的信息*/
  54. void MainWindow::on_clearRecvBtn_clicked()
  55. {
  56.     ui->recvTextEdit->clear();
  57. }

  58. /*清除发送文本框中的信息*/
  59. void MainWindow::on_clearSendBtn_clicked()
  60. {
  61.     ui->sendTextEdit->clear();
  62. }

  63. /*点击open按钮*/
  64. void MainWindow::on_openBtn_clicked()
  65. {
  66.     DBUG_OUT;

  67.     if(!reverseRunFlag())//子线程在运行--->关闭子线程
  68.     {
  69.         /*参数设置combobox全部激活*/
  70.         activeComboBox(true);

  71.         /*修改子线程运行标志*/
  72.         myThread->runFlag = false;
  73.        // myThread->finished();
  74.     }
  75.     else//没有运行子线程--->开启子线程
  76.     {
  77.         /*参数设置combobox全部失活*/
  78.         activeComboBox(false);

  79.         /*创建线程*/
  80.         myThread = new MyThread;

  81.         /*传递参数给子线程*/
  82.         myThread->portNameStr = ui->serialPortComboBox->currentText();
  83.         myThread->baudRateStr = ui->BaudrateComboBox->currentText();
  84.         myThread->parityStr = ui->parityComboBox->currentText();
  85.         myThread->dataBitsStr = ui->dataBitComboBox->currentText();
  86.         myThread->stopBitsStr = ui->stopBitComboBox->currentText();

  87.         /*连接信号与槽(将接收的数据显示在接收区中)*/
  88.         connect(myThread, SIGNAL(output(QString)), this, SLOT(showData(QString)));

  89.         //启动线程--->执行线程的run函数
  90.         myThread->start();
  91.     }
  92. }

  93. /*显示接收的数据*/
  94. void MainWindow::showData(QString data)
  95. {
  96.     DBUG_OUT;

  97.     ui->recvTextEdit->insertPlainText(data);
  98. }

  99. /*点击发送按钮,发送数据*/
  100. void MainWindow::on_sendBtn_clicked()
  101. {
  102.     DBUG_OUT;

  103.     //1.提取发送数据框文本
  104.     myThread->sendData = ui->sendTextEdit->toPlainText();

  105.     //2.发送标志置1
  106.     myThread->sendFlag = true;
  107. }

  108. /*保存接收的数据到文件*/
  109. void MainWindow::on_saveRecvBtn_clicked()
  110. {
  111.     DBUG_OUT;

  112.     //1.弹出保存文件的对话框
  113.     QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),"./recvdata",tr("text (*.txt *.cpp *.h)"));

  114.     //2.创建新文件
  115.     QFile file(fileName);
  116.     file.open(QIODevice::ReadWrite | QIODevice::Truncate);

  117.     //3.写入文本到文件中
  118.     //3.1获取text中的文本
  119.     QString text = ui->recvTextEdit->toPlainText();//转成纯文本

  120.     //3.2将文本写入文件中
  121.     file.write(text.toStdString().c_str());//转为标准字符串并返回其首地址

  122.     //4.关闭文件
  123.     file.close();
  124. }

  125. /*打开数据文件*/
  126. void MainWindow::on_openDataBtn_clicked()
  127. {
  128.     DBUG_OUT;

  129.     //1.弹出对话框:选择文件,获取文件名
  130.     QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
  131.                                                       "./",
  132.                                                       tr("Text (*.txt *.cpp *.h)"));
  133.     //2.读文件
  134.     //2.1打开文件
  135.     QFile file(fileName);
  136.     file.open(QIODevice::ReadOnly);

  137.     //2.2读文件
  138.     char buf[1024] = {0};
  139.     file.read(buf, sizeof(buf));

  140.     //2.3关闭文件
  141.     file.close();

  142.     //3.在发送区中显示文件信息
  143.     QString text(buf);
  144.     ui->sendTextEdit->insertPlainText(text);
  145. }

  146. /*刷新端口*/
  147. void MainWindow::on_flushPortBtn_clicked()
  148. {
  149.     ui->serialPortComboBox->clear();//清除原有端口号

  150.     showAllPort();//显示现有端口号
  151. }


复制代码

所有资料51hei提供下载:
串口助手精简版.rar (43.19 KB, 下载次数: 276)





评分

参与人数 1黑币 +7 收起 理由
xiou + 7 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:311481 发表于 2018-4-19 10:34 | 只看该作者
支持下,感谢分析
回复

使用道具 举报

板凳
ID:311481 发表于 2018-4-19 10:38 | 只看该作者
支持下,感谢分析
回复

使用道具 举报

地板
ID:323313 发表于 2018-6-12 22:28 | 只看该作者
学习QT容易吗?也想学,还有,C语言能写上位机吗
回复

使用道具 举报

5#
ID:251590 发表于 2018-11-2 16:49 | 只看该作者
谢楼主分享
回复

使用道具 举报

6#
ID:251590 发表于 2018-11-2 16:51 | 只看该作者
支持楼主,感谢分享
回复

使用道具 举报

7#
ID:420013 发表于 2018-11-3 09:45 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

8#
ID:421689 发表于 2018-11-6 14:04 | 只看该作者
感谢楼主分享!
回复

使用道具 举报

9#
ID:455373 发表于 2018-12-26 13:50 | 只看该作者
不错不错
回复

使用道具 举报

10#
ID:517138 发表于 2019-4-20 15:20 | 只看该作者
正好最近要做这个,感谢分享
回复

使用道具 举报

11#
ID:334822 发表于 2019-6-26 16:58 | 只看该作者
学习一下
回复

使用道具 举报

12#
ID:588657 发表于 2019-7-23 13:49 | 只看该作者
学习哈
回复

使用道具 举报

13#
ID:494565 发表于 2019-8-11 20:50 | 只看该作者
学习下
回复

使用道具 举报

14#
ID:602542 发表于 2019-8-22 00:21 | 只看该作者

支持下,感谢分析
回复

使用道具 举报

15#
ID:415973 发表于 2019-9-6 17:42 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

16#
ID:281879 发表于 2019-9-14 17:07 | 只看该作者
新手 来学习一下
回复

使用道具 举报

17#
ID:465802 发表于 2019-11-4 15:29 | 只看该作者
我下载看了下,程序里面只能将串口缓冲区里面的数据直接显示
回复

使用道具 举报

18#
ID:465802 发表于 2019-11-4 15:30 | 只看该作者
程序里面只能直接显示串口发送上来的数据,但是并不能实现16进制或者ASCII码显示切换。
回复

使用道具 举报

19#
ID:637424 发表于 2019-11-7 14:20 | 只看该作者
感谢楼主分享
回复

使用道具 举报

20#
ID:383956 发表于 2019-12-10 18:47 | 只看该作者
感谢楼主分享
回复

使用道具 举报

21#
ID:127977 发表于 2019-12-21 20:54 | 只看该作者
这个很不错啊
回复

使用道具 举报

22#
ID:151626 发表于 2020-4-2 14:53 | 只看该作者
支持下,感谢分析
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表