Está en la página 1de 9

INICIACION A QT4

Iniciacion en QT con C++ (tuto) en: 28 Diciembre 2008, 22:33

Hola a todos.. hace tiempo que no posteo aqui pero si leo de vez en cuando (cuando tengo tiempo).. la cosa es que yo vengo usando QT Toolkit y les quiero decir que el lenguaje utilizado es C++ (no C) y java (version QT para java), el framework es muy completo con la version 4.x de QT y es gratuito siempre y cuando el programa en el cual se utilizo alguna de las librerias QT sea open source (algo que veo muy logico y muy bueno para aprender), ahora si quieren programar un programa con codigo propietario deben comprar la licencia que.. digamos.. no es nada barata (alrededor de 10000 U$S).. pero se compre y queda.. me olvidaba de decirles que QT es un toolkit multiplataforma.. es decir que al mismo codigo lo pueden compilar tanto en linux, windows, maxos y freebsd.. eso es muy interesante ademas que el programa "adopta" el theme de tu SO (osea si compilas en windows el programa se vera como cualquiero otro programa hecho en windows.. aca les dejo una imagen de un programa que estoy haciendo compilado en windows y compilado en linux (archlinux mi preferida)..

http://foro.elhacker.net/programacion_general/iniciacion_en_qt_con_c_tutot239940.0.html#ixzz1SARtJeJS

Las aplicaciones mas conocidas hechas con QT son VLC Player (a mi parecer el mejor!) y el entorno KDE para linux (y windows) ahora les queria ensenar a dar los primeros pasos a aquel que le interese (o que ni siquiera sabia que existia) primeramente: si tienen windows deben bajarse el mingw32 y el qt toolkit (que tiene el qmake, qcc, rcc, etc) que son utilidades que utiliza el QT para leer archivos de proyecto .pro que tienen intrucciones especiales y luego el mingw lo compila (tambien pueden usar el visual studio para compilar los programas y asi reemplazar al mingw32, cosa que no les recomiendo). Todo el pack completo lo pueden descargar desde aqui (les dejos las 2 opciones y ya les comento de que se tratan): QT CON MINGW INCLUIDO (118 mb APROX) ftp://ftp.trolltech.com/qt/source/qt-win-opensource-4.4.3-mingw.exe QT CON MINGW Y QTCREATOR INCLUIDO (208 mb APROX) ftp://ftp.trolltech.com/qtcreator/qtcreator-0.9.1-beta-windows-setup.exe Estos dos son para C++ (no hago este tuto para JAVA).. El primero tiene todo lo necesario para compilar QT desde consola mientras que el segundo trae una IDE para programar con C++ utilizando las librerias QT. Ambos tambien tienen el QtDesigner (para crear UI's), QtAssistant (la espectacular documentacion de QT con todas sus classes perfectamente bien explicadas), ejemplos.. Yo les recomendaria como IDE el ECLIPSE for C++ (o EASY ECLIPSE si quieren evitar problemas o

tener un uso mas sencillo) o el que ya posee eclipse que descargue el plugin CDT.. luego de aca se descargan el plugin QT para eclipse C++: http://dist.trolltech.com/developer/download/qt-eclipse-integration-win32-1.4.3.exe luego de instalarlo van a WINDOW>PREFERENCES y van a tener una nueva opcion que dice QT van ahi y ponen ADD y buscan en donde instalaron QT las carpetas BIN e INCLUDE (normalmente ponen el bin y el include se agrega automaticamente).. Ahora en linux que es mas sencillito: yo uso archlinux asi que les dare los comandos especificos para este pero el paquete requerido es el qt-deb bueno no es dificil asi que el unico comando que deben ejecutar es: si usan YAOURT (el que no lo conoce que investigue, es especifico de archlinux, repito): Cdigo:

sudo yaourt -S qt
sino directamente con PACMAN Cdigo:

sudo pacman -S qt

son unos 17 MB aproximadamente.. luego descargan Eclipse for C++ o el plugin CDT si ya poseen eclipse y luego el QT plugin for eclipse del siguiente link: http://dist.trolltech.com/developer/download/qt-eclipse-integration-linux.x86-1.4.3.tar.gz LEAN EL README COMO INSTALARLO, pero en resumen deben extraer el archivo y copiarlos a las respectivas carpetas en donde se encuentra eclipse.. una vez hecho esto, abren Eclipse for C++ y van a WINDOW>PREFERENCES>QT y agregan las carpetas /usr/bin y /usr/include y ya lo tienen listo.. abran la perspectiva para QT y ya lo tienen 100% instalado. creen un workspace en cualquier lado (yo no lo uso a esta funcionalidad.. no es muyy util para mi) ahora vamos a lo serio.. en linux: creen una carpeta en donde quieren tener su proyecto y ponganle un nombre (el nombre de la carpeta es el nombre del proyecto por default). Entren a la carpeta recien creada y abran una terminal y escriban Cdigo:

qmake -project
este comando les generara un archivo .pro que es un archivo que tiene todos los headers y sources de su programa asi como tambien resource files y otros.. tambien pueden crear el proyecto desde eclipse pero los archivos seran guardados en el workspace y si tienen algun problema con el workspace (que suelen haber muchisimos) tendran que andar copiando y pegando y se vuelven locos.. en windows: en windows es similar.. creen una carpeta que tendra el nombre del proyecto. Luego vayan a INCIO>TODOS LOS PROGRAMAS>QT>consola qt (o algo asi.. la verdad no uso windows mucho y no recuerdo como se llama) esa consola solo agrega las variables a la consola normal de windows. Ahora hagan lo mismo que en linux.. vayan a la carpeta que crearon y escriban Cdigo:

qmake -project
ahora si! entren a eclipse y vayan a FILE>IMPORT y seleccionen QT PROJECT y apreten en OK, finalmente seleccionen el archivo .pro que esta en la carpeta que crearon.

una vez terminado de importarse el proyecto, click derecho sobre su proyecto que aparece a la izquierda y pongan NEW>HEADER FILE y ponganle de nombre "mainWindow.cpp" (sin comillas ) y apreten OK a lo que le pregunten. luego otro archivo NEW>SOURCE FILE y ponganle el nombre "mainWindow.h". finalmente un tercer archivo NEW>SOURCE FILE con nombre "main.cpp" Vamos a crear dos botones, uno que hara saltar un mensaje en pantalla y otro que cerrara el programa: ahora vamos a mainWindow.h y escriban: Cdigo:

#ifndef MAINWINDOW_H_ #define MAINWINDOW_H_ #include #include #include #include <QMainWindow> <QHBoxLayout> <QPushButton> <QMessageBox>

class QWidget; class interface : public QMainWindow { Q_OBJECT public: interface(); private slots: void mostrarMensaje(); private: void createInterface(); }; #endif /*MAINWINDOW_H_*/
explicamos un poco: Todas las librerias include que empiezan con Q pertenecen a QT no incluimos la clase QWidget sino que hacemos una "forwad declaration" con class QWidget ya que QMainWindow esta heredada de QWidget por lo tanto QMainWindow ya la incluye.. igualmente no daria error si usaramos #include <QWidget> Q_OBJECT es un macro, es decir antes de compilar, QMAKE (un programa perteneciente a QT) traduce estos macros en codigo C++. Este macro permite, entre otras cosas, agregar SLOTS y SIGNALS (una senal se conecta con un slot, en el caso mas simple). Si ninguna senal o ningun slot es creado en esta clase, Q_OBJECT no es necesario. declaramos el contructor interface(); private slots: lo que hace es definir a void mostrarMensaje(); como una funcion que a la vez es un slot (se puede usar connect, ya lo veran en el mainWindow.cpp, para conectar una senal a esta funcion). Tambien puede ser usada como una funcion normal. Ahora abran el archivo mainWindow.cpp y escriban Cdigo:

#include "mainWindow.h" interface::interface() { createInterface(); } void interface::createInterface()

{ QWidget *widgetCentral = new QWidget(); //segun Qt 4 Assistant //QHBoxLayout::QHBoxLayout (QWidget *parent), por lo tanto asignamos esta caja como hijo del widget central QHBoxLayout *cajaHorizontal = new QHBoxLayout(widgetCentral); QPushButton *boton1 = new QPushButton("MOSTRAR MENSAJE"); QPushButton *boton2 = new QPushButton("CERRAR"); connect(boton1, SIGNAL(clicked()), this, SLOT(mostrarMensaje())); connect(boton2, SIGNAL(clicked()), this, SLOT(close())); cajaHorizontal->addWidget(boton1); cajaHorizontal->addWidget(boton2); //funcion perteneciente a la clase QMainWindow (de la cual heredamos) setCentralWidget(widgetCentral); } void interface::mostrarMensaje() { QMessageBox::information(this, "Aplicacion de muestra", "Si queres saber mas mira Qt 4 assistant", QMessageBox::Ok); }
Explicacion (aparte de los comentarios): en el constructor llamamos al metodo createInterface (los nombre los pongo en ingles por costumbre). Ceamos un layout de tipo horizontal, es decir cada WIDGET (definimos como widget cada objeto que se muestra en pantalla, botones, cajas de texto, etc) se dispondra uno al lado del otro en forma horizontal (QVBoxLayout haria lo mismo pero en forma vertical), creo que el codigo es self-explaining. lo que yo quiero comentarles es acerca de una de las cosas mas importantes de QT: los SIGNAL and SLOTS y el metodo connect. A ver si lo pongo facil: cada objeto puede emitir senales las cuales se conectan a determinadas funciones llamadas SLOTS perteneciente a una determinada clase. Asi es como se comunican los objetos en QT, en vez de andar pasando parametros por callbacks en el cual un parametro se tiene que arrastrar de funcion en funcion y pasando punteros. A modo de ejemplo y en pseudocodigo: imaginen una lampara con su respectivo interruptor, la lampara y el interruptor son objetos. Entonces cuando el interruptor es presionado emitiria una senal por ejemplo llamada CLICKED() (la cual es la que emiten los QPushButtons al ser presionados) y queremos que al ser presionado la lampara se encienda entonces connectariamos esta SENAL a un metodo especial (llamado SLOT) perteneciente a la lampara por ejemplo llamado PRENDERLAMPARA(). Entonces se conectaria asi: connect(instancia_de_objeto_interruptor, SIGNAL(clicked()), instancia_de_objeto_lampara, SLOT(prenderLampara())); es decir: connect(objeto_que_emite_senal, SIGNAL(nombre_de_senal), objeto_que_tiene_el_metodo_slot, SLOT(nombre_de_metodo_slot)); una cosa importante: una senal no puede ser usada como metodo, sino solo emitida (en un futuro tuto les mostrare como) finalmente abran main.cpp y escriban Cdigo:

#include <QApplication> #include "mainWindow.h" int main(int argc, char *argv[]) {

//pasamos los argumentos a la libreria QApplication (que en este caso no hace nada..) QApplication app(argc, argv); //instanciamos la interface interface mainWin; //la mostramos mainWin.show(); //entramos al bucle de QApplication para que la interface responda a las acciones return app.exec(); }
este codigo se entiende ya de por si Ahora la fase de compilar: presionen con el boton derecho del mouse sobre la carpeta que contiene al proyecto en eclipse. Luego pongan MAKE TARGETS>BUILD y seleccionen DEBUG y apreten OK. Luego ejecuten el programa creado con el "play".. si no tienen ganas de usar eclipse para compilar y desean hacerlo desde la consola, escriban Cdigo:

qmake nombre_del_archivo_pro.pro
es decir que si dejaron el default, el .pro tendra el mismo nombre que su carpeta por lo tanto Cdigo:

qmake nombre_de_la_carpeta.pro
y en linux pongan luego Cdigo:

make
y en windows no recuerdo pero era algo asi como Cdigo:

mingw32-gcc nombre_del_archivo_pro.pro
Bueno espero que les haya gustado.. ya me canse de escribir.. si veo que hay interes en este post, seguire escribiendo asi aprendemos todos juntos un saludo a toda la comunidad la caca http://foro.elhacker.net/programacion_general/iniciacion_en_qt_con_c_tutot239940.0.html#ixzz1SARoRLh0

http://foro.elhacker.net/programacion_general/iniciacion_en_qt_con_c_tutot239940.0.html#ixzz1SARO0jCh