如何根据已知的ItemWidget获取QTreeWidgetItem

0 投票
1 回答
944 浏览
提问于 2025-04-18 16:55

在创建了一个文本输入框(LineEdit)控件之后:

lineEdit=QtGui.QLineEdit()

并把它作为一个项目控件(itemWidget)分配给了 QTreeWidgetItem

tree=QtGui.QTreeWidget()
item=QtGui.QTreeWidgetItem(tree)
tree.setItemWidget(item, 0, lineEdit)

现在我知道了 lineEdit 这个变量,我该怎么查询它被分配给了哪个 QTreeWidgetItem 作为项目控件呢?

1 个回答

1

最后编辑时间 : 2014年12月8日 9:12

我的解决方案是创建一个自己的方法,通过部分参数 QWidget 来查找 QTreeWidgetItem,像这样(使用递归函数);

class customQTreeWidget (QtGui.QTreeWidget):
    .
    .
    .
    def findItemWidget (self, findQWidget, currentQTreeWidgetItem = None):
        if currentQTreeWidgetItem == None:
            currentQTreeWidgetItem = self.invisibleRootItem()
        for index in range(self.topLevelItemCount()):
            if findQWidget is self.itemWidget(currentQTreeWidgetItem, index):
                return currentQTreeWidgetItem
        for index in range(currentQTreeWidgetItem.childCount()):
            foundQWidget = self.findItemWidget(findQWidget, currentQTreeWidgetItem.child(index))
            if foundQWidget != None:
                return foundQWidget

然后,你想要调用的时候可以这样使用;

foundQTreeWidgetItem  = self.findItemWidget(findQWidget) # Don't part argument currentQTreeWidgetItem use in recursive loop

itemWidget 方法参考 : http://pyqt.sourceforge.net/Docs/PyQt4/qtreewidget.html#itemWidget


祝好,

撰写回答