鼠标事件的继承操作

来源:互联网 发布:傻黑的淘宝店 编辑:程序博客网 时间:2024/05/23 00:10

很多初学者都知道只要在当前窗口.cpp文件中覆写(overwrite)鼠标事件,就可以移动无标题栏的窗口ui,但是在同一个.cpp做鼠标事件,对继承和封装性不好。因此本博客主要说的是:封装分类继承做法。
1.覆写继承QWidget类的鼠标事件在Qt中创建一个项目,继承的暂时选择QWidget,项目的名字为mouse
2.在创建好项目中添加一个新类,起名为MouseMove,公有继承QWidget类
3.在MouseMove中覆写鼠标的移动,点击和释放事件,所包含的头文件为#include <QMouseEvent>和#include<QPoint>
4.在MouseMove.cpp中覆写mousePressEvent(QMouseEvent *)、mouseReselveEvent(QMouseEvent*)和mouseMoveEvent(QMouseEvent *)三个鼠标事件。
具体的代码如下
MouseMove.h文件内容
#ifndef MOUSEMOVE_H#define MOUSEMOVE_H#include <QWidget>#include <QMouseEvent>#include <QPoint>class MouseMove : public QWidget{public:   explicit MouseMove(QWidget *parent = 0);protected:    virtual void mouseMoveEvent(QMouseEvent *);    virtual void mousePressEvent(QMouseEvent *);    virtual void mouseReleaseEvent(QMouseEvent *);private:    QPoint last;};#endif // MOUSEMOVE_H</span>

MouseMove.cpp文件内容
<span style="font-size:18px;">/*=================================================== * @文件  mousemove.c * @摘要  覆写鼠标移动事件 * @作者  xxx * @参考  无 * @版本  1.0 * @历史  无 * =================================================== *   日期            版本           修订者   修订记录 *  2016.10.17       1.0           彭森荣     无 * ===================================================*/#include "mousemove.h"/* * 函数名: MouseMove 鼠标事件的构造函数 * @参数[I]: event  指代鼠标事件窗口 * @返回值: 无返回值*/MouseMove::MouseMove(QWidget *parent)    :QWidget(parent){}/* * 函数名: mouseMoveEvent 鼠标移动的事件 * @参数[I]: event  鼠标事件指针,指代鼠标移动这个事件 * @返回值: 无返回值*/void MouseMove::mouseMoveEvent(QMouseEvent *event){    int dx = event->x() - last.x();    int dy = event->y() - last.y();    last = event->pos();    move(dx+x(),dy+y());}/* * 函数名: mousePressEvent 鼠标按下的事件 * @参数[I]: event  鼠标事件指针,指代鼠标按下这个事件 * @返回值: 无返回值*/void MouseMove::mousePressEvent(QMouseEvent *event){    last = event->pos();}/* * 函数名: mouseMoveEvent 鼠标单击释放的事件 * @参数[I]: event  鼠标事件指针,指代鼠标单击释放这个事件 * @返回值: 无返回值*/void MouseMove::mouseReleaseEvent(QMouseEvent *event){    int dx = event->x() - last.x();    int dy = event->y() - last.y();    move(dx+x(),dy+y());}</span>

完成上述的编写之后,读者可以自行尝试运行,没有问题的暂时就编译成功了。下面我们进行的是继承这个MouseMove事件。
点击项目一开始创建的.h文件,本文在这里的项目主窗口.h文件名为:mouse.h,原本上如下
<span style="font-size:18px;">#ifndef MOUSE_H#define MOUSE_H#include <QWidget>namespace Ui {class mouse;}class mouse : public QWidget{    Q_OBJECTpublic:    explicit mouse(QWidget *parent = 0);    ~mouse();private:    Ui::mouse *ui;};#endif // MOUSE_H</span>

现在修改继承的是MouseMove类,修改的是继承的类和包含的头文件就可以了
<span style="font-size:18px;">#ifndef MOUSE_H#define MOUSE_H#include "mousemove.h"namespace Ui {class mouse;}class mouse : public MouseMove{    Q_OBJECTpublic:    explicit mouse(QWidget *parent = 0);    ~mouse();private:    Ui::mouse *ui;};#endif // MOUSE_H</span>
<span style="font-size:18px;"></span>
<span style="font-size:18px;">然后在mouse.cpp中修改如下:</span>
<pre name="code" class="cpp"><span style="font-size:18px;">#include "mouse.h"#include "ui_mouse.h"mouse::mouse(QWidget *parent) :    MouseMove(parent),    ui(new Ui::mouse){    ui->setupUi(this);    this->setWindowFlags(Qt::FramelessWindowHint); //无边框模式}mouse::~mouse(){    delete ui;}</span>

这样就可以进行鼠标移动了





0 0
原创粉丝点击