• itop4412开发板Qt串口编程-实现串口功能


    1.编辑工程文件(后缀为 .pro 的文件)在 QT += core gui 后添加 serialport。

    2.自动获取串口

    使用 QSerialPortInfo:::availablePorts()获取当前串口,该函数返回容器类 Qlist<QSerialPortInfo>,用 Qt 定
    义的关键字 foreach 遍历容器 Qlist 里的串口信息,并将串口信息放到 QStringList 的类对象 serialNamePort,
    显示到 ui 的串口组件。
    {
    {
    ui->setupUi(this);
    QStringList serialNamePort;
    //遍历:availablePorts()返回的串口信息
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
    serialNamePort << info.portName();
    }
    ui->serialCb->addItems(serialNamePort);
    }
    编译后点击串口选择框,会出现已经连接的串口。


    3.打开串口功能和属性设置
    步骤一:实例化串口类 QSerialPort 对象 serialPort,对串口的操作就是对 serialPort 对象的操作,调用
    QSerialPort 封装的成员变量(属性)和成员函数(功能)就能控制串口。
    class Example : public QMainWindow
    {
    public:
    .......... QSerialPort * serialPort;
    .......... };
    ui(new Ui::Example)
    {
    ui->setupUi(this);
    ......

    serialPort = new QSerialPort;
    ...... }
    步骤二:填充波特率,数据位,停止位,校验位等属性。获取 ui 组件传递过来的串口信息,将串口属
    性填充到 serialPort 对象。


    步骤三:打开串口,判断是否打开成功。
    /*打开按钮*/
    void Example::on_openCb_clicked()
    {
    QSerialPort::BaudRate bauRate; //波特率
    QSerialPort::DataBits dataBits; //数据位
    QSerialPort::StopBits stopBits; //停止位
    QSerialPort::Parity checkBits; //校验位
    //设置波特率
    if (ui->baudCb->currentText() == "4800" ) { bauRate = QSerialPort::Baud4800; }
    else if(ui->baudCb->currentText() == "9600" ) { bauRate = QSerialPort::Baud9600; }
    else if(ui->baudCb->currentText() == "115200") { bauRate = 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->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; }
    //设置校验位
    if(ui->checkCb->currentText() == "none" ) { checkBits = QSerialPort::NoParity; }
    //填充串口对象的属性值
    serialPort->setPortName(ui->serialCb->currentText());
    serialPort->setBaudRate(bauRate);
    serialPort->setDataBits(dataBits);
    serialPort->setStopBits(stopBits);
    serialPort->setParity(checkBits);
    //设置好属性后打开串口
    if(serialPort->open(QIODevice::ReadWrite) == true){
    QMessageBox::information(this,"提示","成功");
    }else{
    QMessageBox::critical(this,"提示","失败");
    }
    }
    4.收发串口数据功能
    读数据:每当数据流从串口到达系统一次,就会传到 Qt 应用程序一次,readyRead 信号就会触 发 一
    次,所以可以用前面章节讲的信号和槽机制将 readyRead 信号和槽函数绑定,然后就可以在槽函数中读取
    串口数据。槽函数中使用 readAll()读取数据,使用带换行功能的 appendPlainText()显示到 ui 的接收窗口。
    //类中声明槽函数
    private slots:
    void serialPortReadyRead_Solt(void);
    //readyRead 信号和槽函数绑定
    connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortReadyRead_Solt()));
    //读串口

    void Example::serialPortReadyRead_Solt(void)
    {
    QString buf;
    buf = QString(serilaPort->readAll());
    ui->recvEdit->appendPlainText(buf);
    }
    写数据:获取 ui 界面填写的信息,ui->sendEdit->text(),使用 QSerialPort 的成员函数 write 将数据写到
    串口。
    void Widget::on_sendBt_clicked()
    {
    serilaPort->write(ui->sendEdit->text().toLocal8Bit().data());
    }
    5.关闭串口功能
    使用 QSerialPort 的成员函数 close()关闭串口。
    void Widget::on_closeBt_clicked()
    {
    serilaPort->close();
    }
    6.清空发送栏数据
    调用 ui 组件 lineEdit 的成员函数 clear 即可清空数据。
    void Widget::on_clearBt_clicked()
    {
    ui->recvEdit->clear();
    }
    编译测试,结果如图:



    <

  • 相关阅读:
    Ubuntu更新Hostname和hosts
    Github 的其他用法
    Git与Github使用
    【实习】实习期间一些工具的使用
    【实习】实习第一周周报
    QT_string转char*
    QT_获取正在运行程序的进程id(判断程序是否正在运行)
    QT_获取运行进程所在目录路径_2
    QT_获取运行进程所在目录路径_1
    QT_强杀进程
  • 原文地址:https://www.cnblogs.com/liyue3/p/14661456.html
Copyright © 2020-2023  润新知