Skip to content

Commit ab6aa2a

Browse files
committed
fix: Modifying the opening and closing of VPN caused a crash issue
Unfolding item error caused when VPN does not exist pms: BUG-313961
1 parent 8dbdb8e commit ab6aa2a

3 files changed

Lines changed: 19 additions & 8 deletions

File tree

net-view/operation/private/netitemprivate.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ namespace network {
3030
*/
3131
NetItemPrivate::NetItemPrivate()
3232
: m_item(nullptr)
33+
, m_parent(nullptr)
3334
{
3435
}
3536

net-view/window/netview.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ NetView::NetView(NetManager *manager)
8383
connect(this, &NetView::activated, this, &NetView::onActivated);
8484

8585
// 支持在触摸屏上滚动
86-
//QScroller::grabGesture(viewport(), QScroller::LeftMouseButtonGesture);
87-
//QScrollerProperties sp;
88-
//sp.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QScrollerProperties::OvershootAlwaysOff);
86+
// QScroller::grabGesture(viewport(), QScroller::LeftMouseButtonGesture);
87+
// QScrollerProperties sp;
88+
// sp.setScrollMetric(QScrollerProperties::VerticalOvershootPolicy, QScrollerProperties::OvershootAlwaysOff);
8989
}
9090

9191
NetView::~NetView() = default;
@@ -143,7 +143,7 @@ void NetView::rowsInserted(const QModelIndex &parent, int start, int end)
143143
NetWirelessOtherItem *otherItem = NetItem::toItem<NetWirelessOtherItem>(item);
144144
if (otherItem) {
145145
updateItemExpand(otherItem);
146-
connect(otherItem, &NetWirelessOtherItem::expandedChanged, this, &NetView::onExpandStatusChanged);
146+
connect(otherItem, &NetWirelessOtherItem::expandedChanged, this, &NetView::onExpandStatusChanged, Qt::UniqueConnection);
147147
}
148148
} break;
149149
case NetType::WirelessMineItem:
@@ -152,8 +152,8 @@ void NetView::rowsInserted(const QModelIndex &parent, int start, int end)
152152
case NetType::VPNControlItem: {
153153
NetVPNControlItem *vpnControlItem = NetItem::toItem<NetVPNControlItem>(item);
154154
if (vpnControlItem) {
155-
connect(vpnControlItem, &NetVPNControlItem::expandedChanged, this, &NetView::onExpandStatusChanged);
156-
connect(vpnControlItem, &NetVPNControlItem::enabledChanged, this, &NetView::onExpandStatusChanged);
155+
connect(vpnControlItem, &NetVPNControlItem::expandedChanged, this, &NetView::onExpandStatusChanged, Qt::UniqueConnection);
156+
connect(vpnControlItem, &NetVPNControlItem::enabledChanged, this, &NetView::onExpandStatusChanged, Qt::UniqueConnection);
157157
updateItemExpand(vpnControlItem);
158158
}
159159
} break;
@@ -164,9 +164,9 @@ void NetView::rowsInserted(const QModelIndex &parent, int start, int end)
164164
NetDeviceItem *dev = NetItem::toItem<NetDeviceItem>(item);
165165
if (dev) {
166166
updateItemExpand(dev);
167-
connect(dev, &NetDeviceItem::enabledChanged, this, &NetView::onExpandStatusChanged);
167+
connect(dev, &NetDeviceItem::enabledChanged, this, &NetView::onExpandStatusChanged, Qt::UniqueConnection);
168168
if (dev->itemType() == NetType::WirelessDeviceItem)
169-
connect(NetItem::toItem<NetWirelessDeviceItem>(dev), &NetWirelessDeviceItem::apModeChanged, this, &NetView::onExpandStatusChanged);
169+
connect(NetItem::toItem<NetWirelessDeviceItem>(dev), &NetWirelessDeviceItem::apModeChanged, this, &NetView::onExpandStatusChanged, Qt::UniqueConnection);
170170
}
171171
} break;
172172
default:
@@ -281,6 +281,9 @@ void NetView::updateItemExpand(NetItem *item)
281281
return;
282282
}
283283
QModelIndex sIndex = m_model->index(item);
284+
if (!sIndex.isValid()) {
285+
return;
286+
}
284287
QModelIndex index = m_proxyModel->mapFromSource(sIndex);
285288
if (isExpanded(index) != expandItem) {
286289
setExpanded(index, expandItem);

net-view/window/private/netmodel.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ QModelIndex NetModel::index(const NetItem *object)
8787
if (!parent) {
8888
return QModelIndex();
8989
}
90+
NetItem *ancestor = parent;
91+
while (ancestor && ancestor != m_treeRoot) {
92+
ancestor = ancestor->getParent();
93+
}
94+
if (ancestor != m_treeRoot) {
95+
return QModelIndex();
96+
}
9097

9198
int pos = parent->getChildIndex(object);
9299
assert(pos >= 0);

0 commit comments

Comments
 (0)