Compilar y ejecutar aplicaciones con QtJambi desde consola

Hace ya bastante tiempo que publique un post para quienes deseaban introducirse en la programación de aplicaciones Java haciendo uso del framework QtJambi.
En el mismo, explique como usar estas librerías haciendo uso de un plugin para integrarlo a Eclipse con el fin de simplificar pasos ya que yo mismo tenia problemas cuando intentaba compilar y ejecutar aplicaciones que hicieran uso de este framework sin ningún IDE de por medio.

Resulto ser que no era tan complicado como pensaba, simplemente que estaba comentiendo un error con el script que provee la gente de Trolltech junto con la implementación de QtJambi para Linux. Mejor dicho, debido a un alias que tenia asignado al comando “ls”. Nada grave ni difícil de solucionar… uno de esos típicos “que bolu….” que tanto nos pasa.

En fin, vamos a lo importante.

Lo primero e indispensable que necesitamos para correr aplicaciones hechas con QtJambi es (ademas de un JDK) el paquete provisto por Trolltech para nuestra plataforma. En mí caso, es el “Qt Jambi Open Source Edition for Java Developers: X11 Binary, 32 Bit”

Una vez que lo tenemos, simplemente lo descomprimimos y realizamos:

#source set_qtjambi_env.sh

Con esto nos aseguramos que las carpetas con las clases que utiliza QtJambi se encuentren en nuestra variable CLASSPATH.

Ahora, solo nos queda escribir nuestro programa y ejecutarlo de la forma habitual con:

$javac Test.java
$java Test

Así es, no más complicaciones que esas… un buen ejemplo en donde debemos pensar antes que renegar :).
Pronto levanto la segunda parte del articulo, mientras tanto, dejo un código fuente sencillo para realizar un “hola mundo” con Jambi.

  1. import com.trolltech.qt.gui.*;
  2. public class Test {
  3. public static void main(String[] args) {
  4. QApplication.initialize(args);
  5. QPushButton button = new QPushButton(“Hola Mundo”);
  6. button.show();
  7. QApplication.exec();
  8. }
  9. }

Una "ojeada" a Jambi, primera parte

Aprovechando la salida de Qt Jambi 4.4 (de ahora en más, simplemente Jambi), me puse a echar una mirada a este conjunto de APIs tan interesante.
Mi idea con este post es contar un poco de que se trata Jambi e introducir un poco a la programación con las librerías QT en Java, para lo cual trabajare con un pequeño ejemplo en el cual armaremos un sencillo navegador web haciendo uso de la recientemente incorporada integración con el motor WebKit que incluye Jambi.

¿Que vamos a hacer?

La idea de este articulo/tutorial es ver dos cosas, por un lado, dar una introducción a la programación con Qt y luego armar un pequeño programa que haga uso de Jambi y de una de las nuevas características incluidas en la versión 4.4 que es la integración con WebKit.

Si bien cuando comencé a escribir esto, pensé en hacer todo un solo articulo, considere que seria mejor separarlo en 2 partes para no hacerlo excesivamente largo y molesto para quienes lo leen por medio de los feeds.

En esta primera parte, are una breve introducción a las librerías Qt/Jambi y el proceso para integrar Jambi con Eclipse (la forma más sencilla de utilizarlo)
En la segunda veremos ya como aplicar esto en una sencilla aplicación que utilice, como ya dije, un poco de los conceptos que veremos y la reciente integración con WebKit.

Por ultimo, me gustaría aclarar que ni por asomo soy un experto en Qt o Jambi, simplemente lo estoy usando para un pequeño proyecto que tenemos con unos compañeros de facultad y me parecio una buena forma de compartir lo que fuí aprendiendo sobre este tema y de paso asentar algunas cosas… así que sepan que esto esta propenso a errores ;)

¿Jambi, Qt… que es eso?

Para no divagar ni decir cosas que no son, simplemente copiare y pegare la definición de QT que existe en Wikipedia, quizá seria más adecuado usar la definición “oficial” pero mejor saltarnos todo la parte “marquetinera” (igualmente recomiendo su lectura, por razones obvias)

“Qt es una biblioteca multiplataforma para desarrollar interfaces gráficas de usuario.”

Qt, de manera nativa, usa el lenguaje de programación C++ y es acá donde entra en juego Jambi que es, precisamente, una implementación de dicha librería para el lenguaje Java. Otra característica importante de Jambi es la posibilidad de integrar código C++ en nuestras aplicaciones Java e incluso cuenta con una herramienta para “traducir” código C++ en Java. Para más información sobre esto último, recomiendo la lectura del whitepaper que se encuentra en la página de Qt.
Si bien se puede dar una definición un poco más compleja (y exacta) esto nos bastara por ahora. Para más información les recomiendo la comple ta (aunque desordenada) documentación oficial de Jambi: http://doc.trolltech.com/qtjambi

Entendiendo Qt

Como dije anteriormente, Jambi es una implementación en Java de Qt y por tanto, hereda toda la “filosofía” (por llamarlo de alguna manera) de este. Es por esto que debemos conocer algunas cosas respecto a la forma de “ver las cosas” que tiene Qt antes de ponernos a programar.

Sin entrar en tecnicismos, lo primero y principal es saber que para Qt, todo es un widget, desde un botón, hasta una ventana, e incluso podemos agrupar widgets y crear uno propio. Sin más, podemos decir que una aplicación Qt es un widget que a su vez contiene un conjunto de widgets en su interior que pueden estar formados por otro conjunto de widgets.

Estos widgets, se comunican unos a otros mediante lo que Qt llama “Signals and slots“, esto es, los widgets emiten señales (signal) que son tomados por un slot especifico de otro widget lo que provoca alguna acción.

Por ejemplo, tenemos un botón dentro de una ventana, que al hacer click en el provoca que la ventana se cierre. Esto podríamos explicarlo, diciendo que tenemos un widget del tipo “QPushButton” dentro de otro widget del tipo “QApplication” que emite una señal “clicked()” que es recibida por el slot “quit()” del widget QApplication.

Hablando, ahora sí, en forma un poco más técnica, podemos decir que QWidget es una clase abstracta que es heredada por todos los widgets que componen Qt (y aquellos que definamos nosotros). Es decir, que tanto nuestra aplicación, como el botón del que hablábamos, son objetos de las clases QApplication y QPushButton que heredan los métodos y propiedades de la clase QWidget.
O sea, que para incorporar widgets en nuestra aplicación, basta con que instanciemos un objeto de la clase de dicho widget (botones, cuadros de texto, ventanas, etc) y luego los mostremos.

Preparando todo

Bien, ahora que “sabemos” que es Qt y tenemos una mínima idea de con que nos vamos a encontrar, estamos con ganas de probar eso escribiendo algo, pero para eso, primero debemos preparar nuestro entorno antes de poder escribir (o mejor dicho ejecutar) algo.

Para simplificar un poco el proceso de descarga e instalación de estas librerías, recomiendo el uso del paquete de integración con Eclipse que podemos descargar desde su página oficial.
El proceso consiste, básicamente, en la descarga de dicho paquete para nuestra plataforma (linux32/64,Windows, etc), descomprimirlo en la carpeta donde tenemos instalado Eclipse, y luego ejecutar este último con la directiva “-clea n”. Una vez hecho esto, bastara con que configuremos las preferencias de Jambi dentro de Eclipse para que sepa en donde se encuentran instalados, para ello, dentro de Eclipse, nos dirijimos a Window >> Preferences y de ahí a “Qt Jambi preferences” e indicamos la ruta hacia el lugar donde instalamos las librerias, como se ve en la imagen,

Creo que hasta acá bastara con la introducción. En la continuación ya comenzaremos a escribir un poco de código para entender mejor todo esto. Desde ya, si te intereso lo que escribí, te insito a que no te quedes con estos “apuntes de estudiante” y recurras a la documentación oficial de Trolltech y que revises su página web completa, como dije, la documentación es completa, pero desordenada.

En los próximos días, la continuación…