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