p1

Siguiente Anterior Tabla de Contenidos

El ejemplo que mostramos con p1 es una de las aplicaciones Qt mas simples, todo el código esta en main.cpp:


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

int main( int argc, char **argv )
{
    QApplication a( argc, argv );

    QPushButton *hello=new QPushButton( "Hello world!", 0 );
    hello->resize( 100, 30 );
 
    QObject::connect( hello, SIGNAL(clicked()), &a, SLOT(quit()) );
 
    a.setMainWidget( hello );
    hello->show();
 
    return a.exec();
} 

main.cpp

Veamos que hace cada una de las lineas.

    QApplication a( argc, argv );

Este código crea un objeto QApplication que controlará el flujo de ejecución de la aplicación, así como la mayoría de las opciones del sistema y la aplicación (para conseguir un entorno mas uniforme), etc.

    QPushButton *hello=new QPushButton( "Hello world!", 0 );
    hello->resize( 100, 30 );

Con este código creamos un objeto QPushButton. Este es un botón pulsable, en contraposición con botones que tienen estados, como los QRadioButtons o los QCheckBox)

El botón contienen el texto "Hello world!, y no tiene ventana padre (0 se pasa como un puntero NULL ). Usando un widget sin padre hacemos que el gestor de ventanas maneje este widget como otra ventana del escritorio. Usualmente las aplicaciones tienen una sola ventana sin padre, que es el "main widget", veremos mas sobre esto posteriormente.

Ademas redimensionamos el widget para que tenga 100 pixeles de alto y 30 de ancho.

    QObject::connect( hello, SIGNAL(clicked()), &a, SLOT(quit()) );

Para explicar este código deberiamos de tener un poco de conocimiento sobre el mecanismo de señales y slots (signals/slots). Intentaré explicarlo un poco aquí, aunque si queda alguna duda se puede leer el magnífico capítulo que sobre este tema trae la documentacion de Qt, llamado "Introduction to Signals and Slots".

Todas las clases que heredan de QObject ( directa o indirectamente heredando de una subclase de QObject ) pueden contener señales y/o slots. Un objeto emite una señal siempre que cambia su estado de alguna forma. Por ejemplo, cuando se pulsa sobre un QPushButton se emite una señal clicked(), o cuando se hace scroll con una QScrollBar se emite una señal de valueChanged(). Por otro lado, un slot es un método normal en un objeto que puede recibir señales.

Un objeto no tiene porque saber si un slot esta conectada a múltiples señales, e incluso mas, se puede conectar una señal a múltiples slots o múltiples señales a un solo slot, esto permite crear componentes reusables en el proceso de desarrollo.

El código que se necesita para llamar a los slots es generado por moc (meta object compiler) junto a otro código que inicializa la información de los metaobjetos. Veremos posteriormente como usar moc, pero como por ahora nos centramos en el ejemplo 1, y no hace falta, no usaremos moc todavia.

Finalmente, el código de arriba se usa para conectar la señal de "clicked()" del objeto hello al slot "quit()" de la aplicación (a) que cierra la aplicación.

    a.setMainWidget( hello );
    hello->show();

Este código hace que hello sea el widget principal (main) de la aplicación (el que cerrara la aplicación cuando sea destruido), y lo muestra en la pantalla.

    return a.exec();

Finalmente, el bucle de eventos es ejecutado y dejamos que el usuario tome el control de la aplicación. Siempre que el usuario pulse en el botón de "hello", el bucle de eventos llamará al slot quit() de la aplicación y esta función devolverá el código de retorno con el que salimos de la aplicación.

¿ No es fácil ? :-)

Siguiente Anterior Tabla de Contenidos


© 1999-2002 Antonio Larrosa
Traducido por Rafael Larrosa