如何处理下载在QWebEngine

How to handle downloads in QWebEngine?

本文关键字:下载 QWebEngine 处理 何处理      更新时间:2023-10-16

我知道QWebEngineProfile和QWebEngineDownloadItem是用来下载东西的。但我不明白是怎么回事。我尝试使用连接来实现下载。这是我的代码

void MainWindow::handleDownloadSlot(QWebEngineDownloadItem *download) {
    download->accept();
}
void MainWindow::downloadRequested(QWebEngineDownloadItem *download) {
    download->accept();
}
  connect (pro,SIGNAL(downloadRequested(QWebEngineDownloadItem *)),this,SLOT(handleDownloadSlot(QWebEngineDownloadItem *)));

查看Web演示浏览器示例,其中包括一个带有下载管理器的示例。

如果你正在共享一个默认的QWebEngineProfile,试试:

    connect(QWebEngineProfile::defaultProfile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)),
                this, SLOT(downloadRequested(QWebEngineDownloadItem*)));

对于在自定义qwebengineepage中定义的配置文件,尝试:

    connect(webView->page()->profile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)),
                this, SLOT(downloadRequested(QWebEngineDownloadItem*)));

现在处理你的下载开始:

void MainWindow::downloadRequested(QWebEngineDownloadItem* download) {
        if (download->savePageFormat() != QWebEngineDownloadItem::UnknownSaveFormat)  {
            qDebug() << "Format: " <<  download->savePageFormat();
            qDebug() << "Path: " << download->path();
            // If you want to modify something like the default path or the format
            download->setSavePageFormat(...);
            download->setPath(...);
            // Check your url to accept/reject the download
            download->accept();
        }
}

如果你想显示下载进度的进度对话框,只需使用类QWebEngineDownloadItem中可用的信号:

connect(download, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(setCurrentProgress(qint64, qint64)));