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;
就是这个,
如果拖动的次数非常非常多的话,
会使程序变慢的。
最好是把它定义为成员变量。