在我自己的 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包含哪些信息?
如何访问这些信息?
您可以使用 询问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::data:How to decode "application/x-qabstractitemmodeldatalist" in Qt for drag and drop?