拖放Qt:知道目标应用程序悬停-是可能的

Drag and drop with Qt: Knowing target application on hover - is it possible?

本文关键字:悬停 应用程序 Qt 目标 拖放      更新时间:2023-10-16

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

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

似乎Qt在悬停时多少知道drop的潜在目标是什么,因为在改变DropAction状态时发出actionChanged信号。如果我没有弄错的话,目标应用程序似乎会查看拖动对象中包含的mime类型,并指示如果在那里放置该操作将是什么。我也没有从targetChanged信号中得到任何东西(据我所知,这是为了在当前的Qt应用程序中删除)。

您可以为拖动mime数据添加几种数据类型。在创建可拖动数据时,您可以放置图像和点数据(使用适当的mime类型),每个应用程序将决定它接受什么数据以及如何解释它。

详细信息请查看https://doc.qt.io/qt-5/dnd.html#dragging

您无法真正知道哪个应用程序将接收您的drop。但是,这并不妨碍您在与拖放操作相关联的缓冲区中包含不同格式的数据。类QMimeData提供了setData方法,该方法将mimeType作为第一个参数。您可以将一些数据用于给定的mime类型,而另一些数据用于不同的mime类型。它不会擦掉第一个。自定义mime数据通常对应用程序中的drop更有用,但也有一些相对标准的:setText, setHtml, setUrls, setImageData和setColorData。

通常情况下,你可以同时把一些文本和一些图像放到拖拽中,接收应用程序应该选择它需要的那个