QT4.8.4 QWebView中點選連結的處理
阿新 • • 發佈:2018-11-04
一般在Dialog中使用QWebView會直接拖一個QWebView元件、 但是不能點選連結,然後會採用
connect(ui->webView,SIGNAL(linkClicked(QUrl)),this,SLOT(openUrl(QUrl)));
void web::openUrl(QUrl url){
ui->webView->load(url);
}
來處理網頁中載入的連結、但是這樣不可以不能確定那個連線是在新視窗中開啟、那個是在原來的視窗中開啟。
如果是新彈出視窗的話、會響應createWindow(); 可以參考。
在QWebPage中有這麼一個函式、重寫 acceptNavigationRequest ( QWebFrame * frame, const QNetworkRequest & request, NavigationType type )函式
程式碼如下:
webPage.h
#ifndef WEBPAGE_H #define WEBPAGE_H #include <QWebPage> #include <QNetworkRequest> class webPage : public QWebPage { Q_OBJECT public: explicit webPage(QObject *parent = 0); signals: void loadLink(const QUrl & url); void openLink(const QUrl & url); protected: bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);//重寫 }; #endif // WEBPAGE_H
webPage.cpp
#include "webPage.h" webPage::webPage(QObject *parent) : QWebPage(parent) { } bool webPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type) { if(type==0) {//如果是使用者點選 if(frame!=mainFrame()) { //如果不是在本視窗的連線 emit openLink(request.url());//傳送開啟新連線訊號 } else { emit loadLink(request.url());//傳送點選連線訊號 } } return QWebPage::acceptNavigationRequest(frame, request, type); }
然後在你使用QWebView的地方設定QWebView的page就可以了
{
webPage* page=new webPage(this);
w=new QWebView(this);
w->setPage(page); w->load(QUrl("HTTP://WWW.BAIDU.COM"));
connect(page,SIGNAL(loadLink(QUrl)),this,SLOT(linkUrl(QUrl)));
connect(page,SIGNAL(openLink(QUrl)),this,SLOT(openUrl(QUrl)));
}
void web::linkUrl(QUrl url){
//處理不開啟新視窗的連線
}
void web::openUrl(QUrl url){
//處理新視窗的連線
}