一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

QMimeData类提为数据提供一个容器,用来记录关于MIME类型数据的信息
QMimeData常用来描述保存在剪切板里信息,或者拖拽原理
QMimeData对象把它所保存的信息和正确的MIME类型连接起来来保证信息可以被安全的在应用程序之间转移

,或者在同一个应用程序之间拷贝
QMimeData对象通产雇佣new来创建,并且支持QDrag和QClipboard对象,这可以使QT管理他们所使用的内存

单一的QMimeData对象可以同时用好几种不同的格式来存储同一个数据,formats()函数返回可以用的数据

格式的list,data()函数可以返回和MIME类型相连的数据类型,setData()用来为MIME类型设置数据

对于大多数MIME类型,QMimeData提供方便的函数来获取数据

例如,如果想让一个widget接受URL拖拽,可以使用下面的代码

复制代码
 1  void MyWidget::dragEnterEvent(QDragEnterEvent *event)
 2  {
 3      if (event->mimeData()->hasUrls())
 4          event->acceptProposedAction();
 5  }
 6 
 7  void MyWidget::dropEvent(QDropEvent *event)
 8  {
 9      if (event->mimeData()->hasUrls()) {
10          foreach (QUrl url, event->mimeData()->urls()) {
11              ...
12          }
13      }
14  }
复制代码

有三种方法在QMimeData对象中来存储通常的数据
1、通常的数据可以象QByteArray()使用setData()直接存储在一个QMimeData对象中,例如

1 QByteArray csvData = ...;
2 QMimeData *mimeData = new QMimeData;
3 mimeData->setData("text/csv", csvData);

2、我们可以派生QMimeData类,继承hasFormat(),formats(),retrieveData()函数
3、如果拖拽行为发生在一个应用程序中,我们可以派生QMimeData类,并且为他添加额外的数据,
使用qobject_cast()在接受拖拽函数中,例如

1 void MyWidget::dropEvent(QDropEvent *event)
2 {
3    const MyMimeData *myData = qobject_cast(event->mimeData());
4       if (myData) {
5           // access myData's data directly (not through QMimeData's API)
6      }
7 }

 

posted on   一杯清酒邀明月  阅读(2031)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示