1. 程式人生 > >QT串列埠程式設計的相關類(QSerialPortInfo)

QT串列埠程式設計的相關類(QSerialPortInfo)

QT Serial Port相關的類只有兩個QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>)

先來介紹QSerialPortInfo

1:QSerialPortInfo(#include<QSerialPortInfo>) 

該類是一個串列埠的輔助類類,提供主要是提供系統已經存在串列埠的資訊。

該類中的靜態函式(QList<QSerialPortInfo>availablePorts()後面詳細介紹)生成了一個QSerialPortInfo物件的QList。

在該QList中的每個QSerialPortInfo物件分別對應於各個可用埠的資訊(主要包括埠號(com),系統的位置,以及串列埠型別,廠商等資訊)

可以呼叫靜態該函式來獲取系統的每一個可用埠資訊QSerialPortInfo成員資訊可以被調用於使用在QSerialPort設定串列埠

跨平臺是QT的優勢,該類支援幾乎所有的主流平臺,其QT WIKI截圖如下:


下面來詳細介紹QSerialPortInfo的成員以及功能

其成員public函式分為幾類

1:建構函式

QSerialPortInfo()
QSerialPortInfo(const QSerialPort & port)
QSerialPortInfo(const QString & name)
QSerialPortInfo(const QSerialPortInfo & other)

以上四個建構函式是在定義該類的物件的時候接受不同的引數建立物件。

2:解構函式

~QSerialPortInfo()  

3:埠資訊函式

該類函式主要是返回該物件所對應的埠資訊。

QStringdescription() const    該函式返回的是一個QString資料型別,表示物件所對應的埠型別,例如是標準的通訊埠,還是USB轉串列埠等

boolhasProductIdentifier() const 判斷該埠是否有有效的的16位產品編碼,有的話返true否則返回false

boolhasVendorIdentifier() const 判斷該埠是否有有效的16位產品供應商的編碼,有的話返true否則返回false


boolisBusy() const   判斷該埠是否被被佔用,有的話返true否則返回false

boolisNull() const  判斷該物件是否有一個確定的對應關聯埠,如果是有的話返true否則返回false

QStringmanufacturer() const  返回生產廠商的資訊

QStringportName() const   返回物件對應的埠號型別,埠號型別用QString資料型別表示,若是沒有有效廠家資訊,返回的是空QString

quint16productIdentifier() const  返回埠的16位序列號,若是沒有,返回的是0

QStringserialNumber() const  返回用QSrting表示的的序列號  是在5.3以後的版本才有的

voidswap(QSerialPortInfo & other) 該物件與 other引用所指向的物件互換相關資訊,該函式的執行非常快,而且不會失敗。

QStringsystemLocation() const  返回串列埠系統的位置

quint16vendorIdentifier() const返回該埠是否有有效的16位產品供應商的編碼,若是沒有則返回0

4:static函式

static函式為類的全部服務而不是為某一個類的具體物件服務。static成員函式與靜態資料成員一樣,都是類的內部實現,屬於類定義的一部分。

QList<QSerialPortInfo>availablePorts()    該靜態函式返回的是QSerialPortInfo物件的QList,該QList中的QSerialPortInfo物件對應於該系統的可用的埠。

呼叫該函式可以返回可用的埠

例如,該例子將每一個可用的埠的埠名打印出來,在comboBox控制元件上顯示

 foreach (const QSerialPortInfo &qspinfo, QSerialPortInfo::availablePorts())
    {
        ui->comboBox->addItem(qspinfo.portName());
    }    QList<qint32>standardBaudRates()  該函式返回的是當前串列埠標準的可用的波特率

其他函式:

QSerialPortInfo &operator=(const QSerialPortInfo & other)

如運算子過載函式等

例項:

在mainwindows上從comboBox顯示可用埠號以及textEdit上顯示埠號的具體資訊

我的試驗環境實在筆記本上用的是兩個USB轉串列埠裝置,裝置在裝置管理器的顯示資訊如圖:


新建qtwidget工程 選擇mainwindow為主視窗

在mainwindow.cpp中新增如下程式碼

MainWindow::MainWindow(QWidget*parent):
QMainWindow(parent),
ui(newUi::MainWindow)
{
ui->setupUi(this);
foreach(constQSerialPortInfo&qspinfo,QSerialPortInfo::availablePorts())
{
ui->comboBox->addItem(qspinfo.portName());
ui->textEdit->append("portname"+qspinfo.portName());
ui->textEdit->append("description:"+qspinfo.description());
ui->textEdit->append("manufacture"+qspinfo.manufacturer());
ui->textEdit->append("serialnumber"+qspinfo.serialNumber());
ui->textEdit->append("systemlocation"+qspinfo.serialNumber());
}
}
然後執行程式碼會得到如截圖結果


原始碼連線為http://download.csdn.net/detail/mcu_tian/8426653

相關推薦

QT串列程式設計相關QSerialPortInfo

QT Serial Port相關的類只有兩個QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>) 先來介紹QSerialPortInfo 1

Qt串列通訊第三方flush函式不能清空串列解決辦法

       有網友也提到qt第三方類的flush函式不好用的觀點,我最近正好在做一個程式,自己起一個讀執行緒一個寫執行緒,通過切換變數控制讀寫,就像單刀雙置開關一樣。沒辦法,對方的通訊協議定的這樣,不過這種辦法雖隨不是非同步通訊,但保障了安全,兩個執行緒絕對不會串在一起,

【C語言實現串列通訊知識點整理】關於執行緒和程序

轉載:https://www.cnblogs.com/fuchongjundream/p/3829508.html 因為在外部檔案中呼叫結構體沒有用extern修飾,導致獲取不到正確的值,一直糾結線上程上。現在大概總結執行緒和程序的特點: 概念 1、程序(process) 狹義定義:

【C語言實現串列通訊知識點整理串列開啟、設定資料成功後進行資料讀寫

int OpenDev(char *Dev) { int fd = open(Dev,O_RDWR | O_NOCTTY | O_NONBLOCK); if(-1 == fd) { perror("Can't Open Serial Port"); return -1;

【C語言實現串列通訊知識點整理】遇到的問題整理待續....

1.c編譯錯誤--error:stray \357 in program UTF-8編碼問題。UTF-8編碼有BOM和無BOM格式。BOM,ByteOrderMark(位元組標記順序),表明使用UTF8來進行編碼。UTF-8的BOM通常為3個位元組EF BB BF。轉換成對應的字元檢視,就是‘\

【C語言實現串列通訊知識點整理】執行緒、開啟串列、設定波特率、設定校驗位、互斥鎖等實現基本的通訊

  部分程式碼借鑑地址:https://blog.csdn.net/wangqingchuan92/article/details/73497354/ 謝謝! 1.建立執行緒線上程內進行串列埠之間的收發 void CREAT_pthread(void) { pthr

迪文串列屏的串列通訊問題處理詳細

串列埠屏和電腦連線異常 原因分析1: 串列埠工具開啟後,重新整理不到串列埠號串列埠。 解決方法1: 大部分的桌上型電腦會有一個串列埠1,這個就是電腦的DB9出口,一般用DB9轉接延長線,是可以和db9的進行RS232通訊,現在大部分的膝上型電腦沒

Zeppelin 原始碼分析-Interpreter 相關3

和 Interpreter 直接相關類有以下幾個: Interpreter, InterpreterFactory, RemoteInterpreter, InterpreterGroup, InterpreterSetting。 由於篇幅有限,這裡分開介紹

gsm模組 POST協議 串列傳送和接收sim900a

串列埠發:AT+CIPSTART="TCP","211.xxx.xxx.xxx",80 串列埠收:OK CONNECT OK 串列埠發:AT+CIPSEND=533                                    (下面串列埠傳送資料的長度) 串列埠收

Linux下串列通訊詳解開啟串列串列初始化詳解

linux下串列埠通訊主要有下面幾個步驟 串列埠通訊流程圖 下面我會一一介紹這幾個步驟。 1.開啟串列埠 程式碼(串列埠為ttyUSB0) //開啟串列埠 int open_port(void) { int fd; fd=open("/dev/ttyUSB0

TI CC2530基礎實驗(串列程式設計——USART0收發測試總結

無論學習哪款MUC串列埠對於我們進行實驗除錯都是非常方便實用的,可以把程式中涉及的某些中間量或者其他程式狀態資訊打印出來顯示在電腦上進行除錯,許多MUC和PC機通訊都是通過串列埠來進行的。 CC2530有兩個USB轉串列埠,分別是USART0和USART1。USART0和U

關於Ubuntu 16.04繫結USB串列號的坑-1

今天在調機器人的時候,由於用到了很多串列埠,目前是四個,ubuntu重啟後,埠號就改變了,比如一開始某一個埠號是/dev/ttyUSB0後面就變成/dev/ttyUSB1,這是一個很嚴重的問題,控制程式碼裡,有很多地方依賴到開啟串列埠,每次開啟電腦就會報錯,今天

Linux串列程式設計教程——串列程式設計原始碼解:http://blog.csdn.net/u011192270/article/details/48174353 Linux下的串列程式設計(二----圖文並茂,講解深刻http://blog.csdn.net/w28252

Linux串列埠程式設計教程(三)——串列埠程式設計詳(原始碼)解:http://blog.csdn.net/u011192270/article/details/48174353 Linux下的串列埠程式設計(二)----(圖文並茂,講解深刻)http://blog.csdn.ne

Linux串列程式設計詳解 linux串列相關設定函式

tcgetattr    函式用於獲取與終端相關的引數。引數fd為終端的檔案描述符,返回的結果儲存在termios 結構體中 http://baike.baidu.com/view/5644808.htm?fr=aladdin tcset

Winform串列程式設計---接收資料demoVSPD虛擬串列

參考地址:https://blog.csdn.net/memgxingfeixiang/article/details/52513970      https://blog.csdn.net/kevin_iot/article/details/53926599   一、需求概述  

vs2010下mfc的串列程式設計MSComm

串列埠通訊簡介   一般來說,計算機都有一個或多個串列埠,這些串列埠提供了外部裝置與PC進行資料傳輸和通訊的通道,在CPU和外設之間充當直譯器的角色。當字元資料從CPU傳送給外設時,這些字元資料將被轉換成序列位元流資料;當接收資料時,位元流資料被轉換為字元資料傳遞給CPU,再進一步說,在

開源QT寫的串列除錯上位機帶波形顯示

為了方便PC機同微控制器(下位機)進行通訊,需要開發一款基於串列埠協議的上位機輔助除錯軟體。軟體不僅能夠向下位機發送資料,傳送指令進而控制下位機,而且還應該能準確接收下位機發來的資料,便於對下位機的一些感測器採集的訊號進行分析。 首先,在考慮到微控制器跟PC機通訊的問題時,

linux串列程式設計控制流與終端

流控制 資料在兩個串列埠之間傳輸時,常常會出現丟失資料的現象,或者兩臺計算機的處理速度不同,如桌上型電腦與微控制器之間的通訊,接收端資料緩衝區已滿,則此時繼續傳送來的資料就會丟失。流控制能解決這個問題,當接收端資料處理不過來時,就發出“不再接收”的訊號,傳送端就停止傳送,直到收到“可以繼續傳送”

linux串列程式設計termios結構體說明

termios結構體說明 轉https://www.cnblogs.com/li-hao/archive/2012/02/19/2358158.html termios結構體中,該結構體一般包括如下的成員:tcflag_t       c_iflag;

C#中使用SerialPort實現簡單串列程式設計

由於專案需要通過串列埠通訊,所以學習一下在此做一下筆記。 .NET 2.0提供了串列埠通訊的功能,其名稱空間是System.IO.Ports。這個新的框架不但可以訪問計算機上的串列埠,還可以和串列埠裝置進行通訊。 建立C#串列埠通訊程式之建立SerialPort 物件 通