【发布时间】:2021-04-28 02:02:03
【问题描述】:
我正在尝试学习如何在 Qt 中实现拖放到模型/视图设置。作为练习,我尝试对 Qt 网站上的Editable Tree Model example 进行此操作:
为了通过拖放扩展它,我按照 Qt 文档中的说明进行了操作 "Using Drag and Drop with View Items",更具体地说是 "Using model/view classes"。
我将尝试的代码放在a GitHub repository。主要修改如下,但还有其他重要修改; here are the full changes 根据文档。
/* mainwindow.cpp -- THIS IS NOT ALL CHANGES -- See link above for all changes */
view->setSelectionMode(QAbstractItemView::SingleSelection);
view->setDragEnabled(true);
view->viewport()->setAcceptDrops(true);
view->setDropIndicatorShown(true);
view->setDragDropMode(QAbstractItemView::DragDrop);
但是,这并不完全奏效。虽然我可以拖放项目,但复制的项目显示为空白。这个可以在this screen capture看到,但是主要截图是:
请注意,文档描述了需要重新实现 QAbstractItemModel 的 dropMimeData 以实现拖放功能,而我没有这样做。这是因为,在检查 source code for that class 时,我发现 its default implementation 应该已经可以在拖放中复制项目,因为它是 uses the default application/x-qabstractitemmodeldatalist MIME 格式和 uses setItemData 用于插入的项目。
这里有什么问题?是默认的dropMimeData 不起作用,还是其他原因?
【问题讨论】:
标签: c++ qt drag-and-drop qabstractitemmodel qabstractitemview