Hello world en c++ & Qt: un simple navegador web
Hace unos dias relataba mi búsqueda de un lenguaje de progración que soportara la creación de interfaces gráficas "aceptables". Osea, de facilidad de uso y de resultados estables y bonicos.
En dicha búsqueda me topé con XUL. En un principio parece muy buena idea, pero tiene varias carencias:
- La estructura de archivos: es lo más complicado de XUL. Debes tener todo en un directorio específico, debes escribir todo lo que tienes en un archivo manifest, debes controlar muchísimo las rutas chrome de tus archivos...
- Los permisos: XUL es muy paranoico con el tema de los permisos. Para que un javascript haga algo tan simple como escribir en el disco, hay que dar muchos rodeos. Incluso para ejecutar javascript de dentro de un iframe es muy tedioso. Veamos: yo soy el programador, no soy el usuario. Yo decidiré lo que quiero que haga mi programa, ¿no?
- El debug: es algo que no pensé en su momento. No hay forma elegante de depurar errores en XUL + Javascript. Lo he intentado cargando mi aplicación en firefox, usando firebug como debugger... Pero no hay manera. Cada vez que haces un cambio debes reiniciar firefox para volver a cagar tu aplicación.
- Eficiencia: es muy poco eficiente. Se tarda mucho rato en ejecutar una aplicación simple (ya lo veis con firefox).
Pare empezar, este framework es la ostia. Y si no mirad por ejemplo el índice de todas sus clases.
Ofrece también aplicaciones como Qt Designer para crear formularios, pero yo he preferido crearlos a mano, desde código C++ (tampoco es tan dificil: QPushButton *lol = new QPushButton(ventana_donde_quieras_introducirlo);).
Y como demostración de todo su potencial, os muestro mi "hello world" en este framework: un simple navegador web que usa el motor de WebKit (como ya dije, un fork de khtml).

Pinta bastante bien, ¿no?
Tiene soporte para Javascript, CSS... Vamos, un navegador compatible con la 2.0 al 100%.
Si... pero... ¿Es compatible con Windows o MacOSX? Pues SI.
Yo hice mi proyecto poco a poco en GNU/Linux con KDevelop, hasta que lo tuve terminado. Acto seguido, instalé las Qt en Windows y simplemente hice un qmake y make a mi proyecto.
Funcionó a la primera sin tener que cambiar ni una sola linea de code.
En MacOSX no lo he probado, pero según Qt, sí que es igual de compatible.
Para descargarlo, lo podeis hacer desde aquí.
Es muy simple, entrad en el directorio y ejecutad:
qmake (o qmake-qt4 si vuestro qmake es para Qt 3 en vez de para Qt 4)
make
Os generará un ejecutable browser que podeis situar donde querais (ya que no depende de más archivos, gracias a qrc (Qt resources), he podido incrustar todos los iconos dentro del ejecutable).
¿Y miedo con el tema de los overflow, tratamiento de strings, etc, etc? Ninguno, clases como QString hacen todo el trabajo que necesitas.

8 opiniones irrelevantes más:
I like this blog. for real!
berto xxx
Hola
El navegador rula bastante rápido, lo que no entiendo es por qué no aparece en pantalla completa y sí separada la ventana principal, donde sale el cargador y finished
Saludos
Mmm... creo que no te entiendo.
¿Puedes colgar una screenshot en http://imageshack.us y señalar lo que ves raro?
Hola
Me refiero a este aspecto:
http://maslinux.org/?p=180
PD: Gracias por contestar.
Anda, ni había caido.
Mi resolución es mucho más pequeña (800px de alto), por lo que no percibí el error.
Como esto es un simple hello world, no tiene mucho sentido postear un fix.
Si quieres arreglar el problema, te recomiendo editar el ./src/windows/MainWindow.cpp
Con un poco de maña, puedes cambiar la configuración de "content" (es el puntero que contiene el navegador en sí).
Como puedes ver, por defecto webkit se ajusta a la ventana, pero al parecer no ajusta bien el height.
Te recomiendo esta página además:
http://doc.trolltech.com/main-snapshot/qwebview.html
Ahí tienes todas las propiedades y métodos de la clase QWebView ;)
Saludos!
Muchas gracias.
Se ve que eres un tio cojonudo
Esto esta de lo mejor, pero necesito que me ayuden, estoy tratando de implementar eso del
addtoJavaScriptwindowobject
y no he podido hacer que funcione.
Si algui sabe como por favor ayudeme o pongan un enlace donde pueda encontrar ayuda.
GRACIAS !!!
:S no entiendo tu problema.
Ese método no existe, como mucho existe el setHtml:
void QWebView::setHtml ( const QString & html, const QUrl & baseUrl = QUrl() )
http://doc.trolltech.com/main-snapshot/qwebview.html
Publicar un comentario en la entrada