我在我的软件中实现了拖放操作。基本上我有一个包含文件路径的QTableView。用户必须能够在QTableView中拖放文件才能添加它们。
我已经完成了大部分工作,但我仍然在迭代QDropEvent对象中包含的所有路径。我必须实现dropEvent
方法。
void Generous::dropEvent(QDropEvent *dropEvent) {
QStringList filePathList;
// Way to iterate dropEvent and append each file path to filePathList.
addFilesToListView(filePathList);
}
我该怎么做?
答案 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。因此,最后您将获得完整的路径列表。