Browse Source

some work on Qt WebEngine

Sonnix 6 years ago
parent
commit
1920d5483a

+ 6 - 2
Qqsp.pro

@@ -158,8 +158,12 @@ enable-webbox {
 enable-android {
   DEFINES += _ANDROIDQT
   QT += androidextras
-  SOURCES += androidfiledialog.cpp
-  HEADERS += androidfiledialog.h
+  SOURCES += androidfiledialog.cpp \
+    qspwebengineurlrequestinterceptor.cpp \
+    qspwebengineurlschemehandler.cpp
+  HEADERS += androidfiledialog.h \
+    qspwebengineurlrequestinterceptor.h \
+    qspwebengineurlschemehandler.h
 }
 
 isEmpty(TARGET_EXT) {

+ 25 - 1
mainwindow.cpp

@@ -37,6 +37,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
     setObjectName(QStringLiteral("MainWindow"));
     setAcceptDrops(true);
 
+#ifdef _WEBBOX
+//    qwuri = new QspWebEngineUrlRequestInterceptor();
+//    QWebEngineProfile::defaultProfile()->setRequestInterceptor(qwuri);
+//    QspWebEngineUrlSchemeHandler *qweush = new QspWebEngineUrlSchemeHandler();
+//    QWebEngineProfile::defaultProfile()->installUrlSchemeHandler(QByteArray("qsp"),qweush);
+#endif
+
     m_palette = palette();
 
     mainMenuBar = new QMenuBar(this);
@@ -124,7 +131,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
 
 MainWindow::~MainWindow()
 {
-
+#ifdef _WEBBOX
+    delete qwuri;
+#endif
 }
 
 void MainWindow::EnableControls(bool status, bool isExtended)
@@ -359,8 +368,10 @@ void MainWindow::SetOverallVolume(float new_volume)
 void MainWindow::SetDisableVideo(bool isDisableVideo)
 {
     disableVideo = isDisableVideo;
+#ifndef _WEBBOX
     _mainDescTextBox->SetDisableVideo(disableVideo);
     _descTextBox->SetDisableVideo(disableVideo);
+#endif
 }
 
 void MainWindow::LoadSettings(QString filePath)
@@ -618,6 +629,17 @@ void MainWindow::CreateDockWindows()
     connect(_mainDescTextBox, SIGNAL(anchorClicked(QUrl)), this, SLOT(OnLinkClicked(QUrl)));
 #else
     _mainDescTextBox = new QspWebBox(this);
+    qwuri = new QspWebEngineUrlRequestInterceptor(_mainDescTextBox);
+    QWebEngineProfile * profile = new QWebEngineProfile(_mainDescTextBox);
+    profile->setRequestInterceptor(qwuri);
+    QspWebEngineUrlSchemeHandler *qweush = new QspWebEngineUrlSchemeHandler(_mainDescTextBox);
+    profile->installUrlSchemeHandler(QByteArray("qsp"),qweush);
+    QWebEnginePage * page = new QWebEnginePage(profile, _mainDescTextBox);
+    _mainDescTextBox->setPage(page);
+    _mainDescTextBox->load(QUrl("qsp:"));
+    //_mainDescTextBox->setUrl(QUrl("qsp:///"));
+//    _mainDescTextBox->page()->profile()->setRequestInterceptor(qwuri);
+//    _mainDescTextBox->page()->load(QUrl("qsp:///"));
 #endif
     _mainDescTextBox->setObjectName(QStringLiteral("_mainDescTextBox"));
     _mainDescWidget = new QDockWidget(tr("Main desc"), this);
@@ -770,8 +792,10 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
     if(event->key() == Qt::Key_Escape)
         if(isFullScreen())
             showNormal();
+#ifndef _WEBBOX
     _descTextBox->keyPressEvent(event);
     _mainDescTextBox->keyPressEvent(event);
+#endif
     QMainWindow::keyPressEvent(event);
 }
 

+ 4 - 0
mainwindow.h

@@ -24,7 +24,10 @@
 #include "qspinputbox.h"
 #include "qspimgcanvas.h"
 #ifdef _WEBBOX
+#include <QWebEngineProfile>
 #include "qspwebbox.h"
+#include "qspwebengineurlrequestinterceptor.h"
+#include "qspwebengineurlschemehandler.h"
 #endif
 
 #include <qsp_default.h>
@@ -149,6 +152,7 @@ private:
 #else
     QspWebBox*		_mainDescTextBox; //m_desc
     QspWebBox*		_descTextBox; //m_vars ID_VARSDESC
+    QspWebEngineUrlRequestInterceptor* qwuri;
 #endif
     QspListBox*		_objectsListBox; //m_objects
     QspListBox*		_actionsListBox; //m_actions

+ 1 - 1
qspwebbox.cpp

@@ -60,7 +60,7 @@ void QspWebBox::RefreshUI(bool isScroll)
     if(showPlainText)
         ;//setPlainText(text);
     else
-        setHtml(text, QUrl(m_path));
+        ;//setHtml(text, QUrl(m_path));
     //if (isScroll) verticalScrollBar()->setValue(verticalScrollBar()->maximum());
 }
 

+ 40 - 0
qspwebengineurlrequestinterceptor.cpp

@@ -0,0 +1,40 @@
+#include "qspwebengineurlrequestinterceptor.h"
+#include <QString>
+#include <QDebug>
+
+QspWebEngineUrlRequestInterceptor::QspWebEngineUrlRequestInterceptor(QObject *parent) : QWebEngineUrlRequestInterceptor(parent)
+{
+
+}
+
+void QspWebEngineUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info)
+{
+    // Intercepting the requested URL
+    QUrl url = info.requestUrl();
+    qDebug() << "Request URL: " << url;
+    QString rsrct = "";
+    switch(info.resourceType()){
+        case 0:rsrct="ResourceTypeMainFrame = 0, // top level page";break;
+        case 1:rsrct="ResourceTypeSubFrame, // frame or iframe";break;
+        case 2:rsrct="ResourceTypeStylesheet, // a CSS stylesheet";break;
+        case 3:rsrct="ResourceTypeScript, // an external script";break;
+        case 4:rsrct="ResourceTypeImage, // an image (jpg/gif/png/etc)";break;
+        case 5:rsrct="ResourceTypeFontResource, // a font";break;
+        case 6:rsrct="ResourceTypeSubResource, // an other subresource.";break;
+        case 7:rsrct="ResourceTypeObject, // an object (or embed) tag for a plugin,";break;
+        case 8:rsrct="ResourceTypeMedia, // a media resource.";break;
+        case 9:rsrct="ResourceTypeWorker, // the main resource of a dedicated worker.";break;
+        case 10:rsrct="ResourceTypeSharedWorker, // the main resource of a shared worker.";break;
+        case 11:rsrct="ResourceTypePrefetch, // an explicitly requested prefetch";break;
+        case 12:rsrct="ResourceTypeFavicon, // a favicon";break;
+        case 13:rsrct="ResourceTypeXhr, // a XMLHttpRequest";break;
+        case 14:rsrct="ResourceTypePing, // a ping request for <a ping>";break;
+        case 15:rsrct="ResourceTypeServiceWorker, // the main resource of a service worker.";break;
+        case 16:rsrct="ResourceTypeUnknown";break;
+
+        default : rsrct="Unknown type";break;
+    }
+
+  qDebug()<<"\t"<<Q_FUNC_INFO<<":\n\t\t" << "WebUrlRequestInterceptor::interceptRequest    " <<info.requestMethod()
+         <<"\r\n  "<<info.requestUrl()<<"   "<<rsrct      <<"\r\n";
+}

+ 18 - 0
qspwebengineurlrequestinterceptor.h

@@ -0,0 +1,18 @@
+#ifndef QSPWEBENGINEURLREQUESTINTERCEPTOR_H
+#define QSPWEBENGINEURLREQUESTINTERCEPTOR_H
+
+#include <QObject>
+#include <QWebEngineUrlRequestInterceptor>
+
+class QspWebEngineUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
+{
+    Q_OBJECT
+
+public:
+    explicit QspWebEngineUrlRequestInterceptor(QObject *parent = 0);
+    virtual void interceptRequest(QWebEngineUrlRequestInfo &info) Q_DECL_OVERRIDE;
+
+private:
+};
+
+#endif // QSPWEBENGINEURLREQUESTINTERCEPTOR_H

+ 22 - 0
qspwebengineurlschemehandler.cpp

@@ -0,0 +1,22 @@
+#include "qspwebengineurlschemehandler.h"
+#include <QBuffer>
+#include <QDebug>
+
+QspWebEngineUrlSchemeHandler::QspWebEngineUrlSchemeHandler(QObject *parent) : QWebEngineUrlSchemeHandler(parent)
+{
+
+}
+
+void QspWebEngineUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request)
+{
+    const QUrl url = request->requestUrl();
+    qDebug() << "requestStarted: " << url;
+    QBuffer *buffer = new QBuffer;
+    connect(request, SIGNAL(destroyed()), buffer, SLOT(deleteLater()));
+
+    buffer->open(QIODevice::WriteOnly);
+    buffer->write("<html><body>Hello world!</body></html>");
+    buffer->close();
+
+    request->reply("text/html", buffer);
+}

+ 20 - 0
qspwebengineurlschemehandler.h

@@ -0,0 +1,20 @@
+#ifndef QSPWEBENGINEURLSCHEMEHANDLER_H
+#define QSPWEBENGINEURLSCHEMEHANDLER_H
+
+#include <QObject>
+#include <QWebEngineUrlRequestJob>
+#include <QWebEngineUrlSchemeHandler>
+
+class QspWebEngineUrlSchemeHandler : public QWebEngineUrlSchemeHandler
+{
+    Q_OBJECT
+
+public:
+    explicit QspWebEngineUrlSchemeHandler(QObject *parent = 0);
+    void requestStarted(QWebEngineUrlRequestJob *request);
+
+private:
+
+};
+
+#endif // QSPWEBENGINEURLSCHEMEHANDLER_H