如何从QWebView下载文件?

时间:2013-05-02 19:30:17

标签: c++ qt

我使用QT Creator和QWebView创建了一个小型Web浏览器。我的工作非常好,页面加载非常快。但是如何让我的浏览器能够下载文件?我查看了信号和功能列表,但我找不到可以帮助我的东西。 我如何知道QUrl是否包含指向text / html以外的文件的链接,以便我可以下载它?

1 个答案:

答案 0 :(得分:9)

QWebView有一个'QWebPage'成员,您可以使用webView.page()访问它的指针。这是你应该看的地方。 QWebPage有两个信号:downloadRequested(..)unsupportedContent(..)。我相信dowloadRequest仅在用户右键单击链接并选择“保存链接”时发出,并且当无法显示目标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!

相关问题