[QGIS-Developer] Transition from QtWebKit to QtWebEngine in qgis2web (QGIS plugin)
info at opengis.it
info at opengis.it
Mon Jul 8 04:55:30 PDT 2024
Dear QGIS Developers,
I am currently maintaining the qgis2web plugin and am in the process of phasing out QtWebKit due to its obsolescence and inability to handle modern code.
qgis2web utilizes QtWebKit to display its export in a web preview window, which reads the exported project comprising HTML, JS, and CSS files. Without updating QtWebKit, I cannot update the third-party libraries used in the export (e.g., ol-geocoder, ol-layerswitcher, and many others).
I've found numerous unresolved discussions about QtWebEngine online, but they haven't helped me achieve my goal.
Here is my current setup:
* Windows 10
* Standard QGIS installation (not OSGeo4W), version: 3.36.3-Maidenhead
* PyQt version: 5.15.10
* Qt version: 5.15.13
Progress so far:
1. Using "Qt Designer," dragging the "QWebEngineView" element into the plugin design causes the program to freeze. This issue is resolved after installing the dependency in the next step.
2. The standard installation via .msi lacks the QtWebEngine dependency, so I had to install it manually. This is a significant obstacle: I believe most QGIS users install the software on Windows using the .msi package, so I will need to provide a guide or come up with a solution for installation through the plugin itself. In any case, I installed the dependency by opening the "OSGeo4W Shell" and running the command:
python -m pip install PyQtWebEngine
Then, using
pip list
I confirmed the dependencies are now:
PyQtWebEngine 5.15.6
PyQtWebEngine-Qt5 5.15.2
3. At this point, I was able to write the following Python code and receive a positive output
try:
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile, QWebEnginePage, QWebEngineSettings
webengine_available = True
print("QtWebEngine available")
except ImportError as e:
webengine_available = False
print("QtWebEngine not available:", e)
4. In "Qt Designer" I can now add the "QWebEngineView" element without issues, and if I set a website manually by configuring the URL in the "QWebEngineView" section, it displays perfectly.
Where I am stuck:
1. Writing from qgis.PyQt.QtWebEngineWidgets results in an error.
2. Whether I add the "QWebEngineView" element manually in "Qt Designer" or via Python, the result is a completely blank plugin screen. The code I am testing for insertion is as follows:
if webengine_available:
print("WebEngine is available. Initializing QWebEngineView...")
widget = QWebEngineView()
self.preview = widget
try:
self.preview.setUrl(QUrl("https://opengis.it"))
print("Loading opengis.it in QWebEngineView.")
except Exception as e:
print("Failed to set URL:", e)
else:
print("WebEngine is not available. Initializing QTextBrowser...")
widget = QTextBrowser()
widget.setText(self.tr('Preview is not available since QtWebEngine dependency is missing on your system'))
print("QTextBrowser initialized with fallback message.")
self.right_layout.insertWidget(0, widget)
print("Widget inserted into right_layout.")
Questions:
1. Since QtWebKit was deprecated in Qt 5.6, why does it still work in version 5.15.13?
2. Why isn't the QtWebEngine dependency included by default in the .msi installation?
3. Why doesn't from qgis.PyQt.QtWebEngineWidgets work?
4. Why is there a discrepancy between what I see and configure in "Qt Designer" and what appears when I run the plugin in QGIS (specifically, a completely blank screen)?
Current Status:
I have no errors in the QGIS Python console, only positive prints, but I cannot get past the blank plugin screen when launched in QGIS.
Thank you all for your valuable work, which allows me to perform my beloved job.
Best regards
Andrea Ordonselli
OpenGIS.it
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20240708/2807eb32/attachment.htm>
More information about the QGIS-Developer
mailing list