我试图在我的Qt5应用程序中创建一个按钮,可以将其拖到应用程序之外,当被删除时,会将文件复制到该位置。
以Google Chrome浏览器为例。下载文件时,可以将其从窗口底部显示的列表拖动到任何其他位置,例如目录。
是否有专门的小部件来完成这项任务,还是我必须自己写一个?如果是这样,怎么样?我是一名有能力的C ++程序员,但对Qt框架没有多少经验。
答案 0 :(得分:2)
在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将接受它并将文件复制到您放置的位置。