我(只是)希望能够使用QTableView拖放机制来移动现有行。我找到了很多资源(例如,这里,这里或这里),它们描述了拖放,插入等的某些方面,但我仍在努力使其适合我的情况。
这是我正在寻找的解决方案应该具备的功能:
本教程展示了一个非常接近我需要的解决方案,但它使用了一个QStandardItemModel而不是QAbstractTableModel对我来说看起来半优化的解决方案,因为我必须基于(我是对的吗?)QStandardItem需要的“镜像”数据结构进行操作。QStandardItemModel
下面附加了代表我当前进度的代码。
目前我看到两种可能的方法:
方法 1:实现QAbstractTableModel并实现所有需要的事件/槽以修改底层数据结构: * 优点:最通用的方法 * 优点:没有冗余数据 * 缺点:我不知道如何获知已完成的拖放操作以及什么索引移到了哪里
在我附加的代码中,我跟踪了我所知道的所有相关方法并打印出所有参数。这是将第 2 行拖到第 3 行时得到的结果
dropMimeData(data: ['application/x-qabstractitemmodeldatalist'], action: 2, row: -1, col: -1, parent: '(row: 2, column: 0, valid: True)')
insertRows(row=-1, count=1, parent=(row: 2, column: 0, valid: True))
setData(index=(row: 0, column: 0, valid: True), value='^line1', role=0)
setData(index=(row: 0, column: …Run Code Online (Sandbox Code Playgroud) 我想将Qt4程序移植到Qt5,并且未定义某些功能(例如QHeaderView :: setMoveable),但是我在qheaderview.h文件中看到具有一些魔术定义(QT_DEPRECATED_SINCE),应该可以重新启用它们。为了让QHeaderView :: setMovable重新出现,我该怎么做?我不希望重写我的代码,如果有这样的一种方式。