如何在自定义QTextEdit中接受来自QListWidget的拖放

时间:2012-05-15 09:04:37

标签: qt drag-and-drop

在我自己的TextEdit中(继承QTextEdit)我实现了这个DragEventHandler:

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

    QTextEdit::dragEnterEvent(e);
}

示例:当我在TextEdit中选择文本并将其拖动时, 调用处理程序,hasText()true

当我将项目从QListWidget拖到TextEdit时,处理程序也会被调用 但是hasText()false。我怎么能处理DropEvent呢? (QDragEnterEvent基本上是QDropEvent

我知道这可以在DropHandler中完成,但我的问题是 来自QListWidget的DropEvent包含哪些信息? 如何访问这些信息?

1 个答案:

答案 0 :(得分:4)

您可以使用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::data数据进行解码:How to decode "application/x-qabstractitemmodeldatalist" in Qt for drag and drop?