我有一个从QTreeView扩展的类,它有一个从QAbstractItemModel扩展的数据模型,我想将一个项目拖到它上面。
我的问题是这样,当我拖动时,我显示了拖动指示器,它显示要放在项目上的矩形,或者在项目之间放置一条线。当我在我的数据模型中收到dropMimeData时,我看不到检索这些数据的方法。我注意到QAbstractItemView上有一个dropIndicatorPosition,但它受到保护。所以我的问题是,如何在dropMimeData中知道drop是在项目之前,之前还是之后?
答案 0 :(得分:3)
好的,我找到了答案:
bool MyModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent)
如果QModelIndex有效(不是parent.row(),parent.column()为-1)那么它将作为其父对象放在该对象上,由我来决定将它放在哪个对象中模型。
如果它无效,那么行和列不是-1,并且我有一个无效的模型索引,并且该对象正在该位置插入。
这是在qt docs“Using Drag and Drop with Item Views”中 - 我只看过一般的拖放文档。