From 66554819a664eddcfb5f2e1e474efb6ca839bead Mon Sep 17 00:00:00 2001 From: Le Tan Date: Thu, 17 Dec 2020 21:50:07 +0800 Subject: [PATCH] show hover link --- src/widgets/editors/markdownviewer.cpp | 17 +++-------------- src/widgets/markdownviewwindow.cpp | 5 +++++ src/widgets/webviewer.cpp | 23 +++++++++++++++++++++-- src/widgets/webviewer.h | 7 ++++++- 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/widgets/editors/markdownviewer.cpp b/src/widgets/editors/markdownviewer.cpp index b606c682..0fb29d1e 100644 --- a/src/widgets/editors/markdownviewer.cpp +++ b/src/widgets/editors/markdownviewer.cpp @@ -7,7 +7,6 @@ #include #include -#include "../webpage.h" #include "markdownvieweradapter.h" #include "previewhelper.h" #include @@ -28,25 +27,15 @@ MarkdownViewer::MarkdownViewer(MarkdownViewerAdapter *p_adapter, const QColor &p_background, qreal p_zoomFactor, QWidget *p_parent) - : WebViewer(p_parent), + : WebViewer(p_background, p_zoomFactor, p_parent), m_adapter(p_adapter) { m_adapter->setParent(this); - auto page = new WebPage(this); - setPage(page); - - // Avoid white flash before loading content. - // Setting Qt::transparent will force GrayScale antialias rendering. - page->setBackgroundColor(p_background); - - if (!Utils::fuzzyEqual(p_zoomFactor, 1.0)) { - setZoomFactor(p_zoomFactor); - } - auto channel = new QWebChannel(this); channel->registerObject(QStringLiteral("vxAdapter"), m_adapter); - page->setWebChannel(channel); + + page()->setWebChannel(channel); connect(QApplication::clipboard(), &QClipboard::changed, this, &MarkdownViewer::handleClipboardChanged); diff --git a/src/widgets/markdownviewwindow.cpp b/src/widgets/markdownviewwindow.cpp index 7c83c50d..5ab2722e 100644 --- a/src/widgets/markdownviewwindow.cpp +++ b/src/widgets/markdownviewwindow.cpp @@ -414,6 +414,11 @@ void MarkdownViewWindow::setupViewer() showZoomFactor(p_factor); }); + connect(m_viewer, &WebViewer::linkHovered, + this, [this](const QString &p_url) { + showMessage(p_url); + }); + // Connect outline pipeline. connect(adapter, &MarkdownViewerAdapter::headingsChanged, this, [this]() { diff --git a/src/widgets/webviewer.cpp b/src/widgets/webviewer.cpp index a71263b7..e1eb22e2 100644 --- a/src/widgets/webviewer.cpp +++ b/src/widgets/webviewer.cpp @@ -1,14 +1,33 @@ #include "webviewer.h" +#include "webpage.h" + +#include + using namespace vnotex; -WebViewer::WebViewer(QWidget *p_parent) +WebViewer::WebViewer(const QColor &p_background, + qreal p_zoomFactor, + QWidget *p_parent) : QWebEngineView(p_parent) { setAcceptDrops(false); + + auto viewPage = new WebPage(this); + setPage(viewPage); + + connect(viewPage, &QWebEnginePage::linkHovered, + this, &WebViewer::linkHovered); + + // Avoid white flash before loading content. + // Setting Qt::transparent will force GrayScale antialias rendering. + viewPage->setBackgroundColor(p_background); + + if (!Utils::fuzzyEqual(p_zoomFactor, 1.0)) { + setZoomFactor(p_zoomFactor); + } } WebViewer::~WebViewer() { - } diff --git a/src/widgets/webviewer.h b/src/widgets/webviewer.h index 65ef1721..e4c7f222 100644 --- a/src/widgets/webviewer.h +++ b/src/widgets/webviewer.h @@ -9,9 +9,14 @@ namespace vnotex { Q_OBJECT public: - explicit WebViewer(QWidget *p_parent = nullptr); + explicit WebViewer(const QColor &p_background, + qreal p_zoomFactor, + QWidget *p_parent = nullptr); virtual ~WebViewer(); + + signals: + void linkHovered(const QString &p_url); }; }