系列文章目录
第一章 多文件结构
- 头文件&cpp文件
- 添加资源
第二章 核心功能
第三章 UI相关
- 菜单栏
- 按钮等
总结
鼠标响应相关
在画图软件中,各种图形的绘制都需要通过鼠标来进行操作,因此程序对鼠标的响应就极为重要,因而本文就对鼠标响应相关事件进行简述。
这里是相关的文档 QMouseEvent Class
一、声明
首先,我们在PaintArea.h文件中引用相关的库并且声明相关函数。
具体分别为鼠标按下事件函数,鼠标移动事件函数和鼠标释放事件函数:
#include<QMouseEvent>
class PaintArea : public QWidget
{
Q_OBJECT
protected:
void mousePressEvent(QMouseEvent*); //鼠标按下事件
void mouseMoveEvent(QMouseEvent*); //鼠标移动事件
void mouseReleaseEvent(QMouseEvent*); //鼠标释放事件
二、鼠标按下事件
当鼠标按下时,我们需要实现的功能是获取此时鼠标的位置:
void PaintArea::mousePressEvent(QMouseEvent*event)
{
if(event->button() == Qt::LeftButton)//当鼠标左键按下
{
lastPoint = event->pos(); //获得鼠标指针的当前位置作为起始坐标
isDrawing = true;
originImage = image;
}
}
其中,isDrawing = true;
与双缓冲相关;originImage = image;
与撤销功能相关。
三、鼠标移动事件
当鼠标移动时,我们需要持续获取鼠标位置,并且根据不同画图功能不断更新临时图片:
void PaintArea::mouseMoveEvent(QMouseEvent*event)
{
if (curShape!=Move) //与移动功能相关
{
if(event->buttons()&Qt::LeftButton)//当鼠标左键按住并且在移动
{
endPoint = event->pos(); //获得鼠标当前位置作为终止坐标
if(curShape==None) //若当前不是任何画图模式
{
isDrawing = false;
paint(image);
}
else
{
tempImage=image; //临时图层
paint(tempImage);
}
}
}
}
四、鼠标释放事件
当我们松开鼠标时,我们需要实现的功能是获取终止位置(也就是当前位置),并进行绘画:
void PaintArea::mouseReleaseEvent(QMouseEvent*event)
{
if(event->button() == Qt::LeftButton)//当鼠标左键释放
{
endPoint = event->pos();
isDrawing = false;
paint(image);
}
}
五、小结
不论是什么软件工程,程序都需要对鼠标进行响应。
这里是对鼠标按下、移动和松开相关事件函数的一个总结,希望对大家有所帮助。