将数据与PyQt5 QTreeWidgetItem关联的正确方法是什么?

时间:2018-01-19 19:47:09

标签: python pyqt pyqt5

我正在使用类似于Macintosh Finder的PyQT5 QTreeWidget构建文件树浏览器。 (奇怪的是,似乎没有。)

我想将信息与每个QTreeWidgetItem相关联。这是显示的字符串之外的信息。

这样做的正确方法是什么?到目前为止,我已经提出:

  1. 子类QTreeWidgetItem并添加我自己的实例变量。
  2. 以某种方式将信息填入模型,但我不完全确定如何做到这一点。也许我需要继承QAbstractItemModel
  3. 在QTreeWidgetItems和我的附加信息之间创建一个关联数组? (似乎是一个非常糟糕的主意。)

1 个答案:

答案 0 :(得分:1)

  
      
  1. 子类QTreeWidgetItem并添加我自己的实例变量
  2.   

根据docs

  

子类化

     

当继承QTreeWidgetItem以提供自定义项时,   可以为它们定义新类型,以便它们可以   区别于标准物品。子类的构造函数   需要此功能需要调用基类构造函数   新类型值等于或大于UserType

因此,如果您想要做一些可维护的事情并且想要使用QTreeWidget,那么这个选项是合适的,因为它允许具有模块性。

  
      
  1. 以某种方式将信息填入模型,但我不完全确定如何做到这一点。也许我需要继承QAbstractItemModel
  2.   

根据类的定义: QTreeWidget类提供使用预定义树模型的树视图

这意味着该类无法放置自定义模型,此功能的优点是易于使用,因为您不必使用较低级别的元素,缺点是:您无法自定义模型。

  
      
  1. QTreeWidgetItems和我的其他信息之间创建一个关联数组? (似乎是一个非常糟糕的主意。)
  2.   

您可以通过void QTreeWidgetItem::setData(int column, int role, const QVariant &value)方法添加一些值,并通过QVariant QTreeWidgetItem::data(int column, int role) const恢复。

如果要向项目添加信息,建议使用此选项,但不可扩展。

答案是第一个选项,但是对于这类任务我不建议使用QTreeWidget,因为它有不必要的元素导致内存消耗增加和速度降低,所以使用{ {1}}并创建自定义模型,但如果要显示本地文件的信息,则已有一个实现它的模型:QTreeView

示例:

QFileSystemModel