• 7572阅读
  • 6回复

enterEvent 和 leaveEvent 的诡异现象 [复制链接]

上一主题 下一主题
离线napier
 

只看楼主 正序阅读 楼主  发表于: 2009-08-05
enterEvent 和 leaveEvent 响应鼠标进入窗口范围和离开窗口范围的情况,但是有时会失去响应。不知道是什么原因。

例如,在 Qt 自带的例子程序 Shaped Clock 中,加入如下函数:


void ShapedClock::enterEvent(QEvent*e)
{
    qDebug() << "enterEvent";
}

void ShapedClock::leaveEvent(QEvent*e)
{
    qDebug() << "leaveEvent";
}



编译运行,Qt Creator 的 Application Output 窗口会在鼠标进出表盘范围内时输出相应的信息。

但是,这个 Shaped Clock 例子提供了右键菜单,右键呼出菜单以后,左键点击窗口(表盘)的其他位置,取消菜单,之后,enterEvent 和 leaveEvent 就完全没有响应了,不管鼠标怎么移动。

当然,如果鼠标多在表盘上停留一会儿,等 tooltip 出现,就可以再次触发 enterEvent。但如果把程序中的 tooltip 去掉,那么只有再次呼出右键菜单,然后切换窗口,才能让 enterEvent 重新响应。

上面说得可能有点乱。简单来说,右键菜单在取消后应该是被隐藏了吧?那么这个隐藏的右键菜单为什么能“屏蔽”掉整个窗口的 enterEvent 和 leaveEvent 呢?如何解决这个问题?
离线sunyilong201
只看该作者 6楼 发表于: 2010-02-03
leaveEvent(QEvent*e)离开控件时,鼠标会不停的闪烁,好像有定时器在不停的工作,请问怎么回事?

还有关于grabMouse()怎么正确使用?
离线napier

只看该作者 5楼 发表于: 2009-08-06
http://lists.trolltech.com/qt-interest/2006-04/thread00113-0.html

在这里我找到了关于 enterEvent 的一个用法,他没用 return,直接把 event 传给父类,但我试验以后也没有效果。
离线napier

只看该作者 4楼 发表于: 2009-08-06
return QWidget::enterEvent(event); 不能通过编译,改成 return QWidget::enterEvent(e); 以后通过,但没有效果...

右键菜单弹出后,左键点击表盘其他区域,取消菜单,然后 enterEvent 依然失去反应,除非等 tooltip 出现。也就是说,和原来的问题一样。

而且,给 void 函数返回一个值,该如何理解呢?
离线duduqq

只看该作者 3楼 发表于: 2009-08-06
void ShapedClock::enterEvent(QEvent*e)
{
    qDebug() << "enterEvent";
    return QWidget::enterEvent(event) ;
}

void ShapedClock::leaveEvent(QEvent*e)
{
    qDebug() << "leaveEvent";
    return QWidget::leaveEvent(event) ;
}

返回给底层处理
离线napier

只看该作者 2楼 发表于: 2009-08-06
不好意思,请问这个 return 是加在哪里了?它起什么作用呢?
离线duduqq

只看该作者 1楼 发表于: 2009-08-06
我做的一个例子不会这样啊,我是多写了一句return QWidget::enterEvent(event) ;你加上试试看
快速回复
限100 字节
 
上一个 下一个