Red de conocimiento informático - Conocimiento informático - Cómo evaluar Qt WebEngine reemplazando Qt Webkit

Cómo evaluar Qt WebEngine reemplazando Qt Webkit

Desafortunadamente, QtWebkits ha sido eliminado en Qt5.6 y superiores. Sólo puedo lamentar que este componente con buena interfaz y perfecta integración con otras clases como QWebFrame haya desaparecido. En cuanto al nuevo componente de QtWebEngine, debo admitir que tiene un rendimiento poderoso heredado de Chromium, pero la interfaz no es muy rica y la interacción con otras clases no es perfecta. Espero que Qt pueda desarrollarlo más y continuaré. para actualizar Qt y probar la nueva interfaz.

Actualmente, QWebEngine tiene las siguientes deficiencias:

La versión MinGW de Qt no lo admite, ni siquiera Qt5.6 o superior. Solo se admite la versión MSVC.

La interfaz aún no es rica

No se puede interactuar con QWebFrame (usando la nueva combinación QWebChannel y QWebEnginePage para interacción)

Según nuestro proyecto de posicionamiento GPS, consulte a: [Qt desarrolla el sistema de posicionamiento Beidou integrando la API de mapas de Baidu y el empaquetado y lanzamiento del programa Qt]?, Estamos usando la versión Qt5.5 en este proyecto, y el componente QWebKits se usa para cargar el mapa en el navegador integrado, y lo actualizará. Utilice QWebEngine para cargar mapas e interactuar con HTML y JS. Tomemos esto como ejemplo para dar una breve introducción.

2. La diferencia entre las dos UI

Acaba de actualizar a la versión Qt5.6 y es posible que no pueda encontrar el componente QWebEngineView en el componente al diseñar la interfaz UI. No puede hacer clic aquí. Arrastre y suelte este componente en su interfaz de usuario. Revisé mucha información y vi que otros usan a menudo ?ui-gt; webEngineview-gt;... De esta manera, incluso dudé si la instalación de otras versiones de Qt me afectaba. Desinstalé todo Qt incluida la versión 5.6. Lo reinstalé nuevamente, pero después de reiniciar el software, todavía no encontré el fantasma QWebEngineView. En Qt5.5 también puede encontrar un componente QWebView, como se muestra en la Figura 1:

El componente QWebView puede comunicarse entre HTML y JS a través de QWebFrame. Si realiza la transición a QWebEngineView, sin esta interfaz de usuario. ¿Cómo puedo integrar el navegador en la interfaz del software y lograr una programación híbrida de páginas web y software? Según un ejemplo proporcionado por el funcionario, la respuesta se encontró en el navegador de cookies. ¡Éste también es el único integrado en la página web entre los ejemplos oficiales! (¡Tengo que decir que los ejemplos dados por Qt son muy vagos y pobres!) Después de la investigación, QWebEngineView usa el componente de widget. Arrástrelo para que sea un componente transparente. Haga clic derecho en el componente -gt; gt; seleccione QWebEngineView, Figura 2, complete la operación.

Con el componente UI QWebEngineView, podemos llamar a sus miembros, métodos y funciones en el programa para completar la operación.

3. Diferencias en los métodos de uso

Existe una gran diferencia en los métodos de uso. Se puede decir que son dos conceptos completamente diferentes. Para que sea más fácil de entender. No las pegaré aquí en las explicaciones de funciones en la documentación de la API, ¡use las más utilizadas! #include lt; QtWebEngineWidgetsgt; // Componentes básicos #include lt; QWebEnginePagegt; // Página HTML #include lt;// Comunicación bidireccional C y JS/HTML, reemplazando las funciones del obsoleto QtWebFrame; p >

En nuestro proyecto, necesitamos introducir dicho componente desde el principio, pero en nuestro proyecto, no usamos frecuentemente la interacción con JS, por lo que no existe ningún método para usar QWebChannel aquí por el momento, dejando Sólo esta interfaz.

Las siguientes son las diferencias:

Inicialización en WebKits: QUrl url(strMapPath); // strMapPath es la clase QString, que es la ruta de su archivo html ui-gt. ; webView-gt; cargar(url);

ui-gt; ; setTextSizeMultiplier( 1); //Establece el tamaño de fuente de la página web connect(ui-gt; webView-gt; page()-gt; mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(slotPopulateJavaScriptWindowObject())) ;

Usaremos el método load para cargar la interfaz donde se encuentra el html, y usaremos la función SIGNAL y slot void Widget en mainFrame() de la clase QWebFrame:: slotPopulateJavaScriptWindowObject()

{

ui -gt; webView-gt; página()-gt; mainFrame()-gt; addToJavaScriptWindowObject("ReinforcePC", esto); p>

Respuesta. Referencia 1: "Javascript Calling Qt" puede explicar la importancia de esta función de ranura.

Inicialización en WebEngine: QWebEnginePage *page = new QWebEnginePage(this);// Definir una página como administración de páginas QWebChannel *channel = new QWebChannel(this); // Definir un canal como JS o HTML; página interactiva-gt; load(strMapPath); // Carga la ruta html en la página page-gt; setWebChannel(channel ? // Configura el canal en la página y deja que el canal sirva como su mensajero webEngine); -gt ;setPage(page); // Establece una conexión entre la página y webEngine en la interfaz de usuario

Si su programa de inicialización está escrito aquí, cuando ejecute el programa, ya sea WebView en webKits o la nueva versión webEngineView, el área de componentes de su interfaz UI mostrará el archivo html.

En este punto, hemos completado la inicialización de ambos.

Ejecutar JS en el componente WebKits:

Tomamos la función de ranura del botón como ejemplo. Cuando se hace clic en el botón, se enviará un comando a JS para ejecutar JS. script Lo que enviamos aquí es un comando JS que cambia la visualización a un mapa satelital: void Widget::on_pushButtonStreetMap_clicked()

{ QWebFrame *frame = ui-gt; ; mainFrame(); // Definición Un QWebFrame es responsable de la interacción

QString cmd = QString("showStreetMap()"); // Comando JS

frame-gt; cmd); // Usar frame El comando para ejecutar este comando}

En este ejemplo también podemos ver que QWebFrame es la clave para la interacción JS.

Ejecutando JS en el componente WebEngine:

Tomemos esta función de ranura como ejemplo: void Widget::on_pushButtonSatelliteMap_clicked()

{ QString cmd = "showSatelliteMap ( )";

ui-gt; webEngine-gt; page()-gt; runJavaScript(cmd); ?// Se puede ejecutar directamente en page()}

En JS, la comunicación unidireccional es muy simple y no requiere el uso de QWebChannel Messenger, pero el método runJavaScript() no se puede usar en el constructor por razones desconocidas. También se puede utilizar así: connect(ui-gt; webEngine, & QWebEngineView:: loadFinished, [=] (int) {

ui-gt; webEngine-gt; page()-gt; runJavaScript( cmd1);

El segundo parámetro SIGNAL solo se puede llamar de esta manera. Si se usa SIGNAL(...loadFinished), se informará un error.