Спасибо. Перечитал вот
эту тему и сделал вот такой класс
#ifndef QMYWEBPAGE_H
#define QMYWEBPAGE_H
#include <QWebPage>
#include <QWebFrame>
#include <QPointer>
#include <QMessageBox>
#include <QNetworkRequest>
#include <QDebug>
class myWebPage : public QWebPage
{
Q_OBJECT
public:
myWebPage(QObject* parent = 0) : QWebPage(parent) {};
struct Navigation {
QPointer<QWebFrame> frame;
QNetworkRequest request;
NavigationType type;
};
virtual bool acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest &request, NavigationType type){
Navigation n;
n.frame = frame;
n.request = request;
n.type = type;
navigations.append(n);
if (type == QWebPage::NavigationTypeOther){
//Сделано для того, чтобы QWebView реагировал на метод setUrl.
return true;
} else {
emit this->urlClick(request.url(), type);
return false;
}
}
virtual QWebPage* createWindow(WebWindowType){
QWebPage* page = new myWebPage(this);
createdWindows.append(page);
return page;
}
signals:
void urlClick(QUrl, QWebPage::NavigationType);
private:
//Я не знаю зачем они там хранятся, но подозреваю, что для
//предотвращения утечек памяти
QList<Navigation> navigations;
QList<QWebPage*> createdWindows;
};
#endif // QMYWEBPAGE_H
Теперь при клике по ссылке или кнопке генерится сигнал urlClick(QUrl, NavigationType). Использую я это таким образом
delete(ui->webView->page());
myWebPage *page = new myWebPage();
ui->webView->setPage(page);
connect(page, SIGNAL(urlClick(QUrl, QWebPage::NavigationType)), this, SLOT(url(QUrl, QWebPage::NavigationType)));
Таким образом я могу полностью контролировать поведение QWebView в слоте url(QUrl, QWebPage::NavigationType).