需求背景
用带复选框的树形结构来选择文章的搜索范围,调用Sql时需要获得所有被选定为搜索范围的书籍名称,作为在数据库中进行搜索的条件。这就需要得到所有treewidget中checkstate为2(选中)的item的text值。
思路网上有很多拷贝的帖子都是说用QTreeWidgetItemIterator,当然这个方法肯定可以实现,但我比较喜欢用现有的使用过的函数来尽可能多的实现自己的需求。所以我这里还是推荐用find函数配合For循环来实现树形结构下item的遍历。
具体实现 items = self.treeWidget.findItems('', Qt.MatchContains|Qt.MatchRecursive, 0)
for item in items:
if item.parent() and not item.childCount() and item.checkState(0)==2:
checked_text_list.append(item.text(0))
Qt.MatchContains指的是模糊匹配 Qt.MatchRecursive指的是递归方式搜索,不然就只会搜索根目录 if item.parent() and not item.childCount() and item.checkState(0)==2意思是获得底层项目中复选框被选中的Item。