fix: 修复部分网页无法正常跳转的问题

对于网页打开方式为新窗口打开的网页进行修复
This commit is contained in:
ut003880 2021-07-22 12:44:49 +08:00
parent f6542879de
commit 2f38b9dd76
8 changed files with 60 additions and 56 deletions

@ -10,7 +10,7 @@
#include <QDir>
#include <QCloseEvent>
#include "webenginepage.h"
#include "webengineview.h"
MainWindow::MainWindow(QString szTitle,
QString szUrl,

@ -1,4 +1,4 @@
QT += core gui webengine webenginewidgets svg concurrent
QT += core gui webenginewidgets svg concurrent
greaterThan(QT_MAJOR_VERSION, 5): QT += widgets
@ -9,20 +9,20 @@ DEFINES += QT_DEPRECATED_WARNINGS
CONFIG += c++11 link_pkgconfig
PKGCONFIG += dtkwidget
HEADERS += \
mainwindow.h \
globaldefine.h \
httpd.h \
httplib.h \
webenginepage.h \
widget.h
HEADERS += \
mainwindow.h \
globaldefine.h \
httpd.h \
httplib.h \
widget.h \
webengineview.h
SOURCES += \
main.cpp \
httpd.cpp \
mainwindow.cpp \
webenginepage.cpp \
widget.cpp
widget.cpp \
webengineview.cpp
RESOURCES += \
imgs.qrc

@ -1,20 +0,0 @@
#include "webenginepage.h"
WebEnginePage::WebEnginePage(QObject *parent)
: QWebEnginePage(parent)
{
}
QWebEnginePage *WebEnginePage::createWindow(QWebEnginePage::WebWindowType type)
{
Q_UNUSED(type)
WebEnginePage *page = new WebEnginePage;
connect(page, &QWebEnginePage::urlChanged, this, &WebEnginePage::on_urlChanged);
return page;
}
void WebEnginePage::on_urlChanged(const QUrl url)
{
setUrl(url);
sender()->deleteLater();
}

@ -1,21 +0,0 @@
#ifndef WEBENGINEPAGE_H
#define WEBENGINEPAGE_H
#include <QWebEnginePage>
#include <QWebEngineProfile>
#include <QObject>
class WebEnginePage : public QWebEnginePage
{
public:
WebEnginePage(QObject *parent = nullptr);
protected:
QWebEnginePage *createWindow(WebWindowType type) override;
private slots:
void on_urlChanged(const QUrl url);
};
#endif // WEBENGINEPAGE_H

@ -0,0 +1,23 @@
#include "webengineview.h"
WebEngineView::WebEngineView(QWidget *parent)
: QWebEngineView(parent)
{
}
QWebEngineView *WebEngineView::createWindow(QWebEnginePage::WebWindowType type)
{
Q_UNUSED(type)
QWebEngineView *view = new QWebEngineView;
connect(view, &QWebEngineView::urlChanged, this, &WebEngineView::on_urlChanged);
return view;
}
void WebEngineView::on_urlChanged(QUrl url)
{
setUrl(url);
sender()->deleteLater();
}

@ -0,0 +1,21 @@
#ifndef WEBENGINEVIEW_H
#define WEBENGINEVIEW_H
#include <QWebEngineView>
class WebEngineView : public QWebEngineView
{
Q_OBJECT
public:
explicit WebEngineView(QWidget *parent = nullptr);
protected:
QWebEngineView *createWindow(QWebEnginePage::WebWindowType type) override;
private slots:
void on_urlChanged(QUrl url);
};
#endif // WEBENGINEVIEW_H

@ -2,7 +2,7 @@
Widget::Widget(QString szUrl, QWidget *parent)
: QWidget(parent)
, m_webEngineView(new QWebEngineView)
, m_webEngineView(new WebEngineView)
, m_szUrl(szUrl)
, m_spinner(new DSpinner)
, main(new QHBoxLayout)
@ -16,7 +16,7 @@ Widget::Widget(QString szUrl, QWidget *parent)
m_webEngineView->setAutoFillBackground(false);
m_webEngineView->setZoomFactor(1);
WebEnginePage *page = new WebEnginePage;
QWebEnginePage *page = new QWebEnginePage;
m_webEngineView->setPage(page);
m_webEngineView->setUrl(QUrl(nullptr));

@ -2,12 +2,13 @@
#define WIDGET_H
#include <QWidget>
#include <QWebEngineProfile>
#include <QWebEngineView>
#include <QLayout>
#include <DSpinner>
#include "webenginepage.h"
#include "webengineview.h"
DWIDGET_USE_NAMESPACE
@ -25,7 +26,7 @@ public:
void refresh();
private:
QWebEngineView *m_webEngineView;
WebEngineView *m_webEngineView;
QString m_szUrl;
DSpinner *m_spinner;