(Qt或其他)拖放数据的mime类型的uri-list与协议http或ftp在Windows桌面或explorer.ex



我如何拖放文件从协议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)

最新更新