如何接受拖动和自定义的QTextEdit从QListWidget下降

问题描述:

在我自己的文字编辑(继承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包含哪些内容? 如何获取这些信息?

您可以使用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