#
TEXTO
AUTOR
INDICE
1
Wireless
2
Wardriving is not a crime
3
Introduccion al XSS :: bug en [IMG] (BBcode)
4
Binario: técnicas criptográficas y esteganográficas
5
Instalando y Configurando Tincd
6
El Número de Oro
7
Como sacar adelante una página web personal
8
Libreria QT

 


Libreria Qt
1
Trolltech Qt.
1
¿Qué es Qt?
2
¿Como funciona Qt?


Libreria Qt

Trolltech Qt.(arriba)

¿Qué es Qt?
Pues Qt es una magnífica librería orientada a objetos (pensada inicialmente para C++ pero esta portada a otros lenguajes). La idea que rige este API es básicamente ser multiplataforma y “The way it should be”.
La primera es bastante lógica: con el mismo código (hay unas excepciones mínimas) puedes compilar el mismo programa para distintos sistemas y plataformas cosa que es muy importante a la hora de escoger donde basar algún proyecto nuestro. Ahora mismo Qt es portable a GNU/Linux, MacOS X, FreeBSD, algunos *nix, etc. Ah! Y Windows por si hay alguien que aun lo usa :).
La segunda es quizá más subjetiva pero creo que lo han conseguido bastante. La traducción al castellano de “The way it should be” es La forma como debería ser. Qt se ha ideado para tener códigos simples y fáciles de recordar e utilizar.
Resepeto a la licencia no lo trataré mucho pues creo que está muy tratado ya. Qt usa la famosa doble licencia la cual actúa de dos formas diferentes. En proyectos libres la licencia de la librería es GPL y dispones de todos los módulos. Si decides licenciar tu proyecto con una licencia propietaria, toca pagar (hay modalidades varias).

¿Como funciona Qt?
Pues Qt está organizado (de cara al desarrollador) por clases. Todas empiezan por una Q y están especificadas en un archivo con el nombre de la clase y .h (por ejemplo, la clase que guarda un punto se llama QPoint y para incluirla hay que poner #include <qpoint.h>). Todas las clases están ampliamente recargadas por lo que no habrá muchos problemas para usarlas. Además tenemos un par de utilidades llamadas Qt Assistant y Qt Dessigner que sirven como servidor de Documentación y el otro como editor de ventanucos. Es importante remarcar que Qt es una de las librerías con una documentación más extensa, cosa que agradece cualquier programador (o almenos eso creo :P)
En el sistema de ventanas, está organizado mediante widgets, que vendrían a ser los controles de Windows. Estos heredan (derivan) todos de la clase QWidget. Un widget podrá ser pues una ventana, un botón, un widget personalizado, etc.

Ejemplo 1: Una ventana con un botón simple.

#include <qapplication.h>
#include <qpushbutton.h>
int main(int argc, char **argv){ QApplication a(argc, argv);
QPushButton hola("Hola HispaByte!", 0); hola.resize(100, 30);
a.setMainWidget(&hola); hola.show(); return a.exec(); }

Paso a paso:

#include <qapplication.h>
#include <qpushbutton.h>

Son las inclusiones que necesitamos (la aplicación y los botones)

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

Usaremos el main convencional de C/C++ común (no como en WinAPI).

QApplication a(argc, argv);

Declaramos la Aplicación como a y le pasamos como parámetros los argumentos de main (o lo que queramos en su sitio), así podemos aprovecharnos de algunas opciones que nos proporciona Qt como sería la utilización de estilos para el repintado, entre otras.

QPushButton hola("Hello world!", “el único botón”);

Declaramos un botón que lo llamamos hola y le pasamos como parámetro el texto que tendrá el botón y el nombre (interno, sirve más que nada para debugging).

hola.resize(100, 30);

Le damos un tamaño al botón (x,y).

a.setMainWidget(&hola);

Asignamos hola como widget principal de la aplicación a.

hola.show();

Mostramos hola.

return a.exec(); }

Devolvemos a.exec(), gestionado por Qt.

Como este ejemplo no hace nada y un programa que no hace nada no sirve para nada (valga la redundancia) ampliaremos este programa para obtener, alguna respuesta de él. Para este propósito, en vez de usar un QPushButton como ventana, crearemos nuestra ventana y le pondremos lo que queramos. Para eso crearemos una clase hija de QWidget.

#include <qapplication.h>
#include <qmessagebox.h>
#include <qtextedit.h>
#include <qpushbutton.h>
class MainWin : public QWidget { Q_OBJECT public: MainWin(QWidget *parent = 0, const char *name = 0); QTextEdit *text; //Necesitamos una caja de texto QPushButton *boto; //y un botón ~MainWin(); };
MainWin::MainWin(QWidget *parent, const char *name) : QWidget(parent, name) { setMinimumSize( 250, 150 ); //Damos tamaño máximo y minimo setMaximumSize( 250, 150 ); text = new QTextEdit(this, "Text"); //declaramos text text->setText("Hola HispaByte!"); //Ponemos un texto en text text->setGeometry( 0, 30, 250, 100); //Le damos un tamaño boto = new QPushButton("Muestra",this); //declaramos boto boto->setGeometry( 75, 0, 100, 25); //Le damos un tamaño connect(boto, SIGNAL(released()),this, SLOT(set())); }
MainWin::~MainWin() { delete text; delete boto; }
void MainWin::set() { QMessageBox::warning(this, "Titulo", text->text(),"Ok", "Cancelar",0,0,1); //Mostramos un MessageBox con el texto de text }
int main( int argc, char **argv ) { QApplication app( argc, argv );
MainWin finestra(0,"Ventana Principal"); //declaramos finestra finestra.setGeometry( 100, 100, 200, 120 ); app.setMainWidget(&finestra); finestra.show(); return app.exec(); }

En este código he usado un main muy básico, que lo único que hace es mostrar la ventana principal del programa (la única). Para mostrarla, declaramos la función (“Ventana Principal” sólo es un nombre interno), le damos una posición inicial (tamaño también, aunque esto lo gestionaremos desde MainWin). A partir de aquí ya proseguimos como en el primer ejemplo: asignamos el widget que hemos creado a la aplicación y lo mostramos.
Como decía antes, hemos creado un widget que es el que forma la ventana. Esta abstracción se ha llevado a cabo mediante la clase que he llamado MainWin, y que es hija de QWidget. Si miramos entre los componentes de esta clase, vemos los widget que hemos usado (la caja de texto y el botón simple), ambos como punteros, los podríamos usar como variable normal, es otra opción. Los que hayáis programado en C++ más veces me diréis: WTF! qué es eso de public slot? Pues sirve para decirle a Qt que las funciones de después son slots, más adelante veremos como funcionan. Los signal se definen de mismo modo. Cabe remarcar que no es que se necesite otro compilador sino que es Qt quien lo gestiona mediante definiciones.
En el constructor de MainWin he usado setMinimumSize y setMaximumSize para decirle que la ventana sea de tamaño fijo (las coordenadas son fijas, no relativas asi que si cambiasemos el tamaño de la ventana, nos aparecería el espacio vacío). Después he dado memoria a boto i text y les he asignado un texto (en el botón lo he puesto directamente). Finalmente nos encontramos con:

connect(boto, SIGNAL(released()),this, SLOT(set()));

Esta es una de las cosas más importantes de Qt, sirve para comunicarse con otro Widget simulando un evento, en este caso, lo que hace es decirle a boto que cuando envíe un señal released (cuando paras de pulsar el botón)
En set lo único que he hecho ha sido mostrar el texto que hay en la caja de texto en un MessageBox. Es interesante para esta clase consultar la documentación oficial de Qt (en realidad para todas las clases, siempre se aprende algo ;). En el caso de warning, nos muestra un icono de atención y 2 botones. Es importante fijarse también que en los métodos de extracción de valores (leer el texto por ejemplo) se usa una función toda en minúscula como text() y para asignar un valor se usa setText(<valor>).
En la función de destrucción he descargado text y boto de la memoria solamente.

De todos modos Qt va mucho más allá, nos ofrece soporte para Sockets, OpenGL, XML, SQL entre muchas más cosas. Además el desarrollo de KDE se ha basado enteramente sobre este y tenemos muchas herramientas que nos seran de utilidad, aunque estas seran dificilmente portables. He adjuntado el proyecto de KDevelop 3.1 junto con el binario por si queréis probarlo. (arriba)

by Boooring
Aleix Pol


[ ATENCIÓN: Toda la información y el software que pudieras encontrar aquí, únicamente está permitido utilizarlos con fines formativos, no haciéndonos responsables del mal uso, que por desconocimiento o malicia, se pudiera hacer. Tampoco nos responsabilizamos de los daños ocasionados por una utilización inapropiada o con fines delictivos. Con esta ezine no se pretende fomentar, ni la violencia, ni una conducta ilegal, sino dar a conocer el fascinante mundo de la informática, la electrónica y las telecomunicaciones. ]