QMiniData
QMimeData類提為數據提供一個容器,用來記錄關于MIME類型數據的信息
QMimeData常用來描述保存在剪切板里信息,或者拖拽原理
QMimeData對象把它所保存的信息和正確的MIME類型連接起來來保證信息可以被安全的在應用程序之間轉移,或者在同一個應用程序之間拷貝
QMimeData對象通產雇傭new來創建,并且支持QDrag和QClipboard對象,這可以使QT管理他們所使用的內存
單一的QMimeData對象可以同時用好幾種不同的格式來存儲同一個數據,formats()函數返回可以用的數據
格式的list,data()函數可以返回和MIME類型相連的數據類型,setData()用來為MIME類型設置數據
| Tester | Getter | Setter | MIME Types |
| hasText() | text() | setText() | text/plain |
| hasHtml() | html() | setHtml() | text/html |
| hasUrls() | urls() | setUrls() | text/uri-list |
| hasImage() | imageData() | setImageData() | image/ * |
| hasColor() | colorData() | setColorData() | application/x-color |
For example, if your write a widget that accepts URL drags, you would end up writing code like this: 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()) {...}} }
There are three approaches for storing custom data in aQMimeData object:
1.Custom data can be stored directly in aQMimeData object as aQByteArray usingsetData(). For example:
QByteArray csvData = ...; QMimeData *mimeData = new QMimeData; mimeData->setData("text/csv", csvData);
2.We can subclass QMimeData and reimplement hasFormat(), formats(), and retrieveData(). 3.If the drag and drop operation occurs within a single application, we can subclass QMimeData and add extra data in it, and use a qobject_cast() in the receiver's drop event handler. For example: 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)} }
總結
- 上一篇: Python 读写操作Excel ——
- 下一篇: 关于定位问题