qt - 如何在自定义 QTextEdit 中接受来自 QListWidget 的拖放

标签 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);
}

示例:当我在 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/

相关文章:

c++ - 自定义类型为 QByteArray

javascript - 将元素拖到其可滚动父 div 之外 - ( React-Draggable )

android - 在android中拖放textview

C++ qt编程,windows和linux

c++ - 在 SDL 1.2 中移动 SDL 窗口

c++ - 从 XBM 创建 QImage

qt - 在 Windows (MinGW) 的 Qt Creator 中使用地址清理器找不到 -lasan

css - 如何在拖放每个元素后创建一个类?

android - 通过在android中放置一个中心以圆形方式放置imageviews

java - 如何使用 Swing 创建拖放组件 GUI 构建器?