Название: [РЕШЕНО]Перехват нажатия на ссылку в QWebView 
					Отправлено: Vitto74 от Мая 06, 2010,  07:37
					 
					Доброго времени суток. Возникла потребность создать полностью свой обработчик нажатия на ссылку - при нажатии должен вызываться только он и ничего кроме этого не должно происходить. Если это уже обсуждалось или знаете где можно почитать на эту тему - дайте ссылку. 
					 
					 
					Название: Re: Перехват нажатия на ссылку в QWebView 
					Отправлено: sendevent от Мая 06, 2010,  12:51
					 
					можно во вью ловить нажатия мши, проверять через QWebHitTestResult (http://doc.trolltech.com/4.6/qwebhittestresult.html) - линк ли, и соответственно обрабатывать. можно в QWebPage::acceptNavigationRequest (http://doc.trolltech.com/4.6/qwebpage.html#acceptNavigationRequest) ловить QWebPage::NavigationTypeLinkClicked. видимо, почитать стоит все из QtWebKit Module (http://doc.trolltech.com/4.6/qtwebkit.html). 
					 
					 
					Название: Re: Перехват нажатия на ссылку в QWebView 
					Отправлено: Vitto74 от Мая 06, 2010,  14:57
					 
					Спасибо. Перечитал вот эту тему (http://www.prog.org.ru/topic_12794_0.html) и сделал вот такой класс #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).  
					
  
					
				 |