如何在自定义 QTextEdit 中接受来自 QListWidget 的拖放
Posted
技术标签:
【中文标题】如何在自定义 QTextEdit 中接受来自 QListWidget 的拖放【英文标题】:How to accept Drag and Drop from QListWidget in custom QTextEdit 【发布时间】:2012-05-22 18:29:32 【问题描述】:在我自己的 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】:您可以使用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 问题涵盖从 QMimeData::data
返回的 QByteArray
中解码数据:How to decode "application/x-qabstractitemmodeldatalist" in Qt for drag and drop?
【讨论】:
感谢您的出色回答!这正是我想知道的。以上是关于如何在自定义 QTextEdit 中接受来自 QListWidget 的拖放的主要内容,如果未能解决你的问题,请参考以下文章