fix: 修复任务栏蓝牙列表点击已连接上的蓝牙会断开的问题

鼠标移动至“√”会变成“x”,点击“x”断开连接;
点击已连接上的蓝牙无反应,点击非StateUnavailable状态的蓝牙会触发连接动作。

Log:
Bug: https://pms.uniontech.com/zentao/bug-view-102537.html
Influence: 任务栏的蓝牙模块断开连接操作上有变化。
鼠标移动至“√”会变成“x”,点击“x”断开连接;
点击已连接上的蓝牙无反应,点击非StateUnavailable状态的蓝牙会触发连接动作。

Change-Id: Ie63fc655f38cbe33a84d2bb5a8ca5becdba46507
This commit is contained in:
Ye ShanShan 2021-11-16 16:42:56 +08:00 committed by yeshanshan
parent cf9c26325a
commit 2af79235be
2 changed files with 13 additions and 1 deletions

View File

@ -72,8 +72,9 @@ void BluetoothDeviceItem::initActionList()
m_connAction = new DViewItemAction(Qt::AlignRight | Qt::AlignVCenter, QSize(16, 16), QSize(16, 16), false);
m_connButton->setType(StateButton::Check);
m_connButton->setSwitchFork(false);
m_connButton->setSwitchFork(true);
m_connButton->setFixedSize(16, 16);
connect(m_connButton, &StateButton::click, this, &BluetoothDeviceItem::disconnectDevice);
m_iconWidget->setFixedSize(18, 16);
QHBoxLayout *layout = new QHBoxLayout(m_iconWidget);
layout->setContentsMargins(0, 0, 0, 0);
@ -171,6 +172,10 @@ void BluetoothAdapterItem::onConnectDevice(const QModelIndex &index)
DStandardItem *deviceitem = dynamic_cast<DStandardItem *>(deviceModel->item(index.row()));
foreach (const auto item, m_deviceItems) {
// 只有非连接状态才发送connectDevice信号connectDevice信号连接的槽为取反操作而非仅仅连接
if (!(item->device()->state() == Device::StateUnavailable))
continue;
if (item->standardItem() == deviceitem) {
emit connectDevice(item->device(), m_adapter);
}
@ -252,6 +257,12 @@ void BluetoothAdapterItem::onDeviceAdded(const Device *device)
BluetoothDeviceItem *item = new BluetoothDeviceItem(style(), device, m_deviceListview);
connect(item, &BluetoothDeviceItem::requestTopDeviceItem, this, &BluetoothAdapterItem::onTopDeviceItem);
connect(item, &BluetoothDeviceItem::deviceStateChanged, this, &BluetoothAdapterItem::deviceStateChanged);
connect(item, &BluetoothDeviceItem::disconnectDevice, this, [this, item](){
// 只有已连接状态才发送connectDevice信号connectDevice信号连接的槽为取反操作而非仅仅连接
if (item->device()->state() == Device::StateConnected) {
emit connectDevice(item->device(), m_adapter);
}
});
m_deviceItems.insert(device->id(), item);
if (!m_showUnnamedDevices && device->name().isEmpty() && Device::StateConnected != device->state())

View File

@ -74,6 +74,7 @@ public slots:
signals:
void requestTopDeviceItem(DStandardItem *item);
void deviceStateChanged(const Device *device);
void disconnectDevice();
private:
void initActionList();