diff --git a/plugins/bluetooth/componments/adapteritem.cpp b/plugins/bluetooth/componments/adapteritem.cpp index f50682d69..873fcdf6f 100644 --- a/plugins/bluetooth/componments/adapteritem.cpp +++ b/plugins/bluetooth/componments/adapteritem.cpp @@ -313,17 +313,27 @@ void AdapterItem::showDevices(bool powered) QList deviceItems; deviceItems << m_sortConnected << m_sortUnConnect; - //在蓝牙关闭的时候,会出现不在connected和Unconnect列表中的设备(连接/关闭中的状态),关闭的时候使用总表参数 + // 在蓝牙关闭的时候,会出现不在connected和Unconnect列表中的设备(连接/关闭中的状态),关闭的时候使用总表参数 qDebug() << m_sortConnected.size() << m_sortUnConnect.size() << m_deviceItems.size(); if (powered) { for (DeviceItem *deviceItem : deviceItems) { - m_deviceLayout->addWidget(deviceItem); - deviceItem->setVisible(powered); + if (deviceItem) { + m_deviceLayout->addWidget(deviceItem); + deviceItem->setVisible(powered); + } } } else { for (DeviceItem *deviceItem : m_deviceItems) { - m_deviceLayout->removeWidget(deviceItem); - deviceItem->setVisible(powered); + if (deviceItem) { + m_deviceLayout->removeWidget(deviceItem); + deviceItem->setVisible(powered); + } + } + + for (DeviceItem *deviceItem : m_sortConnected) { + if (deviceItem) { + m_adaptersManager->disconnectDevice(deviceItem->device()); + } } } diff --git a/plugins/bluetooth/componments/adaptersmanager.cpp b/plugins/bluetooth/componments/adaptersmanager.cpp index caf47f04e..1f29f9275 100644 --- a/plugins/bluetooth/componments/adaptersmanager.cpp +++ b/plugins/bluetooth/componments/adaptersmanager.cpp @@ -295,3 +295,11 @@ void AdaptersManager::adapterRefresh(const Adapter *adapter) m_bluetoothInter->SetAdapterDiscoverable(dPath, true); m_bluetoothInter->RequestDiscovery(dPath); } + +void AdaptersManager::disconnectDevice(Device *device) +{ + if (device) { + QDBusObjectPath path(device->id()); + m_bluetoothInter->DisconnectDevice(path); + } +} diff --git a/plugins/bluetooth/componments/adaptersmanager.h b/plugins/bluetooth/componments/adaptersmanager.h index 0908a5290..a179f39e3 100644 --- a/plugins/bluetooth/componments/adaptersmanager.h +++ b/plugins/bluetooth/componments/adaptersmanager.h @@ -43,6 +43,7 @@ public: bool defaultAdapterInitPowerState(); int adaptersCount(); void adapterRefresh(const Adapter *adapter); + void disconnectDevice(Device *device); signals: void adapterIncreased(Adapter *adapter);