From 7afd3b3bf879f0a1b28d75fa0b905c2322080f05 Mon Sep 17 00:00:00 2001 From: yeshanshan Date: Tue, 24 Mar 2026 14:48:46 +0800 Subject: [PATCH] fix: set parent for NetItem to prevent JS release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Added setParent() calls for root and delete items in NetManagerPrivate constructor 2. Added setParent() call when adding child items in NetItemPrivate::addChild() 3. These changes ensure proper parent-child relationships are established 4. Prevents potential issues where JavaScript could release NetItem objects prematurely Influence: 1. Test network item hierarchy remains stable during operations 2. Verify parent-child relationships are correctly maintained 3. Test JavaScript interactions with network items 4. Ensure no memory leaks or premature object destruction 5. Verify network view operations work correctly after these changes fix: 为NetItem设置父对象防止JS释放 1. 在NetManagerPrivate构造函数中为根项目和删除项目添加setParent()调用 2. 在NetItemPrivate::addChild()中添加子项目时调用setParent() 3. 这些更改确保建立正确的父子关系 4. 防止JavaScript可能提前释放NetItem对象的问题 Influence: 1. 测试网络项目层次结构在操作期间保持稳定 2. 验证父子关系是否正确维护 3. 测试JavaScript与网络项目的交互 4. 确保没有内存泄漏或对象过早销毁 5. 验证网络视图操作在这些更改后正常工作 --- net-view/operation/netmanager.cpp | 4 +++- net-view/operation/private/netitemprivate.cpp | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/net-view/operation/netmanager.cpp b/net-view/operation/netmanager.cpp index 1ac41406..8621a857 100644 --- a/net-view/operation/netmanager.cpp +++ b/net-view/operation/netmanager.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2018 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -207,6 +207,8 @@ NetManagerPrivate::NetManagerPrivate(NetManager *manager) , m_supportWireless(false) , q_ptr(manager) { + m_root->item()->setParent(this); + m_deleteItem->item()->setParent(this); m_root->updateenabled(false); addItem(m_root, nullptr); addItem(m_deleteItem, nullptr); diff --git a/net-view/operation/private/netitemprivate.cpp b/net-view/operation/private/netitemprivate.cpp index c028e923..aa0a8ce4 100644 --- a/net-view/operation/private/netitemprivate.cpp +++ b/net-view/operation/private/netitemprivate.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2018 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -49,6 +49,7 @@ NetItemPrivate::~NetItemPrivate() case NetType::Type: \ netItemPrivate = new Net##Type##Private(); \ netItemPrivate->m_item = new Net##Type(netItemPrivate, id); \ + netItemPrivate->m_item->setParent(netItemPrivate); \ break NetItemPrivate *NetItemPrivate::New(NetType::NetItemType type, const QString &id) @@ -121,6 +122,7 @@ bool NetItemPrivate::addChild(NetItemPrivate *child, int index) Q_EMIT m_item->childAboutToBeAdded(m_item, index); m_children.insert(m_children.begin() + index, child->item()); + child->m_item->setParent(m_item); child->m_parent = m_item; Q_EMIT m_item->childAdded(child->item()); @@ -137,6 +139,7 @@ bool NetItemPrivate::removeChild(NetItemPrivate *child) Q_EMIT m_item->childAboutToBeRemoved(m_item, it - m_children.begin()); m_children.erase(it); child->m_parent = nullptr; + child->item()->setParent(nullptr); Q_EMIT m_item->childRemoved(child->item()); Q_EMIT m_item->childrenChanged(); return true;