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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

QMouseEvent

發(fā)布時(shí)間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QMouseEvent 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1 QMouseEvent
    • 1.1 特別說(shuō)明
  • 2 通過(guò)QMouseEvent事件實(shí)現(xiàn)窗口移動(dòng)

1 QMouseEvent

1.1 特別說(shuō)明

QMouseEvent沒啥要注意的,就是對(duì)于mouseMoveEvent,默認(rèn)情況下,觸發(fā)事件需要點(diǎn)擊一下,才能觸發(fā)。可設(shè)置為自動(dòng)觸發(fā):setMouseTracking(true);。


2 通過(guò)QMouseEvent事件實(shí)現(xiàn)窗口移動(dòng)

實(shí)現(xiàn)起來(lái)還是比較簡(jiǎn)單的。

頭文件:

#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;protected://拖拽窗口,重寫三個(gè)虛函數(shù)void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);private:bool m_bDrag;QPoint mouseStartPoint;QPoint windowTopLeftPoint; };#endif // WIDGET_H

實(shí)現(xiàn)文件:

#include "widget.h" #include "ui_widget.h" #include <QMouseEvent>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget),m_bDrag(false) {ui->setupUi(this);setWindowTitle("窗口拖拽移動(dòng)");setFixedSize(640, 480);}Widget::~Widget() {delete ui; }//拖拽操作 void Widget::mousePressEvent(QMouseEvent *event) {if(event->button() == Qt::LeftButton){m_bDrag = true;//獲得鼠標(biāo)的初始位置mouseStartPoint = event->globalPos();//mouseStartPoint = event->pos();//獲得窗口的初始位置windowTopLeftPoint = this->frameGeometry().topLeft();} }void Widget::mouseMoveEvent(QMouseEvent *event) {if(m_bDrag) {//獲得鼠標(biāo)移動(dòng)的距離//QPoint distance = event->pos() - mouseStartPoint;QPoint distance = event->globalPos() - mouseStartPoint;//改變窗口的位置this->move(windowTopLeftPoint + distance);/*注意:一般定位鼠標(biāo)坐標(biāo)使用的是event->pos()和event->globalPos()兩個(gè)函數(shù),event->pos()鼠標(biāo)相對(duì)于當(dāng)前活動(dòng)窗口左上角的位置event->globalPos()獲取的鼠標(biāo)位置是鼠標(biāo)偏離電腦屏幕左上角(x=0,y=0)的位置;一般不采用前者,使用前者,拖動(dòng)準(zhǔn)確性較低且會(huì)產(chǎn)生抖動(dòng)。*/} }void Widget::mouseReleaseEvent(QMouseEvent *event) {if(event->button() == Qt::LeftButton){m_bDrag = false;} }

需要特別注意:在鼠標(biāo)移動(dòng)過(guò)程中必須通過(guò)buttons()來(lái)判斷是哪個(gè)按鍵按下。因?yàn)閎utton函數(shù):

總結(jié)

以上是生活随笔為你收集整理的QMouseEvent的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。