私はいくつかのオンラインフォーラムであなたに似たクエリを発見したと、ここで誰かが
注意として出力示唆しています:http://www.unix.com/unix-linux-applications/81388-read-position-mouse-cursor.htmlから参考に、投稿がdaggilliある下回っの著者、UNIXオンラインフォーラムの登録ユーザ。以下の投稿の完全な形のクレジットはダギリになります。
これはQtアプリケーションの完全なコードです(十字線と呼ばれます)。これは現在のマウス座標をウィンドウに表示します。あなたはそれを十分に引き出して有用になるかもしれません。これはQt 3.1ですが、Qt 4はそれほど大きな違いはありません。ランタイムだけでなく、Qt開発ライブラリが必要です。このコードは、crosshair.hとcrosshair.cppという2つのファイルで構成されています。
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()));
}
これを構築するには、十字線というディレクトリに両方のファイルを置きます。そのディレクトリにcdと コードを入力します。
qmake -project
qmake
make
これはQLabelから継承するよりも、より複雑な何もしませんが、20倍をもう一度を実行し、現在のカーソル座標を取得し、ラベルのテキストにそれらを書き込むためのタイマーを設定します。ウィンドウをクリックすると閉じます。私はオブジェクトをレイアウトしているときに、JavaScriptのアラインメントバグを修正するためにそれを使用します。
Crosshairクラスのコンストラクタでファイルを開いてデータを保存し、gettimeofday(2)を使用してタイムスタンプを取得できます。何もQtはGUIモードで動作しなければならないとは言いません(QApplicationコンストラクタで明示的に指定することはできません)。 Trolltechのから
のQt:http://doc.trolltech.com
がQCursorのために存在するように、私はグローバル位置を必要とするのに対し、QPlainTextEditにカーソルの相対位置を返すcursorRect。 –
まあ、私はあなたが 'editor-> viewport() - > mapToGlobal()'について知っていると思った: –
私はこれを知らなかった。それはうまく動作します。ありがとう –