qt4eclipse

Upload: carlos-castaneda

Post on 05-Apr-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 qt4eclipse

    1/16

    02/10/2007

    Int roduccin a laprogramacin con Qt 4 eneclipseUn ide libre y de calidad para desarrollo con

    Qt

    Jhon James Quintero Osorio

  • 8/2/2019 qt4eclipse

    2/16

    Jhon James Quintero Osorio

    1

    Introduccin a la programacin con

    Qt 4 en eclipseIntroduccin

    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 const ruir GUI s

    Donde los bits y las personas se encuentranNegroponte, 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.

  • 8/2/2019 qt4eclipse

    3/16

    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 GPLo Tiene como objetivos,

    Correccin,

    Rendimiento,

    Usabilidad.

    Figur a 1 Apl icac in desa r r o l lad a con GTK.

  • 8/2/2019 qt4eclipse

    4/16

    Jhon James Quintero Osorio

    3

    WxWidge t s . Es un toolkit de cdigo abierto, desarrollado en C++, para crear aplicacionesmultiplataforma (Windows, Windows CE, Linux, Mac Os, ). Al estar programado en C++

    aprovecha toda la versatilidad de la orientacin a objetos.

    Figur a 2 Aplicac in con WxW idget s .

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

  • 8/2/2019 qt4eclipse

    5/16

    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 toolkitmaduro 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 funcinXque es

    pasado a otra para que sta ltima llame aXen 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

    s e a l / s i g na l como un aviso que un objeto puede emitir cuando le ocurre algo (un cambio de estado

    importante, tambin denominado evento), un s lot 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.

    F i gu r a 3 M e c a n i s m o d e S i g n a l s / s lo t s .

  • 8/2/2019 qt4eclipse

    6/16

    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:

  • 8/2/2019 qt4eclipse

    7/16

    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 virt ual de javaPues 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.

  • 8/2/2019 qt4eclipse

    8/16

    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.

    Figur a 4 Ec lipse in ic ian do .

    Al entrar a eclipse nos aparece una pantalla as:

    F ig u r a 5 P a n t a l la d e b i e n v e n i d a d e e c l ip s e C / C + +

    Despus de tener el eclipse instalado podemos crear nuestros primeros proyectos en C/C++, siguiendo

    el tutorial.

  • 8/2/2019 qt4eclipse

    9/16

    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.

    F i gu r a 6 Co n f i gu r a n d o e l p l u g in c o n l a s i n s t a l a c io n e s d e Q t .

    Programa de ej emplo 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 estinstalada 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, generalmetnees mejor cambiarla y colocar un nombre que empiece por maysculas.

  • 8/2/2019 qt4eclipse

    10/16

    Jhon James Quintero Osorio

    9

    F i gu r a 7 W iz a r d p a r a e l n o m b r e y t ip o d e l a p r i m e r a c l a s e Q t.

    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.

  • 8/2/2019 qt4eclipse

    11/16

    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 seleccionamospropierties; en

    las opciones de C/ C++ Ma ke Project, seleccionamos la pestaa enviromenty 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:

    F ig u r a 8 L a v e n t a n a p r i n c ip a l d e l a a p l ic a c i n .

  • 8/2/2019 qt4eclipse

    12/16

    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 visualdel 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

    F i gu r a 9 Co n f i gu r a c i n d e l a r c h i v o d e l p r o y e ct o .

    Se agrega la

    ruta para los

    include

  • 8/2/2019 qt4eclipse

    13/16

    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.

    F i gu r a 1 0 C o n f ig u r a c i n d e l ib r e r a s p a r a e l e n l a ce .

    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

  • 8/2/2019 qt4eclipse

    14/16

    Jhon James Quintero Osorio

    13

    #ifndef PPAL_H

    #define PPAL_H

    #include#include"ui_ppal.h"

    classPpal : publicQMainWindow

    {

    Q_OBJECT

    public:

    Ppal(QWidget *parent = 0);

    ~Ppal();

    private:

    Ui::PpalClassui;

    private slots:

    voidaddDatas();

    voiddelRow();

    voidcalc();

    voidon_btnAdd_clicked();

    };

    #endif// PPAL_H

  • 8/2/2019 qt4eclipse

    15/16

    Jhon James Quintero Osorio

    14

    #include

    #include

    #include

    #include

    #include"ppal.h"

    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()

    {

    }voidPpal::on_btnAdd_clicked()

    {

    }

    voidPpal::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;

    }

    //Se agrega una fila a la tablaui.tbDatos->setRowCount(ui.tbDatos->rowCount()+1);

    item = newQTableWidgetItem(ui.leX->text());

    ui.tbDatos->setItem(ui.tbDatos->rowCount()-1,0,item);

    item = newQTableWidgetItem(ui.leY->text());

    ui.tbDatos->setItem(ui.tbDatos->rowCount()-1,1,item);

    }

  • 8/2/2019 qt4eclipse

    16/16

    Jhon James Quintero Osorio

    15

    voidPpal::delRow()

    {

    //Escribeme!

    }

    voidPpal::calc()

    {

    double* x=0;

    double* y=0;

    int n;

    n=ui.tbDatos->rowCount();

    x= newdouble[n];

    y= newdouble[n];

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

    for(int i=0;iitem(i,0)->text().toDouble();

    y[i]=ui.tbDatos->item(i,1)->text().toDouble();

    }

    std::cout