将文件拖放到Qt5应用程序之外

时间:2017-10-12 11:28:28

标签: c++ qt drag-and-drop

我试图在我的Qt5应用程序中创建一个按钮,可以将其拖到应用程序之外,当被删除时,会将文件复制到该位置。

以Google Chrome浏览器为例。下载文件时,可以将其从窗口底部显示的列表拖动到任何其他位置,例如目录。

是否有专门的小部件来完成这项任务,还是我必须自己写一个?如果是这样,怎么样?我是一名有能力的C ++程序员,但对Qt框架没有多少经验。

1 个答案:

答案 0 :(得分:2)

你试过Draggable Text Example吗?

dragwidget.cpp文件中,如果你看一下函数mousePressEvent, 你可以看到QDrag需要mimeData

QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData); 

Mimedata定义您的QDrag行为,就像拖动图像,文件或文本或其他任何内容一样。

如果您想告诉Windows您的拖动中有文件,则需要在您的mimedata中添加以下内容的网址:

mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile("D:/test.txt"));

在draggabletext示例中,mimedata包含文本,您可以在第[158:161]行看到。

但是如果你替换现有的:

mimeData->setText(child->text());
mimeData->setData(hotSpotMimeDataKey(),
                  QByteArray::number(hotSpot.x()) + ' ' + 
QByteArray::number(hotSpot.y()));

通过

mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile("D:/test.txt"));

当您在Windows资源管理器中拖动文本时,Windows将接受它并将文件复制到您放置的位置。