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