From b4436271fe46da6970eb9a6fceefdf6af268cc37 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 22 Jun 2016 04:01:49 +1200 Subject: [PATCH] Fix allow clicking on a tags in maptips (#3218) this is done by listening to the linkClicked signal --- python/gui/qgsmaptip.sip | 2 +- src/gui/CMakeLists.txt | 1 + src/gui/qgsmaptip.cpp | 14 ++++++++++++++ src/gui/qgsmaptip.h | 9 ++++++++- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/python/gui/qgsmaptip.sip b/python/gui/qgsmaptip.sip index a10ad19488c..2e7ed21c936 100644 --- a/python/gui/qgsmaptip.sip +++ b/python/gui/qgsmaptip.sip @@ -3,7 +3,7 @@ * A maptip is a class to display a tip on a map canvas * when a mouse is hovered over a feature. */ -class QgsMapTip +class QgsMapTip: QWidget { %TypeHeaderCode #include diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 375d2f50fac..3d2875bd5bb 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -401,6 +401,7 @@ SET(QGIS_GUI_MOC_HDRS qgsmaplayerproxymodel.h qgsmaplayerstylemanagerwidget.h qgsmapoverviewcanvas.h + qgsmaptip.h qgsmaptool.h qgsmaptooladvanceddigitizing.h qgsmaptoolcapture.h diff --git a/src/gui/qgsmaptip.cpp b/src/gui/qgsmaptip.cpp index e4aed2f4d62..ccef4edad58 100644 --- a/src/gui/qgsmaptip.cpp +++ b/src/gui/qgsmaptip.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #if WITH_QTWEBKIT #include #endif @@ -65,6 +66,13 @@ void QgsMapTip::showMapTip( QgsMapLayer *pLayer, mWidget = new QWidget( pMapCanvas ); mWebView = new QgsWebView( mWidget ); + +#if WITH_QTWEBKIT + mWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );//Handle link clicks by yourself + mWebView->setContextMenuPolicy( Qt::NoContextMenu ); //No context menu is allowed if you don't need it + connect( mWebView, SIGNAL( linkClicked( QUrl ) ), this, SLOT( onLinkClicked( QUrl ) ) ); +#endif + mWebView->page()->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled, true ); mWebView->page()->settings()->setAttribute( @@ -200,3 +208,9 @@ QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPoint &mapPosition, QgsM return feature.attribute( idx ).toString(); } } + +//This slot handles all clicks +void QgsMapTip::onLinkClicked( const QUrl &url ) +{ + QDesktopServices::openUrl( url ); +} diff --git a/src/gui/qgsmaptip.h b/src/gui/qgsmaptip.h index 53ced8b146e..d1b05924984 100644 --- a/src/gui/qgsmaptip.h +++ b/src/gui/qgsmaptip.h @@ -19,8 +19,12 @@ class QgsMapLayer; class QgsMapCanvas; class QPoint; class QString; +class QgsPoint; +class QgsVectorLayer; class QgsWebView; +#include +#include #include "qgsfeature.h" /** \ingroup gui @@ -42,8 +46,9 @@ class QgsWebView; * discourages link rel="stylesheet" in the body, but all browsers allow it. * see https://jakearchibald.com/2016/link-in-body/ */ -class GUI_EXPORT QgsMapTip +class GUI_EXPORT QgsMapTip: public QWidget { + Q_OBJECT public: /** Default constructor */ @@ -84,5 +89,7 @@ class GUI_EXPORT QgsMapTip QWidget* mWidget; QgsWebView* mWebView; + private slots: + void onLinkClicked( const QUrl& url ); }; #endif // QGSMAPTIP_H