日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT蓝牙库基础

發布時間:2023/12/18 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT蓝牙库基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.目的

使用QT自帶的藍牙功能庫進行學習開發,了解藍牙設備的工作原理和使用流程,目的搭建可以自由控制的藍牙app,為以后的學習生活做基礎。

2.本地設備

采用自己vivo Y53的手機作為實驗對象。

使用到的QT藍牙庫的類名:? QBluetoothLocalDevice

我們可以直接到QT軟件幫助文檔去搜索,如下圖所示:

我們可以了解到這個類適用于QT5.2以上版本

主要我們在新建的工程中加上頭文件和附加庫聲明。

#include <lQBluetoothLocalDevice.h> //本地設備驅動頭文件private:QBluetoothLocalDevice *localDevice; //聲明變量

在.pro中

QT += bluetooth

為變量聲明新的空間:

localDevice = new QBluetoothLocalDevice();

然后我們就能調用里面的函數:

localDevice->address();??返回此藍牙設備的MAC地址。

localDevice->hostMode();? 返回此本地藍牙設備的當前主機模式。

localDevice->powerOn(); 將設備返回hostMode()狀態后,如果關閉電源,則為設備供電

localDevice->pairingStatus(info.address());返回地址的當前藍牙配對狀態(如果是未配對、配對或已授權。

localDevice->setHostMode(QBluetoothLocalDevice::HostPoweredOff);將此本地藍牙設備的主機模式設置為關閉模式。

3.搜索設備

用到第二個類:

QBluetoothDeviceDiscoveryAgent類-----------發現附近的藍牙設備。

?

#include <QBluetoothDeviceDiscoverAgent.h> //本地設備驅動頭文件private:QBluetoothDeviceDiscoverAgent *discoveryAgent; //聲明變量 discoveryAgent= new QBluetoothLocalDevice();

discoveryAgent->error(); //返回最后一個錯誤

discoveryAgent->errorString(); //返回對最后一個錯誤的描述

discoveryAgent->inquiryType(); //返回查詢類型

discoveryAgent->isActive(); //如果代理當前正在發現藍牙設備,則返回true,否則返回false。

discoveryAgent->lowEnergyDiscoveryTimeout(); //返回一個以毫秒為單位的超時,該超時應用于藍牙低能耗設備搜索。值為-1意味著平臺不支持此屬性,并且無法調整設備搜索的超時。返回值為0意味著一個永無止境的搜索,必須通過stop()手動停止搜索。

執行函數:

discoveryAgent->start(); //開始搜索設備 discoveryAgent->stop(); //停止搜索設備

信號槽:

connect(discoveryAgent, SIGNAL(finished()), this, SLOT(findFinish())); //完成信號發出進行動作 connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo))); //當發現info描述的藍牙設備時發出此信號來進行動作

而canceled()? ? ?//當設備發現被stop()調用中止時發出此信號。

同樣我們也可以使用error()來根據不同的錯誤類型進行不同的操作。

?

4.藍牙服務器代理

QBluetoothSocket:

操作同上:

? socket->abort();//終止當前連接并重置套接字。與disconnectFromService()不同,這個函數立即關閉套接字,丟棄寫緩沖區中的任何掛起的數據。

socket->disconnectFromService();//試圖關閉套接字。如果有等待寫入的掛起數據,QBluetoothSocket將進入ClosingState并等待所有數據被寫入。最后,它將進入UnconnectedState并發出disconnected()信號。

socket->localAddress();//返回本地設備的地址。

socket->localName();//返回本地設備的名稱。

socket->localPort();//如果可用,返回本地套接字的端口號,否則返回0。雖然有些平臺可能有所不同,但套接字通常必須連接,以確保返回有效的端口號。

socket->setSocketDescriptor();//將套接字設置為使用socketDescriptor和socketType類型,socketType處于狀態、socketState和模式、openMode。

socket->connectToService(address, QBluetoothUuid(serviceUuid) ,QIODevice::ReadWrite);

connect(socket,SIGNAL(readyRead()),this,SLOT(readBluetoothDataEvent())); //每當有新數據可從設備當前的讀取通道讀取時,就會發出此信號一次。它只在新數據可用時才會再次發出,例如當網絡數據的新負載到達您的網絡套接字時,或者當一個新的數據塊被添加到您的設備時。 connect(socket,SIGNAL(connected()),this,SLOT(bluetoothConnectedEvent()));//此信號在建立連接時發出。 connect(socket,SIGNAL(disconnected()),this,SLOT(bluetoothDisconnectedEvent()));//當套接字斷開時發出此信號。

5.搜索連接藍牙設備

顯示可用的藍牙:

/* 在ListWidget上顯示查找到的藍牙設備 */ void Widget::addBlueToothDevicesToList(const QBluetoothDeviceInfo &info) {QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name());//%1為藍牙設備的地址,%2為藍牙設備的名字QList<QListWidgetItem *> items = ui->listWidget->findItems(label, Qt::MatchExactly);if (items.empty()) {QListWidgetItem *item = new QListWidgetItem(label);QBluetoothLocalDevice::Pairing pairingStatus = localDevice->pairingStatus(info.address());/* 藍牙狀態pairingStatus,Pairing枚舉類型 0:Unpaired沒配對 1:Paired配對但沒授權 2:AuthorizedPaired配對且授權 */if (pairingStatus == QBluetoothLocalDevice::Paired || pairingStatus == QBluetoothLocalDevice::AuthorizedPaired )item->setTextColor(QColor(Qt::green));elseitem->setTextColor(QColor(Qt::black));//輸出顯示ui->listWidget->addItem(item); } }

雙擊屏幕產生信號:

/* 藍牙連接 */ void Widget::connectBLE(QListWidgetItem *item) {QString text = item->text();int index = text.indexOf(' ');//到空格之前的字節大小if (index == -1)return;QBluetoothAddress address(text.left(index));//返回一個子字符串,該子字符串包含字符串最左邊的n個字符。QString name(text.mid(index + 1));//返回一個字符串,該字符串包含從指定的位置索引開始的n個字符。右邊QMessageBox::information(this,tr("Info"),tr("The device is connecting..."));//彈出提示框socket->connectToService(address, QBluetoothUuid(serviceUuid) ,QIODevice::ReadWrite);//建立連接 }

總結

以上是生活随笔為你收集整理的QT蓝牙库基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。