从 QPushButton 项目小部件复制 QTreeWidgetItem

Copy QTreeWidgetItem from QPushButton item widget

我想复制一个 QTreeWidgetItem,如果其中有一个按钮被按下的话。

到目前为止我有:

def Copy(self):
    obj = self.sender()

self.Tree = qt.QTreeWidget(self)
self.Tree.setHeaderLabels(["Name"])  

item = qt.QTreeWidgetItem("Name") 
self.Tree.addTopLevelItem(item)

childItem = qt.QTreeWidgetItem("Name") #<------- This I'd like to copy

item.addChild(childItem)

bttn = qt.QPushButton("Copy This Widget", self)
bttn.clicked.connect(self.Copy)

self.Tree.setItemWidget(childItem, 1, bttn)

我希望能够复制 childItem,以便我可以将它放在 QTreeWidget 中。

没有直接的方法从其项目小部件中获取 QTreeWidgetItem,因此您必须明确地将索引存储在某处以便以后可以访问它。

一种方法是将索引作为 属性:

添加到项目小部件
bttn = qt.QPushButton("Copy This Widget", self)
index = QtCore.QPersistentModelIndex(self.Tree.indexFromItem(childItem))
bttn.setProperty('index', index)    

...

def Copy(self):
    index = self.sender().property('index')
    if index.isValid():
        copyItem = qt.QTreeWidgetItem(self.Tree.itemFromIndex(index))