Professional Documents
Culture Documents
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++.
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.
Existen diversos toolkits para la construccin de interfaces de usuario, entre las cuales podemos citar:
o o
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.
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/signal 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.
Instalando lo necesario
Primero veamos lo que necesitamos: 1. 2. 3. 4. 5. Es posible trabajar con cygwin o mingw, aqu se mostrar como hacer el montaje con mingw. Las libreras QT. Aqu las QT 4.3.1. Una maquina virtual de java, 5 o 6. Eclipse 3.3 europa para C/C++ 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.
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).
Despus de tener el eclipse instalado podemos crear nuestros primeros proyectos en C/C++, siguiendo el tutorial.
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.
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.
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:
10
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
11
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.
12
#ifndef PPAL_H #define PPAL_H #include <QtGui/QMainWindow> #include "ui_ppal.h" class Ppal : public QMainWindow { Q_OBJECT public: Ppal(QWidget *parent = 0); ~Ppal(); private: Ui::PpalClass ui;
private slots: void void void void }; #endif // PPAL_H addDatas(); delRow(); calc(); on_btnAdd_clicked();
13
Ppal::Ppal(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); connect(ui.btnAdd,SIGNAL(clicked()),this,SLOT(addDatas())); connect(ui.btnCalcular,SIGNAL(clicked()),this,SLOT(calc())); } Ppal::~Ppal() { } void Ppal::on_btnAdd_clicked() { } void Ppal::addDatas() { QTableWidgetItem* item=0; bool st=false; // tratamos de convertir el valor en X ui.leX->text().toDouble(&st); if(st!=true) { return; } // tratamos de convertir el valor en Y ui.leY->text().toDouble(&st); if(st!=true) { return; }
14
void Ppal::delRow() { //Escribeme! } void Ppal::calc() { double* x=0; double* y=0; int n; n=ui.tbDatos->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.tbDatos->item(i,0)->text().toDouble(); y[i]=ui.tbDatos->item(i,1)->text().toDouble(); }
std::cout<<"a0 :"<<a0<<" a1: "<<a1<<"\n"; QString qsa0 = QString("%1").arg(a0); QString qsa1 = QString("%1").arg(a1); ui.leA0->setText(qsa0); ui.leA1->setText(qsa1);
delete[] x; delete[] y; }
15