0

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

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

这样做的正确方法是什么?

4

1 回答 1

2

请注意,通常在 Qt/C++ 中无法将通用数据结构与视图链接起来。模型是这样的仪器数据结构,允许与视图进行简单的链接——通用列表,比如QStringList不能那样使用。

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

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

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

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

Qt 的文档将是一个很好的开始学习的平台。阅读模型/视图框架。然后查看QStringListModel您选择的视图,例如QTableViewQListView

于 2012-06-28T20:44:41.137 回答