我正在使用类似于Macintosh Finder的PyQT5 QTreeWidget构建文件树浏览器。 (奇怪的是,似乎没有。)
我想将信息与每个QTreeWidgetItem相关联。这是显示的字符串之外的信息。
这样做的正确方法是什么?到目前为止,我已经提出:
QAbstractItemModel
?答案 0 :(得分:1)
- 子类QTreeWidgetItem并添加我自己的实例变量
醇>
根据docs:
子类化
当继承QTreeWidgetItem以提供自定义项时, 可以为它们定义新类型,以便它们可以 区别于标准物品。子类的构造函数 需要此功能需要调用基类构造函数 新类型值等于或大于
UserType
。
因此,如果您想要做一些可维护的事情并且想要使用QTreeWidget
,那么这个选项是合适的,因为它允许具有模块性。
- 以某种方式将信息填入模型,但我不完全确定如何做到这一点。也许我需要继承
醇>QAbstractItemModel
?
根据类的定义: QTreeWidget类提供使用预定义树模型的树视图
这意味着该类无法放置自定义模型,此功能的优点是易于使用,因为您不必使用较低级别的元素,缺点是:您无法自定义模型。
- 在
醇>QTreeWidgetItems
和我的其他信息之间创建一个关联数组? (似乎是一个非常糟糕的主意。)
您可以通过void QTreeWidgetItem::setData(int column, int role, const QVariant &value)
方法添加一些值,并通过QVariant QTreeWidgetItem::data(int column, int role) const
恢复。
如果要向项目添加信息,建议使用此选项,但不可扩展。
答案是第一个选项,但是对于这类任务我不建议使用QTreeWidget
,因为它有不必要的元素导致内存消耗增加和速度降低,所以使用{ {1}}并创建自定义模型,但如果要显示本地文件的信息,则已有一个实现它的模型:QTreeView
。
示例:
QFileSystemModel