Я нашел подобный запрос к вашему в некоторых онлайн-форуме и вот кто-то предложил выход как
Примечание: Reference из http://www.unix.com/unix-linux-applications/81388-read-position-mouse-cursor.html, автор ниже регистраци daggilli, зарегистрированный пользователь UNIX интернет-форумах. Кредит ниже размещения в его полной форме относится к daggilli.
Это полный код приложения Qt, который я сбрасывал примерно через десять минут (называемый перекрестием), который отображает текущие координаты мыши в окне. Вы могли бы вытащить достаточно, чтобы быть полезными. Это Qt 3.1, но Qt 4 не сильно отличается. Вам понадобятся библиотеки разработки Qt, а не только время выполнения. Код содержит два файла: crosshair.h и crosshair.cpp.
crosshair.h:
Код:
#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:
Код:
#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()));
}
Для создания этого поместите оба файла в каталог с именем перекрестие , перейдите в этот каталог и введите Код:
qmake -project
qmake
make
Это не делает ничего более сложного, чем наследовать от QLabel, установить таймер для запуска 20x второй, захватить текущие координаты курсора и записать их в текст этикетки. Щелчок в окне закрывает его. Я использую его для исправления ошибок выравнивания в JavaScript, когда я выкладываю объекты.
Вы можете открыть файл в конструкторе класса Crosshair для хранения ваших данных и использовать gettimeofday (2), чтобы получить метку времени. Ничто не говорит о том, что Qt должен запускаться в режиме графического интерфейса (вы можете явно сказать это не в конструкторе QApplication).
Qt от Trolltech: http://doc.trolltech.com
cursorRect возвращает относительное положение курсора в QPlainTextEdit в то время как мне нужно глобальное положение, как она существует для QCursor. –
Ну, я ожидал, что вы знаете о 'editor-> viewport() -> mapToGlobal()' :) –
Я этого не знал. Он работает нормально. Спасибо –