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

domingo, 25 de febrero de 2018

Mover ventana a la derecha o izquierda en KDE

Si queremos usar la funcionalidad de Windows de mover una ventana a la izquierda o derecha presionando Win + Left / Right
Debemos entrar en Shortcuts -> Global Shortcuts -> KWin y escribir "Tile" en la barra de busqueda



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




domingo, 7 de abril de 2013

Usar el mouse con C/C++ en linux

La forma más fácil para usar las funcionalidades del mouse es usando xdotool (necesita tenerlo instalado).

Ejemplo 1:
Mover el cursor a la coordenada 1,1
system("xdotool mousemove 1 1");



Ejemplo 2:
Este es otro ejemplo de una clase "Mouse" que hice para probar 



#include <inttypes.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
using namespace std;

#define SIZE_OF_SCRIPT_CLICK 20 // Size script that will run the click

class Mouse{
public:

 /** Mouse buttons **/
 enum MouseButton{
  Left=1,
  Middle=2,
  Right=3
 };

 /** Perform click's
  *
  * @param nClicks Number of clicks to perform
  * @param button Button of the click
  * @param delay Delay time in microseconds
  *
  */
 void click(int nClicks=1, MouseButton button=Left,int delay=0){
  static char script[SIZE_OF_SCRIPT_CLICK];
  memset(script,0,sizeof(char)*SIZE_OF_SCRIPT_CLICK);

  sprintf (script,"xdotool click %d",int(button));

  while (nClicks--){
   system(script);
   if (nClicks)
    usleep(delay);
  }
 }

 /** Type of mouse move **/
 enum TypeOfMove{
  Relative, // Move the cursor with respect to the current position
  Absolute  // Places the cursor at a given position
 };

 /** Change the cursor position
  *
  * @param x Abscissa
  * @param y Ordinate
  * @param typeOfMove Type of move
  */
 void move(int x,int y,TypeOfMove typeOfMove=Absolute){
  static char script[SIZE_OF_SCRIPT_CLICK];
  memset(script,0,sizeof(char)*SIZE_OF_SCRIPT_CLICK);
  sprintf (script,"xdotool mousemove%s %d %d",
    typeOfMove==Relative?"_relative":"",x,y);
  system(script);
 }
};


int main() {
 Mouse m;
 usleep(500000);
 m.click(1,Mouse::Right);
 usleep(500000);
 m.move(0,200,Mouse::Relative);
 m.click(1,Mouse::Left);
 m.move(0,200,Mouse::Absolute);
 m.click(1,Mouse::Left);
 return 0;
}