2017-10-12 53 views
0

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

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

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

+0

如果有关系,这是一个zip存档文件,我试图在程序之外使其可拖动。 – Farahmand

回答

2

你试过Draggable Text Example

dragwidget.cpp文件,如果你看一个功能mousePressEvent, 你可以看到QDrag需要mimeData

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

Mimedata定义QDrag的行为,就像如果你拖动图片,文件或文本或任何其他。

如果你想告诉您在拖有文件窗口,您需要在您的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会接受它,复制,你拖放文件。

+0

什么是孩子?什么是hotSpotMimeDayaKey?这不是很清楚,朋友。 – Farahmand

+0

我编辑了我的评论,并为我可怜的英语感到抱歉 –

相关问题