• 6665阅读
  • 1回复

关于 qt QDrag 自定义 托拽类型(格式 ) [复制链接]

上一主题 下一主题
离线many_many
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-30
void mouseMoveEvent()
{
           QMimeData *mimeData = new QMimeData;
            QByteArray Ary;
            QString str = "do what you want";
            Ary.append(str);
            mimeData->setData("UserFormat",Ary);
            mimeData->setText(strText);
            QDrag *drag = new QDrag(this);
            drag->setMimeData(mimeData);    
            drag->exec(Qt::MoveAction);
}



需要说明的是:

mimeData->setData("UserFormat",Ary);
这个就是用来自定义拖动类型的。
在dragenter , dragmove , dragleaveevent里面都是可用作判断条件的。
前面的参数 “UserFormat“ 随便你定义成什么东东啦。

当然,Ary 你也可以用你想要的数据进行填充。
那么,一切都ok了。

判断的时候只需要使用
if(event->mimedata()->hasFormat(你刚才自定义的拖动类型))
{
    做你想做的事情哦!
}

你也可以取出drag的数据哦,用data(你刚才自定义的拖动类型)就可以了哦!

很简单吧?
顺便提一下,使用了drag->exec(Qt::MoveAction); 后
qt会自动去找dragenterevent来接,不需要你额外的connect.

好啦,
看到网上很多都是这样写的。
其实,这里有内存泄漏的。
QMimeData *mimeData = new QMimeData;

就是这个,
如果拖动的次数非常非常多的话,
会使程序变慢的。
最好是把它定义为成员变量。



联系方式:
lishenzhi123@163.com
QQ:904421718
离线wd007

只看该作者 1楼 发表于: 2010-04-30
这个写的不错。
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
快速回复
限100 字节
 
上一个 下一个