QT綜合示例 QT串列埠通訊

2021-09-27 13:51:15 字數 3872 閱讀 8305

如果用qt寫程式作為上位機,然後通過和usb和下位機通訊的時候,就需要用到qt中的串列埠通訊了。

1).pro 新增:

qt       +

=serialport

2)主函式 main.cpp 新增:

#include

"mywidget.h"

#include

intmain

(int argc,

char

*ar**)

3)mywidget.h 新增:

#ifdef win32

#pragma execution_character_set("utf-8")

#endif

#ifndef mywidget_h

#define mywidget_h

#include

#include

#include

#include

#include

namespace ui

class

mywidget

:public qwidget

;#endif

// mywidget_h

4)mywidget.cpp 新增:

#include

"mywidget.h"

#include

"ui_mywidget.h"

mywidget::

mywidget

(qwidget *parent)

:qwidget

(parent),ui

(new ui::mywidget)

mywidget::

~mywidget()

// 1、獲得有效串列埠

qstringlist mywidget::

getportnamelist()

return m_serialportname;

}// 2、連線、斷開

void mywidget::

on_m_openportbutton_clicked()

else

// 串列埠設定:

m_serialport-

>

setflowcontrol

(qserialport::noflowcontrol)

;//無流控制

// 1、波特率和讀寫方向

switch

(ui-

>cbox_baudrate-

>

currentindex()

)// 2、資料位

switch

(ui-

>cbox_databits-

>

currentindex()

)// 3、停止位

switch

(ui-

>cbox_stopbits-

>

currentindex()

)// 4、校驗位

switch

(ui-

>cbox_parity-

>

currentindex()

)connect

(m_serialport,

signal

(readyread()

),this

,slot

(receiveinfo()

));}

ui->m_openportbutton-

>

settext

(m_serialport-

>

isopen()

?tr("關閉串列埠"):

tr("連線串列埠"))

; ui-

>m_openportbutton-

>

setstylesheet

(m_serialport-

>

isopen()

?"color: red;"

:"color: black;");

}// 3、資訊接收

void mywidget::

receiveinfo()

info.

clear()

;// qbytearray hexdata = info.tohex();

// //這裡面的協議 你們自己定義就行 微控制器發什麼 代表什麼 我們這裡簡單模擬一下

// if(hexdata == "0x10000")

//

// else if(hexdata == "0x100001")

//

}// 4、傳送按鈕

void mywidget::

on_btn_send_clicked()

//寫兩個函式 向微控制器傳送資料:

// 資訊傳送函式一:

void mywidget::

sendinfo

(char

* info,

int len)

m_serialport-

>

write

(info,len)

;//這句是真正的給微控制器發資料 用到的是qiodevice::write 具體可以看文件

}// 資訊傳送函式二:

void mywidget::

sendinfo

(qstring &info)

qdebug()

<<

"write to serial: "

<

convertstringtohex

(info, sendbuf)

;//把qstring 轉換 為 hex

m_serialport-

>

write

(sendbuf)

;//這句是真正的給微控制器發資料 用到的是qiodevice::write 具體可以看文件

}// 基本和微控制器互動資料都是16進製制的

// qstring 轉為16進製制的函式

void mywidget::

convertstringtohex

(const qstring &str, qbytearray &bytedata)

i++;if

(i >= len)

break

; lstr = str[i]

.tolatin1()

; hexdata =

convertchartohex

(hstr)

; lowhexdata =

convertchartohex

(lstr);if

((hexdata ==16)

||(lowhexdata ==16)

)break

;else

hexdata = hexdata*

16+lowhexdata;

i++; bytedata[hexdatalen]=(

char

)hexdata;

hexdatalen++;}

bytedata.

resize

(hexdatalen);}

//另乙個 函式 char 轉為 16進製制

char mywidget::

convertchartohex

(char ch)

Qt串列埠通訊

1.在早期的qt版本中,主要是採用第三方類作為qt對串列埠通訊的支援,具體可參考 2.在進入qt5的時代後,串列埠通訊已經作為qt的乙個附件部分,但沒有作為qt的正式模組。使用這樣的串列埠模組時,需要自行編譯串列埠部分,具體可參考 鑑於以上兩種做法都比較複雜,本人一直沒有除錯串列埠通訊部分,直到最近...

Qt 串列埠通訊

開發環境 qt5.5.1 qt creator 3.5.1 1 建立專案 qtserialdemo 2 新增元件 修改 專案名.pro qtserialdemo.pro 新增 qt serialport 3 新增如下使用 qt串列埠 所需的標頭檔案 include include 4 主要串列埠通訊...

Qt 串列埠通訊

1.概述 因為專案需要,對qt的串列埠通訊進行了一些學習,這個專案的乙個需求是將乙個測溫儀器的資料讀取到電腦進行處理,根據這個儀器的通訊協議,每次讀取前都需要對它寫入命令。這裡用到了qt進行了讀寫操作,其中遇到了關於十六進製制write問題並得以解決。使用到的qt庫 qtserialport 2.詳...