在PySide中保持QtTableWidget和列表同步的正确方法是什么?



我有一个简单的列表: mylist = ["foo", "bar", "baz"]

以及一个包含 1 列的 QtTableWidget。我想使mylist中的数据与QtTableWidget中的数据保持同步,包括允许拖放重新排序(即,用户可以这样做,并且mylist得到更新)和编程更改(即,我更新mylist并且表格得到更新)。

正确的方法是什么

请注意,一般来说,在Qt/C++中没有办法将通用数据结构与视图链接起来。模型是这样的检测数据结构,允许与视图进行简单的链接 - 通用列表,比如说QStringList不能那样使用。

在 Python 中,应该可以将属性注入到任何列表的现有实例中,以将其转换为一个模型,该模型通知其视图对其所做的更改。我不知道是否有任何Qt-to-Python桥做这种事情,我只能给出C++的观点。欢迎了解 PyQt 或 PySide 的人加入并酌情进行编辑。

对模型使用QStringListModel。在视图上启用拖放重新排序,如下所示:

view.setDragEnabled(true);
view.setDropIndicatorShown(true);
view.setDragDropMode(QAbstractItemView::InternalMove);

我的另一个答案有一个完整的示例,它使用便利小部件QListWidget及其内置模型。作为起点可能更好,对于可以用鼠标合理操作的列表,这是一个不错的选择。一般来说,如果一个模型有100多个项目,如果没有进行实时查找或某种修剪的方法,就不能只用鼠标轻松操作它 - 滚动这么多项目是可用性的噩梦。所以不要这样做。

Qt的文档将是开始学习的好盘子。阅读有关模型/视图框架的信息。然后查看QStringListModel和您选择的视图,例如QTableViewQListView

相关内容

最新更新