• #QT(串口助手-实现)


    1.IDE:QTCreator


    2.实验


    3.记录

    (1)在widget.h中加入必要文件,并且定义一个类指针

     

     (2)如果有类的成员不知道怎么写,可以通过以下途径搜索

    (2)设置串口数据

    1. void Widget::on_open_pb_clicked() //当打开串口按下时
    2. {
    3. QSerialPort::BaudRate buadrate; // ::为作用域,定义波特率
    4. QSerialPort::DataBits databits; //定义数据位
    5. QSerialPort::StopBits stopbits; //定义停止位
    6. QSerialPort::Parity checkbits; //定义校验位
    7. /******************波特率赋值******************************/
    8. if(ui->baudrate_cb->currentText()=="115200")
    9. buadrate=QSerialPort::Baud115200;
    10. else if(ui->baudrate_cb->currentText()=="9600")
    11. buadrate=QSerialPort::Baud9600;
    12. else if(ui->baudrate_cb->currentText()=="4800")
    13. buadrate=QSerialPort::Baud4800;
    14. /******************数据位赋值*******************************/
    15. if(ui->data_cb->currentText()=="8")
    16. databits=QSerialPort::Data8;
    17. else if(ui->data_cb->currentText()=="7")
    18. databits=QSerialPort::Data7;
    19. else if(ui->data_cb->currentText()=="6")
    20. databits=QSerialPort::Data6;
    21. else if(ui->data_cb->currentText()=="5")
    22. databits=QSerialPort::Data5;
    23. /*******************停止位赋值******************************/
    24. if(ui->stop_cb->currentText()=="1")
    25. stopbits=QSerialPort::OneStop;
    26. else if(ui->stop_cb->currentText()=="1.5")
    27. stopbits=QSerialPort::OneAndHalfStop;
    28. else if(ui->stop_cb->currentText()=="2")
    29. stopbits=QSerialPort::TwoStop;
    30. /******************校验位赋值******************************/
    31. checkbits=QSerialPort::NoParity; //因为强制选择无校验位
    32. /******************设置串口*******************************/
    33. serialport->setPortName(ui->com_cb->currentText()); //设置串口名
    34. serialport->setBaudRate(buadrate); //设置波特率
    35. serialport->setDataBits(databits); //设置数据位
    36. serialport->setStopBits(stopbits); //设置停止位
    37. serialport->setParity(checkbits); //设置校验位
    38. if(serialport->open(QIODevice::ReadWrite)==true) //串口打开成功
    39. QMessageBox::information(this,"提示","串口打开成功");
    40. else
    41. QMessageBox::critical(this,"警告","串口打开失败");
    42. }

    (3)将串口打开与串口关闭通过槽函数关联按钮(QMessageBox用于提示)

    1. void Widget::on_close_pb_clicked() //当关闭窗口按钮按下时
    2. {
    3. serialport->close();
    4. QMessageBox::information(this,"提示","串口已经关闭");
    5. }

     (4)关联准备读函数(函数部分widget前应该有void)

    1. /*************************准备读函数*************************/
    2. void Widget::SerialPort_ReadyRead_Slot()
    3. {
    4. QString receive_buff; //定义一个数组,存放接收到的内容
    5. receive_buff=QString(serialport->readAll());
    6. ui->receive_line->appendPlainText(receive_buff); //将接收到的内容在接收区显示出来
    7. }

    (5)发送函数关联

    1. void Widget::on_send_pb_clicked()
    2. {
    3. serialport->write(ui->send_line->text().toLocal8Bit().data()); //将发送区内容转换为8bit发送出去
    4. }

     (6)清空函数关联

    1. void Widget::on_clear_pb_clicked() //当清空按钮按下时
    2. {
    3. ui->receive_line->clear();
    4. }

    (7)运行效果 


    4.代码

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include "QSerialPort" //加入文件
    5. QT_BEGIN_NAMESPACE
    6. namespace Ui {
    7. class Widget;
    8. }
    9. QT_END_NAMESPACE
    10. class Widget : public QWidget
    11. {
    12. Q_OBJECT
    13. public:
    14. Widget(QWidget *parent = nullptr);
    15. ~Widget();
    16. QSerialPort *serialport; //定义一个QserialPort类的指针
    17. private slots:
    18. void on_open_pb_clicked();
    19. void on_close_pb_clicked();
    20. void SerialPort_ReadyRead_Slot(); //准备读信号函数声明
    21. void on_send_pb_clicked();
    22. void on_clear_pb_clicked();
    23. private:
    24. Ui::Widget *ui;
    25. };
    26. #endif // WIDGET_H

    widget.cpp

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include "QSerialPortInfo" //引入必要的serial文件
    4. #include "QMessageBox" //消息提示
    5. Widget::Widget(QWidget *parent)
    6. : QWidget(parent)
    7. , ui(new Ui::Widget)
    8. {
    9. ui->setupUi(this);
    10. QStringList serialNamePort; //定义一个数组
    11. serialport = new QSerialPort(this); //串口指针赋值给serialport
    12. connect(serialport,SIGNAL(readyRead()),this,SLOT(SerialPort_ReadyRead_Slot())); //关联准备读信号
    13. foreach (const QSerialPortInfo &info ,QSerialPortInfo::availablePorts()) { //自动搜索当前串口
    14. serialNamePort<portName(); //将返回值加载入数组
    15. }
    16. ui->com_cb->addItems(serialNamePort); //将搜索的串口加入UI界面
    17. }
    18. Widget::~Widget()
    19. {
    20. delete ui;
    21. }
    22. /*************************准备读函数*************************/
    23. void Widget::SerialPort_ReadyRead_Slot()
    24. {
    25. QString receive_buff; //定义一个数组,存放接收到的内容
    26. receive_buff=QString(serialport->readAll()); //将接收到的数据转换为QString类型
    27. ui->receive_line->appendPlainText(receive_buff); //将接收到的内容在接收区显示出来
    28. }
    29. void Widget::on_open_pb_clicked() //当打开串口按下时
    30. {
    31. QSerialPort::BaudRate buadrate; // ::为作用域,定义波特率
    32. QSerialPort::DataBits databits; //定义数据位
    33. QSerialPort::StopBits stopbits; //定义停止位
    34. QSerialPort::Parity checkbits; //定义校验位
    35. /******************波特率赋值******************************/
    36. if(ui->baudrate_cb->currentText()=="115200")
    37. buadrate=QSerialPort::Baud115200;
    38. else if(ui->baudrate_cb->currentText()=="9600")
    39. buadrate=QSerialPort::Baud9600;
    40. else if(ui->baudrate_cb->currentText()=="4800")
    41. buadrate=QSerialPort::Baud4800;
    42. /******************数据位赋值*******************************/
    43. if(ui->data_cb->currentText()=="8")
    44. databits=QSerialPort::Data8;
    45. else if(ui->data_cb->currentText()=="7")
    46. databits=QSerialPort::Data7;
    47. else if(ui->data_cb->currentText()=="6")
    48. databits=QSerialPort::Data6;
    49. else if(ui->data_cb->currentText()=="5")
    50. databits=QSerialPort::Data5;
    51. /*******************停止位赋值******************************/
    52. if(ui->stop_cb->currentText()=="1")
    53. stopbits=QSerialPort::OneStop;
    54. else if(ui->stop_cb->currentText()=="1.5")
    55. stopbits=QSerialPort::OneAndHalfStop;
    56. else if(ui->stop_cb->currentText()=="2")
    57. stopbits=QSerialPort::TwoStop;
    58. /******************校验位赋值******************************/
    59. checkbits=QSerialPort::NoParity; //因为强制选择无校验位
    60. /******************设置串口*******************************/
    61. serialport->setPortName(ui->com_cb->currentText()); //设置串口名
    62. serialport->setBaudRate(buadrate); //设置波特率
    63. serialport->setDataBits(databits); //设置数据位
    64. serialport->setStopBits(stopbits); //设置停止位
    65. serialport->setParity(checkbits); //设置校验位
    66. if(serialport->open(QIODevice::ReadWrite)==true) //串口打开成功
    67. QMessageBox::information(this,"提示","串口打开成功");
    68. else
    69. QMessageBox::critical(this,"警告","串口打开失败");
    70. }
    71. void Widget::on_close_pb_clicked() //当关闭窗口按钮按下时
    72. {
    73. serialport->close();
    74. QMessageBox::information(this,"提示","串口已经关闭");
    75. }
    76. void Widget::on_send_pb_clicked() //当发送按钮按下时
    77. {
    78. serialport->write(ui->send_line->text().toLocal8Bit().data()); //将发送区内容转换为8bit发送出去
    79. }
    80. void Widget::on_clear_pb_clicked() //当清空按钮按下时
    81. {
    82. ui->receive_line->clear();
    83. }

     pro文件(只加入了serialport,以及自动加入的图标文件)

    1. QT += core gui serialport
    2. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    3. CONFIG += c++17
    4. # You can make your code fail to compile if it uses deprecated APIs.
    5. # In order to do so, uncomment the following line.
    6. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
    7. SOURCES += \
    8. main.cpp \
    9. widget.cpp
    10. HEADERS += \
    11. widget.h
    12. FORMS += \
    13. widget.ui
    14. # Default rules for deployment.
    15. qnx: target.path = /tmp/$${TARGET}/bin
    16. else: unix:!android: target.path = /opt/$${TARGET}/bin
    17. !isEmpty(target.path): INSTALLS += target
    18. RESOURCES += \
    19. tubiao.qrc

     

  • 相关阅读:
    定制SD-WAN以满足您的需求
    vue3后台管理框架之技术栈
    UE4游戏传奇4的SDK的部分数据之-移动状态
    linux配置jdk
    最后一块石头的重量 II
    四化智造MES(WEB)与金蝶云星空对接集成原材料/标准件采购查询(待采购)连通采购订单新增(其他采购订单行关闭-TEST)
    基于JAVA西宁市农副产品物流信息系统计算机毕业设计源码+数据库+lw文档+系统+部署
    西北工业大学827信号与系统考研分数线,西工大827,招生人数,报考统计,考情分析,就业,真题,大纲,参考书
    vue+elementUi——实现层叠轮播图——技能提升
    解决passwd:Authentication token manipulation error
  • 原文地址:https://blog.csdn.net/byhyf83862547/article/details/136461221