鼠标事件包括鼠标的移动,鼠标按下、松开、单击、双击等。
目录
一、项目介绍
- 一、项目介绍
- 二、项目基本配置
- 三、UI界面设计
- 四、主程序实现
- 4.1 mainwindow.h头文件
- 4.2 mainwindow.cpp源文件
- 五、效果演示
当用户操作鼠标在特定区域内移动,状态栏右侧会实时显示当前鼠标所在的位置信息;当用户按下鼠标键时,状态栏左侧会显示用户按下的键属性(左键、右键或中键),并显示按键时的鼠标位置;当用户松开鼠标键时,状态栏左侧又会显示松开时的位置信息。
二、项目基本配置新建一个Qt案例,项目名称为“MouseEvent”,基类选择“QMainWindow”,取消创建UI界面复选框的选中状态,完成项目创建。
三、UI界面设计无UI界面
四、主程序实现 4.1 mainwindow.h头文件在mainwindow.h的protected中声明四个函数:
protected:
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent *e);
定义两个私有变量:
private:
QLabel *statusLabel;
QLabel *MousePosLabel;
以及导入相应的包:
#include
#include
#include
4.2 mainwindow.cpp源文件
MainWindow主函数内进行定义:
setWindowTitle("鼠标事件"); //设置窗体的标题
statusLabel = new QLabel; //创建QLabel用于显示在状态栏中
statusLabel->setText("当前位置:"); //设置QLabel显示内容
statusLabel->setFixedWidth(100); //设置固定宽度为100
MousePosLabel = new QLabel; //显示鼠标按下或释放时的位置
MousePosLabel->setText(tr("")); //初始化不显示任何内容
MousePosLabel->setFixedWidth(100); //设置固定宽度为100
statusBar()->addPermanentWidget(statusLabel); //状态栏中增加控件
statusBar()->addPermanentWidget(MousePosLabel);//状态栏中增加控件
this->setMouseTracking(true); //设置窗体追踪鼠标
resize(400,200); //调整窗体大小,宽度为400,高度为200
定义鼠标按下事件响应函数:
//鼠标按下事件响应函数
void MainWindow::mousePressEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")"; //(x,y)
if(e->button()==Qt::LeftButton)
{
statusBar()->showMessage(tr("左键:")+str);//左键:(x,y)
}
else if(e->button()==Qt::RightButton)
{
statusBar()->showMessage(tr("右键:")+str);//右键:(x,y)
}
else if(e->button()==Qt::MiddleButton)
{
statusBar()->showMessage(tr("中键:")+str);//中键:(x,y)
}
}
定义鼠标移动事件响应函数:
//鼠标移动事件响应函数
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");//显示内容(x,y)
}
定义鼠标松开事件响应函数:
//鼠标松开事件响应函数
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y()) +")";
statusBar()->showMessage(tr("释放在:")+str,1000); //释放在:(x,y),显示1000ms后隐藏
}
定义鼠标双击事件响应函数,此处没有实现具体功能,但仍要写出函数体框架:
void MainWindow::mouseDoubleClickEvent(QMouseEvent *e){}
五、效果演示
显示效果如下:
完整代码可参考:https://download.csdn.net/download/didi_ya/42892164
ok,以上便是全部内容了,如果对你有所帮助,记得点个赞哟~
【Tips】:如果低版本运行出错,可以需要在文字的双引号外加上tr()函数,详情可参考tr()函数,实测Qt5以上均可正常运行。