Mostrando entradas con la etiqueta animation. Mostrar todas las entradas
Mostrando entradas con la etiqueta animation. Mostrar todas las entradas

miércoles, 17 de diciembre de 2014

Mover objetos con transiciones en Qt con QPropertyAnimation

Aqui explicaremos como mover un objeto de Qt de un lugar a otro de la pantalla y que este se valla deslizando:
Basta con crear una animación de movimiento con QPropertyAnimation.


// Se crea la animación 
// el parámetro OBJETO es el objeto que queremos mover
// Puede ser un QLabel, QGraphicsWidget, etc
QPropertyAnimation *animation = new QPropertyAnimation(OBJETO, "pos"); 


// Duración de la animación. El tiempo desde que sale hasta que llega
animation->setDuration(1000); 

// Posición inicial de donde va a partir
animation->setStartValue(QPointF(this->x(), this->y()));

// Posición final a donde va a llegar
// En este caso le estoy diciendo que se mantenga en el mismo
// valor de x pero que varie el valor de Y en 100 px
animation->setEndValue(QPointF(this->x(), this->y()+100));

// Inicia la animación
animation->start(QAbstractAnimation::DeleteWhenStopped);


Este es un ejemplo compilable:

#include <QtCore>
#include <QtWidgets>
#include <QObject>
#include <QCoreApplication>

/** @brief Representa una figura cuadrada **/
class Cuadrado : 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;
};


int main(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();
}




martes, 12 de febrero de 2013

Instalar pencil animation en Fedora / Suse x86_64

Intenté compilar el source de pencil y yum me indicaba que fataba "libming.so.1". Tras mucho buscar he conseguido una solución bastante lammer pero que más da :·/

Te puedes descargar el RPM de esta pag:

ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/davjam79/openSUSE_Tumbleweed/x86_64/pencil-0.4.4b-22.3.x86_64.rpm


Luego instalan normalmente: yum install ./pencil-0.4.4b-22.3.x86_64.rpm


y listo


Aquí una captura de pantalla del programa corriendo en mi Fedora 18 x86_64 bajo KDE