http://blog.csdn.net/xie376450483/article/details/5863810
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<const MyMimeData *>(event->mimeData());
if (myData) {
// access myData's data directly (not through QMimeData's API)
}
詳細例程看
http://blog.csdn.net/xie376450483/archive/2010/08/25/5838892.aspx
http://blog.csdn.net/xie376450483/archive/2010/08/26/5839058.aspx