鼠标事件的继承操作
来源:互联网 发布:傻黑的淘宝店 编辑:程序博客网 时间: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>
这样就可以进行鼠标移动了
<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事件。
<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
- 鼠标事件的继承操作
- 对话框响应鼠标事件的继承
- 模拟鼠标键盘操作事件
- jQuery操作鼠标事件大全
- 返回用户没有操作键盘和鼠标事件的时间
- GridView控件RowCreated事件的操作——鼠标动作
- 鼠标事件的处理
- 鼠标事件的添加
- 鼠标事件的区别
- 鼠标触发的事件
- 鼠标事件的响应
- 鼠标事件的种类:
- 鼠标的点击事件
- 鼠标的单击事件
- 鼠标的触发事件
- Qt的鼠标事件
- 鼠标的常用事件
- 鼠标事件的距离
- A simple memory allocation algrithim
- java类里面不可以做逻辑运算,输出
- 如何在 Linux 上使用 GNU sed
- 一个人也要生活的精彩——懒人焖饭
- jQuery 基础DOM和CSS操作
- 鼠标事件的继承操作
- Android之调用摄像头拍照和从相册中选择照片
- Jsp/servlet的声明周期
- Oracle事务的执行1
- leetCode练习(84)
- (四)java开发常用类(包装,数字处理集合等)(上)
- 《android网络请求框架》一个轻量级的异步网络请求框架MyHttpUtils(新版更新记录,版本号:2.X)
- 丁成云师姐的-MySQL分享
- Centos7开机不久桌面卡住,只有鼠标可以移动的解决办法