如何从QWebView下载文件

How to download files from QWebView?

本文关键字:下载 文件 QWebView      更新时间:2023-10-16

我用QT Creator和QWebView创建了一个小型web浏览器。我的工作非常好,页面加载非常快。但是我怎样才能使我的浏览器能够下载文件呢?我浏览了信号和功能列表,但没有找到有用的东西。我怎样才能发现一个QUrl是否包含一个链接到文本/html以外的文件,以便我可以下载它?

QWebView有一个' q网页'成员,你可以访问它的指针与webView.page()。这就是你应该看的地方。q网页有两个信号:downloadRequested(..)unsupportedContent(..)。我相信只有当用户右键单击链接并选择"保存链接"时才会发出downloadrequest,当目标URL无法显示(不是html/文本)时才会发出unsupportedContent。

但是要发出unsupportedContent,您应该将forwardUnsupportedContent设置为True,并使用webPage.setForwardUnsupportedContent(true)函数。下面是我创建的一个最小示例:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->webView->page()->setForwardUnsupportedContent(true);
    connect(ui->webView->page(),SIGNAL(downloadRequested(QNetworkRequest)),this,SLOT(download(QNetworkRequest)));
    connect(ui->webView->page(),SIGNAL(unsupportedContent(QNetworkReply*)),this,SLOT(unsupportedContent(QNetworkReply*)));
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::download(const QNetworkRequest &request){
    qDebug()<<"Download Requested: "<<request.url();
}
void MainWindow::unsupportedContent(QNetworkReply * reply){
    qDebug()<<"Unsupported Content: "<<reply->url();
}

请记住,MainWindow::download(..)和MainWindow::unsupportedContent(..)是SLOT s !