web-dev-qa-db-fra.com

QWebView ou QWebEngineView

Existe-t-il des différences fonctionnelles entre QWebView et QWebEngineView? Si je comprends bien, QWebView est webkit, tandis que QWebEngineView clignote. Y a-t-il des différences avec le programmeur? Est-ce que l'un offre plus de personnalisation de l'apparence par rapport à l'autre?

25
graywolf

Je voudrais essayer QtWebEngine. Il remplace QtWebKit pour une raison.

Si vous contrôlez le code HTML qui est rendu, cela ne fait probablement pas de mal d'utiliser QWebKit. Assurez-vous simplement de tester vos pages au préalable.

QWebView utilise WebKit comme backend.

http://doc.qt.io/qt-5/qwebview.html#details

QWebEngineView utilise Chromium comme backend.

http://doc.qt.io/qt-5/qwebengineview.html#details

WebKit est ce qui est utilisé dans Konqueror sur Linux et Rekonq. Ce n'est pas mal, mais ce n'est pas aussi robuste à travers les pages Web/html générales (et souvent imparfaites) à mon avis.

Le chrome est un moteur beaucoup plus récent, plus rapide et plus robuste.

Je ne connais pas tous les détails techniques en particulier, mais QWebEngine est un grand pas dans la bonne direction. Je l'ai trouvé principalement à partir de mes propres expérimentations et de mon utilisation empirique.

Pour donner à WebKit un essai décent, regardez ce projet et essayez une variété de pages:

http://qtweb.net/

https://github.com/magist3r/QtWeb

Voici quelques informations supplémentaires sur QtWebEngine v QtWebKit

http://wiki.qt.io/QtWebEngine

http://en.wikipedia.org/wiki/WebKit

http://wiki.qt.io/QtWebKit

21
phyatt

Quant à moi, je ne vois pas de fonctionnalités très importantes dans QWebEngineView. Tout d'abord, vous ne pouvez pas accéder à tous les cadres de la page et vous ne pouvez pas exécuter JS dans tous les cadres. Le suivant est que vous ne pouvez pas utiliser QNetworkAccessManager pour contrôler la couche de soulignement de la vue. Donc, pour l'instant, je ne vois aucune solution pour certains problèmes, comme celui-ci Comment désactiver le son sur flashplayer dans mon application personnalisée? . Je veux croire qu'il est possible de le résoudre d'une manière ou d'une autre, car QWebEngineView fonctionne beaucoup plus rapidement et semble n'avoir aucun (ou moins) problème de fuite de mémoire que QWebView.

5
user3479125

Framework: WebKit vs WebEngine

Il y avait Qt WebKit depuis 2007 jusqu'à la version 3. Selon ce blog Qt et ici, il est remplacé par un nouveau moteur Web basé sur Chromium qui est Qt WebEngine. Selon le lien, Qt WebKit fonctionne bien en ce moment et continuera de le faire dans les années à venir, mais si vous souhaitez disposer de toutes les dernières et meilleures fonctionnalités HTML5 disponibles pour votre application ou votre appareil, vous devriez envisager de passer à Qt WebEngine. .

Comme le dit ce blog: Qt 5.4 contient également toujours l'ancien module Qt WebKit. Qt WebKit est toujours pris en charge, mais à partir de Qt 5.4, nous le considérons comme terminé, donc aucune nouvelle fonctionnalité ne lui sera ajoutée. Nous prévoyons également de déprécier Qt WebKit dans les futures versions, car le nouveau Qt WebEngine fournit ce dont nous avons besoin. Dans

Ma décision: je préfère utiliser le dernier QtWebEngine spécialement lorsque je suis au stade initial. Si je frappe le mur, je reviens peut-être au Qt WebKit. QML: WebView vs WebEngineView.

Pour avoir un élément de navigateur dans QML, il existe deux éléments WebView et WebEngineView.

WebView avec le même nom a été défini dans WebKit et WebEngine. La documentation de WebView dans WebKit est ici. Il devrait avoir l'importation QtWebKit 3.0.

Pour utiliser le WebView lié à WebEngine qui est mentionné dans cette documentation, nous devons avoir cette importation: import QtWebView 1.0. Mais nous ferons très probablement face à une erreur # 5 et # 6 dont les solutions de débogage sont des états dans le lien.

J'utiliserai cette dernière WebView, c'est-à-dire celle fournie par WebEngine. La preuve qu'il est lié à WebEngnie est la solution de débogage aux erreurs # 5 et # 6. Désormais, WebView fait référence à celui proposé par WebEngine dans ce document.

Comme le dit ce blog: dans Qt 5.4, Qt WebView est fourni, qui propose une API plus limitée pour intégrer le navigateur Web natif du système d'exploitation sous-jacent pour les cas d'utilisation où le Qt WebEngine complet n'est pas nécessaire, ou là où il peut '' t être utilisé en raison de restrictions provenant du système d'exploitation sous-jacent. Dans Qt 5.4, le module Qt WebView prend en charge iOS et Android. Il prend en charge l'intégration des moteurs Web natifs du système d'exploitation sous-jacent dans Qt et est actuellement disponible pour Android et iOS. Pour cette raison, Qt WebView fournit également une solution légère et pratique pour le Web simple intégration de documents.

WebEngineView permet aux applications QML de restituer des régions de contenu Web dynamique. Un composant WebEngineView peut partager l'écran avec d'autres composants QML ou englober le plein écran comme spécifié dans l'application QML. C'est mon choix dans les applications qui ne vont pas être exécutées sur iOS et Android.

Remarque: C'est selon ce blog que QtWebView reviendra à utiliser QtWebEngine lorsque cela sera possible. En attendant, ils rendent plus de plateformes possibles avec WebView. Il est également mentionné en réponse à un bug QT qui: Bien que nous n'ayons pas d'implémentations WebView natives pour OS X, Windows, etc., nous pouvons recourir à QtWebEngine

Ma décision: WebEngineView dans les applications non Android et iOS.

3
Siamak Rahimi