使用Qt拖放:在悬停时了解目标应用程序 - 是否可能?

时间:2011-08-31 10:19:29

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

我目前正在探索从Qt应用程序拖放到未知目标应用程序中的可能性。问题是Qt应用程序是否有可能接收即将接收丢弃的应用程序的信息(例如进程名称或标题)。

一个(组成)示例可能是将绘图从Qt窗口拖动到文本编辑器或电子表格编辑器。在前者中,它将数据作为图像提供,后者作为数据点。

似乎Qt在悬停时有点意识到丢弃的基础目标,因为在更改DropAction状态时会发出actionChanged信号。如果我没有弄错的话,似乎目标应用程序会查看拖动对象中包含的mime类型,并指示该操作将被放置在那里。我也没有从targetChanged信号中获取任何信息(据我所知,这是在当前的Qt应用程序中丢弃)。

任何指针都会有所帮助,我很乐意跟进。

2 个答案:

答案 0 :(得分:0)

您真的不知道哪个应用程序将收到您的滴滴。但是,这不会阻止您在与拖放关联的缓冲区中包括不同格式的数据。 QMimeData类提供方法setData,该方法将mimeType作为第一个参数。您可以为给定的mimetype放置一些数据,为不同的mimeType放置其他数据。它不会擦除第一个。 自定义mimeData通常对于应用程序内部的删除更为有用,但是有一些相对标准的设置:setText,setHtml,setUrls,setImageData和setColorData。

通常,您可以同时将一些文本和图像同时拖入到拖动中,接收应用程序应采用所需的内容。

答案 1 :(得分:0)

您可以将多种数据类型添加到拖动mime数据中。在创建可拖动数据时,您可以放置​​图像和指向数据(具有适当的mime类型),并且每个应用程序将决定其接受什么数据以及如何解释它。

有关更多详细信息,请检查https://doc.qt.io/qt-5/dnd.html#dragging