¿Hay alguna manera de exponer un objeto/función C++ a JavaScript ejecutándose dentro del buscador QtWebKit en Qt? Es posible exponer objetos de ActionScript al código JS que se ejecuta dentro del navegador WebKit en Adobe AIR. Estoy buscando una funcionalidad similar en Qt.Exponer el objeto C++ a Javascript en Qt
Respuesta
Sí. Eche un vistazo a this.. Debe ser un buen comienzo.
EDIT: enlace funciona, pero sólo en caso ROMPE EL ENLACE DE NUEVO [Link] por Richard Moore ...
Una pregunta que he visto llegar varias veces en qts y QT-interés es cómo agregar API personalizadas (específicas de la aplicación) a las disponibles por defecto en QtWebKit. Esto es bastante fácil (una vez que sepa cómo) como mostraré a continuación . Esta publicación mostrará un ejemplo simple de cómo hacer que un objeto esté disponible desde javascript, incluidos los métodos de llamada en el objeto y los valores de devolución de C++.
Hay dos cosas que realmente necesita saber con el fin de realizar esta integración , el primero es el método addToJavaScriptWindowObject() de QWebFrame, esto permite que hará que el QObject especificada visible desde Javascript. Lo segundo que necesita saber es que los objetos publicados en de esta manera desaparecerán cada vez que se borre el objeto de la ventana javascript - , es decir. cada vez que el usuario navega a una nueva página. Para evitar que esto cause problemas con , QWebFrame proporciona una señal que le informa cuando el objeto está desactivado , lo que le permite volver a agregar su API personalizada. ¡De hecho, es mucho más simple de lo que parece!
El núcleo de este es realmente implementado en dos métodos en el ejemplo, son muestra a continuación:
void MyApi::setWebView(QWebView *view)
{
QWebPage *page = view->page();
frame = page->mainFrame();
attachObject();
connect(frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject()));
}
void MyApi::attachObject()
{
frame->addToJavaScriptWindowObject(QString("MyApi"), this);
}
Este código es todo lo que necesita con el fin de hacer toda la ranuras públicas del objeto MyApi visible para JavaScript. La clase MyApi proporciona dos ranuras pública: (! Sí, ranuras pueden volver las cosas)
public slots:
void doSomething(const QString ¶m);
int doSums(int a, int b);
la primera ranura simplemente registra un mensaje en la salida de depuración, el segundo vuelve la suma de sus dos argumentos . Se llaman desde JavaScript como esto:
MyApi.doSomething('Hello from JS page 2!!!!');
sum = MyApi.doSums(2, 3);
alert('C++ says the sum is ' + sum);
Y eso es todo lo que hay que hacer! Puede descargar el código desde>http://xmelegance.org/devel/qtwebkitextension.tar.gz.
Desafortunadamente, este ejemplo no funciona en QT5. ¿Alguna posibilidad de una actualización o debo abrir otra pregunta? – Alex
- 1. Exponer una API de C++ a C#
- 2. Cómo exponer un modelo C++ a QML
- 3. Exponer un objeto similar a un archivo desde Cython
- 4. Exponer una API de C++ a Python
- 5. C# exponer a COM - herencia de interfaces
- 6. Qt: clases Qt frente a estándar C++
- 7. Obteniendo el tamaño de un Objeto Qt
- 8. ¿Cómo puedo exponer iteradores sin exponer el contenedor utilizado?
- 9. ¿Qué estrategia se debe utilizar al exponer C++ a Lua
- 10. Qt 4.6 Agregar objetos y subobjetos al objeto de la ventana QWebView (C++ y Javascript)
- 11. ¿Escribir en C++ y exponer a C# o escribir directamente en C#?
- 12. Jerarquía en Qt [C++]
- 13. Exponer una clase ISO C++ a una aplicación VB6
- 14. Javascript: objeto Blob a base64
- 15. ¿Cómo copio un objeto en Qt?
- 16. objeto JavaScript para objeto JavaScript
- 17. Qt use-case para la misma señal a 2 ranuras en el mismo objeto?
- 18. cómo acceder a JSON.parsed objeto en Javascript
- 19. javascript llamando a una función en el objeto ventana
- 20. Javascript empujando el objeto en el arreglo
- 21. Portando Borland C++ Builder a Qt
- 22. ¿Cómo puedo añadir javascript objeto a otro objeto en dinámica
- 23. Devolver el objeto C++ a Java
- 24. Qt - mezclando Qt y std :: C++ tipos
- 25. Propiedades de Java: ¿exponer o no exponer?
- 26. Almacenar imágenes en el objeto Javascript
- 27. Tipo decimal en Qt (C++)
- 28. var vs esto en el objeto Javascript
- 29. Objeto NodeList en javascript
- 30. Establecer un objeto igual a otro objeto con el operador de asignación en Javascript
¡Gracias por la información! – BlueSilver