当前位置:   article > 正文

Qt实现串口通信的完整步骤_qt串口编程

qt串口编程

要实现串口通信,需要知道串口通信需要的信息

主要参数有:波特率、校验位、数据位、停止位、控制流

主要操作有:串口的打开和关闭、刷新设备串口、接发数据、开关显示灯等。

实现效果如图:

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

界面设计如下:

每个控件类名如下:

LED灯是QLable控件,设置它的长宽都是24px,然后鼠标右击,选择“样式表”,在样式表中添加代码。

 

 

文章最后附赠完整源码

第一步:在头文件中引入 QtSerialPort 类的两个头文件(必须引入)

  1. // 引入串口通信的两个头文件(第一步)
  2. #include <QtSerialPort/QSerialPort> // 提供访问串口的功能
  3. #include <QtSerialPort/QSerialPortInfo> // 提供系统中存在的串口信息

第二步:在工程文件中添加以下代码

  1. # 引入串口工程类型(第二步)
  2. QT += serialport

第三步:在头文件中定义全局的串口对象

QSerialPort     *serial;                            // 定义全局的串口对象(第三步)

第四步:参数设置,在头文件中定义初始化参数的函数和参数变量名,在.cpp文件中实现函数

  1. public:
  2. void SerialPortInit(); // 串口初始化(参数配置)
  3. private:
  4. // 参数配置
  5. QStringList baudList; //波特率
  6. QStringList parityList; //校验位
  7. QStringList dataBitsList; //数据位
  8. QStringList stopBitsList; //停止位
  9. QStringList flowControlList; //控制流
  1. // 串口初始化(参数配置)
  2. void MainWindow::SerialPortInit()
  3. {
  4. serial = new QSerialPort; //申请内存,并设置父对象
  5. // 获取计算机中有效的端口号,然后将端口号的名称给端口选择控件
  6. foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
  7. {
  8. serial->setPort(info); // 在对象中设置串口
  9. if(serial->open(QIODevice::ReadWrite)) // 以读写方式打开串口
  10. {
  11. ui->PortBox->addItem(info.portName()); // 添加计算机中的端口
  12. serial->close(); // 关闭
  13. } else
  14. {
  15. qDebug() << "串口打开失败,请重试";
  16. }
  17. }
  18. // 参数配置
  19. // 波特率,波特率默认选择57600 ,禁止用户点击
  20. ui->BaudBox->addItem("57600");
  21. serial->setBaudRate(QSerialPort::Baud57600);
  22. ui->BaudBox->setDisabled(true);
  23. // 校验,校验默认选择无
  24. ui->ParityBox->addItem("无");
  25. serial->setParity(QSerialPort::NoParity);
  26. // 数据位,数据位默认选择8
  27. ui->BitBox->addItem("8");
  28. serial->setDataBits(QSerialPort::Data8);
  29. // 停止位,停止位默认选择1
  30. ui->StopBox->addItem("1");
  31. serial->setStopBits(QSerialPort::OneStop);
  32. // 控制流,默认选择无
  33. ui->ControlBox->addItem("无");
  34. serial->setFlowControl(QSerialPort::NoFlowControl);
  35. // 刷新串口
  36. RefreshSerialPort(0);
  37. // 信号
  38. connect(serial,&QSerialPort::readyRead,this,&MainWindow::DataReceived); // 接收数据
  39. connect(ui->SendWordOrder,&QPushButton::clicked,this,&MainWindow::DataSend); // 发送数据
  40. connect(ui->SendButton,&QPushButton::clicked,this,&MainWindow::DataSend); // 发送数据
  41. connect(ui->SendEditBtn1,&QPushButton::clicked,this,&MainWindow::DataSend); // 发送数据
  42. connect(ui->SendEditBtn2,&QPushButton::clicked,this,&MainWindow::DataSend); // 发送数据
  43. connect(ui->SendEditBtn3,&QPushButton::clicked,this,&MainWindow::DataSend); // 发送数据
  44. }

第五步:刷新串口,及时更新可用的串口

  1. // 刷新串口
  2. void MainWindow::RefreshSerialPort(int index)
  3. {
  4. QStringList portNameList; // 存储所有串口名
  5. if(index != 0)
  6. {
  7. serial->setPortName(ui->PortBox->currentText()); //设置串口号
  8. }
  9. else
  10. {
  11. ui->PortBox->clear(); //关闭串口号
  12. ui->PortBox->addItem("刷新"); //添加刷新
  13. foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) //添加新串口
  14. {
  15. portNameList.append(info.portName());
  16. }
  17. ui->PortBox->addItems(portNameList);
  18. ui->PortBox->setCurrentIndex(1); // 当前串口号为COM1
  19. serial->setPortName(ui->PortBox->currentText()); //设置串口号
  20. }
  21. }

第六步:发送数据和接收数据

  1. // 接收数据,使用read () / readLine () / readAll ()
  2. void MainWindow::DataReceived()
  3. {
  4. char BUF[512] = {0}; // 存储转换类型后的数据
  5. QByteArray data = serial->readAll(); // 读取数据
  6. if(!data.isEmpty()) // 接收到数据
  7. {
  8. QString str = ui->DataReceived->toPlainText(); // 返回纯文本
  9. str += tr(data); // 数据是一行一行传送的,要保存所有数据
  10. ui->DataReceived->clear(); // 清空之前的数据
  11. ui->DataReceived->append(str); // 将数据放入控件中
  12. qDebug() << "str info: " << ui->DataReceived->toPlainText();
  13. // 清除之前的数据,防止追加,因为每次获取的数据不一样
  14. int index = str.indexOf("\r\n"); // 找到,返回索引值,找不到,返回-1
  15. if(index != -1)
  16. {
  17. snprintf(BUF,500,"%s", str.left(index + 2).toUtf8().data()); // QString转为char * 类型
  18. qDebug() << "BUF info: " << BUF; // 数据类型转换成功
  19. str.remove(0,index + 2);
  20. // 处理获取到的数据,将其放入对应的控件中
  21. // .....
  22. }
  23. }
  24. }
  25. // 发送数据,write ()
  26. void MainWindow::DataSend()
  27. {
  28. serial->write(ui->DataSend->toPlainText().toLatin1()); // 串口发送数据
  29. }

第七步:打开串口和关闭串口,当打开串口后,显示绿灯;关闭串口后,显示红灯

  1. // 串口开关
  2. void color:rgb(98 189 255)">MainWindow::on_OpenSerialButton_clicked()
  3. {
  4. if(serial->isOpen()) // 如果串口打开了,先给他关闭
  5. {
  6. serial->clear();
  7. serial->close();
  8. // 关闭状态,按钮显示“打开串口”
  9. ui->OpenSerialButton->setText("打开串口");
  10. // 关闭状态,允许用户操作
  11. ui->BaudBox->setDisabled(false);
  12. ui->ParityBox->setDisabled(false);
  13. ui->BitBox->setDisabled(false);
  14. ui->StopBox->setDisabled(false);
  15. ui->ControlBox->setDisabled(false);
  16. // 禁止操作“发送字符操作”
  17. ui->SendWordOrder->setDisabled(true);
  18. ui->SendButton->setDisabled(true);
  19. // 关闭状态,颜色为绿色
  20. ui->OpenSerialButton->setStyleSheet("color: green;");
  21. // 关闭,显示灯为红色
  22. LED(true);
  23. // 清空数据
  24. ui->DataReceived->clear();
  25. ui->DataSend->clear();
  26. }
  27. else // 如果串口关闭了,先给他打开
  28. {
  29. //当前选择的串口名字
  30. serial->setPortName(ui->PortBox->currentText());
  31. //用ReadWrite 的模式尝试打开串口,无法收发数据时,发出警告
  32. if(!serial->open(QIODevice::ReadWrite))
  33. {
  34. QMessageBox::warning(this,tr("提示"),tr("串口打开失败!"),QMessageBox::Ok);
  35. return;
  36. }
  37. // 打开状态,按钮显示“关闭串口”
  38. ui->OpenSerialButton->setText("关闭串口");
  39. // 打开状态,禁止用户操作
  40. ui->BaudBox->setDisabled(true);
  41. ui->ParityBox->setDisabled(true);
  42. ui->BitBox->setDisabled(true);
  43. ui->StopBox->setDisabled(true);
  44. ui->ControlBox->setDisabled(true);
  45. // 允许操作“发送字符操作”
  46. ui->SendWordOrder->setDisabled(false);
  47. ui->SendButton->setDisabled(false);
  48. // 打开状态,颜色为红色
  49. ui->OpenSerialButton->setStyleSheet("color: red;");
  50. // 打开,显示灯为绿色
  51. LED(false);
  52. }
  53. }
  54. // 开关显示灯
  55. void color:rgb(98 189 255)">MainWindow::LED(bool changeColor)
  56. {
  57. if(changeColor == false)
  58. {
  59. // 显示绿色
  60. ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 229, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");
  61. }
  62. else
  63. {
  64. // 显示红色
  65. ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(255, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");
  66. }
  67. }

第八步:相关槽函数

  1. // 控件中添加 指令“###”
  2. void MainWindow::on_SendButton_clicked()
  3. {
  4. on_ClearButton_clicked();
  5. ui->DataSend->append("###");
  6. }
  7. // 清空控件
  8. void MainWindow::on_ClearButton_clicked()
  9. {
  10. ui->DataSend->setText("");
  11. }
  12. // 清空接收到的数据
  13. void MainWindow::on_ClearShowButton_clicked()
  14. {
  15. ui->DataReceived->setText("");
  16. }
  17. // 点击发送后,获取串口信息并展示在接受控件中
  18. void MainWindow::on_SendEditBtn1_clicked()
  19. {
  20. on_ClearButton_clicked();
  21. QString EditText = ui->Edit1->text(); //获取发送框内容
  22. ui->DataSend->setText(EditText); //将文本内容放在发送栏中
  23. }
  24. void MainWindow::on_SendEditBtn2_clicked()
  25. {
  26. on_ClearButton_clicked();
  27. QString EditText = ui->Edit2->text(); //获取发送框内容
  28. // qDebug() << "Edit1 text: " << EditText;
  29. ui->DataSend->append(EditText); //将文本内容放在发送栏中
  30. }
  31. void MainWindow::on_SendEditBtn3_clicked()
  32. {
  33. on_ClearButton_clicked();
  34. QString EditText = ui->Edit3->text(); //获取发送框内容
  35. // qDebug() << "Edit1 text: " << EditText;
  36. ui->DataSend->append(EditText); //将文本内容放在发送栏中
  37. }
  38. void MainWindow::on_SendWordOrder_clicked()
  39. {
  40. on_SendButton_clicked();
  41. }

源码:

工程文件.pro文件源码:

  1. QT += core gui
  2. # 引入串口工程类型(第二步)
  3. QT += serialport
  4. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  5. CONFIG += c++11
  6. # The following define makes your compiler emit warnings if you use
  7. # any Qt feature that has been marked deprecated (the exact warnings
  8. # depend on your compiler). Please consult the documentation of the
  9. # deprecated API in order to know how to port your code away from it.
  10. DEFINES += QT_DEPRECATED_WARNINGS
  11. # You can also make your code fail to compile if it uses deprecated APIs.
  12. # In order to do so, uncomment the following line.
  13. # You can also select to disable deprecated APIs only up to a certain version of Qt.
  14. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
  15. SOURCES += \
  16. main.cpp \
  17. mainwindow.cpp
  18. HEADERS += \
  19. mainwindow.h
  20. FORMS += \
  21. mainwindow.ui
  22. # Default rules for deployment.
  23. qnx: target.path = /tmp/$${TARGET}/bin
  24. else: unix:!android: target.path = /opt/$${TARGET}/bin
  25. !isEmpty(target.path): INSTALLS += target

头文件源码:

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. // 引入串口通信的两个头文件(第一步)
  5. #include <QtSerialPort/QSerialPort> // 提供访问串口的功能
  6. #include <QtSerialPort/QSerialPortInfo> // 提供系统中存在的串口信息
  7. QT_BEGIN_NAMESPACE
  8. namespace Ui { class MainWindow; }
  9. QT_END_NAMESPACE
  10. class MainWindow : public QMainWindow
  11. {
  12. Q_OBJECT
  13. public:
  14. MainWindow(QWidget *parent = nullptr);
  15. ~MainWindow();
  16. // 串口功能
  17. void SerialPortInit(); // 串口初始化(参数配置)
  18. void RefreshSerialPort(int index); // 刷新串口
  19. public slots:
  20. // 串口槽函数
  21. void DataReceived(); // 接收数据
  22. private slots:
  23. // 串口槽函数
  24. void DataSend(); // 发送数据
  25. void on_OpenSerialButton_clicked(); // 串口开关
  26. void on_SendButton_clicked(); // 控件中添加 #
  27. void on_ClearButton_clicked(); // 清空控件中的所有 #
  28. void on_ClearShowButton_clicked(); // 清空接收到的数据
  29. void LED(bool changeColor); // 开关显示灯
  30. // 点击发送,接收数据
  31. void on_SendEditBtn1_clicked();
  32. void on_SendEditBtn2_clicked();
  33. void on_SendEditBtn3_clicked();
  34. void on_SendWordOrder_clicked();
  35. private:
  36. Ui::MainWindow *ui;
  37. // 串口变量
  38. QSerialPort *serial; // 定义全局的串口对象(第三步)
  39. // 参数配置
  40. QStringList baudList; //波特率
  41. QStringList parityList; //校验位
  42. QStringList dataBitsList; //数据位
  43. QStringList stopBitsList; //停止位
  44. QStringList flowControlList; //控制流
  45. };
  46. #endif // MAINWINDOW_H

.cpp文件源码:

  1. #include "color:rgb(98 189 255)">mainwindow.h"
  2. #include "ui_color:rgb(98 189 255)">mainwindow.h"
  3. #include <QDebug>
  4. #include <QMessageBox>
  5. color:rgb(98 189 255)">MainWindow::color:rgb(98 189 255)">MainWindow(QWidget *parent)
  6. : Qcolor:rgb(98 189 255)">MainWindow(parent)
  7. , ui(new color:rgb(144 255 173)">Ui::color:rgb(98 189 255)">MainWindow)
  8. {
  9. ui->setupcolor:rgb(144 255 173)">Ui(this);
  10. SerialPortInit();
  11. }
  12. // 串口初始化(参数配置)
  13. void color:rgb(98 189 255)">MainWindow::SerialPortInit()
  14. {
  15. serial = new color:rgb(98 189 255)">QSerialPort; //申请内存,并设置父对象
  16. // 获取计算机中有效的端口号,然后将端口号的名称给端口选择控件
  17. foreach(const color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo &color:rgb(73 238 255)">info,color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo::availablePorts())
  18. {
  19. serial->setPort(color:rgb(73 238 255)">info); // 在对象中设置串口
  20. if(serial->open(color:rgb(98 189 255)">QIODevice::ReadWrite)) // 以读写方式打开串口
  21. {
  22. ui->PortBox->addItem(color:rgb(73 238 255)">info.portName()); // 添加计算机中的端口
  23. serial->close(); // 关闭
  24. } else
  25. {
  26. qDebug() << "串口打开失败,请重试";
  27. }
  28. }
  29. // 参数配置
  30. // 波特率,波特率默认选择color:rgb(255 95 0)">57600 ,禁止用户点击
  31. ui->BaudBox->addItem("color:rgb(255 95 0)">57600");
  32. serial->setBaudRate(color:rgb(98 189 255)">QSerialPort::Baudcolor:rgb(255 95 0)">57600);
  33. ui->BaudBox->setDisabled(true);
  34. // 校验,校验默认选择无
  35. ui->ParityBox->addItem("无");
  36. serial->setParity(color:rgb(98 189 255)">QSerialPort::NoParity);
  37. // 数据位,数据位默认选择8位
  38. ui->BitBox->addItem("8");
  39. serial->setDataBits(color:rgb(98 189 255)">QSerialPort::Data8);
  40. // 停止位,停止位默认选择1
  41. ui->StopBox->addItem("1");
  42. serial->setStopBits(color:rgb(98 189 255)">QSerialPort::OneStop);
  43. // 控制流,默认选择无
  44. ui->ControlBox->addItem("");
  45. serial->setFlowControl(color:rgb(98 189 255)">QSerialPort::NoFlowControl);
  46. // 刷新串口
  47. RefreshSerialPort(0);
  48. // 信号
  49. connect(serial,&color:rgb(98 189 255)">QSerialPort::readyRead,this,&color:rgb(98 189 255)">MainWindow::DataReceived); // 接收数据
  50. connect(ui->SendWordOrder,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend); // 发送数据
  51. connect(ui->SendButton,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend); // 发送数据
  52. connect(ui->SendEditBtn1,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend); // 发送数据
  53. connect(ui->SendEditBtn2,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend); // 发送数据
  54. connect(ui->SendEditBtn3,&color:rgb(98 189 255)">QPushButton::clicked,this,&color:rgb(98 189 255)">MainWindow::DataSend); // 发送数据
  55. }
  56. // 刷新串口
  57. void color:rgb(98 189 255)">MainWindow::RefreshSerialPort(int index)
  58. {
  59. QStringList color:rgb(98 189 255)">portNameList; // 存储所有串口名
  60. if(index != 0)
  61. {
  62. serial->setPortName(ui->PortBox->currentText()); //设置串口号
  63. }
  64. else
  65. {
  66. ui->PortBox->clear(); //关闭串口号
  67. ui->PortBox->addItem("刷新"); //添加刷新
  68. foreach(const color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo &color:rgb(73 238 255)">info,color:rgb(98 189 255)">color:rgb(98 189 255)">QSerialPortInfo::availablePorts()) //添加新串口
  69. {
  70. color:rgb(98 189 255)">portNameList.append(color:rgb(73 238 255)">info.portName());
  71. }
  72. ui->PortBox->addItems(color:rgb(98 189 255)">portNameList);
  73. ui->PortBox->setCurrentIndex(1); // 当前串口号为COM1
  74. serial->setPortName(ui->PortBox->currentText()); //设置串口号
  75. }
  76. }
  77. // 接收数据,使用read () / readLine () / readAll ()
  78. void color:rgb(98 189 255)">MainWindow::DataReceived()
  79. {
  80. char BUF[512] = {0}; // 存储转换类型后的数据
  81. QByteArray color:rgb(73 238 255)">data = serial->readAll(); // 读取数据
  82. if(!color:rgb(73 238 255)">data.isEmpty()) // 接收到数据
  83. {
  84. QString color:rgb(255 111 119)">str = ui->DataReceived->toPlainText(); // 返回纯文本
  85. color:rgb(255 111 119)">str += tr(color:rgb(73 238 255)">data); // 数据是一行一行传送的,要保存所有数据
  86. ui->DataReceived->clear(); // 清空之前的数据
  87. ui->DataReceived->append(color:rgb(255 111 119)">str); // 将数据放入控件中
  88. qDebug() << "color:rgb(255 111 119)">str color:rgb(73 238 255)">info: " << ui->DataReceived->toPlainText();
  89. // 清除之前的数据,防止追加,因为每次获取的数据不一样
  90. int index = color:rgb(255 111 119)">str.indexOf("\r\n"); // 找到,返回索引值,找不到,返回-1
  91. if(index != -1)
  92. {
  93. snprintf(BUF,500,"%s", color:rgb(255 111 119)">str.left(index + 2).toUtf8().color:rgb(73 238 255)">data()); // QString转为char * 类型
  94. qDebug() << "BUF color:rgb(73 238 255)">info: " << BUF;
  95. color:rgb(255 111 119)">str.remove(0,index + 2);
  96. // 处理获取到的数据,将其放入对应的控件中
  97. // ....
  98. }
  99. }
  100. }
  101. // 发送数据,write ()
  102. void color:rgb(98 189 255)">MainWindow::DataSend()
  103. {
  104. serial->write(ui->DataSend->toPlainText().toLatin1()); // 串口发送数据
  105. }
  106. // 开关显示灯
  107. void color:rgb(98 189 255)">MainWindow::LED(bool changeColor)
  108. {
  109. if(changeColor == false)
  110. {
  111. // 显示绿色
  112. ui->LED->setStyleSheet("color:rgb(98 189 255)">background-color: qradialgradient(color:rgb(255 211 0)">spread:pad, color:rgb(144 255 173)">cx:0.5, color:rgb(144 255 173)">cy:0.5, color:rgb(255 211 0)">radius:0.5, color:rgb(144 255 173)">fx:0.5, color:rgb(144 255 173)">fy:0.5, color:rgb(73 238 255)">stop:0 rgba(0, 229, 0, 255), color:rgb(73 238 255)">stop:1 rgba(255, 255, 255, 255));border-color:rgb(255 211 0)">radius:12px;");
  113. }
  114. else
  115. {
  116. // 显示红色
  117. ui->LED->setStyleSheet("color:rgb(98 189 255)">background-color: qradialgradient(color:rgb(255 211 0)">spread:pad, color:rgb(144 255 173)">cx:0.5, color:rgb(144 255 173)">cy:0.5, color:rgb(255 211 0)">radius:0.5, color:rgb(144 255 173)">fx:0.5, color:rgb(144 255 173)">fy:0.5, color:rgb(73 238 255)">stop:0 rgba(255, 0, 0, 255), color:rgb(73 238 255)">stop:1 rgba(255, 255, 255, 255));border-color:rgb(255 211 0)">radius:12px;");
  118. }
  119. }
  120. color:rgb(98 189 255)">MainWindow::~color:rgb(98 189 255)">MainWindow()
  121. {
  122. delete ui;
  123. }
  124. // 串口开关
  125. void color:rgb(98 189 255)">MainWindow::on_OpenSerialButton_clicked()
  126. {
  127. if(serial->isOpen()) // 如果串口打开了,先给他关闭
  128. {
  129. serial->clear();
  130. serial->close();
  131. // 关闭状态,按钮显示“打开串口”
  132. ui->OpenSerialButton->setText("打开串口");
  133. // 关闭状态,允许用户操作
  134. ui->BaudBox->setDisabled(false);
  135. ui->ParityBox->setDisabled(false);
  136. ui->BitBox->setDisabled(false);
  137. ui->StopBox->setDisabled(false);
  138. ui->ControlBox->setDisabled(false);
  139. // 禁止操作“发送字符操作”
  140. ui->SendWordOrder->setDisabled(true);
  141. ui->SendButton->setDisabled(true);
  142. // 关闭状态,颜色为绿色
  143. ui->OpenSerialButton->setStyleSheet("color: green;");
  144. // 关闭,显示灯为红色
  145. LED(true);
  146. // 清空数据
  147. ui->DataReceived->clear();
  148. ui->DataSend->clear();
  149. }
  150. else // 如果串口关闭了,先给他打开
  151. {
  152. //当前选择的串口名字
  153. serial->setPortName(ui->PortBox->currentText());
  154. //用ReadWrite 的模式尝试打开串口,无法收发数据时,发出警告
  155. if(!serial->open(color:rgb(98 189 255)">QIODevice::ReadWrite))
  156. {
  157. QMessageBox::warning(this,tr("提示"),tr("串口打开失败!"),QMessageBox::Ok);
  158. return;
  159. }
  160. // 打开状态,按钮显示“关闭串口”
  161. ui->OpenSerialButton->setText("关闭串口");
  162. // 打开状态,禁止用户操作
  163. ui->BaudBox->setDisabled(true);
  164. ui->ParityBox->setDisabled(true);
  165. ui->BitBox->setDisabled(true);
  166. ui->StopBox->setDisabled(true);
  167. ui->ControlBox->setDisabled(true);
  168. // 允许操作“发送字符操作”
  169. ui->SendWordOrder->setDisabled(false);
  170. ui->SendButton->setDisabled(false);
  171. // 打开状态,颜色为红色
  172. ui->OpenSerialButton->setStyleSheet("color: red;");
  173. // 打开,显示灯为绿色
  174. LED(false);
  175. }
  176. }
  177. // 控件中添加 #
  178. void color:rgb(98 189 255)">MainWindow::on_SendButton_clicked()
  179. {
  180. on_ClearButton_clicked();
  181. ui->DataSend->append("###");
  182. }
  183. // 清空控件
  184. void color:rgb(98 189 255)">MainWindow::on_ClearButton_clicked()
  185. {
  186. ui->DataSend->setText("");
  187. }
  188. // 清空接收到的数据
  189. void color:rgb(98 189 255)">MainWindow::on_ClearShowButton_clicked()
  190. {
  191. ui->DataReceived->setText("");
  192. }
  193. // 点击发送后,获取串口信息并展示在接受控件中
  194. void color:rgb(98 189 255)">MainWindow::on_SendEditBtn1_clicked()
  195. {
  196. on_ClearButton_clicked();
  197. QString EditText = ui->Edit1->text(); //获取发送框内容
  198. ui->DataSend->setText(EditText); //将文本内容放在发送栏中
  199. }
  200. void color:rgb(98 189 255)">MainWindow::on_SendEditBtn2_clicked()
  201. {
  202. on_ClearButton_clicked();
  203. QString EditText = ui->Edit2->text(); //获取发送框内容
  204. // qDebug() << "Edit1 text: " << EditText;
  205. ui->DataSend->append(EditText); //将文本内容放在发送栏中
  206. }
  207. void color:rgb(98 189 255)">MainWindow::on_SendEditBtn3_clicked()
  208. {
  209. on_ClearButton_clicked();
  210. QString EditText = ui->Edit3->text(); //获取发送框内容
  211. // qDebug() << "Edit1 text: " << EditText;
  212. ui->DataSend->append(EditText); //将文本内容放在发送栏中
  213. }
  214. void color:rgb(98 189 255)">MainWindow::on_SendWordOrder_clicked()
  215. {
  216. on_SendButton_clicked();
  217. }

运行后效果:

 本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/132977?site
推荐阅读
相关标签
  

闽ICP备14008679号