Este documento fue elaborado por Rolando Godoy y Cristhian Castillo, estudiantes del Tercer Nivel “A” de la Universidad Tecnológica América de Quito * Ecuador

 

1.      Tema

 

APLICACIÓN DE LA LIBRERÍA QT EN ELABORACIÓN DE UN DIRECTORIO TELEFÓNICO

 


2.      Antecedentes del Proyecto

 

La Universidad Tecnológica América, en función de su misión “Formar profesionales competentes, con pensamiento emprendedor, de amplia cultura científica, tecnológica y humanista, con capacidad de liderazgo y de crear sus propias empresas, sobre la base de un modelo educativo, caracterizado por procesos de investigación, producción y servicios que promuevan: inteligencia, creatividad, valores éticos y humanos.”, conduce a través de elaboración y defensa de proyectos integradores, para resolver problemas científico-técnicos como vía de producir las experiencias de aprendizaje que garanticen las exigencias cognitivas que demandan la ciencia y la tecnología.

 

Tomando en cuenta que en los actuales momentos la tendencia de las grandes empresas (NASA, IBM, XEROX) es el software con interfaces gráficos; incursionaremos en la librería Qt, con una aplicación transaccional.

 

El presente Proyecto, engloba la síntesis y análisis de las fuentes de investigaciones, comenzando primeramente entendiendo que es Librería QT de Linux, para el buen entendimiento y desarrollo del tema.

 

También, debemos agradecer a todos los tutores de las asignaturas de este nivel, en especial a la Ing. Rosita Paredes, por el apoyo incondicional que han demostrado ante la Elaboración de los Proyectos Integradotes en todas las ciencias.

 

3.      Problema a resolver.

 

*     Aplicar la librería Qt en elaboración de un Directorio Telefónico

 

Dicha aplicación, debe utilizar objetos, ventanas, menús, botones, clases y eventos del Lenguaje C++. Es decir será interactiva entre el usuario y el computador.

Entonces, describimos nuestra problemática, que es el de conocer a fondo lo que engloba la Librería QT en modo grafico (Qt Designer) y poder aplicarla en una ejercicio de un directorio telefónico.

 

 

 

4.      Justificación

 

Al no conocer el conocimiento de una aplicación, utilizando la librería Qt, tenemos la necesidad de programarla; pasando por un proceso de investigación y aprendizaje de nuevos conceptos, técnicas y habilidades.

 

Conocer a fondo lo que engloba la Librería QT y poder conjugarla en una aplicación, en este caso un ejercicio de directorio telefónico.

 

Además, como la mayoría de personas conocemos, que en la actualidad, la Programación y la Computación en general, es una de las ciencias más importantes para el crecimiento de una empresa, puesto que necesita renovar su tecnología para tener una mejor perspectiva empresarial.

 

5.      Objetivos planteados

 

5.1.           Objetivo General

Emplear la Librería QT, en una aplicación de un Directorio Telefónico, para tener bases metodológicas y conceptuales, fortaleciendo nuestras destrezas en la programación; por medio del estudio analítico de la Librería QT y el asesoramiento de nuestra Tutora.

 

5.2.           Objetivos Específicos

1.      Fortalecer la capacidad de analizar, sintetizar y razonar, aprendiendo los conceptos básicos de la librería Qt.

2.      Analizar las bases teóricas de la Liberia QT, mediante la investigación de fuentes bibliográficas y tutorías.

3.      Conocer los alcances y limitaciones de esta librería.

4.      Programar en Lenguaje C++, empleando la herramienta Qt designer, en una aplicación de un Directorio Telefónico, de fácil entendimiento para la respectiva socialización.

5.      Socializar nuestro tema con los compañeros de Nivel.

 

6.      Alcance

Con el presente trabajo, nos comprometemos a investigar y conocer de manera práctica la aplicación que tiene la Librería QT en una aplicación de un Directorio Telefónico.

Todo esto se desarrollará con el propósito de cumplir con nuestro objetivo, de tener una estructura mental con bases del conocimiento en el desarrollo y estructuras de aplicaciones de la mencionada Librería.

Para poder comprender de mejor manera, el problema se debe tomar en cuenta nociones básicas de la Librería QT, porque observamos la necesidad de comenzar por lo básico, para determinar las definiciones concretas y metodológicas del tema: Aplicación utilizando la mencionada Librería.

Entre los temas estudiados serán:

 

1.      La creación de interfaces gráficas, se realizará de QT Designer.

2.      El lenguaje de programación es C++.

3.      El sistema operativo a utilizarse es Linux.

4.      La aplicación será de la de ingresar datos en el Directorio Telefónico y otras aplicaciones generales del mismo.

 

7.      Metodología

 

En el presente proyecto se inducirá primero a los conceptos y nociones básicas, para poder asimilar de forma rápida se darán ejercicios de aplicación y por ultimo la programación de nuestro Directorio Telefónico.

 

Se aplicaran bloques de código (C++) con sus respectivas graficas. 

 

 

BASES TEÓRICAS

 

Librerías QT           

 

Qt es un producto de la empresa noruega de software Trolltech AS, esta empresa se dedica a desarrollar librerías y herramientas de desarrollo de software, además es experta en servicios de consultoría. Qt son un conjunto de librerías multi-plataforma para el desarrollo del esqueleto de aplicaciones GUI, escritas en código C++. Qt además esta completamente orientado a objetos.

 

Qt comenzó a distribuirse comercialmente en 1996 y desde entonces ha sido la base para numerosas aplicaciones incluyendo la popular interfaz gráfica para Linux llamada KDE, disponible en todas las grandes distribuciones de Linux .

 

En el mercado se pueden encontrar las siguientes distribuciones de Qt:

 

·        Qt Enterprise Edition y Qt Profesional Edition, disponibles para el desarrollo de software con fines comerciales. Incluye servicio de soporte técnico y están disponibles ampliaciones.

·        Qt Free Edition Es la versión para Unix/X11 para el desarrollo de software gratuito y de código abierto. Se puede obtener gratis sujeto a los términos de la Q Public License and the GNU General Public License. Para plataformas windows también esta disponible la versión Qt non comercial.

·        Qt Educational Edition es una versión de la Qt Profesional Edition con licencia únicamente para fines educacionales.

·        Qt/Embedded Free Edition.

 

Características:

 

·        QT es una librería para la creación de interfaces gráficos. Se distribuye bajo una licencia libre GPL (o QPL) que nos permite incorporar las QT en nuestras aplicaciones open-source

·        Se encuentra disponible para una gran número de plataformas: Linux, MacOs X, Solaris, HP-UX, UNIX con X11. Además, existe también una versión para sistemas empotrados

·        Es orientado a objetos, lo que facilita el desarrollo de software. El lenguaje para el que se encuentra disponible es C++ aunque han aparecido bindings a otros lenguajes como Python o Perl

·        Es una librería que se basa en los conceptos de widgets (objetos), Señales-Slots y Eventos (ej: click del ratón).

·        Las señales y los slots es el mecanismo para que unos widgets se comuniquen con otros.

·        Los widgets pueden contener cualquier número de hijos. El widget "top-level" puede ser cualquiera, sea ventana, botón, etc...

·        Algunos atributos como el texto de etiquetas, etc ... se modifican de modo similar al lenguaje html

 

·        QT proporciona además otras funcionalidades:

o       Librerías básicas -> Entrada/Salida, Manejo de Red, XML

o       Interface con bases de datos -> Oracle, MySQL, PostgreSQL, ODBC

o       Plugins, librerías dinámicas (Imágenes, formatos, ...)

o       Unicode, Internacionalización

 

Qt Designer

 

Es una herramienta muy potente que permite diseñar de una forma muy sencilla y rápida ventanas de dialogo con las librerías Qt. Esta herramienta es una aplicación mediante la cual se puede realizar el diseño de aplicaciones GUI de forma gráfica y muy intuitiva.

 

Características:

 

 

 

o       Dialog: Es la plantilla más simple, crea una ventana que incluye únicamente los botones de minimizar, maximizar y cerrar. De esta derivan el resto de plantillas.

o       Wizard: Permite realizar aplicaciones paginadas, además de esto incluye los botones de cancelar, anterior (back) , siguiente(next) o finalizar (finish).

o       Dialog with buttons: Igualmente deriva de la primera e incluye lo botones de ayuda ,apply ,ok y cancel.

 

 

 

 

Se pueden añadir los siguientes objetos:

 

-                   Botones: Se pueden añadir diversas clases de botones. Los que se pueden encontrar son pushbutton, toolbutton, radiobutton o check button, estos difieren en su forma pero básicamente pueden realizar las mismas funciones.

 

 

 

 

 

 


Ejemplos de Botones

-                   Containers : Se pueden definir como contenedores que se pueden etiquetar con un titulo y pueden contener texto , imágenes incluso otros objetos tales como botones. Igualmente existen varios tipos Groupbox, Buttongroup,Frame, etc.

Ejemplos de containers

 

-                   Inputs : Este apartado incluye LineEdit (líneas de edición) pueden servir para recoger datos que se introducen por teclado , MultiLineEdit (similar) , combobox (listas desplegables) y otros como slider,spinbox o dial .

 

Ejemplos de Inputs

 

-                   Displays: En este apartado se incluyen textlabel (etiquetas de texto), pixmapLabel (imágenes) , progressbar (barras de progreso) además de LCDnumber, Line etc.

 

Ejemplos de Displays

 

-                   Views: Son objetos que pueden albergar iconos, también en este apartado se incluyen las tablas.

 

Ejemplo de views

Todos estos se encuentran en el menú Tools aunque también se puede encontrarlos en las barras de herramientas con sus respectivos iconos.

 

Se pueden realizar señales, conocidas como Slots y Signal:

 

-                     Slots y Signal.- Los slots y signals (señales) son un mecanismo de comunicación entre objetos, esta es la principal característica de Qt y es el rasgo que hace distintas las librerías Qt del resto de herramientas para la elaboración de GUI, es un mecanismo de comunicación seguro, flexible y totalmente orientado a objetos y por supuesto implementado en C++.

 

En la programación con GUI se busca que los cambios producidos en un objeto sean comunicados a otros objetos, por ejemplo cuando hacemos click en un botón para que se cierre una ventana, lo que se hace es posibilitar la comunicación entre los dos objetos. Otras herramientas de diseño de GUI llevan a cabo la comunicación entre objetos usando los llamados callbacks. Un callback es un puntero a una función, con este mecanismo si se quiere procesar una determinada función cada vez que ocurre un evento en un objeto, lo que se hace es pasar un puntero a otra función (el callback) a la función deseada y será esta la que se encargue de llamar al callback en el momento apropiado. Este tipo de comunicación tiene el inconveniente de no ser totalmente seguro puesto que no se sabe si se llamará al callback con los argumentos apropiados y además la función que llama al callback debe saber exactamente a que callback llamar, ademas es un sistema inflexible y no esta orientado a objetos.

 

Se puede crear los archivos *.h y los *.cpp:

 

-                     La aplicación uic permite implementar la clase del modelo realizado con Qt Designer a partir del archivo .ui, es decir obtener los archivos .cpp y .h para ello utiliza la siguiente instrucción en la consola.

 

Para obtener el archivo de cabecera (.h):

 

uic -o <ejemploqt.h> <ejemploqt.ui>

 

Para obtener el archivo de implementación (.cpp):

 

uic -o <ejemploqt.cpp> -impl <ejemploqt.h> <ejemploqt.ui>

 

-                     Con esto ya están los archivos implementados, es decir la clase de la ventana creada ya esta definida ( el nombre que habíamos elegido es Wizard), pero aun falta algo. La herramienta moc (meta object compiler) sirve para obtener archivos de extensión .cpp que se encargan de implementar el mecanismo de slots/signals.

 

moc -o <moc_ejemploqt.cpp> <ejemploqt.h>

 

 

Ejemplo:

 

Programa “Hola mundo”                                                               

 

Se trata del tradicional Hola mundo.

1.      Creamos una ventana y la llamos holamundo.

2.      Si compilamos el proyecto nada más ser generado, deberíamos obtener una aplicación con una ventana en blanco.

A partir de aquí podríamos proceder de dos formas diferentes: Diseñar la interfaz desde el código o usar QT Designer. Seguiremos este último camino

 

3.      Dentro del QT Designer elegimos diseñar un diálogo, lo que hará que se nos presente un formulario vacío. Añadiremos una etiqueta (QLabel) y un botón (QPushButton). En el panel de propiedades cambiaremos el texto de la etiqueta a una cadena vacía y el caption del botón a la cadena "Haga click aquí".

 

En el menú Preview del QT Designer podemos ver como quedaría nuestro formulario con distintos aspectos según el tema de KDE seleccionado. Aún tendríamos un problema antes de dejar concluida la interfaz. Si nos damos cuenta, en el preview, al maximizar, no queda bien la disposición de nuestro hola mundo. Podemos hacer dos cosas: Impedir que se pueda maximizar (sería lo mas lógico en esta aplicación) o bien hacer que se redimensione todo. Vamos a hacer esto último para ilustrar el uso del los layouts.

4.      Añadimos unos widgets que se llaman espaciadores (spacers) a ambos lados de la etiqueta y el botón. En el formulario aparecerán como una especie de muelles. A continuación se lecionamos los dos spaciadores y la etiqueta y pulsamos el botón derecho del ratón. En el menú que sale seleccionamos layout horizontal.

Hacemos lo mismo con el botón.

Al final seleccionamos todo y elegimos en el menú layout en rejilla (grid).

El resultado es como el siguiente:


Ya sólo nos queda añadir las señales y los slots. Éste es el mecanismo que tiene QT para hacer que un widget se comunique con otro al capturarse eventos de usuario.

5.      Con el botón derecho del ratón sobre el formulario, seleccionamos en el menú conexiones (connections...). Creamos una nueva conexión para el botón. Como señal escogemos clicked() que se dispara cuando el usuario haga click en el botón. El siguiente paso será editar el un nuevo slot.

 

 

6.      Damos a editar slots... y creamos uno nuevo llamado diHola(). Se lo asignamos al Form1 y con eso ya estaría

 

 

7.      Sólo nos queda derivar nuestra ventana inicial HolaMundo de Form1, para que herede de ella. En el fichero holamundo.h habra que poner:

...
#include 
#include 
#include 
#include 
#include "interfaz.h"
 
/** HolaMundo is the base class of the project */
 
class HolaMundo : public Form1
{
  Q_OBJECT
  public:
    /** construtor */
    HolaMundo(QWidget* parent=0, const char *name=0);
    /** destructor */
    ~HolaMundo();
    public slots:
    void diHola();
};
 
#endif

 

 

8.      En el holamundo.cpp ponemos lo siguiente:

...
#include "holamundo.h"
 
HolaMundo::HolaMundo(QWidget *parent, const char *name) : Form1(parent, name)
{
}
 
HolaMundo::~HolaMundo()
{
}
 
void HolaMundo::diHola()
{
   this->etiqueta->setText("Hola mundo