日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT模拟鼠标自动点击:1-鼠标移动自动显示坐标

發布時間:2023/12/20 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT模拟鼠标自动点击:1-鼠标移动自动显示坐标 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

想用QT實現一個很簡單的功能:自動獲取鼠標坐標,結果因為第一次用QT各種踩坑。

首先增加mouseMoveEvent鼠標事件如下,本以為這樣就結束了。

void MoveMouse::mouseMoveEvent(QMouseEvent *e) {QString strCoordinate = "坐標: ( " + QString::number(e->x())+ ", " + QString::number(e->y()) + " )";ui->labCoordinate->setText(strCoordinate); }

運行之后,

?What????? 坐標出現負值,原來x()和y()是相對于當前窗體控件來的,如果鼠標位置在窗體范圍內則是個正值,超出則會出現負,看下介紹,順便根據介紹找到了全局顯示的函數。

?但是修改過后,該程序執行后還有問題,那就是雖然增加了鼠標移動事件,但是鼠標不點擊時,依然無法獲取坐標。這與我本來想法相沖突,我的想法很簡單,鼠標到哪,坐標就到哪。

? ? ? ? 分析原因后發現QT默認是不打開鼠標跟蹤的,如果需要該功能,需要通過setMouseTracking事件將其開啟,如下介紹:

? ? ? ? ?所以我在程序的結構函數里增加了下面這一句,將鼠標移動打開。如果不設置鼠標移動,事件就不會自動進入mouseMoveEvent事件

MoveMouse::MoveMouse(QWidget *parent): QMainWindow(parent), ui(new Ui::MoveMouse) {ui->setupUi(this);this->setMouseTracking(true); //打開鼠標跟蹤 }

?????????當加完之后,鼠標移動仍然無法自動獲取坐標,結合之前的鼠標坐標只在范圍內正常,并且文檔介紹如果窗體中包含其他控件,則控件也需要打開鼠標跟蹤,所以我懷疑是不是必須要設置當前窗體中的鼠標跟蹤。

? ? ? ? 但是窗體應該是什么呢,我看到了構造函數中的一段設置UI的代碼ui->setupUi(this),并且當我們自己創建的QMainWindow后,系統會自動在UI的命名空間中創建同名的類MoveMouse,且在UI::MoveMouse里面定義了一些創建窗體相關類。

private:Ui::MoveMouse *ui;{ui->setupUi(this); }

ui_movemouse.h文件中內容如下:

class Ui_MoveMouse { public:QAction *GetCoordinate;QWidget *centralwidget;QLabel *labCoordinate;QStatusBar *statusbar;void setupUi(QMainWindow *MoveMouse){GetCoordinate = new QAction(MoveMouse);GetCoordinate->setObjectName(QString::fromUtf8("GetCoordinate"));centralwidget = new QWidget(MoveMouse);centralwidget->setObjectName(QString::fromUtf8("centralwidget"));labCoordinate = new QLabel(centralwidget);......} }namespace Ui {class MoveMouse: public Ui_MoveMouse {}; } // namespace Ui

所以在這個Ui命名空間的類里面,可以找到一個核心類centralwidget,它將返回主窗口的中心窗口部件,那么如果想讓鼠標移動事件也通知到它,是不是要將它的鼠標移動屬性打開呢,所以接著我嘗試了一下:

MoveMouse::MoveMouse(QWidget *parent): QMainWindow(parent), ui(new Ui::MoveMouse) {ui->setupUi(this);this->setMouseTracking(true); //打開鼠標跟蹤ui->centralwidget->setMouseTracking(true); //打開當前 }

?執行后,確實鼠標移動可以獲取到坐標。當然仍然無法滿足我的需求,因為出了窗體后,仍然需要在窗體內按住鼠標才能獲取到窗體外的移動坐標,這還是跟事件通知有關系,如果確實想獲取怕是只能使用系統級的API才行了。

總結

以上是生活随笔為你收集整理的QT模拟鼠标自动点击:1-鼠标移动自动显示坐标的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。