Qt实践项目打地鼠之----事件重写(四)[附GitHub项目下载地址]

本项目的下载地址:戳此访问

QCoreApplication类的notify( )函数的帮助文档给出了5中处理事件的方法:

  1. 重新实现部件事件处理函数,最为常用,只能处理特定部件的特定事件;
  2. 重新实现notify( )函数,一次只能处理一个事件;
  3. 向QApplication对象上安装事件过滤器,与方法二相同,但是可以同时处理多个事件
  4. 重新实现event函数,QObject类的event( )函数可以在事件到达默认的事件处理函数之前获得该事件
  5. 在对象上安装事件过滤器,可以在一个界面类中同时处理不同子部件的不同事件

方法一和五较为常用.

基于上述方法,我们给封装的图元响应鼠标事件的能力

首先在myitem.h的类中添加

public:
    void setMouse(bool mouse);
    bool isMouse();
private:
    bool m_nouse;
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event);

函数定义如下:

void myitem::setMouse(bool mouse)
{
    this->m_nouse = mouse;
}

bool myitem::isMouse()
{
    return this->m_nouse;
}

void myitem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    if(this->m_nouse){
        qDebug() << "mouse";
    }else {
        qDebug() << "notmouse";
    }

}

在myscene.cpp中添加设置真假的语句

void myScene::showMouse()
{
    //随机一个数字 0-15,使用C语言的设置
    int count = rand()%3+1; //(1~3个)
    //每次重置背景
       for(int i = 0; i < 16; i++){
      this->item[i]->setPic(":/background/bg1.png");
           this->item[i]->setMouse(false);//使得鼠标点击背景为假
        }

    //随机出现地鼠图片
    for(int i = 0; i < count; i++){
        int index = rand()%16;
        this->item[index]->setPic(":/mouse/mouse.png");
        this->item[index]->setMouse(true);//使得鼠标点击老鼠为真
     }
}

这样,运行程序,鼠标点击背景控制台出现"notmouse",点击地鼠显示"mouse".

下一篇继续写按钮和LCD管显示的实现.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

量子孤岛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值