问:在QDrag的QMimeData中发送QPixmap?

时间:2012-06-20 19:28:11

标签: qt drag-and-drop mime qgraphicsview qlistwidget

我从QListWidgetItem创建一个拖动对象。 我可以在此拖动对象中将文本作为mime数据发送。

如何发送像素图并从mime数据中检索它? 甚至可以创建QGraphicsItem并检索它吗?

我试图拖动&从QListWidget下降到QGraphicsView

1 个答案:

答案 0 :(得分:5)

通过QPixmap发送QMimeData的方法有多种:

  1. 将其编码为PNG等文件格式并使用mime-type image/png发送(QMimeData内置支持,参见QMimeData::imageData())。
  2. 通过使用QPixmapQByteArray序列化为QDataStream并在特定于应用的mime类型application/x-app-name下发送序列化。
  3. 将图像数据写入磁盘上的文件并使用mime-type text/uri-list为其发送文件URL(QMimeData内置支持,参见{{1} })。这允许将这些图像拖到文件管理器或桌面上。
  4. 类似于上面的(2),您还可以创建QMimeData::urls(),将其地址填入QGraphicsItem并在特定于应用的mime类型下发送。当拖动在另一个进程中结束时,这不起作用(接收站点可​​以测试,因为QByteArray在这种情况下返回QDragEvent::source()),并且需要特别小心处理图形项的生命周期
  5. 看作0允许您一次传递多种格式,这些选项是非独占的。但是,您应该按照QMimeData重新实现的顺序对返回的格式进行排序,以降低特异性,即您的应用私有格式排在第一位,QMimeData::formats()排在最后。