Agregando los Widgets Personales |
Anterior | Siguiente |
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”.
Para cargar las descripciones del widget MyCanvasView accedamos el siguiente menu:
Aparece el siguiente dialogo (observe que este dialogo es el mismo que se emplea para crear las descripciones). Seleccionemos el fichero correspondiente y abramoslo:
Antes de proseguir, hechemos un vistazo a los Slots disponibles:
Y comparemos su contenido con el del fichero 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 zoomIn(); void zoomOut(); void mirror(); void moveL(); void moveR(); void moveU(); void 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; };
No esta mal, eh? Ahora a lo que vinimos, agreguemos el dichoso widget a la forma. Ahora si que lo podemos hacer de la misma forma que como lo haciamos con el contenedor y sus botones en el capitulo pasado. Piquemos primero MyCanvasView y luego en el sitio en la forma donde deseamos que quede:
El resultado:
Ahora hagamos un lay out in a grid a la forma (no al widget). La apariencia mejora bastante:
Ahora vamos a agregar la funcionalidad necesaria para completar nuestra aplicacion: cuando se piquen 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:
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):
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):
Completemos el dialogo que aparece del siguiente modo:
Nota: Es posible que los ficheros 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 hechemos ahora un vistazo al fichero .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 aplicacion:
Anterior | Inicio | Siguiente |
Agregando los Widgets Estandar | Subir | Extendiendo la Funcionabilidad Mediante Dialogos |