在我自己的 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包含什么信息?
如何访问这些信息?
最佳答案
您可以使用 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?
关于qt - 如何在自定义 QTextEdit 中接受来自 QListWidget 的拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597444/