【问题标题】:Qt: send QPixmap in QDrag's QMimeData?Qt:在 QDrag 的 QMimeData 中发送 QPixmap?
【发布时间】:2012-06-20 19:28:10
【问题描述】:

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

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

我尝试从QListWidget 拖放到QGraphicsView

【问题讨论】:

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


    【解决方案1】:

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

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

    QMimeData 允许您一次传递多种格式,这些选项是非排他性的。但是,您应该对从重新实现 QMimeData::formats() 返回的格式进行排序,以降低特异性,即您的应用私有格式排在第一位,text/uri-list 排在最后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 2011-01-19
      • 2013-04-18
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多