Tôi đã tìm thấy truy vấn tương tự như bạn trong một số diễn đàn trực tuyến và đây là có người đề nghị đầu ra như
Lưu ý: tham khảo từ http://www.unix.com/unix-linux-applications/81388-read-position-mouse-cursor.html, tác giả dưới niêm yết là daggilli, người dùng đã đăng ký của diễn đàn trực tuyến UNIX. Tín dụng dưới đây được đăng dưới dạng đầy đủ của nó sẽ chuyển sang daggilli.
Đây là mã hoàn chỉnh cho ứng dụng Qt tôi đã ném cùng nhau trong khoảng mười phút (gọi là crosshair) hiển thị tọa độ chuột hiện tại trong cửa sổ. Bạn có thể kéo đủ nó ra để có ích. Đây là Qt 3.1, nhưng Qt 4 không khác gì nhiều. Bạn sẽ cần các thư viện phát triển Qt, không chỉ là các runtimes. Mã này bao gồm hai tập tin, crosshair.h và crosshair.cpp.
crosshair.h:
Code:
#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:
Code:
#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()));
}
Để xây dựng này, đặt cả hai tập tin trong một thư mục gọi là crosshair . cd vào thư mục đó và gõ Code:
qmake -project
qmake
make
này không có gì phức tạp hơn kế thừa từ một QLabel, thiết lập một bộ đếm thời gian để chạy 20x trong một giây, lấy con trỏ hiện tại tọa độ và viết chúng vào văn bản của nhãn. Nhấp vào trong cửa sổ sẽ đóng cửa sổ. Tôi sử dụng nó để sửa lỗi liên kết trong JavaScript khi tôi đang đặt ra các đối tượng.
Bạn có thể mở tệp trong hàm tạo của lớp Crosshair để lưu trữ dữ liệu của bạn và sử dụng gettimeofday (2) để nhận dấu thời gian. Không có gì nói Qt phải chạy trong chế độ GUI (bạn có thể nói rõ ràng là không phải trong constructor QApplication).
Qt từ Trolltech: http://doc.trolltech.com
cursorRect trở lại vị trí tương đối của con trỏ vào QPlainTextEdit trong khi tôi cần vị trí toàn cầu vì nó tồn tại cho QCursor. –
Vâng, tôi hy vọng bạn biết về 'editor-> viewport() -> mapToGlobal()' :) –
Tôi không biết điều này. Nó hoạt động tốt. Cảm ơn –