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

标签 c++ qt ftp drag-and-drop

如何使用 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/

相关文章:

C++ : Symbols '<' and '>' in "template <smt> class_name" are overloaded or it's simply syntax?

c++ - 读取位置访问冲突 0xcccccccc

c++ - 如何在 NetBeans 中使用框架

c++ - 在 Qt 中注册元类型的模式

c++ - MFC :GetFile(Download) issue 中的 FTPClient

c++ - 没有类型转换的空指针

c++ - std::variant<>::get() 不能用 Apple LLVM 10.0 编译

c++ - 为什么 foreach 使用 const 引用进行迭代?

azure - 在文件名中使用通配符 (*) 时,无法从 Azure 数据工厂中的 SFTP 复制文件

ftp - 通过 Internet 共享文件 - WebDAV/SMB/FTP