PARTE I
APLICACIÓN DE LA LIBRERÍA QT EN LA ELABORACIÓN DE UN DIRECTORIO TELEFÓNICO
- Tema
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 Integradores en todas las ciencias.
- Antecedentes del Proyecto
- Problema a resolver.
- ¿Existen aplicaciones en nuestra universidad de la Librería Qt?
Aplicar la librería Qt en elaboración de un Directorio Telefónico
Al no conocer aplicaciones elaboradas por nuestra Universidad con la Librería QT en modo grafico (Qt Designer), realizaremos un directorio telefónico con dicha librería, contendrá ventanas, botones, y eventos del Lenguaje C++. Es decir será interactiva entre el usuario y el computador.
Al no conocer el proceso de elaboración 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.
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.
En vista de que los estudiantes, no poseen conocimientos referentes a la Librería Qt, observamos la necesidad de brindar un estudio analítico del tema antes mencionado, para poder incrementar nuestro nivel intelectual y poder socializar los mismos, por medio de la ponencia del Proyecto Final y del resumen que entregaremos al final del mismo.
En lo que se refiere a lo personal, esta investigación, se la está desarrollando, por cuanto se encuentra estrechamente relacionada con nuestra vida profesional, por cuanto en la actualidad, se utiliza mucho la Programación orientada a objetos en modo grafico, como es caso del Qt Designer.
Teniendo en cuenta que la investigación, es una de las fuentes más trascendentales, para tener una mejor perspectiva profesional, puesto que en todos los campos sin excepción se la utiliza, por cuanto hay que actualizarse con la nueva tecnología que emana del estudio y análisis de las necesidades que se presentan.
- Justificación
Emplear la Librería QT, por medio del estudio analítico, en un modelo pedagógico, de fácil entendimiento; fortaleciendo nuestras bases metodológicas, conceptuales y destrezas en la programación orientada a objetos.
- Objetivo General
- Objetivos Específicos
- Objetivos planteados
- Fortalecer la capacidad investigativa, indagando los conceptos básicos de la librería Qt, para poder utilizar botones, clases y demás eventos.
- Programar en Lenguaje C++, empleando la librería Qt, en una aplicación (Directorio Telefónico), de fácil entendimiento para la respectiva socialización.
- Socializar nuestra investigación con los compañeros de Nivel, por medio de la ponencia del Proyecto Final y del resumen entregado a cada uno, y de esta manera tener conocimientos homogéneos.
- Alcance
Con el presente trabajo, nos comprometemos a investigar y conocer de manera práctica la aplicabilidad que tiene la Librería QT en la creación de un Directorio Telefónico.
Entre los temas estudiados serán:
- Creación de interfaces gráficas, se realizará de QT Designer v. 3.1.1.
- Lenguaje de programación es C++.
- Sistema operativo a utilizarse es Linux v. 9.0.
El directorio telefónico tendrá las siguientes directrices:
- Contendrá una ventana principal.
- Se deberá ingresar datos como nombre, apellidos, dirección, número telefónico, entre otros.
- Una vez ingresado los datos se debe ordenar e imprimir en pantalla.
- Metodología
Los métodos investigamos que hemos utilizado se detallan a continuación:
- Método deductivo, puesto que ejecutamos programas, previamente elaborados, para poder fijarnos en el proceso de elaboración y luego creamos nuevos programas, para poder compararlos y poder definir las falencias de los mismos.
- Método analítico y crítico, puesto que analizamos y sintetizamos las fuentes bibliograficas, para poder sacar un extracto y poder adquirir conocimientos, con el objetivo de aplicarlos en un Directorio Telefónico.
PARTE II
Librería 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: clic 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:
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:
- Para crear una interfaz con QT Designer basta con seleccionar el menú Archivo -> Nuevo… y allí se elige un fichero de QT Designer (*.ui)
Para ver el gráfico seleccione la opción "Descargar" del menú superior
- Las plantillas que se puede escoger son:
- 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.
- Wizard: Permite realizar aplicaciones paginadas, además de esto incluye los botones de cancelar, anterior (back), siguiente (next) o finalizar (finish).
- Dialog with buttons: Igualmente deriva de la primera e incluye lo botones de ayuda ,apply ,ok y cancel.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
- Disponemos de una paleta de widgets muy completa, que incluyen los widgets más comunes de las liberías QT. Si además hemos instalado las librerías para el desarrollo de aplicaciones KDE, tendremos widwets adicionales.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
- El funcionamiento es de estilo Selecciona y dibuja, es decir, basta con seleccionar un tipo de widget en la paleta y luego al ponernos sobre el formulario se dibuja con la geometría que queramos.
- Las propiedades de un widget cualquiera se pueden cambiar fácilmente en tiempo de diseño con el panel de propiedades.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
- A medida que guardamos los cambios de la interfaz, si editamos el fichero .ui vemos que va cambiando el contenido. La descripción de la interfaz se guarda en ese fichero en formato xml.
- Para hacer que nuestra ventana sea la ventana principal de la aplicación basta con hacer que el widget que nos generó como ventana principal herede del nuevo que hemos creado con el QT Designer.
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.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
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.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
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.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
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.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ejemplos de Displays
- Views: Son objetos que pueden albergar iconos, también en este apartado se incluyen las tablas.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
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, además 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.
- Creamos una ventana y la llamamos holamundo.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
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
- Si compilamos el proyecto nada más ser generado, deberíamos obtener una aplicación con una ventana en blanco.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
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.
- 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í".
Para ver el gráfico seleccione la opción "Descargar"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.
- 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 seleccionamos los dos espaciadores 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:
Para ver el gráfico seleccione la opción "Descargar" del menú superior
- 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.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
- Damos a editar slots… y creamos uno nuevo llamado diHola(). Se lo asignamos al Form1 y con eso ya estaría
…
#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
- Sólo nos queda derivar nuestra ventana inicial HolaMundo de Form1, para que herede de ella. En el fichero holamundo.h habrá que poner:
- 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!");
}
y con esto finalizaría nuestro ejemplo
PARTE III
Se presentarán los resultado en Modo Grafico y en Lenguaje C++ |
MODO GRAFICO
Ventanas del Directorio Telefónico
Como resultado del Proyecto, presentamos nuestro programa, que es un Directorio Telefónico, elaborado bajo Qt Designer y modificado en los archivos *.cpp y *.h, realizando en estos, las llamadas o señales.
Este directorio posee una ventana de inicio:
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana de Inicio (Principal)
La ventana de inicio o principal, puede ingresar al Directorio, Números Telefónicos, Ayuda, Acerca de y salir.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana del Directorio Telefónico
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana del Acerca de
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana del Ayuda
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana del Números Telefónicos
Al mismo tiempo las anteriores ventanas, pueden llamar a otras, como se indica a continuación:
- La ventana de Directorio Telefónico, puede borrar los datos ingresados, tener una vista preliminar (en una nueva ventana) y salir. Esta última puede modificar los datos y salir de la aplicación.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana de Vista Preliminar del Directorio Telefónico
- La ventana de Números Telefónicos, puede escoger el usuario, un submenú que contiene los botones de: Servicios, Hospitales, Emergencias y Policía como se muestra a continuación y regresar al submenú y a la ventana principal, dentro de cualquier de estás ventanas podemos salir de la aplicación.
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana de Números Telefónicos de Servicios
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana de Números Telefónicos de Hospitales
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana de Números Telefónicos de Emergencia
Para ver el gráfico seleccione la opción "Descargar" del menú superior
Ventana de Números Telefónicos de Policía
LENGUAJE C++
//Programa del Directorio Telefónico *.moc_cpp
/***********************************************************************
** UNIVERSIDAD TECNOLÓGICA AMÉRICA
** FACULTAD DE CIENCIAS DE LA COMPUTACIÓN Y ELECTRÓNICA
** MODALIDAD SEMI-PRESENCIAL
** TERCER NIVEL INFORMATICA "A"
**
** PROYECTO INTEGRADOR
**
** TEMA: APLICACIÓN DE LA LIBRERIA QT EN UN
** DIRECTORIO TELEFÓNICO
** INTEGRANTES: CRISTHIAN CASTILLO
** ROLANDO GODOY
** TUTORA: ING. ROSITA PAREDES
*********************************************************************/
#undef QT_NO_COMPAT
#include "prointeg.h"
#include <qmetaobject.h>
#include <qapplication.h>
#include <private/qucomextra_p.h>
#if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
#error "This file was generated using the moc from 3.1.1. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
const char *Form1::className() const
{
return "Form1";
}
QMetaObject *Form1::metaObj = 0;
static QMetaObjectCleanUp cleanUp_Form1( "Form1", &Form1::staticMetaObject );
#ifndef QT_NO_TRANSLATION
QString Form1::tr( const char *s, const char *c )
{
if ( qApp )
return qApp->translate( "Form1", s, c, QApplication::DefaultCodec );
else
return QString::fromLatin1( s );
}
#ifndef QT_NO_TRANSLATION_UTF8
QString Form1::trUtf8( const char *s, const char *c )
{
if ( qApp )
return qApp->translate( "Form1", s, c, QApplication::UnicodeUTF8 );
else
return QString::fromUtf8( s );
}
#endif // QT_NO_TRANSLATION_UTF8
#endif // QT_NO_TRANSLATION
QMetaObject* Form1::staticMetaObject()
{
if ( metaObj )
return metaObj;
QMetaObject* parentObject = QWizard::staticMetaObject();
static const QUMethod slot_0 = {"languageChange", 0, 0 };
static const QMetaData slot_tbl[] = {
{ "languageChange()", &slot_0, QMetaData::Protected }
};
metaObj = QMetaObject::new_metaobject(
"Form1", parentObject,
slot_tbl, 1,
0, 0,
#ifndef QT_NO_PROPERTIES
0, 0,
0, 0,
#endif // QT_NO_PROPERTIES
0, 0 );
cleanUp_Form1.setMetaObject( metaObj );
return metaObj;
}
void* Form1::qt_cast( const char* clname )
{
if ( !qstrcmp( clname, "Form1" ) )
return this;
return QWizard::qt_cast( clname );
}
bool Form1::qt_invoke( int _id, QUObject* _o )
{
switch ( _id – staticMetaObject()->slotOffset() ) {
case 0: languageChange(); break;
default:
return QWizard::qt_invoke( _id, _o );
}
return TRUE;
}
bool Form1::qt_emit( int _id, QUObject* _o )
{
return QWizard::qt_emit(_id,_o);
}
#ifndef QT_NO_PROPERTIES
bool Form1::qt_property( int id, int f, QVariant* v)
{
return QWizard::qt_property( id, f, v);
}
bool Form1::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
#endif // QT_NO_PROPERTIES
//Programa del Directorio Telefónico *.cpp
/***********************************************************************
** UNIVERSIDAD TECNOLÓGICA AMÉRICA
** FACULTAD DE CIENCIAS DE LA COMPUTACIÓN Y ELECTRÓNICA
** MODALIDAD SEMI-PRESENCIAL
** TERCER NIVEL INFORMATICA "A"
**
** PROYECTO INTEGRADOR
**
** TEMA: APLICACIÓN DE LA LIBRERIA QT EN UN
** DIRECTORIO TELEFÓNICO
** INTEGRANTES: CRISTHIAN CASTILLO
** ROLANDO GODOY
** TUTORA: ING. ROSITA PAREDES
**********************************************
#ifndef FORM1_H
#define FORM1_H
#include <qvariant.h>
#include <qpixmap.h>
#include <qwizard.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QComboBox;
class QLabel;
class QLineEdit;
class QPushButton;
class QTextBrowser;
class QWidget;
class Form1 : public QWizard
{
Q_OBJECT
public:
Form1( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
~Form1();
QWidget* page;
QLabel* pixmapLabel1;
QPushButton* pushButton2;
QPushButton* pushButton3;
QPushButton* pushButton1;
QPushButton* pushButton3_2;
QPushButton* pushButton22_5_2_2;
QWidget* page_2;
QLabel* pixmapLabel1_2;
QLabel* pixmapLabel1_2_2;
QLabel* pixmapLabel1_2_3;
QLabel* pixmapLabel1_2_3_2;
QPushButton* pushButton17;
QPushButton* pushButton17_2;
QPushButton* pushButton17_3;
QPushButton* pushButton17_4;
QPushButton* pushButton33;
QWidget* page_3;
QLabel* textLabel1_3;
QLabel* pixmapLabel1_2_4;
QLabel* textLabel1_2_2;
QPushButton* pushButton33_3;
QPushButton* pushButton22_4;
QWidget* page_4;
QLabel* textLabel1_4;
QLabel* textLabel1_2_3;
QLabel* pixmapLabel1_2_2_2;
QPushButton* pushButton33_3_2;
QPushButton* pushButton22_3;
QWidget* page_5;
QLabel* textLabel1_4_2;
QLabel* textLabel1_2_3_2;
QLabel* pixmapLabel1_2_3_2_2;
QPushButton* pushButton33_3_3;
QPushButton* pushButton22_2;
QWidget* page_6;
QLabel* pixmapLabel1_2_3_3;
QLabel* textLabel1;
QLabel* textLabel1_2;
QPushButton* pushButton33_3_4;
QPushButton* pushButton22;
QWidget* page_7;
QLabel* textLabel1_2_2_2_2;
QLabel* pixmapLabel2;
QLabel* textLabel1_2_2_2_2_2;
QLabel* textLabel1_2_2_2;
QLabel* textLabel1_2_2_2_2_3;
QLabel* textLabel1_5;
QLabel* textLabel1_2_4;
QPushButton* pushButton33_2;
QLineEdit* lineEdit1_2;
QLineEdit* lineEdit1_3;
QLineEdit* lineEdit1_4;
QLineEdit* lineEdit1_5;
QComboBox* comboBox1;
QLineEdit* lineEdit1;
QComboBox* comboBox1_2;
QPushButton* pushButton5;
QPushButton* pushButton5_2;
QWidget* page_8;
QLabel* textLabel1_2_2_3;
QLabel* textLabel1_3_2_3;
QLabel* textLabel1_3_3;
QLabel* textLabel1_3_2_4;
QLabel* textLabel1_2_3_3;
QLabel* textLabel1_3_2_6;
QLabel* textLabel1_2_2_2_3;
QLabel* textLabel1_3_2_2;
QLabel* textLabel1_2_2_2_2_3_2;
QLabel* textLabel1_2_2_2_2_2_2;
QLabel* textLabel1_3_2_5;
QLabel* pixmapLabel2_2;
QLabel* textLabel1_3_2_7;
QPushButton* pushButton33_2_2;
QLabel* textLabel1_3_2;
QPushButton* pushButton5_3;
QPushButton* pushButton5_3_2;
QWidget* page_9;
QLabel* textLabel2_2;
QLabel* pixmapLabel1_3;
QTextBrowser* textBrowser1;
QLabel* textLabel2_2_2;
QLabel* textLabel2_2_2_2;
QPushButton* pushButton33_2_3_2;
QPushButton* pushButton22_5_2;
QWidget* page_10;
QLabel* pixmapLabel1_4;
QLabel* pixmapLabel1_4_3_3;
QLabel* pixmapLabel1_4_3;
QLabel* pixmapLabel1_4_3_2;
QPushButton* pushButton33_2_3;
QPushButton* pushButton22_5;
QTextBrowser* textBrowser1_2_2_2;
QTextBrowser* textBrowser1_2_2;
QTextBrowser* textBrowser1_2;
protected:
protected slots:
virtual void languageChange();
private:
QPixmap image0;
QPixmap image1;
QPixmap image2;
QPixmap image3;
QPixmap image4;
QPixmap image5;
QPixmap image6;
QPixmap image7;
};
#endif // FORM1_H
//Programa del Directorio Telefónico *.h
/***********************************************************************
** UNIVERSIDAD TECNOLÓGICA AMÉRICA
** FACULTAD DE CIENCIAS DE LA COMPUTACIÓN Y ELECTRÓNICA
** MODALIDAD SEMI-PRESENCIAL
** TERCER NIVEL INFORMATICA "A"
**
** PROYECTO INTEGRADOR
**
** TEMA: APLICACIÓN DE LA LIBRERIA QT EN UN
** DIRECTORIO TELEFÓNICO
** INTEGRANTES: CRISTHIAN CASTILLO
** ROLANDO GODOY
** TUTORA: ING. ROSITA PAREDES
*********************************************************************/
#ifndef FORM1_H
#define FORM1_H
#include <qvariant.h>
#include <qpixmap.h>
#include <qwizard.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QComboBox;
class QLabel;
class QLineEdit;
class QPushButton;
class QWidget;
class Form1 : public QWizard
{
Q_OBJECT
public:
Form1( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
~Form1();
QWidget* page;
QPushButton* pushButton3_2;
QPushButton* pushButton3;
QPushButton* pushButton2;
QLabel* pixmapLabel1;
QPushButton* pushButton1;
QWidget* page_2;
QPushButton* pushButton5_2;
QLabel* textLabel1;
QLabel* textLabel1_2;
QLabel* textLabel1_2_2;
QLabel* textLabel1_2_2_2;
QLabel* textLabel1_2_2_2_2;
QLabel* textLabel1_2_2_2_2_2;
QPushButton* pushButton5;
QLabel* pixmapLabel2;
QComboBox* comboBox1;
QLineEdit* lineEdit1;
QLineEdit* lineEdit1_2;
QComboBox* comboBox1_2;
QLineEdit* lineEdit1_3;
QLineEdit* lineEdit1_4;
QLineEdit* lineEdit1_5;
QWidget* page_3;
QLabel* textLabel1_2_2_3;
QLabel* pixmapLabel2_2;
QPushButton* pushButton5_3_2;
QPushButton* pushButton5_3;
QLabel* textLabel1_2_3;
QLabel* textLabel1_2_2_2_2_2_2;
QLabel* textLabel1_3;
QLabel* textLabel1_3_2;
QLabel* textLabel1_3_2_2;
QLabel* textLabel1_3_2_3;
QLabel* textLabel1_2_2_2_2_3;
QLabel* textLabel1_2_2_2_3;
QLabel* textLabel1_3_2_5;
QLabel* textLabel1_3_2_6;
QLabel* textLabel1_3_2_7;
QLabel* textLabel1_3_2_4;
protected:
protected slots:
virtual void languageChange();
private:
QPixmap image0;
};
#endif // FORM1_H
Y RECOMENDACIONES
Conclusiones
- En Qt Designer, se facilitó las aplicaciones con la Librería Qt, es por eso que el modo gráfico existe mejor comprensión que en las líneas de código en C++, siendo más factible la implementación de señales entre los botones, ya que se pueden conectar tantos signals como se desee a un slots, y una signal puede ser conectado a tantos slots como se quiera, incluso se puede conectar un signals a otro signals.
- Todas las clases que derivan de la clase Qobject o de algunas de sus subclases (por ejemplo Qwidget como es el caso de nuestra ventana) pueden ser conectados por medio del mecanismo de slots y signals.
- Qt Designer, desarrolló nuestro potencial creativo en el momento al formar la estructura de nuestro Directorio Telefónico.
Recomendaciones
- Que la documentación entregada de QT Designer, se tome en cuenta como documento base para futuros Proyectos.
- Que en el momento de elaborar una aplicación en Qt Designer, se utilice la ventana QWizard, por cuanto permite agregar forms, sin mayor complejidad.
- Con los pushbuttons es recomendable utilizar los signals de click y no los de enter, por cuanto, al usuario prefiere manipular el mouse, antes que el teclado.
- Que se actualice constantemente los Equipos de Computación con las nuevas versiones de los Sistemas Operativos, por cuanto en este tema, no tuvimos la facilidad de contar con un Equipo Computacional, que contengan la versión de QT Designer.
- Para próximas investigaciones, se realice la presentación del primer borrador, con todos los tutores para que puedan examinar el documento fuente y el desenvolvimiento del grupo.
Entrevista:
- Con la tutora de la asignatura Programación II – Ing. Rosita Paredes.
Navegación en Internet:
Fuentes bibliográficas, básicamente hemos utiliza el medio del Internet, por cuanto no existen libros ni folletos de la Librería Qt, puesto que es una nueva librería que no se contempla en libros actualizados.
- http://gsyc.escet.urjc.es/robotica/manual-vision/node23.html
- http://gsyc.escet.urjc.es/robotica/manual-vision/node24.html
- http://gsyc.escet.urjc.es/robotica/manual-vision/node27.html
- http://www.trolltech.com/products/qt/freelicense.html
- http://www.sindominio.net/biblioweb/telematica/open-sources-html/node116.html
- http://developer.kde.org/documentation/books/kde-2.0-development/p05.html
- http://www.augcyl.org/glol/old/N_2/Kdevelop/node4.html
- http://www.augcyl.org/glol/old/N_2/Kdevelop/node5.html
- http://www.augcyl.org/glol/old/N_2/Kdevelop/node6.html
- http://www.troltech.com En esta web se puede encontrar desde tutoriales y manuales para iniciarse en al uso de las librerías Qt.
Autor:
Rolando Godoy Lara
Cristhian Castillo Martínez
ESTUDIANTES DE LA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN Y ELECTRÓNICA DE LA UNIVERSIDAD TECNOLÓGICA AMÉRICA DE LA CIUDAD DE QUITO * ECUADOR