我无法在特定索引处正确插入QTreeWidgetItem,在这种情况下,我将从树中删除所有QTreeWidgetItems,对它们的Date对象进行自定义排序,然后将它们重新插入QTreeWidgetItem。在
但是,在插入(甚至一次插入一个)时,QTreeWidgetItem没有插入到正确的位置。在
下面的代码打印出来:
索引0:0
索引0:1索引1:0
索引0:2索引1:1索引2:0
指数0:3指数1:2指数2:0指数3:1
指数0:4指数1:2指数2:0指数3:1指数4:3
print 'index 0: ', self.indexOfTopLevelItem(childrenList[0])
self.insertTopLevelItem(0, childrenList[1])
print 'index 0: ', self.indexOfTopLevelItem(childrenList[0]), ' index 1: ',\
self.indexOfTopLevelItem(childrenList[1])
self.insertTopLevelItem(0, childrenList[2])
print 'index 0: ', self.indexOfTopLevelItem(childrenList[0]), ' index 1: ',\
self.indexOfTopLevelItem(childrenList[1]), ' index 2: ', \
self.indexOfTopLevelItem(childrenList[2])
self.insertTopLevelItem(0, childrenList[3])
print 'index 0: ', self.indexOfTopLevelItem(childrenList[0]), ' index 1: ',\
self.indexOfTopLevelItem(childrenList[1]), ' index 2: ',\
self.indexOfTopLevelItem(childrenList[2]), 'index 3: ',\
self.indexOfTopLevelItem(childrenList[3])
self.insertTopLevelItem(0, childrenList[4])
print 'index 0: ', self.indexOfTopLevelItem(childrenList[0]),\
' index 1: ', self.indexOfTopLevelItem(childrenList[1]),\
' index 2: ', self.indexOfTopLevelItem(childrenList[2]),\
'index 3: ', self.indexOfTopLevelItem(childrenList[3]),\
'index 4: ', self.indexOfTopLevelItem(childrenList[4])
问题一定出在代码的其他地方。也许你没有正确地移除这些物品?因为以下是有效的:
你可以做你的自定义排序,而不需要重新填充树。你只需要重载item的“less”操作符。 注意,QT通过在item中查找,计算出在单元格中绘制什么,它应该是什么大小,它应该包含什么文本
当您创建一个项时,您需要向构造函数提供一些字符串以显示该项。将此字符串放入数据(。。,QtCore.Qt.EditRole),因此,将数据传递到constructor的等效方法是使用以下内容设置数据:
^{pr2}$在内部,数据只是一个数组,你可以放置任何你想要的东西,它的索引就是角色(Qt.EditRole是2,Qt.ToolTipRole是3等),所以我们只让某个角色包含我们的数据,告诉比较运算符比较这些值,并在设置ValueRole时告诉setData set DisplayRole。这是样品:
我试过了,效果很好。当然,您可以避免继承和直接重写lt,因为我们有duck类型,所以使用UserRole本身来保存数据,而set data确实直接与setData(col、role、val)一起显示,甚至在edit/display角色中只保存文本,只在datetime中转换,但这看起来很难看。 注意,data()包含QVariant。当您设置数据时,py对象会自动转换,您需要调用toPyObject()来恢复原来的值。在
相关问题 更多 >
编程相关推荐