Está en la página 1de 100

REPBLICA BOLIVARIANA DE VENEZUELA

UNIVERSIDAD CENTROCCIDENTAL
LISANDRO ALVARADO
DECANATO DE CIENCIAS Y TECNOLOGA
DEPARTAMENTO DE SISTEMAS

Manual
Introduccin al Desarrollo De Interfaces Grficas
Con las libreras Qt
Qt Designer

BARQUISIMETO, ENERO DE 2006

Manual
Introduccin al Desarrollo De Interfaces Grficas
Con las libreras Qt
Qt Designer

Integrantes
Camacho, Juan C.I: 13.566.296
Garcia, Miguel Angel C.I: 15.692.800
Ramos, Alberto C.I: 14.031.014
Za Avila, Filiberto C.I: 13.557.244
PROF. Maritza Bracho de Rodrguez
CDIGO 7832

Tabla de contenidos
1. Introduccin
a. Idea
b. Requisitos
c. Organizacin
2. Resea
a. Caracteristicas
3. Instalando Qt
a. Instalando Qt/X11
b. Instalando Qt/Windows
c. Instalando Qt/Embedded
4. Modulos de Qt
a. Modulo Canvas
b. Modulo IconView
c. Modulo Network
i. Introduccin
ii. Trabajando un Protocolo de Red independiente con QUrlOperator y
QNetworkOperation
iii. Implementando tu propio Protocolo de Red
iv. Manejo de errores
d. Modulo Qt OpenGL 3D Graphics
i. Introduccin
ii. Instalacion
iii. Las Clases QGL
e. Modulo SQL
i. Introduccin
ii. Arquitectura SQL
iii. SQL Driver Plugins
iv. Conectando una Base de datos
v. Conectando una Base de datos Simple
vi. Conectando una Base de datos Mltiple
vii. Ejecutando Comandos SQL Usando QSqlQuery
viii. Transacciones
ix. Exploracion Bsica
x. Manipulacin Bsica de los Datos
xi. Navegando el Conjunto de Resultados
xii. Usando QSqlCursor
xiii. Insertando registros
xiv. Actualizando registros
xv. Eliminando registros
xvi. Widgets Data-Aware
xvii. Tablas Data-Aware
xviii. Subclases QSqlCursor
xix. Ejemplo de Tablas
f. Modulo Tables
g. Modulo Workspace
h. Modulo XML
i. Convenciones usadas en la documentacin Qt XML
i. Modulo ActiveQt Framework
i. QAxContainer

ii. QAxServer
Modulo Motif Extensin
i. Informacin
ii. How-to
iii. Problemas Comunes
k. Modulo Qt Netscape Plugin Extensin
i. Informacin
ii. How-to
iii. Construyendo bajo X11
iv. Construyendo bajo Windows
v. Errores conocidos y Limitaciones
Clases de Qt
QT-Designer
a. Caracteristicas
Creando la Aplicacin
a. Creando la Ventana Principal
b. El Archivo .pro
c. El Archivo main.cpp
Compilando y Ejecutando la Aplicacin por Vez Primera
Extendiendo la Funcionabilidad Mediante Acciones
a. El archivo .ui.h
b. Invocando una salida
Agregando los Widgets Estndar
a. Widgets: Tipos y Propiedades
b. Widgets: Laying Out
Agregando los Widgets Personales
a. Cargando las Descripciones
b. Conectando los Signals a los Slots
c. Compilando Mltiples Fuentes
Extendiendo la Funcionabilidad Mediante Dilogos
a. Acciones
b. El Resultado Final
j.

5.
6.
7.

8.
9.
10.
11.

12.

A. Crditos y Licencia

B. Apendice Lista de clases disponibles

Captulo 1. Introduccin.
Idea
El objetivo de este taller es el de introducir el uso de la herramienta Qt- designer para hacer
el desarrollo de una aplicacin de modo visual. Particularmente, algunas de las cosas que se vern
son las siguientes:
Creacin visual de una aplicacin: incluyendo sus mens, toolbars, dilogos, etc.
Creacin de la vista (aka Widget) principal de la aplicacin. Nota: en Qt todo son
widgets, nada mas de controles, ni de ventanas, etc. En efecto, en contraste con el
termino ventana, que viene del mundillo de las oficinas, mediante la expresin widget se
busca denotar un concepto de interaccin mas general, por ejemplo una interfaz 3-D.
Conexin visual entre widgets, empleando el paradigma de SIGNALS/SLOTS. En la
opinin de unos, una de las mejores propiedades que posee Qt; en la de otros, una de las
peores cosas del mundo.
En el punto anterior, widget significa: widget de Qt.
Dos puntos atrs, widget tambin significa: widget creado por el usuario. Prueba de la
versatilidad del designer (que no por facilitarnos la vida, nos la limita, como sucede con la
mayora de IDE's), significa esto que un tercero crea un widget (con la herramienta que
mejor le venga) y este (me refiero al widget, no al usuario), se puede integrar sin el menor
de los problemas al designer. Es precisamente de este modo, que se ha conseguido integrar
los widgets de KDE al designer.
Para cumplir con los objetivos anteriores vamos a desarrollar la portentosa Canvas Demo,
cuyo aspecto es el siguiente:

La Canvas Demo hace exactamente lo que tienes en mente: si se clickea en uno de los
botones (correspondientes a instancias de la clase estndar QPushButton de Qt), adiciona el
elemento grafico correspondiente en el widget de arriba, que corresponde a una instancia de la clase
MyCanvasView. Esta clase se ha creado copiando cdigo de aqu y all de varios de los ejemplos
que vienen en las distribuciones de Qt.
Basta ahora con decir que es MyCanvasView. Pero digmoslo cmodamente, en lenguaje
UML:

Como se puede ver MyCanvasView se deriva mediante INHERITANCE de la clase


estndar de Qt QCanvasView y usa, como agregados, las clases QCanvas y QCanvasItem
de Qt. En realidad, los agregados que va a usar, mediante POLIMORFISMO, son las clases
ImageItem y BouncyLogo, que no son mas que especializaciones de las clases
QCanvasRectangle y QCanvasSprite de Qt, respectivamente (al fin y al cabo es C++!).
En lenguaje coloquial, MyCanvasView, es un widget que pinta cosas y que mas pronto de
lo que te imaginas estar listo para que lo uses de modo visual en el designer.
Nota: Si se desea una comprensin pormenorizada, se recomienda estudiar el Canvas
Module de Qt.
Requisitos
Para este tutorial se requerirn instalar los siguientes paquetes de Debian/Testing (paquetes
cuya instalacion, si te encuentras online deberas verificar de acuerdo a la versin de Qt que tengas:
Mac, Win, GNU-Linux/Distro), los cuales se muestran listados a continuacin:
libqt3-dev
libqt3-headers
libqt3c102
qt3-designer
qt3-doc. Opcional, pero clave: que puede hacer uno sin la documentacion de la API.
Organizacion
Para facilitar la realizacion de este taller, a diferencia de este capitulo, el tutorial posee un
alto contenido grafico. La idea es hacer el taller visual de la Canvas Demo y a medida que vayan
incursionando en sus pormenores, me van dejando conocer las inquietudes que surjan al respecto .

Capitulo 2. Resea de QT.


Qt es un producto de la empresa noruega de software Trolltech AS, esta empresa se dedica
a desarrollar libreras y herramientas de desarrollo de software, adems es experta en servicios de
consultora. Qt es un conjunto de libreras multi-plataforma para el desarrollo del esqueleto de
aplicaciones GUI, escritas en cdigo C++. Qt adems 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 grfica 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 tcnico y estn
disponibles ampliaciones.
Qt Free Edition Es la versin para Unix/X11 para el desarrollo de software
gratuito y de cdigo abierto. Se puede obtener gratis sujeto a los trminos de la Q
Public License and the GNU General Public License. Para plataformas Windows
tambin esta disponible la versin Qt non comercial.
Qt Educational Edition es una versin de la Qt Profesional Edition con licencia
nicamente para fines educacionales.
Qt/Embedded Free Edition.

Caractersticas:

QT es una librera para la creacin de interfaces grficos. 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 nmero de plataformas: Linux, MacOs X,
Solaris, HP-UX, UNIX con X11. Adems, existe tambin una versin 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 librera que se basa en los conceptos de widgets (objetos), Seales-Slots y
Eventos (ej: clic del ratn).
Las seales y los slots es el mecanismo para que unos widgets se comuniquen con
otros.
Los widgets pueden contener cualquier nmero de hijos. El widget "top-level"
puede ser cualquiera, sea ventana, botn, etc.
Algunos atributos como el texto de etiquetas, etc. ... se modifican de modo similar
al lenguaje html.
QT proporciona adems otras funcionalidades:
o Libreras bsicas -> Entrada/Salida, Manejo de Red, XML.
o Interface con bases de datos -> Oracle, MySQL, PostgreSQL, ODBC
Plugins, libreras dinmicas (Imgenes, formatos, etc).
o Unicode, Internacionalizacin.

Capitulo 3. Instalando Qt
El proceso de instalacin es difiere para las diferentes plataformas de Qt.

Qt/X11.
Qt/Windows.
Qt/Embedded

Instalando Qt/X11
Puede necesitar ser usuario root, dependiendo de los permisos de los directorios que se
escoga para la instalacin de Qt.
1. Desempaquete el archivo si no lo ha hecho en el directorio cd /usr/local.
2. Aplique la linea de comando en la consola gunzip qt-x11-version.tar.gz; descomprime
el archivo.
3. Aplique la linea de comando en la consola tar xf qt-x11-version.tar; desempaquta el
archivo. Esto crea la direccion /usr/local/qt-versin la cual contiene los archivos del
programa principal.
4. Renombre qt-versin a qt (o haga un symlink): mv qt-versin qt. El resto de los
archivos asumen que Qt se instalar en el directorio /usr/local/qt.
5. Ponga algunas variables de ambiente en el archivo .profile (o .login, dependiendo del
Shell) en su directorio Home. Cree el archivo si no esta all.
QTDIR--dondequiera que se haya instalado Qt.
PATH donde se localiza el programa y las otras herramientas de Qt.
MANPATHpara acceder a la pagina de Qt.
LD_LIBRARY_PATH--para la biblioteca compartida de Qt.
Esto es como sigue:
En .profile (si el Shell es bash, ksh, zsh o sh), agregue las lneas siguientes:
QTDIR=/usr/local/qt
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH
En .login (en caso de que el Shell sea csh o tcsh), agregue las lneas siguientes:
setenv QTDIR /usr/local/qt
setenv PATH $QTDIR/bin:$PATH
setenv MANPATH $QTDIR/man:$MANPATH
setenv LD_LIBRARY_PATH $QTDIR/lib:$LD_LIBRARY_PATH
Despus de haber hecho esto, se necesitar entrar de nuevo con su login, o recargar el perfil
antes de continuar, para que por lo menos $QTDIR est montado. La instalacin dar un mensaje
de error y no proceder de otra manera.
6. Instale el archivo de licencia. Para la edicin libre, usted no necesita un archivo de
licencia. Para el Profesional y ediciones Empresariales, instale su archivo de licencia
como se describa en su distribucin.
7. Compile la biblioteca de Qt, y construya el programa ejemplo, la gua didctica y las
herramientas (ej. Diseador de Qt) como sigue.

. /configure Esto configurar la biblioteca de Qt para su mquina. Note que el


soporte de archivos GIF es por defecto off. Escriba en el Shell ./configure help para
obtener una lista de opciones de configuracin. Lea PLATAFORMAS para una lista de
soporte de plataformas.
make Para crear la biblioteca y compilar todos los ejemplos y la gua didctica. Si
tiene problemas, vea http://www.trolltech.com/plataforms/.
8. en muy pocos casos es necesario ejecutar /sbin/ldconfig o algo similar, si se est
usando bibliotecas compartidas. Si usted tiene problemas al ejecutar el programa
ejemplo, por ejemplo mensajes como no se puede cargar la librera 'libqt.so.2',
probablemente necesite poner una referencia en la libreria de qt en un archivo de
configuracin y ejecutar /sbin/ldconfig como root en su sistema. Y no se olvide de
poner LD_LIBRARY_PATH como se explic anteriormente en el apartado 5.
9. La documentacin HTML OnLine es instalada en /usr/local/qt/doc/html/ La pgina
principal es /usr/local/qt/doc/html/index.html. Las pginas del manual son instaladas
en /usr/local/qt/doc/man/. La documentacin es tambin es accesible usando el
asistente de Qt.
Qt est instalado ahora.

Instalando Qt/Windows
La distribucin de Qt/Windows es distribuda como un archivo autoextraible que se
construye e instala automaticamente. Simplemente siga el asistente de instalacin.

Instalando Qt/Embedded
Este proceso de instalacin est escrito para Linux. Puede necesitar ser modificado para
otras plataformas.
1. Desempaquete el archivo, si no lo ha hecho, cd <cualquier directorio>
2. gunzip qt-embedded-commercial-VERSION.tar.gz descomprime el archivo.
3. tar xf qt-embedded-commercial-VERSION.tar desempaqueta el archivo.
4. Reemplace VERSION con el Qt/Embedded versin nmero a lo largo de. Este
documento asume que el archivo se instala como ~/qt-embedded-commercialVERSION.
5. Compile la biblioteca de Qt/Embedded y ejemplos.
6. cd ~/qt-embedded-commercial-VERSION
7. export QTDIR=~/qt-embedded-commercial-VERSION
8. . /configure
9. make
El sistema de configuracin est diseado para permitir agregar las opciones para las
plataforma especficas, pero en general todos los sistemas de Linux que tienen el soporte del
framebuffer que puede ser usado bajo cualquier plataforma "linux-genric-g++". El sistema de
configuracin tambin soporta compiladores cruzados: para construir bajo Linux/x86 para
Linux/MIPSEL, se podria usar:
./configure -platform linux-x86-g++ -xplatform linux-mips-g++
Slo un pequeo nmero de configuraciones son predefinidas, todos mucho el mismo. Los
archivos de configuracin se encuentran en configs/.
10. Habilite el soporte de framebuffer. Puede necesitar recompilar el kernel para habilitar
el framebuffer. Este documento no describe cmo hacer esto; la pgina de HOWTOFramebuffer contiene una descripcin corta. (Usted ver el logotipo del pingino en el
momento en que el framebuffer sea habilitado.).

Para Matrox G100/G200/G400 use los controladores framebuffer para matrox.


Para las tarjetas NVidia TNT use los controladores framebuffer para nvidia.
Para Mach64 y la mayora de las otras tarjetas, use los controladores vesafb.
Note que algunas tarjetas slo son soportadas en modo VGA16, esto no trabajar con la
versin actual de Qt/Embedded, pues desde VGA/16 no era soportada todava. Usted tendra que
actualizar su kernel, o incluso cambia a un kernel de desarrollo.
Los framebuffer tambin deben habilitarse con un parmetro de arranque. Vea
/usr/src/linux/Documentation/fb para ms detalles.
Los programas fbset deben ser incluidos en todas las distribuciones de Linux, pueden
usarse para cambiar modos de video sin el necesidad reiniciar el sistema. El modo de video activo
sera usado cuando el servidor sea iniciado(el modo 8-bit todava es experimental) Nota: los fbset
no trabajan con los controladores de vesafb
11. Cambie los permisos. Al ejecutar Qt/Embedded, necesita escribir los accesos del
dispositivo framebuffer /dev/fb0. Usted tambin necesitar ler los accesos al
dispositivo del ratn. (Note que /dev/mouse normalmente es un eslabn simblico; el
dispositivo real del ratn debe ser leble.).
12. Cmo ejecutar el programa de demostracin.
Escriba en una consola virtual:
o cd ~/qt-embedded-commercial-VERSION/examples/launcher
o ./start-demo
13. Resolviendo miscelneos y problemas conocidos.
Para cerrar gpm, ejecute la orden siguiente como root:
o gpm -k
En algunos casos, si el servidor no trabaja, funcionar cuando se corre como root.
Algunos programas ejemplo pueden no compilar con GCC 2.95.
Mostrar procesos usando el framebuffer:
o fuser -v /dev/fb0
Cancelar algn proceso:
o fuser -vk /dev/fb0
o ms drastico:
o fuser k KILL /dev/fb0
Ver semforos semaforos:
o Ipcs
Remover semforos:
o ipcrm
La comunicacin entre cliente y servidor se hace a travs del pipe denominado
/tmp/.QtEmbedded; a veces puede necesitar ser anulado (ej. si usted ejecuta
Qt/Embedded como root y luego como un usuario sin privilegios).
14. Personalizado.
La biblioteca de Qt/Embedded puede reducirse en tamao removiendo rasgos
innecesarios.

Capitulo 4. Modulos de Qt.


Modulo Canvas.
Este mdulo es parte de la edicion Qt Enterprise.

El mdulo Canvas proporciona una altisima optimizacion en el rea grfica 2D llamada


QCanvas. El Canvas puede contener un nmero arbitrario de QCanvasItems. Los items del
Canvas pueden tener una forma, tamao y volumen arbitrarios, pueden moverse libremente
alrededor del mismo, y puede hacerse las verificaciones para las colisiones. Pueden ponerse items
en el Canvas para moverlos automticamente y los Canvas animados son soportados con
QCanvasSprite. (Si usted requiere que grficos 3D vea el mdulo de OpenGL de Qt.)
El mdulo Canvas usa un modelo de document/view. La clase QCanvasView se usa para
mostrar una vista particular de un Canvas. Las vistas mltiples pueden operar al mismo tiempo en
un mismo Canvas. Cada vista puede usar una matriz de transformacin arbitraria en el Canvas lo
que hace fcil llevar a cabo rasgos como subir verticalmente.

Qt proporciona un numero predefinedo de QCanvas como se list a continuacin.


QCanvasItem--Una clase base abstracta para todos los tems Canvas.
QCanvasEllipse--Una elipse o "segmento pastel"
QCanvasLine--Un segmento de lnea.
QCanvasPolygon--Un polgono.
QCanvasPolygonalItem--Una clase baja para items que tienen una forma no-rectangular.
La mayora que los items Canvas derivan de esta clase.
QCanvasRectangle--Un rectngulo. El rectngulo no puede inclinarse o rodarse. Pueden
dibujarse rectngulos rodados usando QCanvasPolygon.
QCanvasSpline--Un multi-bezier spline.
QCanvasSprite--Un pixmap animado.
QCanvasText--Una cadena de texto.
Los dos clases QCanvasPixmap y QCanvasPixmapArray son usadas por
QCanvasSprite para mostrar pixmaps animados y en movimiento en el Canvas.
Los items ms especializados pueden ser creados heredando de una de las clases de los
tems Canvas. Es ms fcil de heredar de una clase derivada de QCanvasItem (normalmente
QCanvasPolygonalItem) en lugar de heredar de QCanvasItem directamente.
Vea examples/canvas para un ejemplo que muestra algunas de las capacidades de
QCanvas.

Modulo IconView
El mdulo IconView proporciona un poderoso visualizador widget llamado QIconView.
API y feature-wise it es similar a QListView y QListBox. Contiene artculos de pixmap
opcionalmente etiquetados, que el usuario puede seleccionar, arrastrar, renombre, anular, etc.

Por favor vea la documentacin de clases para ms detalles.

Modulo Network
Este mdulo es parte de la edicin Qt Enterprise.
Introduccin
Trabajando un Protocolo de Red independiente con QUrlOperator y QNetworkOperation
Implementando tu propio Protocolo de Red
Manejo de errores
Introduccin
El mdulo de red ofrece clases para hacer fcil y portble la programacin de redes. Hay
tres conjuntos de clases, primero las clases de bajo nivel como QSocket, esencialmente,
QServerSocket, QDns, etc. qu le permiten trabajar de una manera portble con sockets TCP/IP.
Hay clases adems, como QNetworkProtocol, QNetworkOperation en la libreria base de Qt, que
mantiene una capa abstracta llevando a cabo los protocolos de red y QUrlOperator que operan en
tales protocolos dentro de la red. Finalmente el tercer conjunto de clases de red que son los pasivos,
especficamente QUrl y QUrlInfo que hacen parsing de URL y similares.
El primero grupo de clases (QSocket, QServerSocket, QDns, QFtp, etc.) est incluido en
el mdulo de "red" de Qt.
Las clases QSocket no se relacionan directamente a las clases de QNetwork, pero los
QSocket deben y se usarn para implementarlos en los protocolos de red que se relacionan
directamente a las clases QNetwork. Por ejemplo, las clases QFtp (qu implementan protocolos
FTP) usan QSockets. Pero los QSockets no necesitan ser usados para las aplicaciones protocolares,
ej. QLocalFs (qu es una aplicacin del filesystem local como protocolo de la red) usa QDir y no
usa QSocket. Usando QNetworkProtocols puede implementar cualquier cosa que encaje dentro de
una estructura jerrquica y puede accederse usando URLs. Esto podra ser, por ejemplo, un
protocolo que puede leer cuadros de una cmara digital que usa una conexin en serie.
Trabajando un Protocolo de Red independiente con QUrlOperator y
QNetworkOperation
Es bastante fcil de usar existiendo implementaciones de protocolo de red y operaciones
sobre URLs. Por ejemplo, transmitir un archivo de un servidor FTP al filesystem local puede
hacerse con el cdigo siguiente:
Op de QUrlOperator;

op.copy ("ftp://ftp.trolltech.com/qt/source/qt-2.1.0.tar.gz", "file:/tmp", FALSE);


Por supuesto una aplicacin con protocolo FTP tiene que estar disponible y registrada para
hacer eso.
Tambin puede hacer cosas como crear directorios, remover archivos, renombrarlos, etc.
por ejemplo, crear un directorio en una cuenta FTP privada.
Op de QUrlOperator ("ftp://username:password@host.domain.no/home/username");
op.mkdir ("Nuevo Directorio");
Para ver todo el operacin disponible, mire la documentacin de la clase QUrlOperator.
Desde conectar una red de computadoras de trabajo asincrnicamente, la llamada de la
funcin para un operacin volver normalmente antes que el operacin se haya completado. Esto
significa que la funcin no puede devolver un valor que indica fracaso o xito. En cambio, el valor
del retorno siempre es un puntero para un QNetworkOperation, y este objeto guarda toda la
informacin sobre el operacin.
Por ejemplo, QNetworkOperation tiene un mtodo que devuelve el estado de este
operacin. Usando esto usted pueden averiguar el estado de operacin en cualquier momento. El
objeto tambin hace disponible los argumentos que usted pas al mtodo de QUrlOperator, el tipo
de operacin y un poco ms de informacin. Para ms detalles vea la documentacin de la clase de
QNetworkOperation.
El QUrlOperator emite seales para informarlo sobre el progreso de las operaciones. Se
puede hacer el llamado a varios mtodos que operan sobre la clase QUrlOperator de URL,
poniendo en cola todas las operaciones. Sino no se puede saber qu operacin, el QUrlOperator
proces. Claramente usted querr saber qu operacin tuvo lugar, as que el ltimo argumento de
cada seal es un puntero al objeto QNetworkOperation de que se proces y qu caus la seal al
ser emitida.
Algunas de estas operaciones envan una seal start() al principio, y algunos de ellos
envan algunas seales durante el proceso. Todas las operaciones envan una seal finished()
despus de realizados. Para verificar si una operacin termino con xito, puede usar el puntero de
QNetworkOperation para conseguir la seal finished(). Si QNetworkOperation::state() es
igual a QNetworkProtocol::StDone la operacin termin con xito, si es
QNetworkProtocol::StFailed la operacion fall.
Ejemplo: Un slot que se podra conectar al QUrlOperator::finished
(QNetworkOperation *)
void MyClass::slotOperationFinished( QNetworkOperation *op ){
switch ( op->operation() ) {
case QNetworkProtocol::OpMkDir:
if ( op->state() == QNetworkProtocol::StFailed )
qDebug( "Couldn't create directory %s", op->arg( 0 ).latin1() );
else
qDebug( "Successfully created directory %s", op->arg( 0 ).latin1() );
break;
}
}

Como mencion antes, algunas operaciones envan otras seales. Tomemos la lista de
operaciones hijas como ejemplo (ej. leer un directorio en un servidor de FTP):
QUrlOperator op;
MyClass::MyClass() : QObject(), op( "ftp://ftp.trolltech.com" ){
connect( &op, SIGNAL( newChildren( const QValueList<QUrlInfo> &,
QNetworkOperation * ) ), this, SLOT( slotInsertEntries(
const QValueList<QUrlInfo> &, QNetworkOperation * ) ) );
connect( &op, SIGNAL( start( QNetworkOperation * ) ),
this, SLOT( slotStart( QNetworkOperation *) ) );

connect( &op, SIGNAL( finished( QNetworkOperation * ) ),


this, SLOT( slotFinished( QNetworkOperation *) ) );

}
void MyClass::slotInsertEntries( const QValueList<QUrlInfo> &info,
QNetworkOperation * ){
QValueList<QUrlInfo>::ConstIterator it = info.begin();
for ( ; it != info.end(); ++it ) {
const QUrlInfo &inf = *it;
qDebug( "Name: %s, Size: %d, Last Modified: %s", inf.name().latin1(),
inf.size(), inf.lastModified().toString().latin1() );
}
}
void MyClass::slotStart( QNetworkOperation * ){
qDebug( "Start reading '%s'", op.toString().latin1() );
}
void MyClass::slotFinished( QNetworkOperation *operation ){
if ( operation->operation() == QNetworkProtocol::OpListChildren ) {
if ( operation->state() == QNetworkProtocol::StFailed )
qDebug( "Couldn't read '%s'! Following error occurred: %s",
op.toString().latin1(), operation->protocolDetail().latin1() );
else
qDebug( "Finished reading '%s'!", op.toString().latin1() );
}
}

Estos ejemplos muestran cmo usar el QUrlOperator y QNetworkOperations.


Implementando tu propio protocolo de red
QNetworkProtocol mantiene una clase base para aplicaciones de protocolos de red y una
arquitectura para el registro dinmico y de registro de protocolos de red. Si usa esta arquitectura no
necesita preocuparse de la programacin asncrona, es como una arquitectura oculta que hace todo
el trabajo por usted.
Note que es difcil disear una clase base para protocolos de red que sea til para todos los
protocolos de red. La arquitectura descrita aqu es diseada para trabajar con todos los tipos de
estructuras jerrquicas, como el filesystems. As todo puede ser interpretado como una estructura
jerrquica y puede accederse va URLs, puede implementarse como protocolo de red y fcilmente
puede usarse en Qt.
Llevar a cabo un protocolo de red, genera una clase derivada de QNetworkProtocol.
Otras clases usan esta aplicacin de protocolo de red para operar en l. As que debe
reimplementar los siguientes miembros protegidos:
void
void
void
void
void
void

QNetworkProtocol::operationListChildren( QNetworkOperation *op );


QNetworkProtocol::operationMkDir( QNetworkOperation *op );
QNetworkProtocol::operationRemove( QNetworkOperation *op );
QNetworkProtocol::operationRename( QNetworkOperation *op );
QNetworkProtocol::operationGet( QNetworkOperation *op );
QNetworkProtocol::operationPut( QNetworkOperation *op );

Algunas notas para reimplementar estos mtodos: Obtener un puntero de


QNetworkOperation como argumento. Este puntero sostiene toda la informacin sobre el estado
actual de la operacin. Si empieza procesando tal operacin, pngale el estado a
QNetworkProtocol::StInProgress. Si usted terminara procesando la operacin, coloque
QNetworkProtocol::StDone si tuviera xito o QNetworkProtocol::StFailed si un error ocurriera.
Si
un
error
ocurriera
usted
debe
poner
un
cdigo
de
error
(vea
QNetworkOperation::setErrorCode()) y si usted sabe un poco los detalles del error (ej. un

mensaje del error) usted tambin puede poner este mensaje al puntero de la operacin (vea
QNetworkOperation::setProtocolDetail()). Tambin puede conseguir toda la informacin
pertinente (tipo, argumentos, etc.) sobre la operacin desde el puntero de QNetworkOperation.
Para detalles vea la documentacin de la clase de QNetworkOperation.
Si usted el reimplementa una funcin de la operacin, es muy importante emitir la seal
correcta en el momento correcto. En general siempre Emisin finnished() al final de una operacin
(cuando usted termine de procesar la operacin con xito o con error) con la operacin de red como
argumento. La arquitectura de red cuenta con emisin de seales correctas de finnished(). Hay
seales especificas para operaciones especificas:
1. Emisin en operationListChildren:
start() slo antes de empezar a listar a los hijos.
newChildren() cuando se leen nuevos hijos.
2. Emisin en operationMkDir:
createdDirectory() despus que el directorio se ha creado.
newChild() (o newChildren()) despus que el directorio se ha creado (desde un
nuevo directorio es un nuevo hijo).
3. Emisin en operationRemove:
removed() despus de que un hijo ha sido removido.
4. Emisin en operationRename:
itemChanged() despus de que un hijo ha sido renombrado.
5. Emisin en operationGet:
data() cada momento un nuevo dato ha de ser ledo.
dataTransferProgress() cada momento un nuevo dato ha de ser ledo para indicar
cuntos datos se han ledo hasta ahora.
6. Emisin en operationPut:
dataTransferProgress() cada momento un nuevo dato ha de ser escrito para
indicar cuntos datos se han escrito hasta ahora.
Recuerda siempre emitir la seal finnished() al finalizar.
Para ms detalles vea la documentacin de clase de QNetworkProtocol.
Aqu se muestra una lista con los argumentos de QNetworkOperation que puede conseguir
y qu usted debe poner en que la funcin:
(Para conseguir los URL en los que usted debe trabajar, use el metodo QNetworkProtocol::url()
que le devuelve un puntero al operador de URL. Usando esto puede conseguir el path, el host, el
filtro, etc.).
1. En operationListChildren:
Nada.
2. En operationMkDir:
QNetworkOperation::arg (0) contiene el nombre del directorio que debe crearse
3. En operationRemove:
QNetworkOperation::arg (0) contiene el nombre del archivo que debe removerse.
Normalmente es un nombre relativo. Pero podra ser absoluto. Use QUrl (op->arg
(0)) .fileName () para conseguir el nombre del archivo.
4. En operationRename:
QNetworkOperation::arg (0) contiene el nombre del archivo que debe
renombrarse.
QNetworkOperation::arg (1) contiene el nombre al que debe renombrarse.

5. En operationGet:
QNetworkOperation::arg (0) contiene la direccion URL del archivo que debe
recuperarse.
6. En operationPut:
QNetworkOperation::arg (0) contiene la direccion URL del archivo en el que los
datos deben guardarse.
QNetworkOperation::rawArg (1) contiene los datos que deben guardarse en
QNetworkOperation::arg (0)
En resumen: Si reimplementa una funcin operacional, debe emitir algunos seal especial y
al final siempre debe emitir una seal finnished(), sin tener en cuenta xito o fracaso. Tambin debe
cambiar el estado del QNetworkOperation durante el proceso. Tambin puede obtener y poner
argumentos de QNetworkOperation durante el progreso de la operacin.
Puede ocurrir que el protocolo de red implementado requiera un subconjunto de estas
operaciones. En tal caso, reimplemente las operaciones que son soportadas por el protocolo.
Adicionalmente debe especificar qu operaciones se van ha soportar. Esto es logrado por la
reimplementacin.
int QNetworkProtocol::supportedOperations() const;
En la implementacin de este mtodo retorna un valor int por el que es construido por ORing juntos con los valores correctos (operaciones soportadas) del siguiente enumerado (de
QNetworkProtocol):
1.
2.
3.
4.
5.
6.

OpListChildren
OpMkDir
OpRemove
OpRename
OpGet
OpPut

Por ejemplo, si los soportes protocolares listan a los hijos y los renombra, la
implementacin de supportedOperations() debe hacer esto:

return OpListChildren | OpRename;

El ltimo mtodo que debe reimplementar es:


bool QNetworkProtocol::checkConnection( QNetworkOperation *op );
Aqu debe devolver VERDADERO, si la conexin est establecida. Si la conexin no esta
bien, retorna FALSO y empieza a tratar de establecerla. Si no puede establecer la conexin en
absoluto (ej. porque el host no se encuentra), emita una seal finnishec() y un cdigo de error y
obtener el estado de QNetworkProtocol::StFailed del puntero de QNetworkOperation.
Ahora, no necesitara verificar antes de hacer una operacin, si la conexin esta establecida.
La arquitectura de red provee los medios que usa el checkConnection() para ver si una operacin
puede hacerse y no, prueba durante algn tiempo, slo llamando una funcin operacional, si la
conexin esta establecida.
Para poder usar un protocolo de red con un QUrlOperator (por ejemplo, en el
QFileDialog), usted debe registrar la implementacin de protocolo de red. Esto se hace como sigue:
QNetworkProtocol::registerNetworkProtocol(
"myprot",
new
QNetworkProtocolFactory<MyProtocol> );

En este caso MyProtocol seria una clase implementada (derivada de QNetworkProtocol) y


el nombre del protocolo sera "myprot". Para usarlo, se hara algo como:
QUrlOperator op( "myprot://host/path" );
op.listChildren();
Manejo de Errores
El manejo de errores es importante para un protocolo de la red nuevo para usarlo (a travs
de QUrlOperator).
Despus de procesar una operacion se ha de terminar la operacion de red del
QUrlOperator emitiendo la seal finnished(). Esto tiene como argumento un puntero para el
proceso QNetworkOperation. Si el estado de esta operacion es QNetworkProtocol::StFailed, la
operacion contiene un poco ms de informacin sobre este error. Los siguientes cdigos de error se
definen en QNetworkProtocol:
Error

Significado

QNetworkProtocol::NoError

No ocurri error.

QNetworkProtocol::ErrValid

El URL solicitado no es valido.

QNetworkProtocol::ErrUnknownProtocol No hay protocolo disponible para la URL solicitada (ej.


si el protocolo es http y no se ha registrado una
aplicacin http).
QNetworkProtocol::ErrUnsupported

La operacion no es soportada por el protocolo.

QNetworkProtocol::ErrParse

Parse error de la URL

QNetworkProtocol::ErrLoginIncorrect

Ingres el login pero el username o contrasea estn


equivocados.

QNetworkProtocol::ErrHostNotFound

El host especificado (en el URL) no puede ser


encontrado

QNetworkProtocol::ErrListChildren

Ocurri un error mientras listaba los hijos.

QNetworkProtocol::ErrMkDir

Ocurri un error mientras se creaba el directorio

QNetworkProtocol::ErrRemove

Ocurri un error mientras se removia un hijo.

QNetworkProtocol::ErrRename

Ocurri un error mientras se renombraba un hijo

QNetworkProtocol::ErrGet

Ocurri un error mientras se obtenian los datos.

QNetworkProtocol::ErrPut

Ocurri un error mientras se cargaban los datos.

QNetworkProtocol::ErrFileNotExisting

Un archive que es necesario para la operacion no existe.

QNetworkProtocol::ErrPermissionDenied El permiso para realizar la operacin es denegado.


QNetworkOperation::errorCode() retorna uno de estos cdigos o quizs uno diferente si
se usa una apropiado protocolo de red que defina cdigos de error adicionales.
QNetworkOperation::protocolDetails() tambin puede devolver una cadena que contiene
un mensaje de error, qu podra ser conveniente para mostrar al usuario.
Si implementa su propio protocolo de red, debe informar cualquier error que ocurra.
Primero necesitar poder acceder al QNetworkOperation que est procesndose en el momento.
Esto se hace usando QNetworkOperation::operationInProgress() que retorna un puntero de la
operacion de red actual o cero (0) si ninguna operacion se est procesando.

Ahora si un error ocurriera y necesita manejarlo, haga esto:


if ( operationInProgress() ) {
operationInProgress()->setErrorCode( error_code_of_your_error );
operationInProgress()->setProtocolDetails( detail ); // optional
emit finished( operationInProgress() );
return;
}

La conexin al QUrlOperator se hace automticamente. Adicionalmente, si fuera un error


fatal, no podrian realizarse mas operaciones en el estado actual (ej. el host no puede encontrarse),
llame QNetworkProtocol::clearOperationStack () antes de emitir finished().
Puede usar los codigos de error predefinidos por QNetworkProtocol. Si esto no es posible,
puede agregar su propio codigo de error, ls cuales son enteros (ints) normales. Solo hay tener
cuidado que el valor del cdigo de error no choque con uno ya existente.
Un ejemplo para esto, est en qt/extensions/network/examples/ftpclient. el cual es
bastante completo, con soporte a traves de descarga de archivos, haciendo directorios, etc., todos
hechos usando QUrlOperators.
Tambin puede ver QFtp (en qt/extenstions/network/src/qftp.cpp) o el ejemplo en
qt/extenstions/network/examples/networkprotocol/nntp.cpp.

Modulo Qt OpenGL 3D Graphics


Este mdulo es parte de la edicion Qt Enterprise.
Introduccin
Instalacin
Las clases QGL
Introduccin
OpenGL es un API estandar para renderizado de grficos 3D.
OpenGL slo se trata de renderizado 3D y proporciona pequeo o ningn soporte para
problemas en la programacin GUI. La interface de usuario para OpenGL* debe crearse con otra
herramienta, como Motif para plataformas X, Microsoft Fundation Classes (MFC) para plataforma
Windows, o Qt en ambas plataformas.
El mdulo OpenGL de Qt, hace fcil el uso de OpenGL en aplicaciones Qt. Proporciona
una clase widget OpenGL que puede usarse como cualquier otro widget de Qt, slo que abre un
buffer OpenGL donde puede usar la API OpenGL para renderizar contenidos.
El mdulo OpenGL de Qt, se implementa como una plataforma independiente de Qt/C++ a
traves de plataformas dependientes GLX, WGL, o AGL C APIs. La funcionalidad proporcionada es
muy similar a la librera GLUT de Mark Kilgard, pero con mucha ms funcionalidad GUI
especfica no OpenGL, es decir el API Qt entero.
Instalacin
Cuando se instala Qt para X11, el script de configuracin autodetecta si estan instaladas las
librerias y cabeceras de OpenGL en su sistema, y en ese caso, Qt incluir el mdulo de OpenGL
en las librerias de Qt. (Si librerias y cabeceras de OpenGL estan en un directorio no estandar,
necesitar cambiar el SYSCONF_CXXFLAGS_OPENGL y/o SYSCONF_LFLAGS_OPENGL
en el archivo config de su sistema). Algunas configuraciones requieren enhebrando para habilitar
OpenGL, si OpenGL no es detectado, pruebe con configure -thread.
Cuando se instala Qt para Windows, el mdulo OpenGL para Qt, es incluido.
El mdulo OpenGL para Qt, no est autorizado para su uso con la Edicin Profesional de
Qt. Considere actualizarlo a la Edicin Qt Enterprise si requiere soporte para OpenGL.

Nota sobre como usar Mesa en X11. Las versiones de Mesa anteriores a 3.1 usan el nombre
"MesaGL" y "MesaGLU" para las librerias, en lugar de "GL" y "GLU". Si usted quiere usar una
versin de Mesa previa a 3.1, debe cambiar el Makefiles para usar stas librerias. La manera ms
fcil de hacer esto es editar las lineas en el archivo del config que est usando
SYSCONF_LIBS_OPENGL, y cambiarlo por " -lGL -lGLU" a" -lMesaGL -lMesaGLU"; luego
"configure" de nuevo.
Las Clases QGL
Los clases OpenGL soportadas en Qt son:
1. QGLWidget: Un fcil uso del widget de Qt para renderizado de escenas OpenGL.
2. QGLContext: Encapsula un contexto renderizado OpenGL.
3. QGLFormat: Especifica el formato mostrado de un contexto renderizado.
4. QGLColormap: maneja colormaps indexados en modo GL-indexado.
Muchas aplicaciones slo necesitan la clase QGLWidget de alto nivel. Las otras clases de
QGL proporcionan rasgos avanzados. Usuarios de X11 podra gustarles leer las notas en overlays.
Tambin vea los ejemplos de OpenGL.
La documentacin de QGL asume que est familiarizado con programacin OpenGL. Si es
nuevo, un punto de arranque es http://www.opengl.org/.
* OpenGL es una marca de fbrica de Silicon Graphics, Inc. en los Estados Unidos y otros pases.

Modulo SQL
Este mdulo es parte de la edicion Qt Enterprise. Y provee las siguientes clases:
QSql

QSqlDriverPlugin

QSqlFieldInfo

QSqlCursor

QSqlEditorFactory QSqlForm

QSqlQuery
QSqlRecord

QSqlDatabase QSqlError

QSqlIndex

QSqlDriver

QSqlPropertyMap QSqlResult

QSqlField

Introduccin
Arquitectura SQL
SQL Driver Plugins
Conectando una Base de datos
Conectando una Base de datos Simple
Conectando una Base de datos Mltiple
Ejecutando Comandos SQL Usando QSqlQuery
Transacciones
Exploracion Bsica
Manipulacin Bsica de los Datos
Navigando el Conjunto de Resultados
Usando QSqlCursor
Retrieving los Archivos
Ordenando y Filtrando Archivos
Extrayendo Datos
Manipulando registros
Insertando registros
Actualizando registros

QSqlRecordInfo

Eliminando registros
Widgets Data-Aware
Tablas Data-Aware
Creando formularios Data-Aware
Mostrando un Registro
Mostrando un Registro en un formulario de Datos
Revisando un Registro
Editor Widgets
Editor Widgets para Tablas
Subclases QSqlCursor
Ejemplo de Tablas

Introduccin
Las clases de SQL de Qt le proporcionan integracin a las bases de datos para aplicaciones
de Qt.
Se asume que el lector tiene un conocimiento bsico de SQL. Debe poder entender ordenes
simples como SELECT, INSERT, UPDATE y DELETE. Aunque la clase de QSqlCursor
proporciona una interface de exploracion y edicion de la base de datos, no requiere un conocimiento
de SQL, se recomienda la comprensin de SQL.
Aunque esta apreciacin global del mdulo presenta las clases de un punto de vista
completamente programtico el manual Qt-Designer "Creando Aplicaciones con Bases de datos" el
captulo toma un acercamiento de alto nivel que demuestra cmo preparar relaciones de detalle
maestras entre widgets, manejando claves maestras externas.
Todos los ejemplos en este documento usan las tablas definidas en la seccin de Tablas de
Ejemplo.
Arquitectura SQL
Las clases SQL son divididas en tres capas:
Capa de Interface de usuario. Estas clases proporcionan widgets Data-Aware que puede
conectarse a tablas o consultas de la base de datos (usando QSqlCursor como fuente de los datos).
los usuarios finales pueden actuar directamente con estos widgets explorando o editando datos. QtDesigner se integra totalmente con las clases de SQL y puede usarse para crear formularios DataAware. Los widgets Data-Aware tambin pueden programarse directamente con su propio cdigo de
C++. Las clases que soporta esta capa incluyen QSqlEditorFactory, QSqlForm,
QSqlPropertyMap, QDataTable, QDataBrowser y QDataView.
Capa SQL API. Estas clases proporcionan acceso a los base de datos. Hace conexiones
usando la clase QSqlDatabase. La interaccin de la base de datos es lograda usando QSqlQuery y
ejecutando directamente ordenes SQL o usando QSqlCursor con ordenes SQL automticamente.
Adems de QSqlDatabase, QSqlCursor y QSqlQuery, la capa SQL API es soportada por
QSqlError, QSqlField, QSqlFieldInfo, QSqlIndex, QSqlRecord y QSqlRecordInfo.
Driver Layer. Esto comprende tres clases, QSqlResult, QSqlDriver y
QSqlDriverFactoryInterface. Esta capa proporciona el puente de bajo nivel entre la base de datos
y las clases de SQL. Esta capa se documenta por separado. Para ver ms informacin lea Qt SQL
driver plugin.
SQL Driver Plugins
El mdulo de SQL de Qt puede cargar los nuevos driver dinmicamente a runtime usando
los Plugins.

La documentacin de driver SQL describe cmo construir plugins para los sistemas de
manejo de base de datos especficos.
Una vez un plugin se construye, Qt lo cargar automticamente, y el driver estar a
disponible para ser usado por QSqlDatabase (vea QSqlDatabase::drivers() para ms
informacin).
Conectndose a Bases de Datos
Por lo menos una conexin a la base de datos debe crearse y debe abrirse antes de que los
QSqlQuery o clases de QSqlCursor puedan usarse.
Si la aplicacin slo necesita una sola conexin a la base de datos, la clase QSqlDatabase
puede crear una conexin que se usa por defecto para todas las operaciones SQL. Si se requieren
mltiples conexiones a la base de datos que stos pueden hacerse fcilmente.
QSqlDatabase requiere el archivo cabecera qsqldatabase.h.
Conectando una simple Base de Datos
Haciendo una conexin a la base de datos en tres pasos simples: activar el driver, preparar
la informacin de conexin, y abrir la conexin.
#include <qapplication.h>
#include <qsqldatabase.h>
#include "../connection.h"
int main( int argc, char *argv[] ){
QApplication app( argc, argv, FALSE );
QSqlDatabase *defaultDB = QSqlDatabase::addDatabase( DB_SALES_DRIVER );
defaultDB->setDatabaseName( DB_SALES_DBNAME );
defaultDB->setUserName( DB_SALES_USER );
defaultDB->setPassword( DB_SALES_PASSWD );
defaultDB->setHostName( DB_SALES_HOST );
if ( defaultDB->open() ) {
// Database successfully opened; we can now issue SQL commands.
}
return 0;
}

Primero nosotros activamos el driver llamando QSqlDatabase::addDatabase (), pasando


el nombre del driver que deseemos usar para la conexin. Al momento de escritura de este codigo
los drivers disponibles eran: QODBC3 (Open Database Connectivity), QOCI8 (Oracle 8 y 9),
QTDS7 (Sybase Adaptive Server y Microsoft SQL Server), QPSQL7 (PostgreSQL 6 y 7) y
QMYSQL3 (MySQL). Not que algunos de estos drivers no son incluido en la Edicin Libre de Qt;
vea que el archivo README para detalles.
La conexin que se crea se vuelve la conexin de base de datos por defecto de la aplicacin
y ser usada por la clase SQL de Qt si ninguna otra base de datos se especifica.
Segundo llamamos setDatabaseName(), setUserName(), setPassword() y setHostName()
para inicializar la informacin de conexin. Note que para los driver QOCI8 (Orculo 8 y 9) el
TNS Service Noame debe pasarse al setDatbaseName(). Al conectar a las fuentes de datos ODBC
al Nombre de Fuente de Datos (DNS) debe usarse en el llamado setDatabaseName().
Tercero se hace el llamado open() para abrir la base de datos y tener acceso a los datos. Si
esta llamada falla devuelve FALSO; esta informacin del error puede obtenerse de
QSqlDatabase::lastError().

Conectando Multiples Bases de Datos


Conectarse a mltiples bases de datos que usa dos formas del argumento de
QSqlDatabase::addDatabase() donde el segundo argumento es el nico identificador que
distingue la conexin.
En el ejemplo a continuacin las conexiones han pasado a su propia funcin,
createConnections (), y se agreg un manejo de error bsico.
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

DB_SALES_DRIVER
DB_SALES_DBNAME
DB_SALES_USER
DB_SALES_PASSWD
DB_SALES_HOST
DB_ORDERS_DRIVER
DB_ORDERS_DBNAME
DB_ORDERS_USER
DB_ORDERS_PASSWD
DB_ORDERS_HOST

"QPSQL7"
"sales"
"salesperson"
"salesperson"
"database.domain.no"
"QOCI8"
"orders"
"orderperson"
"orderperson"
"database.domain.no"

bool createConnections();

Nosotros preparamos algunas


createConnections() en connection.h.

constantes

tambin

declaramos

la

funcion

#include <qsqldatabase.h>
#include "connection.h"
bool createConnections(){
QSqlDatabase *defaultDB = QSqlDatabase::addDatabase( DB_SALES_DRIVER );
defaultDB->setDatabaseName( DB_SALES_DBNAME );
defaultDB->setUserName( DB_SALES_USER );
defaultDB->setPassword( DB_SALES_PASSWD );
defaultDB->setHostName( DB_SALES_HOST );
if ( ! defaultDB->open() ) {
qWarning("Fallo al abrir database:"+defaultDB->lastError().driverText()
);
qWarning( defaultDB->lastError().databaseText() );
return FALSE;
}
QSqlDatabase *oracle = QSqlDatabase::addDatabase( DB_ORDERS_DRIVER,
"ORACLE" );
oracle->setDatabaseName( DB_ORDERS_DBNAME );
oracle->setUserName( DB_ORDERS_USER );
oracle->setPassword( DB_ORDERS_PASSWD );
oracle->setHostName( DB_ORDERS_HOST );
if ( ! oracle->open() ) {
qWarning("Fallo al abrir ordenes database:"+oracle->
lastError().driverText());
qWarning( oracle->lastError().databaseText() );
return FALSE;
}
return TRUE;
}

Se ha escogido aislar la conexin de la base de datos en createConnections() function.cpp.


#include <qapplication.h>
#include <qsqldatabase.h>

#include "../connection.h"
int main( int argc, char *argv[] ){
QApplication app( argc, argv, FALSE );
if ( createConnections() ) {
// Databases successfully opened; get pointers to them:
QSqlDatabase *oracledb = QSqlDatabase::database( "ORACLE" );
// Now we can now issue SQL commands to the oracle connection
// or to the default connection
}
return 0;
}

La funcin esttica QSqlDatabase::database () puede llamarse en cualquier parte para


proporcionar un puntero para la conexin de la base de datos. Si la llamamos sin parmetro,
devolver una conexin predefinida. Si se llama con el identificador que hemos usado para la
conexin, ej. "ORACLE", en el ejemplo anterior, que devolver un puntero a la conexin
especificada.
Si se crea un main.cpp usando Qt-Designer, no incluir la funcion createConnections()
del ejemplo. Esto significa que aplicaciones visualizadas en Qt-Designer no corrern a menos que
se implemente una propia funcin de conexiones de base de datos.
Note que en el cdigo sobre la conexin de ODBC no se nombr y se us como una
conexin predefinida. QSqlDatabase mantiene la propiedad de los punteros devueltos por la
funcin esttica addDatabase(). Para remover una base de datos de la lista de conexiones, cierre la
base de datos con QSqlDatabase::close (), y remuevala usando la funcin esttica
QSqlDatabase::removeDatabase ().
Ejecutando comandos SQL usando QSqlQuery
La clase QSqlQuery provee una interface para ejecutar rdenes SQL. Tambin tiene
funciones por navegar a travs de los conjuntos de resultado de preguntas SELECT y para
recuperar registros individuales y valores de campos.
La clase QSqlCursor descrita en la prxima seccin hereda de QSqlQuery y proporciona
una interface alto nivel que comprende ordenes SQL. QSqlCursor es particularmente fcil de
integrar con widgets en pantalla. Programadores poco familiarizados con SQL puede saltar esta
seccin y pueden usar la clase QSqlCursor desrita en "Usando QSqlCursor."
Transacciones
Si la ingenieria fundamental de la base de datos soporta transacciones
QSqlDriver::hasFeature (QSqlDriver::Transactions) devolver VERDADERO. Se puede usar
QSqlDatabase::transaction () para comenzar una transaccin, seguido por las rdenes SQL que se
quieran ejecutar dentro del contexto de la transaccin, o QSqlDatabase::commit () o
QSqlDatabase::rollback ().
Exploracion Bsica
#include
#include
#include
#include

<qapplication.h>
<qsqldatabase.h>
<qsqlquery.h>
"../connection.h"

int main( int argc, char *argv[] ){


QApplication app( argc, argv, FALSE );
if ( createConnections() ) {
QSqlDatabase *oracledb = QSqlDatabase::database( "ORACLE" );
// Copy data from the oracle database to the ODBC (default)

// database
QSqlQuery target;
QSqlQuery query( "SELECT id, name FROM people;", oracledb );
if ( query.isActive() ) {
while ( query.next() ) {
target.exec( "INSERT INTO people ( id, name ) VALUES ( " +
query.value(0).toString() +", '" + query.value(1).toString() +
"' );" );
}
}
}
return 0;

En el ejemplo donde se agrego el archivo cabecera qsqlquery.h. La primera pregunta


creada, usa la banco de datos predefinido que est inicialmente vaco. Para la segunda pregunta, q,
especificamos la base de datos "ORACLE" de donde queremos recuperar los registros. Ambas
conexiones de la base de datos eran fijas en createConnections ().
Despus de crear la declaracin inicial SELECT, isActive () se verifica para ver si la
pregunta se ejecut con xito. La funcin next() es usada para iterar a travs de los resultados de la
consulta. La funcin value() devuelve el valor de los campos como QVariants. Las inserciones son
archivadas por las consultas creadas y ejecutadas sobre la base de datos usando el QSqlQuery.
int count = 0;
if ( query.isActive() ) {
while ( query.next() ) {
target.exec( "INSERT INTO people ( id, name ) VALUES ( " +
query.value(0).toString() + ", '" + query.value(1).toString() +
"' );" );
if ( target.isActive() )
count += target.numRowsAffected();
}
}

El cdigo anterior lleva la cuenta de cuntos archivos se insertan con xito. Si isActive () es
FALSO, ej. numRowsAffected() retorna -1 y el nmero de filas no puede determinarse.
Manipulacin Bsica de los Datos
int main( int argc, char *argv[] )
{
QApplication app( argc, argv, FALSE );
int rows = 0;
if ( createConnections() ) {
QSqlQuery query( "INSERT INTO staff ( id, forename, surname,
salary ) " "VALUES ( 1155, 'Ginger', 'Davis', 50000 );" );
if ( query.isActive() ) rows += query.numRowsAffected() ;
query.exec( "UPDATE staff SET salary=60000 WHERE id=1155;" );
if ( query.isActive() ) rows += query.numRowsAffected() ;
query.exec( "DELETE FROM staff WHERE id=1155;" );
if ( query.isActive() ) rows += query.numRowsAffected() ;
}
return ( rows == 3 ) ? 0 : 1;
}

El ejemplo muestra las ordenes SQL DML (data manipulation language). Dado que no se
especifico una base de datos en el constructor QSqlQuery usa la base de datos predefinida. Objetos
QSqlQuery tambin pueden usarse para ejecutar rdenes SQL DDL (data definition language)
como CREATE TABLE y CREATE INDEX.

Navegando por los Resultados


Una vez la consulta se ha ejecutado con xito, tenemos acceso al resultado de de acuerdo al
criterio de la consulta. Ya hemos usado las funciones de navegacin, next() que puede usarse para
navegar secuencialmente a travs de los archivos. QSqlQuery tambin proporciona first(), last() y
prev(). Despus de cualquiera de estas rdenes podemos verificar que estamos en un registro vlido
llamando a isValid ().
Usando QSqlCursor
La clase de QSqlCursor proporciona una interface de alto nivel para explorar y editar
registros en tablas de bases de datos SQL o consultas sin necesidad de escribir su propio SQL.
QSqlCursor puede hacer casi todo lo que QSqlQuery puede, con dos excepciones. Puesto
que los cursores representan tablas o consutas dentro de la base de datos, por defecto, los objetos de
QSqlCursor recuperan todos los campos de cada registro en la tabla o consulta siempre que
navegara a un nuevo registro.
QSqlCursor opera en un solo registro por ves. Siempre que realizara una insercin, un
actualizacion o elimine usando QSqlCursor, slo un solo registro es afectado.
Insertando Registros
QSqlCursor cur( "prices" );
QStringList names = QStringList() << "Screwdriver" << "Hammer" <<
"Wrench" << "Saw";
int id = 20;
for ( QStringList::Iterator name = names.begin();name !=
names.end(); ++name ) {
QSqlRecord *buffer = cur.primeInsert();
buffer->setValue( "id", id );
buffer->setValue( "name", *name );
buffer->setValue( "price", 100.0 + (double)id );
count += cur.insert();
id++;
}

Actualizando Registros
QSqlCursor cur( "prices" );
cur.select( "id=202" );
if ( cur.next() ) {
QSqlRecord *buffer = cur.primeUpdate();
double price = buffer->value( "price" ).toDouble();
double newprice = price * 1.05;
buffer->setValue( "price", newprice );
cur.update();
}

Eliminando Registros
QSqlCursor cur( "prices" );
cur.select( "id=999" );
if ( cur.next() ) {
cur.primeDelete();
cur.del();
}

Widgets Data-Aware
Tablas Data-Aware
#include
#include
#include
#include
#include

<qapplication.h>
<qsqldatabase.h>
<qsqlcursor.h>
<qdatatable.h>
"../connection.h"

int main( int argc, char *argv[] ){


QApplication app( argc, argv );
if ( createConnections() ) {
QSqlCursor staffCursor( "staff" );
QDataTable *staffTable = new QDataTable( &staffCursor, TRUE );
app.setMainWidget( staffTable );
staffTable->refresh();
staffTable->show();
return app.exec();
}
return 0;
}

Subclases QSqlCursor
#include
#include
#include
#include
#include

<qapplication.h>
<qsqldatabase.h>
<qsqlcursor.h>
<qdatatable.h>
"../connection.h"

int main( int argc, char *argv[] ){


QApplication app( argc, argv );
if ( createConnections() ) {
QSqlCursor invoiceItemCursor( "invoiceitem" );
QDataTable *invoiceItemTable = new QDataTable(&invoiceItemCursor );
app.setMainWidget( invoiceItemTable );
invoiceItemTable->addColumn( "pricesid", "PriceID" );
invoiceItemTable->addColumn( "quantity", "Quantity" );
invoiceItemTable->addColumn( "paiddate", "Paid" );
invoiceItemTable->refresh();
invoiceItemTable->show();
return app.exec();
}
return 1;
}

Ejemplos de Tablas
El ejemplo de Tablas puede recrearse SQL estandar. Puede necesitar modificar el SQL para
hacerlo compatible con una base de datos en particular.
create table people (id integer primary key, name char(40))
create table staff (id integer primary key, forename char(40),
surname char(40),salary float, statusid integer)
create table status (id integer primary key, name char(30))

create table creditors (id integer primary key, forename char(40),


surname char(40), city char(30))
create table prices (id integer primary key, name char(40), price float)
create table invoiceitem (id integer primary key, pricesid integer,
quantity integer, paiddate date)

Note que la secuencia no soporta todas las bases de datos.


create sequence invoiceitem_seq

Modulo Table
Este mdulo es parte de la edicion Qt Enterprise.
El mdulo de Tablas proporciona un flexible y editable tabla para widget, QTable. Para
muchas aplicaciones puede usarse QTables, proporcionando un gris de celdas del editable. QTable
tambin puede ser subclassed a manera de proporcionar tablas ms grandes, ej. un milln x un
milln de celdas,

El mdulo Tablas proporciona las clases siguientes:


1. QTable el mismo es un widget, siempre que necesite proporcionarle al usuario para revisar
datos de manera tabular como hoja de clculo o datos de la base de datos.
2. QTableItem para poblar un QTable con datos con cada artculo de la tabla que aloja el
contenido de una celda.
3. QComboTableItem mantiene de manera eficiente en memoria los tems del combobox
para QTables.
4. QCheckTableItem mantiene de manera eficiente en memoria los tems del checkbox para
QTables.
5. QTableSelection proporciona acceso a las selecciones de celdas en un QTable.
6. QHeader proporciona acceso a la cabecera horizontal de la tabla (cabecera de la columna)
y la cabecera vertical (cabecera de la fila).

Vea la documentacin de la clase apropiada para detalles y refirase a los ejemplos de Tabla
de Qt.

Modulo Workspace
El mdulo workspace proporciona un ambiente de trabajo que puede contener ventanas de
documentos decoradas para las Interfaces de Documento Mltiples (MDI).
Se implementa en una sola clase QWorkspace.
Por favor vea la documentacin de la clase para ms detalles.

Modulo XML
Este mdulo es parte de la edicion Qt Enterprise.
El mdulo de XML proporciona un XML bien formado que usa SAX2 (Simple API for
XML) una implementacin de DOM Nivel 2 (Document Object Model).
SAX es una interface estandar de eventos basados en XML. La interface de Qt sigue el
diseo de la implementacion de Java de SAX2. Su esquema fue adaptado para encajar en las
convecione de Qt. Pueden encontrarse ms detalles de SAX2 en http://www.megginson.com/SAX/.
El soporte para filtros SAX2 estn bajo desarrollo. Qt no incluye compatibilidad co SAX1
presente en la interface de Java.
Para una introduccin a las clases SAX2 de Qt vea "La clase Qt SAX2".
DOM Level 2 es una W3C Recomendad para interfaces de XML que constituye un mapa
al documento de XML a la estructura de rbol. Pueden encontrarse los detalles y la especificacin
de DOM Level 2 en http://www.w3.org/DOM/. Ms informacin sobre el DOM en la clase de Qt
DOM.
Qt proporciona las siguientes clases XML:
Class

Short description

QDomAttr

Representa un atributo de QDomElement

QDomCDATASection

Representa una seccion XML CDATA

QDomCharacterData

Representa una cadena generica en DOM

QDomComment

Representa un comentario XML

QDomDocument

Representacion de un documento XML

QDomDocumentFragment

Arbol de QDomNodes que no es un QDomDocument completo

QDomDocumentType

Representacion del DTD en arbol

QDomElement

Representa un elemento en un arbol DOM

QDomEntity

Representa una entidad XML

QDomEntityReference

Representa una referencia a una entidad XML

QDomImplementation

Informacion acerca de la implementacion de DOM

QDomNamedNodeMap

Coleccion de nodos que puede ser accedida por nombre

QDomNode

Clase base para todos los nodos del arbol DOM

QDomNodeList

Lista de objetos QDomNode

QDomNotation

Representa una notacion XML

QDomProcessingInstruction Representa una instruccin en proceso de XML

QDomText

Representa un documento de texto de datos en XML

QXmlAttributes

Atributos XML

QXmlContentHandler

Reporte del contenido logico de datos de XML

QXmlDeclHandler

Reporte del contenido declarado de datos de XML

QXmlDefaultHandler

Implementacion por defecto de todas las clases cabeceras de XML

QXmlDTDHandler

Reporte DTD contenedor de datos de XML

QXmlEntityResolver

Interface to resolve extern entities contained in XML data

QXmlErrorHandler

Reporte de errores en datos XML

QXmlInputSource

Entrada de datos para la subclase QXmlReader

QXmlLexicalHandler

Reporte del contenido lexical de datos XML

QXmlLocator

Clases cabeceras XML con informacion sobre la pocision actual

QXmlNamespaceSupport

Clase de soporte para XML

QXmlParseException

Reporte de errores con QXmlErrorHandler

QXmlReader

Interface para interpretadores XML(i.e. for SAX2)

QXmlSimpleReader

Implementacion de un simple interpretador XML (a SAX2)

Convenciones usadas en la documentacin Qt XML


Los trminos siguientes se usan para distinguir las partes de nombres dentro del contexto
namespaces:
1. El qualified name es el nombre como aparece en el documento. (book:title es un qualified
name.).
2. Un prefijo namespace en un qualified name es la parte a la izquierda del ":". (book es el
prefijo namespace en book:title.).
3. La local part de un nombre (tambin el referido como el local name) aparece al lado
derecho del ":". (As title es el local part de book:title.).
4. El namespace URI ("Uniform Resource Identifier ") es un nico identificador para un
namespace. Mira como un URL (ej. http://trolltech.com/fnord/) no requiere datos para ser
accesible por el protocolo dado a la direccin nombrada.
Elementos sin un ":" no tiene un prefijo namespace. En este caso el local part y el
qualified name son idnticos.

Modulo ActiveQt framework


El ActiveX de Qt, permite el soporte a los diseadores de Qt/Windows:
1. Use y accese controles de ActiveX provistos por cualquier servidor ActiveX en sus
aplicaciones Qt.
2. Haga disponible sus aplicaciones Qt como servidores ActiveX, con cualquier nmero de
widgets Qt como controles ActiveX.
El framework consiste en dos mdulos.

QAxContainer
El mdulo QAxContainer es una libreria que implementa una subclase de QWidget,
QAxWidget que acta como un contenedor para los controles ActiveX, si la libreria se construye
contra una libreria Qt compartida que integrada como un plugin widget en Qt-Designer. Este
mdulo proporciona las clases QAxBase, QAxObject y QAxWidget.
Informacin adicional
Ejemplos.
QAxContainer FAQ.
QAxServer
El mdulo QAxServer es una libreria esttica que implementa funcionalidad al servidor
ActiveX en proceso y en ejecucion. Este mdulo proporciona las clases QAxAggregated,
QAxBindable y QAxFactory.

Informacin adicional
Ejemplos.
QAxServer FAQ.

Modulo Motif Extension


El modulo Motif Extension asiste la migracin de viejos Xt y cdigos basados en Motif a
Qt toolkit. Esta extensin reemplaza las ms viejas soportes a extensiones Qt Xt/Motif incluidas en
versiones anteriores de Qt.

Informacin
El modulo Extensin Motif consiste en las siguientes clases:
QMotif
QMotifWidget
QMotifDialog
QXtWidget - La integracin widget Xt/Motif para extensiones anteriores de Xt/Motif.
Esta clase no es soportada y es provista slo para proyectos que manejan nuevas
extensiones Motif.

How-to
1. Asegurese que est usando X11R6 y Motif 2.x.
2. Asegurese los programas son compilables por C++, o por lo menos que ste sea el caso,
que puedan ser migradas.
Vea tambien Motif Examples.
Problemas Comunes
Las cabeceras X11 definen algunas constantes que dan conflictos con las cabeceras de Qt. La
solucin es incluir primero todas las cabeceras de Qt, seguido por las cabeceras de esta extensin, y
todas las cabeceras Xt/Motif y X11. Por ejemplo

// Qt headers first
#include <qapplication.h>
#include <qpushbutton.h>
#include <qsocket.h>

...

// QMotif* headers next


#include <qmotif.h>
#include <qmotifdialog.h>
#include <qmotifwidget.h>

// Xt/Motif and X11 headers last


#include <X11/Xlib.h>
#include <Xt/Intrinsic.h>
#include <Xm/Xm.h>
...

Modulo Qt Netscape Plugin Extension


El software de Plugin de Qt Netscape le hace fcil de escribir plugins para browsers que
puede usarse en Unix/Linux y MS-Windows, en Netscape, Mozilla, y cualquier otro browser web
dando soporte al protocolo de LiveConnect de Netscape. Las versiones modernas de MSIE no
soportan este protocolo. Use el framework ActiveQt para desarrollar plugins para estos browsers.
Informacin
La Extension Netscape Plugin contiene las siguientes clases:
QNPlugin
QNPInstance
QNPWidget
QNPStream
How-to
1. Descargue el Plugin SDK de Netscape, y copie los archivos siguientes en
$QTDIR/extensions/nsplugin/src
common/npwin.cpp
common/npunix.c
include/npapi.h
include/npupp.h
include/jri.h
include/jri_md.h
include/jritypes.h
2. Construya la librera extension Plugin Netscape, encontrada en el directorio
extensions/nsplugin/src de su distribucin Qt. Esto genera una libreria esttica para
unirse al cdigo del plugin.
3. Lea la documentacinde clases de plugin, y examine el plugins ejemplo.
4. Haga de su desarrollo una aplicacin de Qt stand-alone, el debugging de Netscape
Plugins puede ser engorroso. Puede usar la signal(2) en el plugin para habilitar el coredumps si su browser los tiene desactivados.
5. Note la plataforma especfica bajo la construccion por pasos.
6. Lea sobre la interface de plugin en el manual de Netscape.
7. Si los archivos vistos por un plugin son provistos por un servidor HTTP (usando un
http: / /... / URL) entonces el servidor debe ser configurado para enviar el tipo correcto
de MIME para el archivo, ej. el archivo de mime.types de apache. Si los archivos son

vistos va / /... URL, entonces los browser usarn la extensin del filename para decidir
el tipo del archivo (y del plugin para cargar) - el usuario puede necesitar poner la
extensin del filename en las ayudas o seccin de Aplicaciones de las preferencias del
browser.
Construyendo bajo X11
Los Makefiles en los ejemplos son apropiados para UNIX/X11.
El usuario debe instalar el Objeto Compartido resultante en el directorio de Plugins del
browser.
Construyendo bajo Windows
Para trabajar los plugins de Netscape, Qt necesita estar en el directorio del DLL o ser
compilado dentro del plugin como una libreria esttica.
Los plugins deben nombrarse npname.dll, o los browser los ignorarn.
El enlace debe incluir:
o /def:name.def
o /dll
o un archivo de recurso compilado definiendo el tipo file/MIME aceptado por el
plugin.
El usuario debe instalar el DLL resultante en el directorio de Plugins del browser.
Errores conocidos y Limitaciones
El codigo unido al Plugin LiveConnect basado en Qt tiene varias limitaciones y errores,
pero es suficientemente estable para muchas aplicaciones en produccin.
La entrada del teclado slo trabaja en ventanas del seconday (ej. dilogos creados por el
plugin).
No espere una modalidad entre el plugin y el browser a trabajar.
Netscape 4.78 en Unix/X11 tiende a terminar con un error en los buses.
El comportamiento del resize opaco es una conducta errtica del browser.

Capitulo 5. Clases De Qt.


Capitulo 6.Qt-Designer.
Es una herramienta muy potente que permite disear de una forma muy sencilla y rpida
ventanas de dialogo con las libreras Qt. Esta herramienta es una aplicacin mediante la cual se
puede realizar el diseo de aplicaciones GUI de forma grfica y muy intuitiva .

Caractersticas:

Para crear una interfaz con QT Designer basta con seleccionar el men File -> New. y all
se elige un fichero de QT Designer (*.ui)

Las plantillas que se puede escoger son:


o Dialog: Es la plantilla ms 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, adems 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.

Disponemos de una paleta de widgets muy completa, que incluyen los widgets ms
comunes de las liberas QT. Si adems hemos instalado las libreras para el desarrollo
de aplicaciones KDE, tendremos widwets adicionales.

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
geometra que queramos.
Las propiedades de un widget cualquiera se pueden cambiar fcilmente en tiempo de
diseo con el panel de propiedades.

A medida que guardamos los cambios de la interfaz, si editamos el fichero .ui vemos que va
cambiando el contenido. La descripcin de la interfaz se guarda en ese fichero en formato
xml.
Para hacer que nuestra ventana sea la ventana principal de la aplicacin basta con hacer que
el widget que nos gener como ventana principal herede del nuevo que hemos creado con
el QT Designer.

Se pueden aadir los siguientes objetos:


Botones: Se pueden aadir diversas clases de botones. Los que se pueden encontrar son
pushbutton, toolbutton, radiobutton o checkbutton, estos difieren en su forma pero
bsicamente pueden realizar las mismas funciones.

Ejemplo de Botones

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

Ejemplo de containers

Inputs: Este apartado incluye LineEdit (lneas de edicin) pueden servir para recoger
datos que se introducen por teclado, MultiLineEdit (similar), combobox (listas
desplegables) y otros como slider, spinbox o dial.

Ejemplo de Inputs

Displays: En este apartado se incluyen textlabel (etiquetas de texto), pixmapLabel


(imgenes), progressbar (barras de progreso) adems de LCDnumber, Line etc.

Ejemplo de Displays

Views: Son objetos que pueden albergar iconos, tambin en este apartado se incluyen las
tablas.

Ejemplo de views
Todos estos se encuentran en el men Tools aunque tambin se puede encontrarlos en las
barras de herramientas con sus respectivos iconos.
Se pueden realizar seales, conocidas como Slots y Signal:
Slots y Signal.- Los slots y signals (seales) son un mecanismo de comunicacin entre
objetos, esta es la principal caracterstica de Qt y es el rasgo que hace distintas las libreras
Qt del resto de herramientas para la elaboracin de GUI, es un mecanismo de
comunicacin seguro, flexible y totalmente orientado a objetos y por supuesto
implementado en C++.
En la programacin con GUI se busca que los cambios producidos en un objeto
sean comunicados a otros objetos, por ejemplo cuando hacemos click en un botn para que

se cierre una ventana, lo que se hace es posibilitar la comunicacin entre los dos objetos.
Otras herramientas de diseo de GUI llevan a cabo la comunicacin entre objetos usando
los llamados callbacks. Un callback es un puntero a una funcin, con este mecanismo si se
quiere procesar una determinada funcin cada vez que ocurre un evento en un objeto, lo que
se hace es pasar un puntero a otra funcin (el callback) a la funcin deseada y ser esta la
que se encargue de llamar al callback en el momento apropiado. Este tipo de comunicacin
tiene el inconveniente de no ser totalmente seguro puesto que no se sabe si se llamar al
callback con los argumentos apropiados y adems la funcin que llama al callback debe
saber exactamente a que callback llamar, adems es un sistema inflexible y no esta
orientado a objetos.
Se puede crear los archivos *.h y los *.cpp:
La aplicacin 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
instruccin en la consola.
o Para obtener el archivo de cabecera (.h):
uic -o <ejemploqt.h> <ejemploqt.ui>
o

Para obtener el archivo de implementacin (.cpp):


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

Con esto ya estn los archivos implementados, es decir la clase de la ventana creada ya
esta definida (el nombre que habamos elegido es Wizard), pero aun falta algo. La
herramienta moc (meta object compiler) sirve para obtener archivos de extensin .cpp
que se encargan de implementar el mecanismo de slots/signals.
moc -o <moc_ejemploqt.cpp> <ejemploqt.h>

Captulo 7. Creando la Aplicacin


Primero, ejecutemos el designer en el background lanzndolo desde una consola (esta la
usaremos repetidas veces en el taller).

Luego, creemos un nuevo proyecto:

Dmosle un nombre, preferiblemente este:

Creando la Ventana Principal


Ahora crearemos el widget principal del proyecto (correspondiente a una instancia de una
clase derivada de la clase QMainWindow y que indistantamente tambien llameremos
formulariol, o, forma), correspondiente al objeto con menues, toolbars, etc. (puedes hacerlo
desde File->New):

Aparece un Wizard, completalo del modo indicado:

En este paso del wizard definimos el aspecto de nuestro ToolBar. En este punto puedes
ensayar a darle el aspecto que desees (pero no es bueno abusar).

Acerca del siguiente paso del Wizard se podrian decir muchas cosas, solo presionar
"Finish".

Si todo fue bien se deberia obtener un resultado similar a este:

Cambiemos el inexpresivo nombre Form1 del QMainWindow por el de myeditor:

Antes de estudiar el contenido del archivo .pro debemos salvar nuestro trabajo (de hecho
mediante esta operacion se crea dicho archivo). (File->Save all):

El Archivo .pro
Revisemos lo que tenemos en el directorio del proyecto:

Tenemos un nuevo directorio, llamado images y dos archivos nuevos: myeditor.ui y


myeditor.pro. En el directorio se encuentran pixmaps que se van a emplear para las acciones
estndar (como open, save, etc.). El archivo myeditor.ui es un archivo xml que posee la descripcion
de la forma recien creada (a partir de la cual el uic de Qt va a generar el correspondiente codigo C+
+). Finalmente, el archivo myeditor.pro posee la informacion necesaria para generar (mediante el
comando qmake) el correspondiente Makefile (de acuerdo a las condiciones particulares de nuestra
configuracion local, como el sistema operativo, etc.). Hechemosle un vistazo:

Congruente y simple a diferencia del Makefile que genera.

El Archivo main.cpp
Al igual que sucede con cualquier aplicacin desarrollada en C++, necesitamos una funcion
main() para poder generar el respectivo ejecutable. Asi que antes de compilar cualquier cosa,
generemos dicha funcion (File->New):

Asociemos myeditor como su principal forma (no hay mas opciones).

Tenemos la funcion recien creada en su respectivo editor de texto (como no la vamos a


editar, porque no lo necesitamos, podemos cerrarla)

Salvemos todo de nuevo (File->Save all). Podemos ver la aparicion del nuevo archivo
main.cpp

De igual manera la funcion se incluye en el archivo myeditor.pro:

Captulo 8. Compilando y Ejecutando la


Aplicacin por Vez Primera
Estamos listos para compilar la aplicacin por primera vez. Desde la consola y estando en la
raiz del directorio del proyecto, ejecutamos qmake seguido de make:

Finalmente lanzamos la aplicacin mediante consola:

Captulo 9. Extendiendo la Funcionabilidad


Mediante Acciones
El archivo .ui.h
El widget principal del proyecto myeditor corresponde a una instancia de una clase
derivada de la clase QMainWindow. Por ende, para extender su funcionabilidad, en principio
bastaria con definir los metodos necesarios e implementarlos. Esto iria bien salvo por un pequeo
detalle, los cambios efectuados en los archivos correspondientes se perderian cada vez que
modificaramos la forma con el designer (sin importar que diminuta resulte la modificacion
efectuada). Existen dos aproximaciones para solucionar el inconveniente:
La primera es conceptual (C++): se trata de heredar de la forma creada mediante el designer
(correspondiente a los archivos en rojo de la figura) y extender la funcionalidad en la clase heredada
(cualquier archivo en amarillo de la figura se encuentra disponible para edicion del usuario). De este
modo, cada vez que modifiquemos la forma mediante el designer y por ende los archivos en rojo,
los cambios no afectaran la nueva clase heredada: sencillo, directo y elegante.

La segunda es mediante un mecanismo propio del designer: la form.ui.h. Veamos, la


form.ui.h corresponde a un archivo que se puede editar directamente por el usuario (amarillo en
la figura), pero que tambien se puede modificar visualmente mediante el designer (que ademas de
todo se encarga de mantener el sincronismo). De esta manera, encontramos el lugar para
extender la funcionalidad de la forma, sin perder los cambios que se efectuen de modo visual y sin

la necesidad de tener que emplear el mecanismo de herencias de C++ propio de la primera


alternativa. Graficamente lo que se tiene es lo siguiente:

Invocando una salida


Como nuestra aplicacin no realiza nada util aun, le vamos a agregar cierta funcionabilidad
mediante la implementacion de ciertas acciones. Para ello vamos a emplear la segunda
aproximacion de las citadas arriba: vamos a crear y editar el archivo myeditor.ui.h. Si
cliqueamos dos veces la forma principal, aparece el siguiente dialogo, respondamos Yes:

Aparece la myeditor.ui.h en el editor de textos de Qt:

Vamos a editar el codigo relativo a la accion File->Close de nuestra aplicacin. Para ello,
ubiquemos la seccion del archivo correspondiente al SLOT fileExit() y editemoslo mediante
el codigo this->close();. Observacion: quizas puedas observar cuando termine de escribir > como se despliega un menu contextual. Este menu posee todas las funciones disponibles para el
objeto this (QMainWindow), incluidas las heredadas mediante el menanismo de inheritance.

Antes de proseguir al siguiente capitulo, salvemos, compilemos y ejecutemos la aplicacin


(en ese orden) para ver que pasa.

Captulo 10. Agregando los Widgets Estndar


Widgets: Tipos y Propiedades
Todos los widgets (estndar y personales) disponibles en designer se encuentran en el tab
de Common Widgets disponibles en la parte izquierda del designer. Vamos a emplear un
contenedor para agregar en el los botones que controlan nuestro canvas. Seleccionemos entonces el
Group Box del Common Widgets tab:

Y agreguemoslo a la forma, cliqueando sobre ella, la region donde deseamos que quede
colocado el objeto. Editemos ahora algunas de las propiedades del objeto (como su titulo-nombre
que va a aparecer en el contenedor) en el tab de Properties disponible a la derecha del
designer:

Hagamos lo mismo con los botones: primero agreguemos unos cuantos botones
(seleccionadolos a partir de la seccion Buttons del Common Widgets tab.

Segundo: agregandolos al contenedor recien creado y editando el nombre con el que van a
aparecer:

Widgets: Laying Out


Qt posee un excelente sistema de Lay Out para arreglar (alinear) los widgets de una
forma. La correspondiente accion se puede invocar directamente desde el toolbar (o si se quiere
desde el menubar, como todas las acciones). Teniendo seleccionado el contenedor (basta con
cliquearlo) arreglemos los objetos contenidos en el en grid:

El resultado debe ser parecido al siguiente:

Captulo 11. Agregando los Widgets


Personales
Antes de tener disponibles en el designer los widgets personales (como el MyCanvasView
de Jean Pierre, de un modo casi identico al de cualquier otro widget de Qt (como los empleados en
el capitulo anterior) o Kde, debemos agregar primero sus descripciones.

Cargando las Descripciones


Para cargar las descripciones del widget MyCanvasView accedamos el siguiente menu:

Aparece el siguiente dialogo (observese que este dialogo es el mismo que se emplea para
crear las descripciones). Seleccionemos el archivo correspondiente y abramoslo:

Antes de proseguir, demos un vistazo a los Slots disponibles:

Y comparemos su contenido con el del archivo myclassview.h:


class MyCanvasView : public QCanvasView {
Q_OBJECT
public:
MyCanvasView(QWidget *parent=0, const char *name=0);
~MyCanvasView();
public slots:
void help();
void aboutQt();
void clear();
void addSprite();
void addCircle();
void addHexagon();
void addPolygon();
void addSpline();
void addText();
void addLine();
void addRectangle();
void addLogo();
void addButterfly();
void enlarge();
void shrink();
void rotateClockwise();
void rotateCounterClockwise();

void
void
void
void
void
void
void

zoomIn();
zoomOut();
mirror();
moveL();
moveR();
moveU();
moveD();

protected:
void contentsMousePressEvent(QMouseEvent*);
void contentsMouseMoveEvent(QMouseEvent*);
signals:
void status(const QString &);
private:
int imageRTTI;
QCanvasItem* moving;
QPoint moving_start;
QString butterfly_fn;
QString logo_fn;
QCanvas * myCanvas;
QBrush *tb;
QPen *tp;
uint mainCount;
QImage *butterflyimg;
QImage *logoimg;
};

Ahora, agreguemos el widget a la forma. Ahora si que lo podemos hacer de la misma forma
que lo haciamos con el contenedor y sus botones en el capitulo pasado. Cliqueemos primero
MyCanvasView y luego en el sitio en la forma donde deseamos que quede:

El resultado:

Ahora hagamos un layout in a grid a la forma (no al widget). La apariencia mejora


bastante:

Conectando los Signals a los Slots


Ahora vamos a agregar la funcionalidad necesaria para completar nuestra aplicacin:
cuando se cliqueen los botones que hemos instanciado, deseamos que se agreguen los
correspondientes objetos graficos en el canvas. En Qt este tipo de eventos se manejan mediante el
paradigma de Signals y Slots. Vale la pena decir que los Signals y Slots sirven no solo para
conectar widgets entre si, sino cualquier par de objetos que hereden de la clase QObject. Pasemos
primero a modo de edicion de signals y slots:

Ahora debemos cliquear con el raton los dos objetos (uno despues de otro): primero el
objeto que emite el signal y segundo el objeto que la recibe (y ejecuta entonces un metodo
denominado slot). Observa como se iluminan los objetos seleccionados:

Una vez seleccionados ambos objetos (tanto el emisor como el receptor), entonces aparece
el siguiente dialogo:

Seleccionemos entonces el signal y el slot que necesitemos (observa que para que un slot
este disponible, el tipo de datos del slot debe coincidir con el del signal):

Compilando Mltiples Fuentes


Antes de compilar cualquier cosa debemos incluir las clases de usuario en el proyecto y
generar de nuevo el Makefile. Estas clases corresponden a MyCanvasView y sus dependencias:
BouncyLogo e ImageItem. Primero activemos el proyecto (por si no lo estaba):

Ahora invoquemos del mismo menu, la siguiente entrada:

Completemos el dialogo que aparece del siguiente modo:

Nota: Es posible que los archivos se hayan abierto para edicion. Como lo que cuenta era
incluirlos en el proyecto (y no editarlos), podemos cerrar las ventanas de edicion correspondientes.
Ahora salvamos todo de nuevo (del modo usual File->Save all) y demos ahora un vistazo al archivo
.pro:

Observa como aparecen las clases agregadas en la seccion de SOURCES. Esto quiere decir
que estamos listos para compilar del modo habitual (mediante consola: qmake seguido de make).
Finalmente, podemos ejecutar nuestra singular aplicacin:

Captulo 12. Extendiendo la Funcionabilidad


Mediante Dilogos
En este capitulo veremos como cambiar el color del fondo del Canvas, empleando el
concepto de accion y un dialogo estndar de Qt.

Acciones
Una accion es un evento de usuario que puede ser generado a partir de diferentes
instancias. Por ejemplo, considera la accion estndar save, la accion puede ser generada por el
usuario de varias maneras: desde el menu file o desde el correspondiente icono en el toolbar.
Pues nosotros vamos a: 1. Agregar un menu nuevo y un nuevo item en el (automaticamente se va a
crear la accion correspondiente), 2. Asociar la accion a un nuevo slot de la forma, encargado de
ejecutar el dialogo estndar de edicion de colores de Qt (observa que esto es mas general que
asociar por ejemplo el item del menu al slot). Es mucho mas facil de lo que parece. Asi que primero
creemos el nuevo menu y el nuevo item, del modo indicado:

Editemos el nombre de la accion recien creada, por uno mas sugestivo:

Ahora vamos a crear un nuevo slot, en el menu Edit->Slots:

Demosle un nombre sugestivo a nuestro Slot:

Editemos el slot recien creado en el archivo myeditor.ui.h (que ya sabemos como


invocar: cliqueando dos veces seguidas la forma principal) con la siguiente linea de codigo:

Surge un nuevo detalle: debemos incluir en la forma el archivo de cabecera correspondiente


a la clase QColorDialog de la cual acabamos de solicitar su metodo estatico getColor() (que
ejecuta el anhelado dialogo) Para incluir el archivo cliqueemos con el boton derecho del raton la
myeditor.ui.h e invoquemos el item indicado:

Se ejecuta el siguiente dialogo donde podemos incluir el archivo:

El archivo tambien lo hubieramos podido incluir en el tab members que aparece a la


derecha del designer:

Para conectar la accion con el slot recien implementado, cliqueamos con el boton derecho
la accion y ejecutamos el item indicado:

El resto ya lo conocemos: primero aparece el dialogo de conexiones:

Luego finalmente, efectuamos la coneccion deseada:

El Resultado Final
Despues de salvar todo, volver a compilar y ejecutar, podemos ejecutar la aplicacin y el
nuevo dialogo:

El resultado de ejecutar el dialogo previo es:

Recomendacin: Tener siempre a mano la API de Qt.


Bien dice el adagio popular la experiencia hace maestros. Practicar es la mejor manera de
conocer.

Apendice Lista de clases disponibles

A
QAccel
The QAccel class handles keyboard accelerator and shortcut keys.
QAccessible
The QAccessible class provides enums and static functions relating to accessibility.
QAccessibleInterface
The QAccessibleInterface class defines an interface that exposes information about
accessible objects.
QAccessibleObject
The QAccessibleObject class implements parts of the QAccessibleInterface for QObjects.
QAction
The QAction class provides an abstract user interface action that can appear both in menus
and tool bars.
QActionGroup
The QActionGroup class groups actions together.
QApplication
The QApplication class manages the GUI application's control flow and main settings.
QAquaStyle
The QAquaStyle class implements the Aqua 'Look and Feel'.
QAsciiCache
The QAsciiCache class is a template class that provides a cache based on char* keys.
QAsciiCacheIterator
The QAsciiCacheIterator class provides an iterator for QAsciiCache collections.
QAsciiDict
The QAsciiDict class is a template class that provides a dictionary based on char* keys.
QAsciiDictIterator
The QAsciiDictIterator class provides an iterator for QAsciiDict collections.
QAssistantClient
The QAssistantClient class provides a means of using Qt Assistant as an application's help
tool.
QAxAggregated
The QAxAggregated class is an abstract base class for implementations of additional COM
interfaces.

This class is part of the Qt ActiveQt Extension.


QAxBase
The QAxBase class is an abstract class that provides an API to initalize and access a COM
object.
This class is part of the Qt ActiveQt Extension.
QAxBindable
The QAxBindable class provides an interface between the QWidget and the ActiveX client.
This class is part of the Qt ActiveQt Extension.
QAxFactory
The QAxFactory class defines a factory for the creation of ActiveX components.
This class is part of the Qt ActiveQt Extension.
QAxObject
The QAxObject class provides a QObject that wraps a COM object.
This class is part of the Qt ActiveQt Extension.
QAxWidget
The QAxWidget class is a QWidget that wraps an ActiveX control.
This class is part of the Qt ActiveQt Extension.
B
QBig5Codec
The QBig5Codec class provides conversion to and from the Big5 encoding.
QBig5hkscsCodec
The QBig5hkscsCodec class provides conversion to and from the Big5-HKSCS encoding.
QBitArray
The QBitArray class provides an array of bits.
QBitmap
The QBitmap class provides monochrome (1-bit depth) pixmaps.
QBitVal
The QBitVal class is an internal class, used with QBitArray.
QBoxLayout
The QBoxLayout class lines up child widgets horizontally or vertically.
QBrush
The QBrush class defines the fill pattern of shapes drawn by a QPainter.
QBuffer

The QBuffer class is an I/O device that operates on a QByteArray.


QButton
The QButton class is the abstract base class of button widgets, providing functionality
common to buttons.
QButtonGroup
The QButtonGroup widget organizes QButton widgets in a group.
QByteArray
The QByteArray class provides an array of bytes.
C
QCache
The QCache class is a template class that provides a cache based on QString keys.
QCacheIterator
The QCacheIterator class provides an iterator for QCache collections.
QCanvas
The QCanvas class provides a 2D area that can contain QCanvasItem objects.
QCanvasEllipse
The QCanvasEllipse class provides an ellipse or ellipse segment on a QCanvas.
QCanvasItem
The QCanvasItem class provides an abstract graphic object on a QCanvas.
QCanvasItemList
The QCanvasItemList class is a list of QCanvasItems.
QCanvasLine
The QCanvasLine class provides a line on a QCanvas.
QCanvasPixmap
The QCanvasPixmap class provides pixmaps for QCanvasSprites.
QCanvasPixmapArray
The QCanvasPixmapArray class provides an array of QCanvasPixmaps.
QCanvasPolygon
The QCanvasPolygon class provides a polygon on a QCanvas.
QCanvasPolygonalItem
The QCanvasPolygonalItem class provides a polygonal canvas item on a QCanvas.

QCanvasRectangle
The QCanvasRectangle class provides a rectangle on a QCanvas.
QCanvasSpline
The QCanvasSpline class provides multi-bezier splines on a QCanvas.
QCanvasSprite
The QCanvasSprite class provides an animated canvas item on a QCanvas.
QCanvasText
The QCanvasText class provides a text object on a QCanvas.
QCanvasView
The QCanvasView class provides an on-screen view of a QCanvas.
QCDEStyle
The QCDEStyle class provides a CDE look and feel.
QChar
The QChar class provides a lightweight Unicode character.
QCharRef
The QCharRef class is a helper class for QString.
QCheckBox
The QCheckBox widget provides a checkbox with a text label.
QCheckListItem
The QCheckListItem class provides checkable list view items.
QCheckTableItem
The QCheckTableItem class provides checkboxes in QTables.
QChildEvent
The QChildEvent class contains event parameters for child object events.
QClipboard
The QClipboard class provides access to the window system clipboard.
QCloseEvent
The QCloseEvent class contains parameters that describe a close event.
QColor
The QColor class provides colors based on RGB or HSV values.
QColorDialog
The QColorDialog class provides a dialog widget for specifying colors.

QColorDrag
The QColorDrag class provides a drag and drop object for transferring colors.
QColorGroup
The QColorGroup class contains a group of widget colors.
QComboBox
The QComboBox widget is a combined button and popup list.
QComboTableItem Class Referente
The QComboTableItem class provides a means of using comboboxes in QTables.
QCommonStyle
The QCommonStyle class encapsulates the common Look and Feel of a GUI.
QConstString
The QConstString class provides string objects using constant Unicode data.
QContextMenuEvent
The QContextMenuEvent class contains parameters that describe a context menu event.
QCopChannel
The QCopChannel class provides communication capabilities between several clients.
QCString
The QCString class provides an abstraction of the classic C zero-terminated char array
(char *).
QCursor
The QCursor class provides a mouse cursor with an arbitrary shape.
QCustomEvent
The QCustomEvent class provides support for custom events.
QCustomMenuItem
The QCustomMenuItem class is an abstract base class for custom menu items in popup
menus.
D
QDataBrowser
The QDataBrowser class provides data manipulation and navigation for data entry forms.
QDataStream
The QDataStream class provides serialization of binary data to a QIODevice.

QDataTable
The QDataTable class provides a flexible SQL table widget that supports browsing and
editing.
QDataView
The QDataView class provides read-only SQL forms.
QDate
The QDate class provides date functions.
QDateEdit
The QDateEdit class provides a date editor.
QDateTime
The QDateTime class provides date and time functions.
QDateTimeEdit
The QDateTimeEdit class combines a QDateEdit and QTimeEdit widget into a single
widget for editing datetimes.
QDeepCopy
The QDeepCopy class is a template class which ensures that implicitly shared and
explicitly shared classes reference unique data.
QDesktopWidget
The QDesktopWidget class provides access to screen information on multi-head systems.
QDial
The QDial class provides a rounded range control (like a speedometer or potentiometer).
QDialog
The QDialog class is the base class of dialog windows.
QDict
The QDict class is a template class that provides a dictionary based on QString keys.
QDictIterator
The QDictIterator class provides an iterator for QDict collections.
QDir
The QDir class provides access to directory structures and their contents in a platformindependent way.
QDirectPainter
The QDirectPainter class provides direct access to the video hardware.

QDns
The QDns class provides asynchronous DNS lookups.
QDockArea
The QDockArea class manages and lays out QDockWindows.
QDockWindow
The QDockWindow class provides a widget which can be docked inside a QDockArea or
floated as a top level window on the desktop.
QDomAttr
The QDomAttr class represents one attribute of a QDomElement.
QDomCDATASection
The QDomCDATASection class represents an XML CDATA section.
QDomCharacterData
The QDomCharacterData class represents a generic string in the DOM.
QDomComment
The QDomComment class represents an XML comment.
QDomDocument
The QDomDocument class represents an XML document.
QDomDocumentFragment
The QDomDocumentFragment class is a tree of QDomNodes which is not usually a
complete QDomDocument.
QDomDocumentType
The QDomDocumentType class is the representation of the DTD in the document tree.
QDomElement
The QDomElement class represents one element in the DOM tree.
QDomEntity
The QDomEntity class represents an XML entity.
QDomEntityReference
The QDomEntityReference class represents an XML entity reference.
QDomImplementation
The QDomImplementation class provides information about the features of the DOM
implementation.

QDomNamedNodeMap
The QDomNamedNodeMap class contains a collection of nodes that can be accessed by
name.
QDomNode
The QDomNode class is the base class for all the nodes in a DOM tree.
QDomNodeList
The QDomNodeList class is a list of QDomNode objects.
QDomNotation
The QDomNotation class represents an XML notation.
QDomProcessingInstruction
The QDomProcessingInstruction class represents an XML processing instruction.
QDomText
The QDomText class represents text data in the parsed XML document.
QDoubleValidator
The QDoubleValidator class provides range checking of floating-point numbers.
QDragEnterEvent
The QDragEnterEvent class provides an event which is sent to the widget when a drag and
drop first drags onto the widget.
QDragLeaveEvent
The QDragLeaveEvent class provides an event which is sent to the widget when a drag and
drop leaves the widget.
QDragMoveEvent
The QDragMoveEvent class provides an event which is sent while a drag and drop is in
progress.
QDragObject
The QDragObject class encapsulates MIME-based data transfer.
QDropEvent
The QDropEvent class provides an event which is sent when a drag and drop is completed.
E
QEditorFactory
The QEditorFactory class is used to create editor widgets for QVariant data types.
QErrorMessage
The QErrorMessage class provides an error message display dialog.

QEucJpCodec
The QEucJpCodec class provides conversion to and from EUC-JP character sets.
QEucKrCodec
The QEucKrCodec class provides conversion to and from EUC-KR character sets.
QEvent
The QEvent class is the base class of all event classes. Event objects contain event
parameters.
QEventLoop
The QEventLoop class manages the event queue.
F
QFile
The QFile class is an I/O device that operates on files.
QFileDialog
The QFileDialog class provides dialogs that allow users to select files or directories.
QFileIconProvider
The QFileIconProvider class provides icons for QFileDialog to use.
QFileInfo
The QFileInfo class provides system-independent file information.
QFilePreview
The QFilePreview class provides file previewing in QFileDialog.
QFocusData
The QFocusData class maintains the list of widgets in the focus chain.
QFocusEvent
The QFocusEvent class contains event parameters for widget focus events.
QFont
The QFont class specifies a font used for drawing text.
QFontDatabase
The QFontDatabase class provides information about the fonts available in the underlying
window system.
QFontDialog
The QFontDialog class provides a dialog widget for selecting a font.

QFontInfo
The QFontInfo class provides general information about fonts.
QFontManager
The QFontManager class implements font management in Qt/Embedded.
QFontMetrics
The QFontMetrics class provides font metrics information.
QFrame
The QFrame class is the base class of widgets that can have a frame.
QFtp
The QFtp class provides an implementation of the FTP protocol.
G
QGb18030Codec
The QGb18030Codec class provides conversion to and from the Chinese
GB18030/GBK/GB2312 encoding.
QGb2312Codec
The QGb2312Codec class provides conversion to and from the Chinese GB2312 encoding.
QGbkCodec
The QGbkCodec class provides conversion to and from the Chinese GBK encoding.
QGfxDriverFactory
The QGfxDriverFactory class creates QScreen objects for Qt/Embedded.
QGfxDriverPlugin
The QGfxDriverPlugin class provides an abstract base for Qt/Embedded graphics driver
plugins.
QGL
The QGL class is a namespace for miscellaneous identifiers in the Qt OpenGL module.
QGLayoutIterator
The QGLayoutIterator class is an abstract base class of internal layout iterators.
QGLColormap
The QGLColormap class is used for installing custom colormaps into QGLWidgets.
QGLColormap
The QGLColormap class is used for installing custom colormaps into QGLWidgets.

QGLFormat
The QGLFormat class specifies the display format of an OpenGL rendering context.
QGLWidget
The QGLWidget class is a widget for rendering OpenGL graphics.
QGrid
The QGrid widget provides simple geometry management of its children.
QGridLayout
The QGridLayout class lays out widgets in a grid.
QGridView
The QGridView class provides an abstract base for fixed-size grids.
QGroupBox
The QGroupBox widget provides a group box frame with a title.
QGuardedPtr
The QGuardedPtr class is a template class that provides guarded pointers to QObjects.
H
QHBox
The QHBox widget provides horizontal geometry management for its child widgets.
QHBoxLayout
The QHBoxLayout class lines up widgets horizontally.
QHButtonGroup
The QHButtonGroup widget organizes QButton widgets in a group with one horizontal
row.
QHeader
The QHeader class provides a header row or column, e.g. for tables and listviews.
QHebrewCodec
The QHebrewCodec class provides conversion to and from visually ordered Hebrew.
QHGroupBox
The QHGroupBox widget organizes widgets in a group with one horizontal row.
QHideEvent
The QHideEvent class provides an event which is sent after a widget is hidden.
QHostAddress
The QHostAddress class provides an IP address.

QHttp
The QHttp class provides an implementation of the HTTP protocol.
QHttpHeader
The QHttpHeader class contains header information for HTTP.
QHttpRequestHeader
The QHttpRequestHeader class contains request header information for HTTP.
QHttpResponseHeader
The QHttpResponseHeader class contains response header information for HTTP.
I
QIconDrag
The QIconDrag class supports drag and drop operations within a QIconView.
QIconDragItem
The QIconDragItem class encapsulates a drag item.
QIconFactory
The QIconFactory class is used to create pixmaps for a QIconSet.
QIconSet
The QIconSet class provides a set of icons with different styles and sizes.
QIconView
The QIconView class provides an area with movable labelled icons.
QIconViewItem
The QIconViewItem class provides a single item in a QIconView.
QImage
The QImage class provides a hardware-independent pixmap representation with direct
access to the pixel data.
QImageConsumer
The QImageConsumer class is an abstraction used by QImageDecoder.
QImageDecoder
The QImageDecoder class is an incremental image decoder for all supported image
formats.
QImageDrag
The QImageDrag class provides a drag and drop object for transferring images.

QImageFormat
The QImageFormat class is an incremental image decoder for a specific image format.
QImageFormatPlugin
The QImageFormatPlugin class provides an abstract base for custom image format plugins.
QImageFormatType
The QImageFormatType class is a factory that makes QImageFormat objects.
QImageIO
The QImageIO class contains parameters for loading and saving images.
QIMEvent
The QIMEvent class provides parameters for input method events.
QInputDialog
The QInputDialog class provides a simple convenience dialog to get a single value from the
user.
QIntCache
The QIntCache class is a template class that provides a cache based on long keys.
QIntCacheIterator
The QIntCacheIterator class provides an iterator for QIntCache collections.
QIntDict
The QIntDict class is a template class that provides a dictionary based on long keys.
QIntDictIterator
The QIntDictIterator class provides an iterator for QIntDict collections.
QIntValidator
The QIntValidator class provides a validator which ensures that a string contains a valid
integer within a specified range.
QIODevice
The QIODevice class is the base class of I/O devices.
J
QJisCodec
The QJisCodec class provides conversion to and from JIS character sets.
K
QKbdDriverFactory
The QKbdDriverFactory class creates QWSKeyboardHandler objects for Qt/Embedded.

QKbdDriverPlugin
The QKbdDriverPlugin class provides an abstract base for Qt/Embedded keyboard driver
plugins.
QKeyEvent
The QKeyEvent class contains describes a key event.
QKeySequence
The QKeySequence class encapsulates a key sequence as used by accelerators.
L
QLabel
The QLabel widget provides a text or image display.
QLayout
The QLayout class is the base class of geometry managers.
QLayoutItem
The QLayoutItem class provides an abstract item that a QLayout manipulates.
QLayoutIterator
The QLayoutIterator class provides iterators over QLayoutItem.
QLCDNumber
The QLCDNumber widget displays a number with LCD-like digits.
QLibrary
The QLibrary class provides a wrapper for handling shared libraries.
QLineEdit
The QLineEdit widget is a one-line text editor.
QLineEdit
The QLineEdit widget is a one-line text editor.
QListBoxItem
The QListBoxItem class is the base class of all list box items.
QListBoxPixmap
The QListBoxPixmap class provides list box items with a pixmap and optional text.
QListBoxText
The QListBoxText class provides list box items that display text.
QListView

The QListView class implements a list/tree view.


QListView
The QListView class implements a list/tree view.
QListViewItem
The QListViewItem class implements a list view item.
QListViewItemIterator
The QListViewItemIterator class provides an iterator for collections of QListViewItems.
QLocalFs
The QLocalFs class is an implementation of a QNetworkProtocol that works on the local
file system.
M
QMacStyle
The QMacStyle class implements an Appearance Manager style.
QMainWindow
The QMainWindow class provides a main application window, with a menu bar, dock
windows (e.g. for toolbars), and a status bar.
QMap
The QMap class is a value-based template class that provides a dictionary.
QMapConstIterator
The QMapConstIterator class provides an iterator for QMap.
QMapIterator
The QMapIterator class provides an iterator for QMap.
QMemArray
The QMemArray class is a template class that provides arrays of simple types.
QMenuBar
The QMenuBar class provides a horizontal menu bar.
QMenuData
The QMenuData class is a base class for QMenuBar and QPopupMenu.
QMessageBox
The QMessageBox class provides a modal dialog with a short message, an icon, and some
buttons.
QMetaObject

The QMetaObject class contains meta information about Qt objects.


QMetaProperty
The QMetaProperty class stores meta data about a property.
QMimeSource
The QMimeSource class is an abstraction of objects which provide formatted data of a
certain MIME type.
QMimeSourceFactory
The QMimeSourceFactory class is an extensible provider of mime-typed data.
QMotif
The QMotif class provides the basis of the Motif Extension.
QMotifDialog
The QMotifDialog class provides the QDialog API for Motif dialogs.
QMotifPlusStyle
The QMotifPlusStyle class provides a more sophisticated Motif-ish look and feel.
QMotifStyle
The QMotifStyle class provides Motif look and feel.
QMotifWidget
The QMotifWidget class provides the QWidget API for Xt/Motif widgets.
QMouseDriverFactory
The QMouseDriverFactory class creates QWSMouseHandler objects for Qt/Embedded.
QMouseDriverPlugin
The QMouseDriverPlugin class provides an abstract base for Qt/Embedded mouse driver
plugins.
QMouseEvent
The QMouseEvent class contains parameters that describe a mouse event.
QMoveEvent
The QMoveEvent class contains event parameters for move events.
QMovie
The QMovie class provides incremental loading of animations or images, signalling as it
progresses.
QMutex
The QMutex class provides access serialization between threads.

QMutexLocker
The QMutexLocker class simplifies locking and unlocking QMutexes.
N
QNetworkOperation
The QNetworkOperation class provides common operations for network protocols.
QNetworkProtocol
The QNetworkProtocol class provides a common API for network protocols.
QNPInstance
The QNPInstance class provides a QObject that is a Web-browser plugin.
QNPlugin
The QNPlugin class provides the plugin central factory.
QNPStream
The QNPStream class provides a stream of data provided to a QNPInstance by the browser.
QNPWidget
The QNPWidget class provides a QWidget that is a Web-browser plugin window.
O
QObject
The QObject class is the base class of all Qt objects.
QObjectCleanupHandler
The QObjectCleanupHandler class watches the lifetime of multiple QObjects.
QObjectList
The QObjectList class is a QPtrList of QObjects.
P
QPaintDevice
The QPaintDevice class is the base class of objects that can be painted.
QPaintDeviceMetrics
The QPaintDeviceMetrics class provides information about a paint device.
QPainter
The QPainter class does low-level painting e.g. on widgets.
QPaintEvent
The QPaintEvent class contains event parameters for paint events.

QPair
The QPair class is a value-based template class that provides a pair of elements.
QPalette
The QPalette class contains color groups for each widget state.
QPen
The QPen class defines how a QPainter should draw lines and outlines of shapes.
QPicture
The QPicture class is a paint device that records and replays QPainter commands.
QPixmap
The QPixmap class is an off-screen, pixel-based paint device.
QPixmapCache
The QPixmapCache class provides an application-global cache for pixmaps.
QPlatinumStyle
The QPlatinumStyle class provides Mac/Platinum look and feel.
QPNGImagePacker
The QPNGImagePacker class creates well-compressed PNG animations.
QPoint
The QPoint class defines a point in the plane.
QPointArray
The QPointArray class provides an array of points.
QPopupMenu
The QPopupMenu class provides a popup menu widget.
QPrinter
The QPrinter class is a paint device that paints on a printer.
QProcess
The QProcess class is used to start external programs and to communicate with them.
QProgressBar
The QProgressBar widget provides a horizontal progress bar.
QProgressDialog
The QProgressDialog class provides feedback on the progress of a slow operation.
QPtrCollection

The QPtrCollection class is the base class of most pointer-based Qt collections.


QPtrDict
The QPtrDict class is a template class that provides a dictionary based on void* keys
QPtrDictIterator
The QPtrDictIterator class provides an iterator for QPtrDict collections.
QPtrList
The QPtrList class is a template class that provides a list.
QPtrListIterator
The QPtrListIterator class provides an iterator for QPtrList collections.
QPtrQueue
The QPtrQueue class is a template class that provides a queue.
QPtrStack
The QPtrStack class is a template class that provides a stack.
QPtrVector
The QPtrVector class is a template collection class that provides a vector (array).
QPushButton
The QPushButton widget provides a command button.
R
QRadioButton
The QRadioButton widget provides a radio button with a text or pixmap label.
QRangeControl
The QRangeControl class provides an integer value within a range.
QRect
The QRect class defines a rectangle in the plane.
QRegExp
The QRegExp class provides pattern matching using regular expressions.
QRegExpValidator
The QRegExpValidator class is used to check a string against a regular expression.
QRegion
The QRegion class specifies a clip region for a painter.
QResizeEvent

The QResizeEvent class contains event parameters for resize events.


S
QScreen
The QScreen class and its descendants manage the framebuffer and palette.
QScrollBar
The QScrollBar widget provides a vertical or horizontal scroll bar.
QScrollView
The QScrollView widget provides a scrolling area with on-demand scroll bars.
QSemaphore
The QSemaphore class provides a robust integer semaphore.
QServerSocket
The QServerSocket class provides a TCP-based server.
QSessionManager
The QSessionManager class provides access to the session manager.
QSettings
The QSettings class provides persistent platform-independent application settings.
QSGIStyle
The QSGIStyle class provides SGI/Irix look and feel.
QShowEvent
The QShowEvent class provides an event which is sent when a widget is shown.
QSignal
The QSignal class can be used to send signals for classes that don't inherit QObject.
QSignalMapper
The QSignalMapper class bundles signals from identifiable senders.
QSimpleRichText
The QSimpleRichText class provides a small displayable piece of rich text.
QSize
The QSize class defines the size of a two-dimensional object.
QSizeGrip
The QSizeGrip class provides a corner-grip for resizing a top-level window.
QSizePolicy

The QSizePolicy class is a layout attribute describing horizontal and vertical resizing
policy.
QSjisCodec
The QSjisCodec class provides conversion to and from Shift-JIS.
QSlider
The QSlider widget provides a vertical or horizontal slider.
QSocket
The QSocket class provides a buffered TCP connection.
QSocketDevice
The QSocketDevice class provides a platform-independent low-level socket API.
QSocketNotifier
The QSocketNotifier class provides support for socket callbacks.
QSound
The QSound class provides access to the platform audio facilities.
QSpacerItem
The QSpacerItem class provides blank space in a layout.
QSpinBox
The QSpinBox class provides a spin box widget (spin button).
QSplitter
The QSplitter class implements a splitter widget.
QSql
The QSql class is a namespace for Qt SQL identifiers that need to be global-like.
QSqlCursor
The QSqlCursor class provides browsing and editing of SQL tables and views.
QSqlDatabase
The QSqlDatabase class is used to create SQL database connections and provide
transaction handling.
QSqlDriver
The QSqlDriver class is an abstract base class for accessing SQL databases.
QSqlDriverPlugin
The QSqlDriverPlugin class provides an abstract base for custom QSqlDriver plugins.
QSqlEditorFactory

The QSqlEditorFactory class is used to create the editors used by QDataTable and
QSqlForm.
QSqlError
The QSqlError class provides SQL database error information.
QSqlField
The QSqlField class manipulates the fields in SQL database tables and views.
QSqlFieldInfo
The QSqlFieldInfo class stores meta data associated with a SQL field.
QSqlForm
The QSqlForm class creates and manages data entry forms tied to SQL databases.
QSqlIndex
The QSqlIndex class provides functions to manipulate and describe QSqlCursor and
QSqlDatabase indexes.
QSqlPropertyMap
The QSqlPropertyMap class is used to map widgets to SQL fields.
QSqlQuery
The QSqlQuery class provides a means of executing and manipulating SQL statements.
QSqlRecord
The QSqlRecord class encapsulates a database record, i.e. a set of database fields.
QSqlRecordInfo
The QSqlRecordInfo class encapsulates a set of database field meta data.
QSqlResult
The QSqlResult class provides an abstract interface for accessing data from SQL databases.
QStatusBar
The QStatusBar class provides a horizontal bar suitable for presenting status information.
QStoredDrag
The QStoredDrag class provides a simple stored-value drag object for arbitrary MIME data.
QStrIList
The QStrIList class provides a doubly-linked list of char* with case-insensitive comparison.
QString
The QString class provides an abstraction of Unicode text and the classic C '\0'-terminated
char array.

QStringList
The QStringList class provides a list of strings.
QStrList
The QStrList class provides a doubly-linked list of char*.
QStrListIterator
The QStrListIterator class is an iterator for the QStrList and QStrIList classes.
QStyle
The QStyle class specifies the look and feel of a GUI.
QStyleFactory
The QStyleFactory class creates QStyle objects.
QStyleOption
The QStyleOption class specifies optional parameters for QStyle functions.
QStylePlugin
The QStylePlugin class provides an abstract base for custom QStyle plugins.
QStyleSheet
The QStyleSheet class is a collection of styles for rich text rendering and a generator of
tags.
QStyleSheetItem
The QStyleSheetItem class provides an encapsulation of a set of text styles.
QSyntaxHighlighter
The QSyntaxHighlighter class is a base class for implementing QTextEdit syntax
highlighters.
T
Qt
The Qt class is a namespace for miscellaneous identifiers that need to be global-like.
QTab
The QTab class provides the structures in a QTabBar.
QTabBar
The QTabBar class provides a tab bar, e.g. for use in tabbed dialogs.
QTabDialog
The QTabDialog class provides a stack of tabbed widgets.
QTable

The QTable class provides a flexible editable table widget.


QTableItem
The QTableItem class provides the cell content for QTable cells.
QTableSelection
The QTableSelection class provides access to a selected area in a QTable.
QTabletEvent
The QTabletEvent class contains parameters that describe a Tablet event.
QTabWidget
The QTabWidget class provides a stack of tabbed widgets.
QTextBrowser
The QTextBrowser class provides a rich text browser with hypertext navigation.
QTextCodec
The QTextCodec class provides conversion between text encodings.
QTextCodecPlugin
The QTextCodecPlugin class provides an abstract base for custom QTextCodec plugins.
QTextDecoder
The QTextDecoder class provides a state-based decoder.
QTextDrag
The QTextDrag class is a drag and drop object for transferring plain and Unicode text.
QTextEdit
The QTextEdit widget provides a powerful single-page rich text editor.
QTextEncoder
The QTextEncoder class provides a state-based encoder.
QTextIStream
The QTextIStream class is a convenience class for input streams.
QTextOStream
The QTextOStream class is a convenience class for output streams.
QTextStream
The QTextStream class provides basic functions for reading and writing text using a
QIODevice.
QThread
The QThread class provides platform-independent threads.

QTime
The QTime class provides clock time functions.
QTimeEdit
The QTimeEdit class provides a time editor.
QTimer
The QTimer class provides timer signals and single-shot timers.
QTimerEvent
The QTimerEvent class contains parameters that describe a timer event.
QToolBar
The QToolBar class provides a movable panel containing widgets such as tool buttons.
QToolButton
The QToolButton class provides a quick-access button to commands or options, usually
used inside a QToolBar.
QToolTip
The QToolTip class provides tool tips (balloon help) for any widget or rectangular part of a
widget.
QToolTipGroup
The QToolTipGroup class collects tool tips into related groups.
QTranslator
The QTranslator class provides internationalization support for text output.
QTranslatorMessage
The QTranslatorMessage class contains a translator message and its properties.
QTsciiCodec
The QTsciiCodec class provides conversion to and from the Tamil TSCII encoding.
U
QUriDrag
The QUriDrag class provides a drag object for a list of URI references.
QUrl
The QUrl class provides a URL parser and simplifies working with URLs.
QUrlInfo
The QUrlInfo class stores information about URLs.

QUrlOperator
The QUrlOperator class provides common operations on URLs.
V
QValidator
The QValidator class provides validation of input text.
QValueList
The QValueList class is a value-based template class that provides lists.
QValueListConstIterator
The QValueListConstIterator class provides a const iterator for QValueList.
QValueListIterator
The QValueListIterator class provides an iterator for QValueList.
QValueStack
The QValueStack class is a value-based template class that provides a stack.
QValueVector
The QValueVector class is a value-based template class that provides a dynamic array.
QVariant
The QVariant class acts like a union for the most common Qt data types.
QVBox
The QVBox widget provides vertical geometry management of its child widgets.
QVBoxLayout
The QVBoxLayout class lines up widgets vertically.
QVButtonGroup
The QVButtonGroup widget organizes QButton widgets in a vertical column.
QVGroupBox
The QVGroupBox widget organizes a group of widgets in a vertical column.
W
QWaitCondition
The QWaitCondition class allows waiting/waking for conditions between threads.
QWhatsThis
The QWhatsThis class provides a simple description of any widget, i.e. answering the
question "What's this?".

QWheelEvent
The QWheelEvent class contains parameters that describe a wheel event.
QWidget
The QWidget class is the base class of all user interface objects.
QWidgetFactory
The QWidgetFactory class provides for the dynamic creation of widgets from Qt
Designer .ui files.
QWidgetItem
The QWidgetItem class is a layout item that represents a widget.
QWidgetPlugin
The QWidgetPlugin class provides an abstract base for custom QWidget plugins.
QWidgetStack
The QWidgetStack class provides a stack of widgets of which only the top widget is uservisible.
QWindowsMime
The QWindowsMime class maps open-standard MIME to Window Clipboard formats.
QWindowsStyle
The QWindowsStyle class provides a Microsoft Windows-like look and feel.
QWizard
The QWizard class provides a framework for wizard dialogs.
QWMatrix
The QWMatrix class specifies 2D transformations of a coordinate system.
QWorkspace
The QWorkspace widget provides a workspace window that can contain decorated
windows, e.g. for MDI.
QWSDecoration
The QWSDecoration class allows the appearance of the Qt/Embedded Window Manager to
be customized.
QWSInputMethod
The QWSInputMethod class provides international input methods for Qt/Embedded.
QWSKeyboardHandler
The QWSKeyboardHandler class implements the keyboard driver for Qt/Embedded.
QWSMouseHandler

The QWSMouseHandler class is a mouse driver for Qt/Embedded.


QWSServer
The QWSServer class provides server-specific functionality in Qt/Embedded.
QWSWindow
The QWSWindow class provides server-specific functionality in Qt/Embedded.
X
QXmlAttributes
The QXmlAttributes class provides XML attributes.
QXmlContentHandler
The QXmlContentHandler class provides an interface to report the logical content of XML
data.
QXmlDeclHandler
The QXmlDeclHandler class provides an interface to report declaration content of XML
data.
QXmlDefaultHandler
The QXmlDefaultHandler class provides a default implementation of all XML handler
classes.
QXmlDTDHandler
The QXmlDTDHandler class provides an interface to report DTD content of XML data.
QXmlEntityResolver
The QXmlEntityResolver class provides an interface to resolve external entities contained
in XML data.
QXmlErrorHandler
The QXmlErrorHandler class provides an interface to report errors in XML data.
QXmlInputSource
The QXmlInputSource class provides the input data for the QXmlReader subclasses.
QXmlLexicalHandler
The QXmlLexicalHandler class provides an interface to report the lexical content of XML
data.
QXmlLocator
The QXmlLocator class provides the XML handler classes with information about the
parsing position within a file.
QXmlNamespaceSupport

The QXmlNamespaceSupport class is a helper class for XML readers which want to
include namespace support.
QXmlParseException
The QXmlParseException class is used to report errors with the QXmlErrorHandler
interface.
QXmlReader
The QXmlReader class provides an interface for XML readers (i.e. parsers).
QXmlSimpleReader
The QXmlSimpleReader class provides an implementation of a simple XML reader
(parser).
QXtWidget
The QXtWidget class allows mixing of Xt/Motif and Qt widgets.

También podría gustarte