Qt实战案例(10)——利用Qt实现鼠标事件的事件处理

鼠标事件包括鼠标的移动,鼠标按下、松开、单击、双击等。

一、项目介绍

当用户操作鼠标在特定区域内移动,状态栏右侧会实时显示当前鼠标所在的位置信息;当用户按下鼠标键时,状态栏左侧会显示用户按下的键属性(左键、右键或中键),并显示按键时的鼠标位置;当用户松开鼠标键时,状态栏左侧又会显示松开时的位置信息。

二、项目基本配置

新建一个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<QLabel>
#include<QStatusBar>
#include<QMouseEvent>

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以上均可正常运行。

  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wendy_ya

您的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值