首页 > 系统相关 >LINUX-QT串口操作

LINUX-QT串口操作

时间:2023-01-17 21:22:45浏览次数:49  
标签:addItem QT 串口 QSerialPort ui LINUX serial MainWindow

接收显示控件

 

 

 

添加串口模块

 

 

添加头文件

 

 

在头文件中声明一个函数

 

 

使用声明的函数

 

 

在mainwindow中进行调用InitUI

 

 

void MainWindow::InitUI()

{

    //串口名称

    for(int i=1;i<=10;i++)

    {

        ui->portName->addItem(QString("/dev/ttyS%1").arg(i));

    }

    //波特率

    ui->buadRate->addItem("1200",QSerialPort::Baud1200);

    ui->buadRate->addItem("2400",QSerialPort::Baud2400);

    ui->buadRate->addItem("4800",QSerialPort::Baud4800);

    ui->buadRate->addItem("9600",QSerialPort::Baud9600);

    ui->buadRate->addItem("19200",QSerialPort::Baud19200);

    //数据位

    ui->dataBits->addItem("8",QSerialPort::Data8);

    ui->dataBits->addItem("7",QSerialPort::Data7);

    ui->dataBits->addItem("6",QSerialPort::Data6);

    ui->dataBits->addItem("5",QSerialPort::Data5);

    //奇偶校验

    ui->parity->addItem("None",QSerialPort::NoParity);

    ui->parity->addItem("Even",QSerialPort::EvenParity);

    ui->parity->addItem("odd",QSerialPort::OddParity);

    //停止位

    ui->stopBits->addItem("1",QSerialPort::OneStop);

    ui->stopBits->addItem("1.5",QSerialPort::OneAndHalfStop);

    ui->stopBits->addItem("2",QSerialPort::TwoStop);

    //流控制

    ui->flowControl->addItem("None",QSerialPort::NoFlowControl);

    ui->flowControl->addItem("RTS/CTS",QSerialPort::HardwareControl);

    ui->flowControl->addItem("XON/XOFF",QSerialPort::SoftwareControl);

 

}

 

打开按钮代码

void MainWindow::on_openButton_clicked()

{

    QString text=ui->openButton->text();

    if(text==QStringLiteral("打开串口"))

    {

        //设置串口的各种参数

        m_serial.setPortName(ui->portName->currentText());

        m_serial.setBaudRate(ui->buadRate->currentData().toInt());

        m_serial.setParity((QSerialPort::Parity)ui->parity->currentData().toInt());

        m_serial.setDataBits((QSerialPort::DataBits)ui->dataBits->currentData().toInt());

        m_serial.setStopBits((QSerialPort::StopBits)ui->stopBits->currentData().toInt());

        m_serial.setFlowControl((QSerialPort::FlowControl)ui->flowControl->currentData().toInt());

        //打开串口

        bool ret=m_serial.open(QIODevice::ReadWrite);  //打开并设置为读和写

        if(ret)

        {

            ui->groupBox->setEnabled(false); //禁用参数更改

            ui->openButton->setText(QStringLiteral("关闭串口"));

        }

        else

        {

            ui->statusbar->showMessage(m_serial.errorString()+QString::number(m_serial.error()),5000);  //打开失败,显示错误信息

        }

        ui->openButton->setText(QStringLiteral("关闭串口"));

    }

    else

    {

        //关闭串口

        m_serial.close();

        ui->groupBox->setEnabled(true); //开启参数更改

        ui->openButton->setText(QStringLiteral("打开串口"));

 

    }

}

 

//串口发送信号槽函数

void MainWindow::bytesWriteData(qint64 bytes)

{

    ui->statusbar->showMessage(QStringLiteral("发送了%1字节!").arg(bytes),5000);

}

 

//串口接收函数

void MainWindow::serialReadData()

{

    QByteArray arr= m_serial.readAll();

    QString strtext=QString(arr);//字节数组转为字符串

    //加上时间

    QDateTime current_date_time=QDateTime::currentDateTime();

    QString t=current_date_time.toString("yyyy-MM-dd hh:mm:ss.zzz:");

    //追加到末尾

    ui->recvTextEdit->appendPlainText(t+strtext+"\n");

}

 

//发送数据

void MainWindow::on_sendButton_clicked()

{

    QString strSend=ui->sendTextEdit->toPlainText();

    QByteArray arr=strSend.toUtf8();

    //发送数据

    m_serial.write(arr);

}

 

 //连接有数据到来信号与槽

    connect(&m_serial,&QSerialPort::readyRead,this,&MainWindow::serialReadData);

 //连接数据发送后的信号槽

connect(&m_serial,&QSerialPort::bytesWritten,this,&MainWindow::bytesWriteData);

定时器的使用

 

 

 

 

 

 

 

标签:addItem,QT,串口,QSerialPort,ui,LINUX,serial,MainWindow
From: https://www.cnblogs.com/yzdz2/p/17058709.html

相关文章

  • linux 04
    目录今日内容详细文件相关信息文件索引信息链接信息系统时间机器克隆定时任务paramiko模块公钥私钥paramiko其他操作代码封装今日内容详细文件相关信息#查看普通⽂件⼤......
  • 国产linux系统使用 PageOffice 在线打开 word 文件
    一、客户端环境1、操作系统银河麒麟,中标麒麟,统信UOS2、芯片芯片(CPU):x86(Intel、兆芯),ARM(飞腾、鲲鹏),龙芯3、浏览器360安全浏览器奇安信uos自带浏览器4、wps版本wp......
  • linux 01
    目录今日内容详细linux常见岗位计算机的种类服务器品牌服务器内部组成服务器磁盘阵列linux发展史虚拟化技术虚拟化软件下载重要名词解释远程链接工具今日内容详细linux常......
  • linux 02
    目录今日内容详细前期必备知识系统运⾏命令快捷方式命令⽬录结构相关命令文件与文件夹相关的命令文件编辑命令(重要)编辑相关快捷方式vim简介目录结构目录结构说明重要目录......
  • linux 03
    目录今日内容详细⽹络不通排查流程etc⽬录下重要的数据⽂件usr⽬录下重要的数据⽂件var⽬录下重要的数据⽂件proc⽬录重要的数据⽂件系统优化相关环境变量下载软件优化操作......
  • Linux固件开发 | 几分钟看透GPT分区
    分区分区,顾名思义就是划分区域,例如我们造房子的时候,首先在设计图纸上划分哪里是厨房、哪里是客厅、哪里是卧室等等,划分好区域好,这个区域如何装修、存放什么物品完全由你或者......
  • [RK356x] [Firefly-Linux] 10min带你获取、了解与编译U-Boot源代码
    ......
  • [RK356x] [Firefly-Linux] 10min带你获取、了解与编译Kernel源代码
    ......
  • [ROC-RK3568-PC] 手把手教你编译Linux_SDK并打包Ubuntu系统固件
    ......
  • [RK356x] [Firefly-Linux] 10min教你让Kernel支持Docker容器
    Firefly发布的普通固件一般不满足Docker的运行要求,因此我们需要对Kernel中某些选项进行配置,重新编译烧录内核以支持Docker。话不多说,请看接下来的操作!文章目录​​1、......