3

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

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

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

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

    addFilesToListView(filePathList);
}

我怎样才能做到这一点?

4

2 回答 2

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";
}
于 2013-07-15T22:10:26.440 回答
0

您还可以创建一个全局列表,该列表将继续在每个 dropevent 上附加文件路径。所以最后你会得到一个完整的路径列表。

于 2013-07-17T04:43:27.860 回答