Red de conocimiento del abogados - Ley de patentes - 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 la 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->webEngineview->... De esta manera, incluso dudé si la instalación de otras versiones de Qt me afectaría. Desinstalé todo Qt, incluida la versión 5.6, y reinicié la instalación. Lo hice una vez, 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 -> promocionar a... -. > seleccione QWebEngineView, como en la 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 ? // Componentes básicos #include ? // Página HTML #include ?// Comunicación bidireccional C++ y JS/HTML, reemplazando las funciones del obsoleto QtWebFrame

Dicho componente debe introducirse en nuestro proyecto desde el principio, pero en nuestro proyecto, la interacción con JS no se usa con frecuencia, por lo que no existe ningún método para usar QWebChannel aquí por el momento, dejando solo 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-> webView-> cargar(url);

ui->webView->setContentsMargins(0,0,0,0);

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

Lo haremos use el método de carga para cargar la interfaz donde se encuentra html, usa SIGNAL y la función de ranura void Widget::slotPopulateJavaScriptWindowObject() en mainFrame() de la clase QWebFrame

{

ui- >webView->page()- >mainFrame()->addToJavaScriptWindowObject("ReinforcePC", this);

}

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 y JS o HTML; página interactiva->load(strMapPath); // Carga la ruta html en la página página->setWebChannel(channel ? // Configura el canal para la página y deja que el canal sirva como su mensajero ui->webEngine->setPage); (página); // 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 ejecuta el programa, ya sea WebView en webKits o el nuevo. versión de webEngineView, su El área de componentes en la 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 para cambiar la visualización a un mapa satelital: void Widget::on_pushButtonStreetMap_clicked()

{ QWebFrame *frame = ui->webView->page()->mainFrame( ); // Definir una interacción responsable de QWebFrame

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

frame->evaluateJavaScript(cmd); Utilice el comando debajo del marco para ejecutar el comando}

También podemos ver en este ejemplo 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->webEngine->page()->runJavaScript(cmd); ?// Se puede ejecutar directamente en la página()}

Unidireccional La comunicación en JS 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->webEngine,&QWebEngineView::loadFinished,[=](int){

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

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

.