从qt-webkit替换成webengine之后,发现加载html页面之后不能够拖动,百度了好久没解决问题,webengine之后的事件全部通过继承eventFilter来实现。需要先重写eventFilter事件,再将事件转发至需要移动的窗体消息。但是有一点记得调用之前一定要加上这一段话( setMouseTracking(true);
QApplication::instance()->installEventFilter(this);)
Qt的官网上没看到由此类似说明,看到有人提的bug([QTBUG-43602] Mouse events are not handled in WebEngineView - Qt Bug Tracker)但是直是为了解决paintevent事件
#include "mywebview.h"
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QSslError>
#include <QDropEvent>
#ifndef USE_WEBENGINE
#include <QWebFrame>
#else
#endif
#include <QApplication>
#include <QPalette>
#include <QMimeData>
#include <QMenu>
#include <QDebug>
#define _DEBUG_WEB_PAGE
#ifdef USE_WEBENGINE
myWebView::myWebView(QWidget *parent) :
QWebEngineView(parent)
#else
myWebView::myWebView(QWidget *parent) :
QWebView(parent)
#endif
{
// //WEBVIEW透明
// QPalette pal = this->page()->palette();
// pal.setBrush(QPalette::Base, Qt::transparent);
// this->setPalette(pal);
//调试窗口
#ifndef USE_WEBENGINE
QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
inspector = new QWebInspector( this );
inspector->setWindowFlags( Qt::WindowStaysOnTopHint | Qt::Dialog );
inspector->hide();
this->setContextMenuPolicy(Qt::NoContextMenu);
connect(this->page()->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
#endif
// this->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
// this->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
setMouseTracking(true);
QApplication::instance()->installEventFilter(this);
//setMouseTracking(true)
// this->setContextMenuPolicy(Qt::NoContextMenu);
}
myWebView::~myWebView()
{
#ifndef USE_WEBENGINE
if(NULL != inspector)
{
delete inspector;
inspector = NULL;
}
#endif
}
bool myWebView::eventFilter(QObject *src, QEve