Qt on android 蓝牙开发(控制小车)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Qt on android 蓝牙开发(控制小车)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                因為要做一個用藍牙控制小車的app,就用著QT搞了下,網上關于QT藍牙開發的資料比較少,我在這里記錄下過程希望對看到了人有所幫助
首先在項目文件里添加
QT += bluetooth這樣就可以用QT關于藍牙的一系列類了,接下來在添加頭文件
#include <QtBluetooth/qbluetoothglobal.h> #include <QtBluetooth/qbluetoothlocaldevice.h> #include <qbluetoothaddress.h> #include <qbluetoothdevicediscoveryagent.h> #include <qbluetoothlocaldevice.h> #include <qbluetoothsocket.h>添加要用的私有成員變量
private:Ui::BLE *ui;QBluetoothDeviceDiscoveryAgent *discoveryAgent;QBluetoothLocalDevice *localDevice;QBluetoothSocket *socket;構造函數
discoveryAgent = new QBluetoothDeviceDiscoveryAgent();localDevice = new QBluetoothLocalDevice();/* 給socket分配內存,限定套接字協議 */socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);/* 判斷藍牙是否開啟,若開啟則不可被選中并掃描周圍藍牙設備 */if( localDevice->hostMode() == QBluetoothLocalDevice::HostPoweredOff ){ui->pushButton_openBLE->setEnabled(true);ui->pushButton_upDateBLE->setEnabled(false);/* 開始掃描藍牙設備 */discoveryAgent->start();}else{ui->pushButton_openBLE->setEnabled(false);ui->pushButton_upDateBLE->setEnabled(true);}/* 發現設備時會觸發deviceDiscovered信號,轉到槽顯示藍牙設備 */connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),this, SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo)));connect(discoveryAgent, SIGNAL(finished()), this, SLOT(findFinish()));/* 雙擊listwidget的項目,觸發連接藍牙的槽 */connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem*)),this, SLOT(connectBLE(QListWidgetItem*)));connect(socket, SIGNAL(connected()), this, SLOT(connectOK()));connect(socket, SIGNAL(disconnected()), this, SLOT(connectNot()));下面是各個槽函數實現
/* 打開藍牙并查找藍牙設備 */ void BLE::on_pushButton_openBLE_clicked() {localDevice->powerOn();ui->pushButton_openBLE->setEnabled(false);ui->pushButton_upDateBLE->setEnabled(true);/* 開始掃描藍牙設備 */discoveryAgent->start(); } /* 刷新 重新查找藍牙設備 */ void BLE::on_pushButton_upDateBLE_clicked() {discoveryAgent->start();ui->pushButton_upDateBLE->setEnabled(false); } /* 返回控制頁面 */ void BLE::on_pushButton_return_clicked() {this->hide();Control *c = new Control();c->show(); } /* 在ListWidget上顯示查找到的藍牙設備 */ void BLE::addBlueToothDevicesToList(const QBluetoothDeviceInfo &info) {QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name());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 BLE::findFinish() {ui->pushButton_upDateBLE->setEnabled(true); } /* 藍牙連接 */ void BLE::connectBLE(QListWidgetItem *item) {QString text = item->text();int index = text.indexOf(' ');if (index == -1)return;QBluetoothAddress address(text.left(index));QString name(text.mid(index + 1));QMessageBox::information(this,tr("Info"),tr("The device is connecting..."));socket->connectToService(address, QBluetoothUuid(serviceUuid) ,QIODevice::ReadWrite); } /* 連接成功 */ void BLE::connectOK() {discoveryAgent->stop(); //停止搜索設備QMessageBox::information(this, tr("成功"), tr("連接成功!")); } /* 連接失敗 */ void BLE::connectNot() {QMessageBox::information(this, tr("錯誤"), tr("連接失敗!")); }不要忘記設置藍牙的uuid碼
static const QLatin1String serviceUuid("00001101-0000-1000-8000-00805F9B34FB");藍牙的發送、讀取數據和服務器客戶端發送讀取數據一樣,發送數據用write() 讀取數據先接收到readyRead()信號然后用readAll()讀取
現在構造函數中添加信號和槽連接
connect(socket, SIGNAL(readyRead()), this, SLOT(readBluetoothDataEvent()));槽函數
void BLE::readBluetoothDataEvent() {QByteArray line = socket->readAll();QString strData = line.toHex();comStr.append(strData);qDebug() <<"rec data is: "<< comStr;qDebug() <<"The comStr length is: " << comStr.length();if(comStr.length() >= 30) {ui->textBrowser_info->append(comStr + "\n");comStr.clear();}}OK啦
下面附一個我的藍牙控制小車的源碼
鏈接:https://pan.baidu.com/s/15JjHSm-KQIsbN-zHOFW6IQ ?密碼:nxc0
轉載于:https://www.cnblogs.com/xiaolanchong/p/9079522.html
總結
以上是生活随笔為你收集整理的Qt on android 蓝牙开发(控制小车)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: hdu 5585 判断一个数能否被3整除
- 下一篇: Python解释器有哪些?Python解
