gpt4 book ai didi

qt - 拖放到 QTreeView 中的 QStandardItemModel 不起作用

转载 作者:行者123 更新时间:2023-12-01 12:43:10 33 4
gpt4 key购买 nike

我有一个带有 QStandardItemModel 的 QTreeView。我正在尝试启用从外部资源拖放。我已经完成了文档中提到的拖放以及使用项目 View 拖放的所有内容,但事情并不正常。当我尝试将文件拖到 TreeView 上时,图标上总是有一个 X 表示 drop 不可用。 (我使用 OS X,我不知道它的图标会是什么样子)。我希望能够放弃某些项目,但在我掌握基础知识之前,我无法编写该功能。

这是我的子类 TreeView 源代码:

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");
}

正如我所说,该图标告诉我 drop 不可用,但是如果我无论如何都将其删除, TreeView 中的文本“我在这里”会被打印出来。但是模型 View 中的文本“我在模型中”永远不会被打印出来。我不确定我需要做什么才能让模型识别出可用的水滴并更改图标,或者让 dropMimeData 函数调用。感谢您提供任何帮助,因为我一遍又一遍地阅读了文档,但我显然遗漏了一些东西。

最佳答案

我认为这是因为您还需要重新实现 dragMoveEvent(QDragMoveEvent*)方法。否则,每件商品都会独立地声明他们不能接受掉落。

关于qt - 拖放到 QTreeView 中的 QStandardItemModel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610494/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com