PyQT崩溃(基础C / C++对象已被删除)在“之后”清除QTreeWidget - python

我尝试为QTreeWidget建立实时搜索,这意味着我有一个QLineEdit,并且在我键入内容时,我将在QTreeWidget中过滤显示的结果。

目前,我通过QTreeWidget.findItems()获得了“仍显示的项目”

foundItems  = mainForm.ui.treeShips.findItems(text,QtCore.Qt.MatchContains)

稍后我用清除QTreeWidget(mainForm.ui.treeShips)

mainForm.ui.treeShips.clear()

然后我想添加“仍显示的项目”

mainForm.ui.treeShips.addTopLevelItems(foundItems)

但随后程序崩溃,并显示“底层C / C ++对象已被删除”错误

我的第一个想法是,清除treeShips时,也会清除foundItems的内容,这会导致foundItems(print(foundItems))的对象和treeShips的对象具有相同的地址,并且当程序要使用此列表时,它崩溃。

有人知道如何解决它,
还是有更好的主意来应用这样的“搜索过滤器”?

(我希望我能正确描述我的问题:))

谢谢和最诚挚的问候

参考方案

我发现基于Neox的第二个想法的解决方法。

我迭代树中的所有项目,并将隐藏标志设置为true(setHidden(True))
然后我迭代foundItems并将隐藏标志设置为false(我认为这是可行的,因为两个列表的地址相同)

for item in mainForm.ui.treeShips.findItems("",QtCore.Qt.MatchContains):
    item.setHidden(True)

for item in foundItems:
    item.setHidden(False)

但我不知道这是否不是一种肮脏的方式,但是它有效:)

我希望这会帮助其他有相同问题的人。

在Python和C++之间传输数据而无需写入Windows和Unix文件 - python

我有预先存在的python和C ++文件,其中python文件定义了许多点,而C ++代码利用其现有库进行了所需的计算。最终产品是C ++代码写入的文件。我正在寻找一种在python中获取2000点列表的方法,将其传递给函数,然后执行所有C ++代码并输出我需要的文件。其他注意事项。这必须是可以在Linux或Windows机器上工作的东西,并且最少安装新插件…

如何锁定终端运行的perl,obj c,c++,python和ruby等脚本的源代码? - python

我想出售我在perl,obj c,c ++,python,ruby,bash,php等中制作的脚本等它们都在终端中运行。 (Linux)如何锁定源代码,以便无需人们访问源代码即可分发我的脚本..?换句话说,如何将在Terminal中运行的程序的源代码锁定,以便人们可以使用该程序(如果该代码已下载到他们的Linux机器上,但他们无法访问实际的源代码)?例:ex…

Javascript + Python:将数组发送到Python脚本,将结果返回给Javascript - javascript

我想建立一个网页,该网页通过Javascript API进行许多Facebook状态更新,并将它们分类到一个数组中。然后,我想将此数组发送到Python脚本,该脚本可以专门使用NLTK.进行语言分析。在Python中获得合适的结果后,我想将结果从该脚本返回到Javascript,以显示给用户等。听起来可能吗? javascript大神给出的解决方案 是的,完…

如何使用Ctrl + C正常关闭协程? - python

我在写蜘蛛来爬行网页。我知道异步可能是我最好的选择。因此,我使用协程来异步处理工作。现在我开始思考如何通过键盘中断退出程序。在完成所有工作之后,该程序可能会关闭。源代码可以在python 3.5中运行,并在下面附加。import asyncio import aiohttp from contextlib import suppress class Spid…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…