5

我用 QT Creator 和 QWebView 创建了一个小型网络浏览器。我工作得很好,页面加载速度非常快。但是我怎样才能让我的浏览器能够下载文件呢?我查看了信号和功能列表,但没有找到可以帮助我的东西。如何确定 QUrl 是否包含指向 text/html 以外的文件的链接,以便我可以下载它?

4

1 回答 1

10

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

但是要发出 unsupportedContent ,您应该设置forwardUnsupportedContentTruewith function 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(..) 是SLOTs !

于 2013-05-02T20:32:56.897 回答