60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
#include "webviewwindow.h"
|
|
|
|
#include "webviewqt.h"
|
|
#include "rktwebview_qt.h"
|
|
#include <QJsonArray>
|
|
#include <QJsonDocument>
|
|
#include <QJsonParseError>
|
|
#include <QJsonObject>
|
|
|
|
void WebviewWindow::processJsEvents()
|
|
{
|
|
QWebEnginePage *p = _view->page();
|
|
p->runJavaScript("window.getPendingEvents();",
|
|
[this](const QVariant &v) {
|
|
QString s = v.toString();
|
|
QJsonParseError err;
|
|
QJsonDocument doc(QJsonDocument::fromJson(s.toUtf8(), &err));
|
|
if (err.error == QJsonParseError::NoError) {
|
|
QJsonArray a = doc.array();
|
|
int i, N;
|
|
for(i = 0, N = a.size(); i < N; i++) {
|
|
QJsonObject evt = a[i].toObject();
|
|
QJsonDocument doc_out(evt);
|
|
QString msg = doc_out.toJson(QJsonDocument::JsonFormat::Compact);
|
|
this->_container->triggerJsEvent(_view->id(), msg);
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
void WebviewWindow::closeEvent(QCloseEvent *evt)
|
|
{
|
|
_container->removeView(_view->id());
|
|
}
|
|
|
|
void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c)
|
|
{
|
|
_container = c;
|
|
_view = v;
|
|
this->setCentralWidget(v);
|
|
|
|
QWebEnginePage *page = _view->page();
|
|
connect(page, &QWebEnginePage::loadFinished, this, [this](bool ok) {
|
|
_container->pageLoaded(_view->id(), ok);
|
|
});
|
|
}
|
|
|
|
WebViewQt *WebviewWindow::view()
|
|
{
|
|
return _view;
|
|
}
|
|
|
|
WebviewWindow::WebviewWindow(QWidget *parent)
|
|
: QMainWindow{parent}
|
|
{
|
|
_view = nullptr;
|
|
connect(&_process_js_events, &QTimer::timeout, this, &WebviewWindow::processJsEvents);
|
|
}
|