我尝试构建一个QTreeWidget的实时搜索,这意味着我有一个QLineEdit,当我输入时,我将过滤QTreeWidget中显示的结果。在
现在我得到的“仍然显示它”与QTreeWidget.findItems()
foundItems = mainForm.ui.treeShips.findItems(text,QtCore.Qt.MatchContains)
稍后,我清除QTreeWidget(mainForm.ui.treeShips)与
^{pr2}$然后我想添加“仍然显示的项目”与
mainForm.ui.treeShips.addTopLevelItems(foundItems)
但程序崩溃时,“基础C/C++对象已被删除”错误
我的第一个想法是,在清除树型结构时,foundItems的内容也会被清除,因为foundItems的对象(print(foundItems))和树型对象的地址相同,当程序想要处理这个列表时,它崩溃了。在
有人知道怎么修吗, 或者有更好的主意来应用这样的“搜索过滤器”?在
(我希望我能正确地描述我的问题:)
谢谢并致以诚挚的问候
每当您对
QTreeWidgetItem
调用clear
函数时,这些项都会被删除,因此您得到的错误并不奇怪。您可以在QTreeWidget
实现的以下摘录中看到:关于搜索实现的实际问题。第一个here是实现实际搜索功能(不是实时的)的一个很好的片段。(抱歉,它是c++的,但我希望它没问题)。在
要执行实时搜索,您必须将来自
QLineEdit
的void textChanged(const QString & text)
信号连接到执行搜索的插槽。在我希望这能回答你的问题
我根据Neox的第二个想法找到了一个解决办法。在
我迭代树中的所有项,并将hidden标志设置为true(setHidden(true)) 然后我迭代foundItems并将hidden标志设置为false(我认为这是可行的,因为两个列表都有相同的地址)
但我不知道这是否是一种肮脏的方式,但它是有效的:)
我希望这能帮助其他有同样问题的人。在
相关问题 更多 >
编程相关推荐