我如何拖放文件从协议http和ftp到Windows桌面或explorer.exe与Qt或任何其他库或语言你使用?这和我一直在寻找的东西是一样的。
例如:您可以将使用http协议的图像从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:///
协议的方法。
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)