Qt:在QDrag'中发送QPixmap;什么是QMimeData?

Qt:在QDrag'中发送QPixmap;什么是QMimeData?,qt,drag-and-drop,mime,qgraphicsview,qlistwidget,Qt,Drag And Drop,Mime,Qgraphicsview,Qlistwidget,我从QListWidgetItem创建了一个拖动对象。 我可以在此拖动对象中将文本作为mime数据发送 如何发送pixmap并从mime数据中检索它? 甚至可以创建一个QGraphicsItem并检索它吗 我尝试将QListWidget拖放到QGraphicsView通过qimedata发送QPixmap有多种方法: 通过将其编码为PNG等文件格式,并使用mime类型发送该文件(QMimeData),参见QMimeData::imageData()) 通过使用QDataStream将QPixma

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

如何发送pixmap并从mime数据中检索它? 甚至可以创建一个
QGraphicsItem
并检索它吗


我尝试将
QListWidget
拖放到
QGraphicsView
通过
qimedata
发送
QPixmap
有多种方法:

  • 通过将其编码为PNG等文件格式,并使用mime类型发送该文件(
    QMimeData
    ),参见
    QMimeData::imageData()
  • 通过使用
    QDataStream
    QPixmap
    序列化为
    QByteArray
    并在特定于应用程序的mime类型
    应用程序/x-app-name
    下发送序列化
  • 通过将图像数据写入磁盘上的文件,并使用mime类型
    text/uri list
    为其发送文件URL(
    QMimeData
    对此具有内置支持,请参见
    QMimeData::URL()
    )。这允许将这些图像拖到文件管理器或桌面上
  • 与上面的(2)类似,您还可以创建一个
    QGraphicsItem
    ,将其地址填充到
    QByteArray
    中,并以特定于应用程序的mime类型发送该地址。当然,如果拖动在另一个进程中结束(接收站点可以进行测试,因为在这种情况下,
    QDragEvent::source()
    返回
    0
    ),则这不起作用,并且需要特别小心处理图形项的生存期

  • 由于
    QMimeData
    允许您同时传递多种格式,因此这些选项是非独占的。但是,您应该对重新实现
    qmiedata::formats()
    后返回的格式进行排序,以降低特定性,即应用程序私有格式排在第一位,
    text/uri列表排在最后。

    通过
    qmiedata
    发送
    QPixmap
    有多种方法:

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