QT5串口通信

                                              Qt串口通信

1.新建工程,基類選擇Qwidget

New Project-----Application-----Qt Widget Application-----choose------名稱欄填寫QtComm(路徑不要有中文)--------下一步------下一步-----基類下拉框選擇Qwidget------下一步----完成。

2.在QtComm.pro中加入

QT       += serialport

3.在界面ui文件中添加控件:2個Push Button、3個Label、2個Text Edit、、1個ConboBox

如下:

 

分別爲他們命名:

發送:SendBtn

打開串口:openPortBtn

發送窗口:sendTextEdit

接收窗口:recvTextEdit

串口下拉選擇控件:portNameComboBox

雙擊串口下拉選擇控件,點擊左下角+號將串口名寫上。(大寫COM1、COM2...)

4.右鍵發送和打開串口按鈕,選擇轉到槽函數。

這時,Qt會自動在Widget.cpp中添加響應的槽函數。

打開Widget.h,Qt在這裏自動的爲.cpp中的兩個函數進行了聲明,綠色部分。

4.1在widget.h中添加頭文件,陰影部分。以及槽函數和私有的串口類的聲明,紅色部分

#include <QtSerialPort/QSerialPort>

private slots:

    void on_openPortBtn_clicked();   //利用“轉到槽”添加的槽函數聲明

    void read_Com();         //手動添加的槽函數聲明,用於讀出串口緩衝區的內容

    void on_SendBtn_clicked();       //利用“轉到槽”添加的槽函數聲明

4.2在private中聲明串口類,綠色部分

private:

    Ui::Widget *ui;

    QSerialPort serial;                                 //聲明串口類

4.3在widget.cpp中添加槽函數的定義,藍色部分直接複製粘貼

void Widget::on_ openPortBtn _clicked()
{
  if(ui->portNameComboBox->isEnabled())
  {
    ui->openPortBtn->setText("關閉串口");            //按下“打開串口”後,按鍵顯示爲“關閉串口”
    ui->portNameComboBox->setDisabled(true);  //按下“打開串口”後,禁止再修改COM口
    serial.setPortName(ui->portNameComboBox->currentText());  //設置COM口
    serial.setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//設置波特率和讀寫方式
    serial.setDataBits(QSerialPort::Data8);           //數據位爲8位
    serial.setFlowControl(QSerialPort::NoFlowControl);//無流控制
    serial.setParity(QSerialPort::NoParity);  //無校驗位
    serial.setStopBits(QSerialPort::OneStop); //一位停止位
    serial.close();                                   //先關串口,再打開,可以保證串口不被其它函數佔用。
    if(serial.open(QIODevice::ReadWrite))             //以可讀寫的方式打開串口
     {
      connect(&serial,SIGNAL(readyRead()),this,SLOT(read_Com()));  //把串口的readyRead()信號綁定到read_Com()這個槽函數上
     }
  }
   else
    {
     ui->openPortBtn->setText("打開串口");             //按下“關閉串口”後,按鍵顯示爲“打開串口”
     ui->portNameComboBox->setEnabled(true);           //按下“關閉串口”後,COM口可被修改     serial.close();                                   //關串口
    }
}
void Widget::read_Com()
{
 QByteArray temp=serial.read(1);//在緩衝區中讀一個byte
 if(!temp.isEmpty())//如果讀到的數據不爲空
 {
  QByteArray temp=serial.readAll();//讀緩衝區
  if(!temp.isEmpty())//如果讀到的數據不爲空
  {
   ui->recvTextEdit->clear();//先清空顯示窗口再顯示,可以達到實時刷新顯示的目的
   ui->recvTextEdit->insertPlainText(temp);//這裏別用append()是添加一個新行顯示
  }           
  temp.clear();
}
void Widget::on_Send_clicked()
{ 
 serial.write(ui->sendTextEdit->toPlainText().toLatin1());//以ASCII碼的形式通過串口發送出去。
}

5.運行

仔細按照步驟來,不會報錯。特別是爲控件命名的那一步要保證不出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章