he encontrado consulta similar a la de algún foro en línea y aquí hay alguien sugirió la salida como
Nota: Referencia de http://www.unix.com/unix-linux-applications/81388-read-position-mouse-cursor.html, Autor de publicación de abajo es daggilli, usuario registrado de foros en línea UNIX. El crédito de la publicación a continuación en su forma completa corresponde a daggilli.
Este es el código completo para una aplicación Qt que armé en unos diez minutos (llamada retícula) que muestra las coordenadas actuales del mouse en una ventana. Es posible que puedas extraer lo suficiente para ser útil. Esto es Qt 3.1, pero Qt 4 no es muy diferente. Necesitarás las bibliotecas de desarrollo Qt, no solo los tiempos de ejecución. El código comprende dos archivos, crosshair.hy crosshair.cpp.
crosshair.h:
Código:
#ifndef CROSSHAIR_H
#define CROSSHAIR_H
#include <qwidget.h>
#include <qstring.h>
#include <qlabel.h>
#include <qevent.h>
class Crosshair : public QLabel
{
Q_OBJECT
public:
Crosshair(QWidget *parent=0);
protected:
void mousePressEvent(QMouseEvent *);
private:
QTimer *timer;
private slots:
void timerfire();
};
#endif
crosshair.cpp:
Código:
#include <qapplication.h>
#include <qpushbutton.h>
#include <qtimer.h>
#include <qcursor.h>
#include <iostream>
#include "crosshair.h"
using namespace std;
int main(int argc,char **argv)
{
QApplication a(argc,argv);
Crosshair mousepos;
a.setMainWidget(&mousepos);
mousepos.show();
return a.exec();
}
Crosshair::Crosshair(QWidget *parent) : QLabel(parent)
{
setIndent(20);
resize(100,30);
move(1200,200);
setText("0,0");
timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timerfire()));
timer->start(50,false);
}
void Crosshair::mousePressEvent(QMouseEvent *)
{
qApp->quit();
}
void Crosshair::timerfire()
{
QPoint p=QCursor::pos();
this->setText(QString().sprintf("%d,%d",p.x(),p.y()));
}
para construir este, poner los dos archivos en un directorio llamado punto de mira . cd a ese directorio y escriba Código:
qmake -project
qmake
make
Esto no hace nada más complejo que heredar de una QLabel, establecer un temporizador para ejecutar 20x un segundo, agarra el cursor actual coordina y escribirlos en el texto de la etiqueta. Al hacer clic en la ventana, se cierra. Lo uso para arreglar errores de alineación en JavaScript cuando estoy diseñando objetos.
Puede abrir un archivo en el constructor de la clase Crosshair para almacenar sus datos y usar gettimeofday (2) para obtener una marca de tiempo. Nada dice que Qt tiene que ejecutarse en modo GUI (puede decirlo explícitamente que no en el constructor QApplication).
Qt de Trolltech: http://doc.trolltech.com
cursorRect retorno a la posición relativa del cursor en la QPlainTextEdit mientras que necesito posición global, tal como existe para QCursor. –
Bueno, esperaba que supieras sobre 'editor-> viewport() -> mapToGlobal()' :) –
No sabía esto. Funciona bien. Gracias –