QMouseEvent
生活随笔
收集整理的這篇文章主要介紹了
QMouseEvent
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1 QMouseEvent
- 1.1 特別說明
- 2 通過QMouseEvent事件實(shí)現(xiàn)窗口移動(dòng)
1 QMouseEvent
1.1 特別說明
QMouseEvent沒啥要注意的,就是對于mouseMoveEvent,默認(rèn)情況下,觸發(fā)事件需要點(diǎn)擊一下,才能觸發(fā)。可設(shè)置為自動(dòng)觸發(fā):setMouseTracking(true);。
2 通過QMouseEvent事件實(shí)現(xiàn)窗口移動(dòng)
實(shí)現(xià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)相對于當(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)過程中必須通過buttons()來判斷是哪個(gè)按鍵按下。因?yàn)閎utton函數(shù):
總結(jié)
以上是生活随笔為你收集整理的QMouseEvent的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT自定义控件之倒计时控件
- 下一篇: win10激活错误怎么办啊 win10激