在我自己的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包含哪些信息?
如何访问这些信息?
答案 0 :(得分:4)
您可以使用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问题涵盖了对QByteArray
返回的QMimeData::data
数据进行解码:How to decode "application/x-qabstractitemmodeldatalist" in Qt for drag and drop?