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 }