znalazłem podobny do Twojego zapytania w pewnym forum internetowym a tu ktoś zaproponował wyjście jako
Uwaga: Reference z http://www.unix.com/unix-linux-applications/81388-read-position-mouse-cursor.html, autor poniżej wpis jest daggilli zarejestrowanym użytkownikiem UNIX forach internetowych. Zaliczenie poniższej publikacji w pełnej formie przechodzi na daggilli.
To jest kompletny kod dla aplikacji Qt, którą zrzuciłem w ciągu około dziesięciu minut (zwanej krzyżykiem), która wyświetla bieżące współrzędne myszy w oknie. Możesz być w stanie wyciągnąć z tego wystarczająco dużo, aby było użyteczne. To jest Qt 3.1, ale Qt 4 nie jest wielką różnicą. Będziesz potrzebował bibliotek rozwojowych Qt, a nie tylko środowiska wykonawczego. Kod składa się z dwóch plików: crosshair.h i crosshair.cpp.
crosshair.h:
Kod:
#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:
Kod:
#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()));
}
Aby to budować, umieścić oba pliki w katalogu o nazwie krzyżyk . cd do tego katalogu i wpisz Kod:
qmake -project
qmake
make
ten nie robi nic bardziej złożonego niż dziedziczą z QLabel, ustawić timer do uruchomienia 20x sekundę, chwyć bieżący współrzędne kursora i zapisać je do tekstu etykiety. Kliknięcie w oknie zamyka je. Używam go do naprawiania błędów wyrównania w JavaScript podczas układania obiektów.
Można otworzyć plik w konstruktorze klasy Crosshair, aby przechowywać dane, i użyć gettimeofday (2), aby uzyskać znacznik czasu. Nic nie mówi, że Qt musi działać w trybie GUI (można wyraźnie powiedzieć, że nie ma go w konstruktorze QApplication).
Qt z Trolltechu: http://doc.trolltech.com
cursorRect powrotu względnego położenia kursora w QPlainTextEdit natomiast trzeba globalną pozycję, ponieważ istnieje QCursor. –
Cóż, spodziewałem się, że wiesz o 'editor-> viewport() -> mapToGlobal()' :) –
Nie wiedziałem tego. To działa dobrze. Dzięki –