我有以下代码,头文件: 的 uebluetoothmanager.h :
#ifndef UEBLUETOOTHMANAGER_H
#define UEBLUETOOTHMANAGER_H
#include <QObject>
#include <QBluetoothServiceDiscoveryAgent>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QBluetoothServiceInfo>
#include <QBluetoothLocalDevice>
#include <QDebug>
#include "../settings/uedefaults.h"
class UeBluetoothManager : public QObject
{
Q_OBJECT
private:
QBluetoothServiceDiscoveryAgent* m_ueBtServiceDiscoveryAgent;
QBluetoothDeviceDiscoveryAgent* m_ueBtDeviceDiscoveryAgent;
QBluetoothLocalDevice* m_ueBtPrinter;
public:
explicit UeBluetoothManager(QObject *parent = 0);
~UeBluetoothManager();
inline void ueSetBtServiceDiscoveryAgent(QBluetoothServiceDiscoveryAgent* const btServiceDiscoveryAgent)
{ this->m_ueBtServiceDiscoveryAgent=btServiceDiscoveryAgent; }
inline void ueSetBtDeviceDiscoveryAgent(QBluetoothDeviceDiscoveryAgent* const btDeviceDiscoveryAgent)
{ this->m_ueBtDeviceDiscoveryAgent=btDeviceDiscoveryAgent; }
inline void ueSetBtPrinter(QBluetoothLocalDevice* btLocalDevice)
{ this->m_ueBtPrinter=btLocalDevice; }
inline QBluetoothServiceDiscoveryAgent* ueBtServiceDiscoveryAgent() const
{ return this->m_ueBtServiceDiscoveryAgent; }
inline QBluetoothDeviceDiscoveryAgent* ueBtDeviceDiscoveryAgent() const
{ return this->m_ueBtDeviceDiscoveryAgent; }
inline QBluetoothLocalDevice* ueBtPrinter() const
{ return this->m_ueBtPrinter; }
signals:
public slots:
void ueSlotServiceDiscovered(const QBluetoothServiceInfo&);
void ueSlotDeviceDiscovered(const QBluetoothDeviceInfo& deviceInfo);
void ueSlotPairingFinished(const QBluetoothAddress& address,
QBluetoothLocalDevice::Pairing);
};
#endif // UEBLUETOOTHMANAGER_H
及其实施, uebluetoothmanager.cpp :
#include "uebluetoothmanager.h"
UeBluetoothManager::UeBluetoothManager(QObject *parent) : QObject(parent)
{
this->ueSetBtServiceDiscoveryAgent(new QBluetoothServiceDiscoveryAgent(this));
this->ueSetBtDeviceDiscoveryAgent(new QBluetoothDeviceDiscoveryAgent(this));
this->ueSetBtPrinter(new QBluetoothLocalDevice(this));
this->connect(this->ueBtServiceDiscoveryAgent(),
SIGNAL(serviceDiscovered(QBluetoothServiceInfo)),
this,
SLOT(ueSlotServiceDiscovered(QBluetoothServiceInfo)));
this->connect(this->ueBtDeviceDiscoveryAgent(),
SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
this,
SLOT(ueSlotDeviceDiscovered(QBluetoothDeviceInfo)));
this->connect(this->ueBtPrinter(),
SIGNAL(pairingFinished(QBluetoothAddress,
QBluetoothLocalDevice::Pairing)),
this,
SLOT(ueSlotPairingFinished(QBluetoothAddress,
QBluetoothLocalDevice::Pairing)));
this->ueBtDeviceDiscoveryAgent()->start();
this->ueBtServiceDiscoveryAgent()->start();
} // default constructor
UeBluetoothManager::~UeBluetoothManager()
{
delete this->ueBtPrinter();
delete this->ueBtDeviceDiscoveryAgent();
delete this->ueBtServiceDiscoveryAgent();
} // destructor
void UeBluetoothManager::ueSlotServiceDiscovered(const QBluetoothServiceInfo& info)
{
qDebug() << info.serviceName()
<< " "
<< info.serviceDescription()
<< " "
<< info.serviceProvider();
} // ueSlotServiceDiscovered
void UeBluetoothManager::ueSlotDeviceDiscovered(const QBluetoothDeviceInfo& info)
{
QBluetoothLocalDevice::Pairing pairingStatus=this->ueBtPrinter()->pairingStatus(info.address());
if(info.name().contains(UeHardware::UeReceiptPrinter::UeReceiptPrinterTSM210::PRINTER_NAME,
Qt::CaseSensitive))
{
// if(pairingStatus==QBluetoothLocalDevice::Unpaired)
// {
this->ueBtPrinter()->requestPairing(info.address(),
QBluetoothLocalDevice::AuthorizedPaired);
// } // if
} // if
} // ueSlotDeviceDiscovered
void UeBluetoothManager::ueSlotPairingFinished(const QBluetoothAddress& address,
QBluetoothLocalDevice::Pairing pairing)
{
qDebug() << "Pairing with "
<< address.toString()
<< " finished with status "
<< pairing
<< ".";
} // ueSlotPairingFinished
现在,此代码(我使用KUbuntu 15.04
内核Linux work002 3.19.0-28-generic #30-Ubuntu SMP Mon Aug 31 15:52:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
和Qt 5.5.0
)的目的是建立与蓝牙POS收据打印机的配对连接。打印机的默认PIN值为1234
。如何使用Qt Bluetooth API将此密码发送给打印机,以便应用与其配对(在公共广告位ueSlotDeviceDiscovered
内)?发现设备及其服务(qDebug
输出):
与“20:13:08:12:07:02”配对完成状态&lt;&lt; 1。
“Dev B”“”“”
从打印机文档开始,一旦打印机成功与设备配对,蓝色led二极管就会亮起,但在执行此代码后,此二极管不会激活。在当前的代码中,我有一行
this->ueBtPrinter()->requestPairing(info.address(),QBluetoothLocalDevice::Paired);
而不是
this->ueBtPrinter()>requestPairing(info.address(),QBluetoothLocalDevice::AuthorizedPaired);
因为如果上面的行是活动的,我从插槽中得到qDebug()
输出,如果QBluetoothLocalDevice::AuthorizedPaired
处于活动状态,我根本不会得到qDebug()
输出,但我应该/必须使用QBluetoothLocalDevice::AuthorizedPaired
启用了 blue led 。如何在QBluetoothLocalDevice::AuthorizedPaired
模式下将PIN码传递给打印机?打印机的这个Dev B
服务似乎是它的simaluted串口,所以如何打开这个端口,可能使用QSerialPort?
一个重要信息:此应用程序正在Linux中开发,但将部署到Android平板电脑上!