2012-05-15 42 views
1

在我自己的文字編輯(繼承QTextEdit)我實現這個DragEventHandler:如何接受拖動和自定義的QTextEdit從QListWidget下降

void CustomTextEdit::dragEnterEvent(QDragEnterEvent* e) 
{ 
    qDebug() << "void CustomTextEdit::dragEnterEvent(QDragEnterEvent* e)"; 
    qDebug() << "e->mimeData()->hasText() is" << e->mimeData()->hasText(); 

    QTextEdit::dragEnterEvent(e); 
} 

例:當我選擇的文本編輯中的文本和周圍拖動它, 的處理程序被調用,並且hasText()true

當我從QListWidget將項目拖動到文本編輯處理程序也被調用 但hasText()false。我怎樣才能處理DropEvent呢? (QDragEnterEvent基本上是QDropEvent

我知道,這將在DropHandler做,但我的問題是 什麼信息從QListWidget來的DropEvent包含哪些內容? 如何獲取這些信息?

回答

3

您可以使用QMimeData::formats()詢問QDragEnterEvent它包含哪些格式的MIME數據。

例如:

const QMimeData *mimeData = e->mimeData(); 
QStringList mimeFormats = mimeData->formats(); 
foreach(QString format, mimeFormats) 
    qDebug() << format; 

從這一點我們可以看出該事件的mimeData的格式application/x-qabstractitemmodeldatalist

可以用QMimeData::data(QString mimeType)來檢索任何特定格式的數據,儘管在application/x-qabstractitemmodeldatalist的情況下,數據以非常特定的方式進行編碼。這個以前的SO問題涵蓋了從QByteArray解碼數據返回QMimeData::dataHow to decode "application/x-qabstractitemmodeldatalist" in Qt for drag and drop?

+0

謝謝你這個優秀的答案!這正是我想知道的。 – HWende