我有一个简单的清单:
mylist = ["foo", "bar", "baz"]
和一个带有 1 列的 QtTableWidget。我想让 mylist 中的数据与 QtTableWidget 中的数据保持同步,包括允许拖放重新排序(即,用户可以这样做,并mylist
得到更新)和编程更改(即,我更新mylist
并且表格得到更新)。
这样做的正确方法是什么?
我有一个简单的清单:
mylist = ["foo", "bar", "baz"]
和一个带有 1 列的 QtTableWidget。我想让 mylist 中的数据与 QtTableWidget 中的数据保持同步,包括允许拖放重新排序(即,用户可以这样做,并mylist
得到更新)和编程更改(即,我更新mylist
并且表格得到更新)。
这样做的正确方法是什么?
请注意,通常在 Qt/C++ 中无法将通用数据结构与视图链接起来。模型是这样的仪器数据结构,允许与视图进行简单的链接——通用列表,比如QStringList
不能那样使用。
在 Python 中,应该可以将属性注入到任何列表的现有实例中,以将其转换为模型,通知其视图对其所做的更改。我不知道是否有任何 Qt 到 Python 的桥可以做这种事情,我只能给出 C++ 的观点。欢迎了解 PyQt 或 PySide 的人加入并酌情进行编辑。
使用 aQStringListModel
作为模型。在视图上启用拖放重新排序,如下所示:
view.setDragEnabled(true);
view.setDropIndicatorShown(true);
view.setDragDropMode(QAbstractItemView::InternalMove);
我的另一个答案QListWidget
有一个完整的例子,它使用带有内置模型的便利小部件。作为起点,这可能会更好,对于可以用鼠标合理操作的列表,这是一个不错的选择。一般来说,如果一个模型有 100 多个项目,如果没有进行实时查找或某种修剪的方法,只用鼠标就无法轻松操作它——滚动这么多项目是可用性的噩梦。所以不要这样做。
Qt 的文档将是一个很好的开始学习的平台。阅读模型/视图框架。然后查看QStringListModel
您选择的视图,例如QTableView
或QListView
。