#include <QtCore>#include <QtWidgets>#include <QObject>#include <QCoreApplication>/** @brief Representa una figura cuadrada **/classCuadrado : public QGraphicsWidget
{
public:/** Constructor * @param colorDeseado Color que el usuario desea * Puede ser "azul" o "rojo". En caso contrario * la pieza se dibujará gris **/
Cuadrado(QString colorDeseado):QGraphicsWidget(){
// Asigna el color segun el color deseado
color= colorDeseado=="rojo"? Qt::red : (colorDeseado=="azul"?
Qt::blue : Qt::gray);
}
~Cuadrado(){}
/** Pinta la pieza segun el color **/void paint(QPainter *painter, const QStyleOptionGraphicsItem *,
QWidget *){
painter->fillRect(rect(), color);
}
void mover(qreal xEnd,qreal yEnd){
// Aqui crea la animación
QPropertyAnimation *animation = new QPropertyAnimation(this,
"pos");
animation->setDuration(8000); // 8 Segundos
animation->setStartValue(QPointF(this->x(), this->y()));
animation->setEndValue(QPointF(xEnd, yEnd));
animation->start(QAbstractAnimation::DeleteWhenStopped);
}
private:/** Color del cuadrado **/
Qt::GlobalColor color;
};
intmain(int argc, char **argv)
{
QApplication app(argc, argv);
// Creamos un cuadro rojo y uno azul
Cuadrado *cuadroAzul=new Cuadrado("azul");
Cuadrado *cuadroRojo=new Cuadrado("rojo");
// Los movemos a la posición inicial
cuadroAzul->moveBy(60,10);
cuadroRojo->moveBy(10,10);
// Se crea la escena
QGraphicsScene scene(0, 0,600, 600);
// Se agrega los cuadros a la escena
scene.addItem(cuadroAzul);
scene.addItem(cuadroRojo);
// Se mueve con animación
cuadroAzul->mover(200,500);
cuadroRojo->mover(100,500);
QGraphicsView window(&scene);
window.show();
return app.exec();
}
Qt no integra ninguna solución que encapsule y simplifique la gestión de señales POSIX, puesto que éstas no están disponibles en sistemas operativos que no soporten dicha especificación. Aun así en la documentación de Qt se describe una forma de usar manejadores de señales POSIX. Realmente basta con que el manejador de señal haga algo que provoque que Qt emita una señal y después retorne. Al volver a la secuencia normal de ejecución del programa, se emitiría la señal de Qt invocando el slot al que está conectada, desde donde se ejecutarían de forma segura las operaciones que fueran necesarias. Para esta entrada he creado una clase en C++ llamada QPosixSignalListener que permite abstraer todo el proceso de gestión de señales. Me basé en el artículo de la documentación oficial que trata sobre manejo de señales. Diagrama de uso de la clase:
Interfaz de la clase:
classQPosixSignalListener:publicQObject
{
Q_OBJECT
public:
/**Constructor.Setealasseñalesycrea
*lossocketscorrespondientes
*
*@paramparentPadredelobjeto
***/
QPosixSignalListener(QObject*parent=0);
~QPosixSignalListener(){}
//Unixsignalhandlers.
staticvoidhupSignalHandler(int);
staticvoidtermSignalHandler(int);
staticvoidusr1SignalHandler(int);
staticvoidusr2SignalHandler(int);
//SettheUnixsignalhandlers
staticintsetup_unix_signal_handlers();
privateslots:
//Qtsignalhandlers.
voidhandlerQt_SIGHUP();
voidhandlerQt_SIGTERM();
voidhandlerQt_SIGUSR1();
voidhandlerQt_SIGUSR2();
signals:
//Signals
voidsigHUP();
voidsigTERM();
voidsigUSR1();
voidsigUSR2();
private:
//sockets
staticintsocketSIGHUP[2];
staticintsocketSIGTERM[2];
staticintsocketSIGUSR1[2];
staticintsocketSIGUSR2[2];
//SocketNotifiers
QSocketNotifier*skNotifierHUP;
QSocketNotifier*skNotifierTERM;
QSocketNotifier*skNotifierUSR1;
QSocketNotifier*skNotifierUSR2;
};
La clase puede manejar las señales SIGHUP, SIGTERM, SIGUSR1 y SIGUSR2. Puedes modificarla para que soporte otras. USO:
Cuando el proceso recibe una señal (soportada) el objeto emite una señal de Qt. Para usar la clase solo basta con instanciar un objeto y conectar una de sus señales a un slot cualquiera. Ejemplo:
Antes de empezar primero debemos tener instalado graphviz y java (opendjk o el de oracle).
Para instalar graphviz en ubuntu o debian prueba con: sudo apt-get install graphviz
1- Luego de tener java y graphviz instalado entonces nos descargamhos este fichero ya preparado que tiene el driver de postgres 9.3 para java y el programa que genera los diagramas (SchemaSpy).
Si tienes una versión distinta de postgres entonces debes descargar el driver adecuado desde este sitio y substituir dicho fichero .jar por driver.jar
2- Lo descomprimimos en un directorio y ejecutamos en el:
Donde:
* ./driver.jar: Es el nombre del driver de JDBC para postgres * NOMBREDB: Es el nombre de la base de datos
* HOST: Es el host de la base de datos * PUERTO: Es el puerto de la BD * USUARIO: Es el usuario de la BD * CONTRASEÑA: El pass de la BD * DESTINO: Es donde queremos ubicar los ficheros que se van a generar (diagramas, etc) Por ejemplo:
Aprender a programar en Lenguaje C es un arte que lleva su tiempo, requiere esfuerzo y dedicación, expongo aquí un material que escribí en archivos de formato *.CPP tomando en cuenta los dos tipos de programadores.
a) Los que les gusta el código para experimentar
b) Los que les gusta tener documentación a la mano para poder comprender
Es un TEMARIO totalmente COMPILABLE que comprende 15 capítulos, en el cual encontraran código y explicaciones sencillas.
Nota: - Si sólo estas interesado en ojear un tema, dando click en el archivo bastara para revisar la información comodamente. - Para descargarlo sólo hace falta dar click en "Download ZIP", esté botón se encuentra en la parte central derecha.
Índice:
1. Introducción
2. Operadores
3. Ciclos Repetitivos
4. Estructuras Condicionales
5. Funciones y Procedimientos
6. Arreglos (Memoria Estática)
7. Manejo de Cadenas <string.h>
8. Apuntadores
9. Memoria Dinámica
10.I Listas Enlazadas
10.II Listas Enlazadas Avanzadas
11. Recursividad
12. Árboles Binarios
13. Manejo de Archivos de Texto y Binarios
14.I Hilos o Procesos Ligeros [Linux]
14.II Hilos o Procesos Ligeros [Windows]
15. Sockets TCP/IP, UDP/IP, (Servidor y Cliente) [Linux]