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-鼠标移动自动显示坐标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2013产品密钥(所有版本)
- 下一篇: C++ 性能优化篇三《测量性能》