Está en la página 1de 16

02/10/2007

Introduccin a la
programacin con Qt 4 en
eclipse
Un ide libre y de calidad para desarrollo con
Qt


Jhon James Quintero Osorio
Jhon James Quintero Osorio


1


Introduccin a la programacin con
Qt 4 en eclipse
Introduccin

Hace muchos aos que le vengo siguiendo la pista a varios proyectos de software que me parecen
interesantes, uno de ellos es Qt, librera con la que han sido desarrolladas varias aplicaciones, una de
las ms significativas es KDE, el famoso y vistoso entorno de escritorio para Linux y otros Unixes.
Despus de haber intentado compilar un proyecto simple en los siguientes entornos:
QDevelop.
MonkeyStudio
CodeBloks
Y no conseguirlo, muy posiblemente por mi ignorancia y facilismo, me sent frustrado pues, como es
posible que un framework tan maduro (en su versin libre) no tenga un buen entorno de desarrollo?
Pues en una de mis visitas a la pgina de Trolltech, me encontr con que haban liberado la versin 1
del plugn de integracin QT eclipse para las versiones Qt 4.3.1 y eclipse 3.3 para C/C++.

Toolkits para construir GUIs
Donde los bits y las personas se encuentran
Negroponte, 1994

La mayora de las aplicaciones actuales se caracterizan por tener una interfaz de usuario agradable
para el usuario (por lo menos as debera ser), adems la cantidad lneas de cdigo correspondiente a
la interfaz de usuario se hace cada vez mayor, es por ello que la construccin de dichas interfaces desde
cero es una labor que en la mayora de las veces no se justifica, pues muchas organizaciones, se han
encargado de realizar desarrollos que permiten construir interfaces de muy buena apariencia
rpidamente.
Jhon James Quintero Osorio


2


Existen diversos toolkits para la construccin de interfaces de usuario, entre las cuales podemos citar:
gtk(GIMP ToolKit, http://www.gtk.org). Librera realizada en C (orientado a objetos)
inicialmente creada para desarrollar el programa de manipulacin de imgenes GIMP, ahora
usada en mltiples aplicaciones, GNOME por ejemplo.
Caractersticas:
o Multiplataforma (HP-
UX, SUN-Solaris, Linux,
Windows, BeOs, ).
o Libre, licencia GPL
o Tiene como objetivos,
Correccin,
Rendimiento,
Usabilidad.



Figura 1 Aplicacin desarrollada con GTK.

Jhon James Quintero Osorio


3


WxWidgets. Es un toolkit de cdigo abierto, desarrollado en C++, para crear aplicaciones
multiplataforma (Windows, Windows CE, Linux, Mac Os, ). Al estar programado en C++
aprovecha toda la versatilidad de la orientacin a objetos.



Figura 2 Aplicacin con WxWidgets.

Adems de los anteriores tambin se encuentran gtkmm, vtk, vcl, tcl,tk

Jhon James Quintero Osorio


4


Introduccin a Qt

La librera Qt es desarrollada por la empresa noruega TrollTech, con licencias tanto libre como
comercial, desarrollada en C++ con aadidos. Las Qt a la fecha en sus versiones 4.X es un toolkit
maduro que cuenta aproximadamente con 500 clases, ms de 9000 funciones y 500.000 lneas de
cdigo y que le d al programador mucha de la potencia que le brindan lenguajes como C# o Java con
la eficiencia de cdigo compilado en C++.
Las Qt, al igual que otros toolkits no solo cuentan con clases para la construccin de interfaces de
usuario, tambin incluyen soporte para dibujo en 2D, hilos, red, bases de datos, etc. La diferencia
fundamental entre Qt y las otras libreras es que Qt le agrega al C++ estndar los conceptos de signal y
slot, los cuales son similares en funcionalidad al concepto de callback (puntero a una funcin X que es
pasado a otra para que sta ltima llame a X en el momento adecuado).
Una de las caractersticas de las interfaces de usuario actuales es la flexibilidad, y si visualizamos cada
uno de los elementos de la interfaz de usuario como un objeto lo que tenemos es un montn de objetos
intercambiando informacin, es precisamente all donde la magia de las Qt tiene lugar, se define una
seal/ si gnal como un aviso que un objeto puede emitir cuando le ocurre algo (un cambio de estado
importante, tambin denominado evento), un slot es un mtodo de un objeto que puede ser llamado
cuando se genera una seal particular. Las clases que provee Qt poseen signals y slots predefinidos, sin
embargo es muy fcil crear propios en nuevos tipos que deriven de la clase QObjetct.


Figura 3 Mecanismo de Signals/slots.
Jhon James Quintero Osorio


5


Instalando lo necesario

Primero veamos lo que necesitamos:
1. Es posible trabajar con cygwin o mingw, aqu se mostrar como hacer el montaje con mingw.
2. Las libreras QT. Aqu las QT 4.3.1.
3. Una maquina virtual de java, 5 o 6.
4. Eclipse 3.3 europa para C/C++
5. El plugin QT para eclipse.

Instalando mingw

Es necesario del sitio web de mingw (usar un motor de bsqueda), bajar los siguientes instaladores:
binutils.
gcc-core.
mingw-runtime.
mingw-api
gcc-g++.
gdb
mingw32-make
Generalmente estos archivos son archivos con extencin gz por lo cual es necesario utilizar un
programa de descompresin como winrar, winace o cualquiera que soporte este tipo de compresin.
Creamos un directorio digamos en C, llamado mingw y all descomprimimos los archivos
mencionados.
Es importante observar que para trabajar en C/C++ no es necesario instalar el make pues eclipse trae
un sistema de manejo de proyectos, sin embargo los proyectos Qt utilizan make para construir el
proyecto.


Instalando las Qt4.3.1

De la pagina de Trolltech, es posible bajar la ultima versin (4.3.1 a la fecha) de las libreras Qt, que
nos permitirn desarrollar aplicaciones en C++, multiplataforma y con una muy buena apariencia.
El instalador es un archivo ejecutable normal en Windows lo ejecutamos y obtenemos algo como:
Jhon James Quintero Osorio


6




Damos las instrucciones necesarias hasta que aparezca:

En donde indicamos la instalacin de mingw que vamos a usar, y listo (si sale un problema con
w32api.h no hacerle caso y continuar tranquilos).

La mquina virtual de java
Pues ahora con las cantidades de espacio en disco y memoria ram de las computadoras no es mucho
problema que se instale una mquina virtual de java con incluso todo el sdk, esto se consigue en la
pagina de Sun microsystems, es posible usar la versin de 5 o 6 de java. Aqu no se describir la
instalacin pues es en verdad muy simple.



Jhon James Quintero Osorio


7


Eclipse para C/C++

Eclipse ser el entorno en el cual deseamos desarrollar las aplicaciones en C++, como eclipse necesita
de java para poder funcionar, lo instalamos despus de tener el entorno java instalado. La distribucin
de eclipse que vamos a usar es eclipse-cpp-europa-fall-win32.zip que es especifica para desarrollar en
C/C++, es decir no es necesario instalar ningn plugin adicional para los desarrollos bsicos.


Figura 4 Eclipse iniciando.

Al entrar a eclipse nos aparece una pantalla as:

Figura 5 Pantalla de bienvenida de eclipse C/C++
Despus de tener el eclipse instalado podemos crear nuestros primeros proyectos en C/C++, siguiendo
el tutorial.

Jhon James Quintero Osorio


8


El plugin Qt para eclipse

Este plugin nos permitir desarrollar aplicaciones en C++ usando las libreras Qt, el plugin esta
diseado para trabajar con la versin 4.3.1 de las Qt. En el sitio web de Trolltech tambin podemos
bajar la versin del plugin para nuestro sistema, en nuestro caso qt-eclipse-integration-win32-
1.0.0.exe, instalador que al ejecutarlo pedir la ruta de instalacin y la ruta del eclipse al que queremos
integrarlo. Despus de ejecutar el instalador podemos lanzar el eclipse y nos preguntar que si
deseamos abrir un recorrido por el desarrollo con Qt, si indicamos que si podremos configurar el
plugin para que tome las libreras que instalamos en el segundo paso de este proceso.

Figura 6 Configurando el plugin con las instalaciones de Qt.

Programa de ejemplo en Qt 4 con Eclipse

Bien ahora que tenemos todo lo necesario para hacer nuestros programas en C++ con eclipse, vamos a
realizar un ejemplo sencillo, un programa que realice el ajuste por mnimos cuadrados de un conjunto
de datos atreves de una interfaz grfica de usuario. Para esta aplicacin supondremos que la gsl est
instalada en en C:\mingw, aunque podran estar en cualquier parte y configurarlo en el proyecto.

Inicialmente entramos a eclipse y file, new, Qt Gui Projet, si no aparece buscarlo en other.
Le damos un nombre al proyecto, eclipse creara un directorio para este con el mismo nombre
del proyecto.
Eclipse muestra un dialogo con el nombre de la primera Clase Qt del proyecto, generalmetne
es mejor cambiarla y colocar un nombre que empiece por maysculas.

Jhon James Quintero Osorio


9



Figura 7 Wizard para el nombre y tipo de la primera clase Qt.

Luego el wizard nos pregunta si deseamos mdulos adicionales de las Qt.
Si por alguna razn no hemos configurado las instalaciones Qt que tengamos, eclipse nos dir que si lo
deseamos hacer.

Jhon James Quintero Osorio


10


Posiblemente si seleccionamos el proyecto y tratamos de construirlo encontramos problemas en la
ejecucin de mingw32-make, esto se debe a que la ruta del mingw no ha sido configurada en el
proyecto, para eso damos click sobre el proyecto, luego click izquierdo y seleccionamos propierties; en
las opciones de C/C++ Make Project, seleccionamos la pestaa enviroment y agregamos a la variable
PATH la ruta del directorio bin del mingw, presionamos Ok y luego de nuevo Ok en el dialogo mayor, y
listo.


Ahora eclipse puede encontrar los ejecutables necesarios para construir la aplicacin.
Si todo ha ido bien podemos seleccionar el proyecto seleccionar la opcin de ejecutar (ctrl-f11) si es la
primera vez que lo hacemos para el proyecto nos aparecer un dialogo para seleccionar el tipo de
lanzamiento que deseamos (a mi me funciona bien gdb/mi) y debemos obtener algo como lo siguiente:

Figura 8 La ventana principal de la aplicacin.
Jhon James Quintero Osorio


11


Bien ahora usaremos el editor de interfaces de usuario para disear la ventana principal, solo es
necesario dar click sobre el archivo con extencion ui del proyecto.
Trabajando un poco con los widgets podemos obtener algo como:

Dados que necesitamos tambin la librera gsl para realizar nuestro ejemplo utilizamos el editor visual
del archivo de proyecto (extencin .pro), ese archivo es el que controla la totalidad del proceso de
construccin de la aplicacin, dado que la librera gsl est en el directorio del mingw, debemos agregar
a la ruta de los archivos de cabecera c:/mingw/include/gsl-1.8

Figura 9 Configuracin del archivo del proyecto.
Se agrega la
ruta para los
include
Jhon James Quintero Osorio


12


Despus de agregar la ruta para los archivos de cabecera es necesario tambin agregar las libreras
para el proceso de enlace y su respectiva ruta, es importante indicar que la ruta debe escribirse ///,
si con slash.

Figura 10 Configuracin de libreras para el enlace.
Ahora el programa que funcionando:



A continuacin se muestra la implementacin de la clase principal del programa.
La ruta de la
librera GSL, y
los archivos
necesarios
para el enlace
Jhon James Quintero Osorio


13




#ifndef PPAL_H
#define PPAL_H

#include <Qt Gui / QMai nWi ndow>
#include " ui _ppal . h"

class Ppal : public QMai nWi ndow
{
Q_OBJ ECT

public:
Ppal( QWi dget *par ent = 0) ;
~Ppal( ) ;

private:
Ui : : Ppal Cl ass ui ;


private sl ot s:

void addDatas( ) ;
void delRow( ) ;
void calc( ) ;
void on_btnAdd_clicked( ) ;

};

#endif / / PPAL_H

Jhon James Quintero Osorio


14



#include <QTabl eWi dget I t em>
#include <QSt r i ng>
#include <i ost r eam>
#include <gsl / gsl _f i t . h>
#include " ppal . h"

Ppal::Ppal( QWi dget *par ent )
: QMainWindow( par ent )
{
ui . set upUi ( this) ;
connect( ui . bt nAdd, SI GNAL( cl i cked( ) ) , this, SLOT( addDat as( ) ) ) ;
connect( ui . bt nCal cul ar , SI GNAL( cl i cked( ) ) , this, SLOT( cal c( ) ) ) ;

}

Ppal::~Ppal( )
{

}
void Ppal::on_btnAdd_clicked( )
{

}

void Ppal::addDatas( )
{
QTabl eWi dget I t em* i t em=0;
bool st =false;

/ / t r at amos de conver t i r el val or en X
ui . l eX- >text( ) . toDouble( &st ) ;
if( st ! =true)
{
return;
}

/ / t r at amos de conver t i r el val or en Y
ui . l eY- >text( ) . toDouble( &st ) ;
if( st ! =true)
{
return;
}


/ / Se agr ega una f i l a a l a t abl a
ui . t bDat os- >setRowCount( ui . t bDat os- >rowCount( ) +1) ;


i t em= new QTableWidgetItem( ui . l eX- >text( ) ) ;
ui . t bDat os- >setItem( ui . t bDat os- >rowCount( ) - 1, 0, i t em) ;

i t em= new QTableWidgetItem( ui . l eY- >text( ) ) ;
ui . t bDat os- >setItem( ui . t bDat os- >rowCount( ) - 1, 1, i t em) ;


}
Jhon James Quintero Osorio


15



void Ppal::delRow( )
{
/ / Escr i beme!
}

void Ppal::calc( )
{
double* x=0;
double* y=0;

int n;
n=ui . t bDat os- >rowCount( ) ;

x= new double[ n] ;
y= new double[ n] ;

double a0, a1, cov00, cov01, cov11, sumsq;

for( int i =0; i <n; i ++)
{
x[ i ] =ui . t bDat os- >item( i , 0) - >text( ) . toDouble( ) ;
y[ i ] =ui . t bDat os- >item( i , 1) - >text( ) . toDouble( ) ;
}



st d: : cout <<" Dat os: \ n" ;

for( int i =0; i <n; i ++)
{

st d: : cout <<x[ i ] <<" " <<y[ i ] <<" \ n" ;
}

if( gsl _f i t _l i near ( x, 1, y, 1, n, &a0, &a1, &cov00, &cov01, &cov11, &sumsq) ! =0)
{
ui . bt nCal cul ar - >setText( " Er r or ! " ) ;
}


st d: : cout <<" a0 : " <<a0<<" a1: " <<a1<<" \ n" ;
QSt r i ng qsa0 = QString( " %1" ) . arg( a0) ;
QSt r i ng qsa1 = QString( " %1" ) . arg( a1) ;

ui . l eA0- >setText( qsa0) ;
ui . l eA1- >setText( qsa1) ;


delete[ ] x;
delete[ ] y;

}

También podría gustarte