[education/rkward] /: Proof of concept QWebview-based HTML window
Thomas Friedrichsmeier
null at kde.org
Thu Apr 9 20:44:24 BST 2026
Git commit 618ac10ef7c9fa490cbdd8a3b2731b38ab6eecef by Thomas Friedrichsmeier.
Committed on 09/04/2026 at 19:44.
Pushed by tfry into branch 'master'.
Proof of concept QWebview-based HTML window
M +1 -1 CMakeLists.txt
M +2 -0 rkward/main.cpp
M +3 -0 rkward/resources.qrc
M +2 -1 rkward/windows/CMakeLists.txt
M +3 -1 rkward/windows/rkhtmlviewer.cpp
A +103 -0 rkward/windows/rkqwebview.cpp [License: GPL(v2.0+)]
A +43 -0 rkward/windows/rkqwebview.h [License: GPL(v2.0+)]
A +22 -0 rkward/windows/rkqwebview.qml [License: GPL(v2.0+)]
https://invent.kde.org/education/rkward/-/commit/618ac10ef7c9fa490cbdd8a3b2731b38ab6eecef
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e6b12242..327cac8f0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,7 +27,7 @@ INCLUDE(ECMAddAppIcon)
INCLUDE(ECMMarkNonGuiExecutable)
INCLUDE(FeatureSummary)
-FIND_PACKAGE(Qt6 6.6 CONFIG REQUIRED COMPONENTS Widgets Core Xml Network Qml PrintSupport WebEngineWidgets)
+FIND_PACKAGE(Qt6 6.6 CONFIG REQUIRED COMPONENTS Widgets Core Xml Network Qml PrintSupport WebEngineWidgets WebView)
FIND_PACKAGE(KF6 6.0.0 REQUIRED COMPONENTS CoreAddons DocTools I18n XmlGui TextEditor WidgetsAddons Parts Config Notifications WindowSystem Archive BreezeIcons OPTIONAL_COMPONENTS Crash)
FIND_PACKAGE(Gettext REQUIRED)
diff --git a/rkward/main.cpp b/rkward/main.cpp
index d8b9c7f26..c69dbb753 100644
--- a/rkward/main.cpp
+++ b/rkward/main.cpp
@@ -59,6 +59,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
#include <QThread>
#include <QTime>
#include <QUrl>
+#include <QtWebView>
#include <stdio.h>
#include <stdlib.h>
@@ -153,6 +154,7 @@ int main(int argc, char *argv[]) {
scheme.setFlags(QWebEngineUrlScheme::LocalAccessAllowed);
QWebEngineUrlScheme::registerScheme(scheme);
BreezeIcons::initIcons(); // install as fallback theme. Too many issues with missing icons, otherwise
+ QtWebView::initialize();
QApplication app(argc, argv);
KDSingleApplication app_singleton;
#if defined(Q_OS_MACOS) || defined(Q_OS_WIN)
diff --git a/rkward/resources.qrc b/rkward/resources.qrc
index 43e1be17a..19b89ffd0 100644
--- a/rkward/resources.qrc
+++ b/rkward/resources.qrc
@@ -24,4 +24,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
<qresource prefix="/org.kde.syntax-highlighting/syntax-addons">
<file alias="rkward.xml">syntax/rkward.xml</file>
</qresource>
+<qresource prefix="/qml">
+ <file alias="rkqwebview.qml">windows/rkqwebview.qml</file>
+</qresource>
</RCC>
diff --git a/rkward/windows/CMakeLists.txt b/rkward/windows/CMakeLists.txt
index d3bb67b98..2192b66a3 100644
--- a/rkward/windows/CMakeLists.txt
+++ b/rkward/windows/CMakeLists.txt
@@ -13,6 +13,7 @@ SET(windows_STAT_SRCS
rkhtmlwindow.cpp
rkhtmlviewer.cpp
rkqwebenginewidget.cpp
+ rkqwebview.cpp
rkpdfwindow.cpp
rcontrolwindow.cpp
detachedwindowcontainer.cpp
@@ -35,4 +36,4 @@ SET(windows_STAT_SRCS
)
ADD_LIBRARY(windows STATIC ${windows_STAT_SRCS})
-TARGET_LINK_LIBRARIES(windows Qt6::Widgets Qt6::PrintSupport Qt6::WebEngineWidgets KF6::TextEditor KF6::Notifications KF6::WindowSystem KF6::KIOFileWidgets KF6::I18n)
+TARGET_LINK_LIBRARIES(windows Qt6::Widgets Qt6::PrintSupport Qt6::WebEngineWidgets Qt6::WebView Qt6::Qml Qt6::Quick Qt6::QuickWidgets KF6::TextEditor KF6::Notifications KF6::WindowSystem KF6::KIOFileWidgets KF6::I18n)
diff --git a/rkward/windows/rkhtmlviewer.cpp b/rkward/windows/rkhtmlviewer.cpp
index 058ab113c..47c356847 100644
--- a/rkward/windows/rkhtmlviewer.cpp
+++ b/rkward/windows/rkhtmlviewer.cpp
@@ -8,6 +8,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
#include "rkhtmlviewer.h"
#include "rkqwebenginewidget.h"
+#include "rkqwebview.h"
#include "../debug.h"
@@ -17,7 +18,8 @@ RKHTMLViewer::RKHTMLViewer(QObject *parent) : QObject(parent) {
RKHTMLViewer *RKHTMLViewer::getNew(RKHTMLWindow *parent) {
RK_TRACE(APP);
- return new RKQWebEngineWidget(parent);
+ //return new RKQWebEngineWidget(parent);
+ return new RKQWebView(parent);
}
#include "rkhtmlviewer.moc"
diff --git a/rkward/windows/rkqwebview.cpp b/rkward/windows/rkqwebview.cpp
new file mode 100644
index 000000000..df9462428
--- /dev/null
+++ b/rkward/windows/rkqwebview.cpp
@@ -0,0 +1,103 @@
+/*
+rkqwebview - This file is part of the RKWard project. Created: Sun Feb 08 2026
+SPDX-FileCopyrightText: 2026 by Thomas Friedrichsmeier <thomas.friedrichsmeier at kdemail.net>
+SPDX-FileContributor: The RKWard Team <rkward at kde.org>
+SPDX-License-Identifier: GPL-2.0-or-later
+*/
+
+#include "rkqwebview.h"
+
+#include <QMenu>
+#include <QQuickItem>
+#include <QQuickWidget>
+
+#include "rkhtmlwindow.h"
+
+#include "../debug.h"
+
+RKQWebView::RKQWebView(RKHTMLWindow *parent) : RKHTMLViewer(parent) {
+ RK_TRACE(APP);
+}
+
+QWidget *RKQWebView::createWidget(QWidget *parent) {
+ RK_TRACE(APP);
+ view = new QQuickWidget(parent);
+ view->setSource(QUrl(QStringLiteral("qrc:/qml/rkqwebview.qml")));
+ view->setResizeMode(QQuickWidget::SizeRootObjectToView);
+ return view;
+}
+
+QUrl RKQWebView::url() const {
+ RK_TRACE(APP);
+ return QUrl();
+}
+
+void RKQWebView::load(const QUrl &url) {
+ RK_TRACE(APP);
+ auto wv = view->rootObject()->findChild<QObject *>("webView");
+ RK_ASSERT(wv);
+ if (!wv) return;
+ wv->setProperty("url", url);
+}
+
+void RKQWebView::print() {
+ RK_TRACE(APP);
+}
+
+void RKQWebView::installPersistentJS(const QString &script, const QString &id) {
+ RK_TRACE(APP);
+}
+
+void RKQWebView::runJS(const QString &script, std::function<void(const QVariant &)> callback) {
+ RK_TRACE(APP);
+}
+
+void RKQWebView::setHTML(const QString &html, const QUrl &url) {
+ RK_TRACE(APP);
+}
+
+bool RKQWebView::installHelpProtocolHandler() {
+ RK_TRACE(APP);
+ return false;
+}
+
+void RKQWebView::findRequest(const QString &text, bool backwards, RKFindBar *findbar, bool *found) {
+ RK_TRACE(APP);
+}
+
+QMenu *RKQWebView::createContextMenu(const QPoint &clickpos) {
+ RK_TRACE(APP);
+ return new QMenu();
+}
+
+QString RKQWebView::selectedText() const {
+ RK_TRACE(APP);
+
+ return QString();
+}
+
+void RKQWebView::exportPage() {
+ RK_TRACE(APP);
+}
+
+QPoint RKQWebView::scrollPosition() const {
+ RK_TRACE(APP);
+ return QPoint();
+}
+
+void RKQWebView::setScrollPosition(const QPoint &pos, bool wait_for_load) {
+ RK_TRACE(APP);
+}
+
+bool RKQWebView::supportsContentType(const QString &mimename) {
+ RK_TRACE(APP);
+ return true;
+}
+
+void RKQWebView::zoomIn() {
+ RK_TRACE(APP);
+}
+
+void RKQWebView::zoomOut() {
+ RK_TRACE(APP);
+}
diff --git a/rkward/windows/rkqwebview.h b/rkward/windows/rkqwebview.h
new file mode 100644
index 000000000..078bed461
--- /dev/null
+++ b/rkward/windows/rkqwebview.h
@@ -0,0 +1,43 @@
+/*
+rkqwebview - This file is part of the RKWard project. Created: Sun Feb 08 2026
+SPDX-FileCopyrightText: 2026 by Thomas Friedrichsmeier <thomas.friedrichsmeier at kdemail.net>
+SPDX-FileContributor: The RKWard Team <rkward at kde.org>
+SPDX-License-Identifier: GPL-2.0-or-later
+*/
+
+#ifndef RKQWEBVIEW_H
+#define RKQWEBVIEW_H
+
+#include <QPointer>
+
+#include "rkhtmlviewer.h"
+
+class QQuickWidget;
+
+class RKQWebView : public RKHTMLViewer {
+ public:
+ QWidget *createWidget(QWidget *parent) override;
+ QUrl url() const override;
+ void load(const QUrl &url) override;
+ void print() override;
+ void installPersistentJS(const QString &script, const QString &id) override;
+ void runJS(const QString &script, std::function<void(const QVariant &)> callback) override;
+ void setHTML(const QString &html, const QUrl &url) override;
+ bool installHelpProtocolHandler() override;
+ void findRequest(const QString &text, bool backwards, RKFindBar *findbar, bool *found) override;
+ QMenu *createContextMenu(const QPoint &clickpos) override;
+ QString selectedText() const override;
+ void exportPage() override;
+ QPoint scrollPosition() const override;
+ void setScrollPosition(const QPoint &pos, bool wait_for_load) override;
+ bool supportsContentType(const QString &mimename) override;
+ void zoomIn() override;
+ void zoomOut() override;
+
+ private:
+ friend class RKHTMLViewer;
+ RKQWebView(RKHTMLWindow *parent);
+ QPointer<QQuickWidget> view;
+};
+
+#endif
diff --git a/rkward/windows/rkqwebview.qml b/rkward/windows/rkqwebview.qml
new file mode 100644
index 000000000..761a1ea7e
--- /dev/null
+++ b/rkward/windows/rkqwebview.qml
@@ -0,0 +1,22 @@
+// rkqwebview - This file is part of the RKWard project. Created: Sun Feb 08 2026
+// SPDX-FileCopyrightText: 2026 by Thomas Friedrichsmeier <thomas.friedrichsmeier at kdemail.net>
+// SPDX-FileContributor: The RKWard Team <rkward at kde.org>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+import QtQuick
+import QtQuick.Controls
+import QtWebView
+import QtQuick.Layouts
+
+Item {
+ id: frame
+ visible: true
+
+ WebView {
+ id: webView
+ objectName: "webView"
+ visible: true
+ width: parent.width
+ height: parent.height
+ }
+}
More information about the rkward-tracker
mailing list