Chinaunix首页 | 论坛 | 博客
  • 博客访问: 410135
  • 博文数量: 168
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-09 13:46
文章分类

全部博文(168)

文章存档

2015年(51)

2014年(30)

2013年(87)

我的朋友

分类: LINUX

2015-05-19 14:21:00

原文地址:QMimeData类 作者:暗夜linux

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

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

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

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

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

例如,如果想让一个widget接受URL拖拽,可以使用下面的代码
 void MyWidget::dragEnterEvent(QDragEnterEvent *event)
 {
     if (event->mimeData()->hasUrls())
         event->acceptProposedAction();
 }

 void MyWidget::dropEvent(QDropEvent *event)
 {
     if (event->mimeData()->hasUrls()) {
         foreach (QUrl url, event->mimeData()->urls()) {
             ...
         }
     }
 }

有三种方法在QMimeData对象中来存储通常的数据
1、通常的数据可以象QByteArray()使用setData()直接存储在一个QMimeData对象中,例如
QByteArray csvData = ...;
 QMimeData *mimeData = new QMimeData;
 mimeData->setData("text/csv", csvData);
2、我们可以派生QMimeData类,继承hasFormat(),formats(),retrieveData()函数
3、如果拖拽行为发生在一个应用程序中,我们可以派生QMimeData类,并且为他添加额外的数据,
使用qobject_cast()在接受拖拽函数中,例如
  void MyWidget::dropEvent(QDropEvent *event)
     {
 const MyMimeData *myData=
          qobject_cast(event->mimeData());
      if (myData) {
          // access myData's data directly (not through QMimeData's API)
     }

阅读(1668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~