QCoreApplication类的notify( )函数的帮助文档给出了5中处理事件的方法:
- 重新实现部件事件处理函数,最为常用,只能处理特定部件的特定事件;
- 重新实现notify( )函数,一次只能处理一个事件;
- 向QApplication对象上安装事件过滤器,与方法二相同,但是可以同时处理多个事件
- 重新实现event函数,QObject类的event( )函数可以在事件到达默认的事件处理函数之前获得该事件
- 在对象上安装事件过滤器,可以在一个界面类中同时处理不同子部件的不同事件
方法一和五较为常用.
基于上述方法,我们给封装的图元响应鼠标事件的能力
首先在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管显示的实现.
标签:GitHub,Qt,void,----,setMouse,bool,事件,mouse,函数 From: https://blog.51cto.com/u_13875041/5878129