From 124d99bf7165cb793a19a8d92efb3189cde5f56c Mon Sep 17 00:00:00 2001 From: songwentao Date: Thu, 1 Sep 2022 16:38:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E5=92=8C=E6=8E=A7=E5=88=B6=E4=B8=AD=E5=BF=83=E8=93=9D?= =?UTF-8?q?=E7=89=99=E5=88=97=E8=A1=A8=E4=B8=8D=E4=B8=80=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit onDeviceAdded()插入时条件错误 条件满足再后插入,避免下次下次无法插入 Bug: https://pms.uniontech.com/bug-view-150059.html --- .../componments/bluetoothadapteritem.cpp | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.cpp b/plugins/bluetooth/componments/bluetoothadapteritem.cpp index c227e2db3..514c76ea3 100644 --- a/plugins/bluetooth/componments/bluetoothadapteritem.cpp +++ b/plugins/bluetooth/componments/bluetoothadapteritem.cpp @@ -170,6 +170,7 @@ void BluetoothAdapterItem::onTopDeviceItem(DStandardItem *item) return; int index1 = item->row(); + // 先获取,再移除,后插入 QStandardItem *index = m_deviceModel->takeItem(index1, 0); m_deviceModel->removeRow(index1); m_deviceModel->insertRow(0, index); @@ -216,7 +217,8 @@ QStringList BluetoothAdapterItem::connectedDevicesName() void BluetoothAdapterItem::initData() { m_showUnnamedDevices = m_bluetoothInter->displaySwitch(); - if (!m_adapter->powered()) + + if (m_adapter && !m_adapter->powered()) return; foreach (const auto device, m_adapter->devices()) { @@ -246,10 +248,10 @@ void BluetoothAdapterItem::onDeviceAdded(const Device *device) } }); - m_deviceItems.insert(device->id(), item); - if (!m_showUnnamedDevices && device->name().isEmpty() && Device::StateConnected != device->state()) + if (!m_showUnnamedDevices && device->name().isEmpty()) return; + m_deviceItems.insert(device->id(), item); m_deviceModel->insertRow(insertRow, item->standardItem()); emit deviceCountChanged(); } @@ -259,7 +261,18 @@ void BluetoothAdapterItem::onDeviceRemoved(const Device *device) if (m_deviceItems.isEmpty()) return; - m_deviceModel->removeRow(m_deviceItems.value(device->id())->standardItem()->row()); + int row = -1; + if (!m_deviceItems.value(device->id())) + return; + + row = m_deviceItems.value(device->id())->standardItem()->row(); + if ((row < 0) || (row > m_deviceItems.size() - 1)) { + m_deviceItems.value(device->id())->deleteLater(); + m_deviceItems.remove(device->id()); + return; + } + + m_deviceModel->removeRow(row); m_deviceItems.value(device->id())->deleteLater(); m_deviceItems.remove(device->id()); emit deviceCountChanged(); @@ -406,7 +419,6 @@ void BluetoothAdapterItem::setUnnamedDevicesVisible(bool isShow) return; } - for (i = m_deviceItems.begin(); i != m_deviceItems.end(); ++i) { BluetoothDeviceItem *deviceItem = i.value();