问:在QDrag的QMimeData中发送QPixmap?

HWe*_*nde 1 qt mime drag-and-drop qlistwidget qgraphicsview

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

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

我尝试拖放QListWidget到一个QGraphicsView.

Mar*_*utz 5

有多种方式可以发送QPixmap通过QMimeData:

  1. 通过将其编码为PNG等文件格式并使用mime-type发送image/png(QMimeData具有内置支持,参见QMimeData::imageData()).
  2. 由串行化的QPixmapQByteArray使用QDataStream和应用程序特定的MIME类型下发送所述序列化application/x-app-name.
  3. 通过将图像数据写入磁盘上的文件并使用mime-type为其发送文件URL text/uri-list(QMimeData内置对此支持,参见QMimeData::urls()).这允许将这些图像拖到文件管理器或桌面上.
  4. 类似于上面的(2),你也可以创建一个QGraphicsItem,将其地址填入a QByteArray并在特定于应用程序的mime类型下发送.如果拖动在另一个进程中结束,这当然不起作用(接收站点可​​以测试,因为在那种情况下QDragEvent::source()返回0),并且需要特别小心处理图形项的生命周期.

如果QMimeData允许您一次传递多种格式,这些选项是非独占的.但是,您应该按照QMimeData::formats()特定性降低的顺序对从重新实现中返回的格式进行排序,即您的应用程序专用格式是第一个,也是text/uri-list最后一个.