当前位置: 代码迷 >> QT开发 >> Qt 的控件可以设置成不接收讯息吗
  详细解决方案

Qt 的控件可以设置成不接收讯息吗

热度:93   发布时间:2016-04-25 04:09:50.0
Qt 的控件可以设置成不接收消息吗?
例如,有一个大控件,大控件中间有个小控件,如果我鼠标在大控件上移动,不小心移到了小控件上,那么就触发了大控件的HoverLeave,有什么属性,可以使小控件不接收这样的消息,这样,在大控件上移动鼠标的时候,就算移动到了小控件上,也不会触发HoverLeave了,不知道你们听懂了没,有点绕哦

------解决方案--------------------
貌似没有简单的设置属性可以解决的。
可能需要自己写eventfilter
------解决方案--------------------
引用:
貌似没有简单的设置属性可以解决的。
可能需要自己写eventfilter

+1
------解决方案--------------------
setMouseTracking(false)试试
------解决方案--------------------
采用eventFilter吧,正好有个帖子你可以参考下:
http://bbs.csdn.net/topics/390315872

2楼的答案很不错,你可以参考下,通过过滤器,这样就可以避免小控件触发了.
------解决方案--------------------
不会的吧,这个eventFilter(QObject *obj, QEvent *event)参数obj是指代对象指针,比如你的QLabel或者QLineEdit,event指代的是QEvent,QEvent有QEvent::HoverEnter这个枚举类型,那么就是支持的啊.不会因为label没有这个QEvent::HoverEnter事件就不能过滤了吧?我之前写QLabel的clicked事件也是用过滤写的啊.

给你一段参考代码,来自Qt Assistant:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
 {
     if (obj == textEdit) {
         if (event->type() == QEvent::KeyPress) {
             QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
             qDebug() << "Ate key press" << keyEvent->key();
             return true;
         } else {
             return false;
         }
     } else {
         // pass the event on to the parent class
         return QMainWindow::eventFilter(obj, event);
     }
 }

引用:
引用:引用:采用eventFilter吧,正好有个帖子你可以参考下:
http://bbs.csdn.net/topics/390315872

2楼的答案很不错,你可以参考下,通过过滤器,这样就可以避免小控件触发了.eventfilter我会用的,但是不知道怎么实现我说的那种功能具体情况是,小……

------解决方案--------------------
你触发LineEdit的Hover事件肯定做了处理,那你把这些处理代码直接放进去Label的这个处理模块就行.
------解决方案--------------------
额,这个还真棘手了.我暂时也没想到好办法.思考ing...
  相关解决方案