鼠标事件的继承操作

很多初学者都知道只要在当前窗口.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_OBJECT

public:
    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_OBJECT

public:
    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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值