拖放到QTreeView中的QStandardItemModel不起作用
问题描述:
我有一个附有QStandardItemModel的QTreeView。我试图启用拖放从外部来源。我已经完成了文档中提到的所有提及拖放和拖放项目视图,但事情并不正确。当我尝试将文件拖到树视图上时,该图标上始终有一个X,表示该放置不可用。 (我使用OS X,我不知道这个图标看起来像是什么窗口)。我希望能够放弃某些项目,但直到我了解基础知识,我无法编写该功能。拖放到QTreeView中的QStandardItemModel不起作用
这里是我的子类的树视图源代码:
MyTreeView::MyTreeView(QWidget *parent) :
QTreeView(parent)
{
setContextMenuPolicy(Qt::CustomContextMenu);
setAcceptDrops(true);
setDropIndicatorShown(true);
}
void MyTreeView::dragEnterEvent(QDragEnterEvent *event)
{
event->acceptProposedAction();
}
void MyTreeView::dropEvent(QDropEvent *event)
{
qDebug("I am here");
event->acceptProposedAction();
}
这里是子类的标准产品型号来源:
MyStandardItemModel::MyStandardItemModel(QObject *parent) :
QStandardItemModel(parent)
{
}
Qt::DropActions MyStandardItemModel::supportedDropActions() const
{
return Qt::CopyAction;
}
Qt::ItemFlags MyStandardItemModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags defaultFlags = QStandardItemModel::flags(index);
if (index.isValid())
return Qt::ItemIsDropEnabled | defaultFlags;
else
return defaultFlags;
}
bool MyStandardItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
{
qDebug("I am in the model");
}
正如我所说的,图标是告诉我,下降不可用,但如果我放弃它,则会从树视图中打印出“我在这里”文本。但是模型视图中的文字“我在模型中”从来不会被打印出来。我不确定我需要做什么才能让模型识别可用的下拉列表并更改图标,或者让dropMimeData函数调用。任何帮助表示赞赏,因为我一遍又一遍地阅读了文档,而且我明显错过了一些东西。
答
我想这是因为你还需要重新实现dragMoveEvent(QDragMoveEvent*)
方法。否则,每个项目将独立宣布他们不能接受放置。
你必须在你的MyTreeView :: dropEvent()实现中调用'QTreeView :: dropEvent()'。 –