3

在我自己的 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.

当我将一个项目从 aQListWidget拖到 TextEdit 中时,处理程序也会被调用,但hasText()它是false. 无论如何,我该如何处理 DropEvent ?(QDragEnterEvent基本上是一个QDropEvent

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

4

1 回答 1

5

您可以使用 询问QDragEnterEvent它包含哪些格式的 mime 数据QMimeData::formats()

例如:

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如何在 Qt 中解码“application/x-qabstractitemmodeldatalist”以进行拖放?

于 2012-05-15T12:43:41.143 回答