【问题标题】:How to accept Drag and Drop from QListWidget in custom QTextEdit如何在自定义 QTextEdit 中接受来自 QListWidget 的拖放
【发布时间】: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 包含哪些信息? 如何访问这些信息?

【问题讨论】:

    标签: qt drag-and-drop


    【解决方案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?

    【讨论】:

    • 感谢您的出色回答!这正是我想知道的。
    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2011-10-15
    • 2018-04-05
    • 1970-01-01
    • 2018-07-06
    相关资源
    最近更新 更多