fix: 修复蓝牙列表连接后显示异常问题

移除QStandardItem后,与其绑定的DViewItemAction对象的geometry没有变化导致还显示在原位置
修复方案是:手动更新action的位置,后期DTK组会针对该问题进行优化。

Log:
Influence: 任务栏-蓝牙列表-连接后,列表正常显示
Bug: https://pms.uniontech.com/bug-view-159331.html
This commit is contained in:
songwentao@uniontech.com 2022-09-27 11:49:45 +08:00 committed by deepin-bot[bot]
parent 5ce91454c2
commit 88e6d47beb

View File

@ -26,7 +26,7 @@ BluetoothDeviceItem::BluetoothDeviceItem(QStyle *style, const Device *device, DL
, m_labelAction(nullptr) , m_labelAction(nullptr)
, m_stateAction(nullptr) , m_stateAction(nullptr)
, m_connAction(nullptr) , m_connAction(nullptr)
, m_loading(new DSpinner(parent)) , m_loading(new DSpinner(parent->viewport()))
, m_iconWidget(new QWidget(parent->viewport())) , m_iconWidget(new QWidget(parent->viewport()))
, m_connButton(new StateButton(m_iconWidget)) , m_connButton(new StateButton(m_iconWidget))
{ {
@ -106,22 +106,24 @@ void BluetoothDeviceItem::updateIconTheme(DGuiApplicationHelper::ColorType type)
void BluetoothDeviceItem::updateDeviceState(Device::State state) void BluetoothDeviceItem::updateDeviceState(Device::State state)
{ {
m_labelAction->setText(m_device->alias()); m_labelAction->setText(m_device->alias());
m_connAction->setVisible(state == Device::StateConnected);
m_stateAction->setVisible(state == Device::StateAvailable);
if (state == Device::StateAvailable) { if (state == Device::StateAvailable) {
m_loading->start(); m_loading->start();
m_stateAction->setVisible(true);
m_connAction->setVisible(false);
} else if (state == Device::StateConnected) { } else if (state == Device::StateConnected) {
m_loading->stop(); m_loading->stop();
m_stateAction->setVisible(false);
m_connAction->setVisible(true);
emit requestTopDeviceItem(m_standarditem); emit requestTopDeviceItem(m_standarditem);
} else { } else {
m_loading->stop(); m_loading->stop();
m_stateAction->setVisible(false);
m_connAction->setVisible(false);
} }
m_loading->setVisible(state == Device::StateAvailable); /* 已连接的Item插入到首位后其设置的 DViewItemAction 对象的位置未更新,导致还是显示在原位置
DViewItemAction DTK优化 */
QRect loadingRect = m_loading->geometry();
loadingRect.setY(0);
m_loading->setGeometry(loadingRect);
emit deviceStateChanged(m_device); emit deviceStateChanged(m_device);
} }
@ -171,11 +173,11 @@ void BluetoothAdapterItem::onTopDeviceItem(DStandardItem *item)
if (!item || item->row() == -1 || item->row() == 0) if (!item || item->row() == -1 || item->row() == 0)
return; return;
int index1 = item->row(); int row = item->row();
// 先获取,再移除,后插入 // 先获取,再移除,后插入
QStandardItem *index = m_deviceModel->takeItem(index1, 0); QStandardItem *sItem = m_deviceModel->takeItem(row, 0);
m_deviceModel->removeRow(index1); m_deviceModel->removeRow(row);
m_deviceModel->insertRow(0, index); m_deviceModel->insertRow(0, sItem);
} }
void BluetoothAdapterItem::onAdapterNameChanged(const QString name) void BluetoothAdapterItem::onAdapterNameChanged(const QString name)