29 junio 2008

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).
Una vez descartado XUL, me puse a buscar información sobre c++ y las bibliotecas Qt.

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.