gpt4 book ai didi

c++ - (Qt 或其他)在 Windows 桌面或 explorer.exe 上使用 http 或 ftp 协议(protocol)拖放 mime 类型 uri-list 的数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:05 25 4
gpt4 key购买 nike

如何使用 Qt 或您使用的任何其他库或语言将文件从协议(protocol) http 和 ftp 拖放到 Windows 桌面或 explorer.exe?这将是我正在寻找的同一件事。

例如:您可以使用 http 协议(protocol)将 Image 从 Chrome 浏览器拖放到 Windows 桌面。

我的代码只适用于 file:///协议(protocol)。此代码不起作用。

QMimeData *mime = new QMimeData;
QList<QUrl> urls;
urls.push_back(QUrl("http://localhost/test/images.jpg"));
mime->setUrls(urls);
drag.setMimeData(mime);
drag.setPixmap(QPixmap(":/Image (139).jpg"));
drag.exec(Qt::MoveAction | Qt::CopyAction);

但这工作正常:

QMimeData *mime = new QMimeData;
QList<QUrl> urls;
urls.push_back(QUrl("file:///c:/images.jpg"));
mime->setUrls(urls);
drag.setMimeData(mime);
drag.setPixmap(QPixmap(":/Image (139).jpg"));
drag.exec(Qt::MoveAction | Qt::CopyAction);

最佳答案

将文件从 Web 保存到本地计算机(临时目录)并使用 file:/// 协议(protocol)的方法。

void MainWindow::downloadToTemp(QString p_FilePath)
{
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(p_FilePath)));
connect(reply, SIGNAL(finished()), this, SLOT(httpDownloadFinished()));
}

void MainWindow::httpDownloadFinished() {
QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
QString url = reply->url().toString();
qDebug() << url;
QString fileName = QDir::tempPath() + url.right(url.length() - url.lastIndexOf('/'));
QFile file(fileName);
if (file.open(QFile::WriteOnly)) {
file.write(reply->readAll());
file.flush();
file.close();

//Your file path - fileName
}
}

不要忘记错误处理:QNetworkReply::error(QNetworkReply::NetworkError code)

关于c++ - (Qt 或其他)在 Windows 桌面或 explorer.exe 上使用 http 或 ftp 协议(protocol)拖放 mime 类型 uri-list 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com