从QDropEvent中检索所有文件路径

时间:2013-07-15 21:26:41

标签: qt

我在我的软件中实现了拖放操作。基本上我有一个包含文件路径的QTableView。用户必须能够在QTableView中拖放文件才能添加它们。

我已经完成了大部分工作,但我仍然在迭代QDropEvent对象中包含的所有路径。我必须实现dropEvent方法。

void Generous::dropEvent(QDropEvent *dropEvent) {
    QStringList filePathList;

    // Way to iterate dropEvent and append each file path to filePathList.

    addFilesToListView(filePathList);
}

我该怎么做?

2 个答案:

答案 0 :(得分:3)

我猜想使用文件路径进行拖放会使用MIME类型text/uri-list

如果是这样,您应该能够检索如下数据:

if (dropEvent->mimeData()->hasUrls())
{
    foreach (QUrl url, dropEvent->mimeData()->urls())
    {
        filePathList << url.toLocalFile();
    }
}

无论如何,由于我不确定,最好先检查drop事件中存储的信息类型,并查看提取文件路径的位置和方式:

QStringList availableMimeTypes = dropEvent->mimeData()->formats();
qDebug() << "available MIME types:" << dropEvent->mimeData()->formats() << "\n";

foreach(QString mimeType, availableMimeTypes)
{
    qDebug() << "data for MIME type" << mimeType << " :";
    qDebug() << dropEvent->mimeData()->data(mimeType) << "\n";
}

答案 1 :(得分:0)

您还可以创建一个全局列表,该列表将继续在每个dropevent上附加filePath。因此,最后您将获得完整的路径列表。