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

HWe*_*nde 3 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);
}
Run Code Online (Sandbox Code Playgroud)

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

当我从一个拖动一个项目QListWidget到文本编辑处理程序也被调用,但是hasText()false。我该如何处理 DropEvent 呢?(QDragEnterEvent基本上是一个QDropEvent

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

sam*_*m-w 5

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

例如:

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

由此我们可以看到事件的mimeData格式为application/x-qabstractitemmodeldatalist.

可以使用 检索任何特定格式的数据QMimeData::data(QString mimeType),但在 的情况下application/x-qabstractitemmodeldatalist,数据以非常特定的方式编码。之前的这个问题涵盖了从QByteArray返回的数据解码QMimeData::dataHow to decode "application/x-qabstractitemmodeldatalist" in Qt for drag and drop?