Qt中eventFilter事件出现莫名其妙的错误

tts_264 2014-08-08 10:41:58
#ifndef CESHI_H
#define CESHI_H

#include <QtGui/QMainWindow>
#include "ui_ceshi.h"

class ceshi : public QMainWindow
{
Q_OBJECT

public:
ceshi(QWidget *parent = 0, Qt::WFlags flags = 0);
~ceshi();

protected:
bool eventFilter(QObject *object, QEvent *e);
private:
Ui::ceshiClass ui;
};

#endif // CESHI_H


//cpp
#include "ceshi.h"

ceshi::ceshi(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
ui.label->installEventFilter(this);
}

ceshi::~ceshi()
{

}

bool ceshi::eventFilter(QObject *object, QEvent *e)
{
return true;
}

测试过程是这样的 我用设计师画了一个界面 上面放了一个QLabel 然后添加了一个图片 运行后神奇的发现图片不见了 惊讶了一下 然后将 ui.label->installEventFilter(this);这句注视掉 图片又出来了 或者注释调eventFilter这个函数 图片也会出现 很莫名其妙 实验了Qt两个版本 4.7.3 和Qt5.0.2 求大神解惑
...全文
958 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tts_264 2014-08-09
  • 打赏
  • 举报
回复
return flase 问题就解决了 感谢
ybjx111 2014-08-09
  • 打赏
  • 举报
回复
都说了不要return true 你都不知道这个函数是干嘛的还用
tts_264 2014-08-08
  • 打赏
  • 举报
回复
引用 9 楼 u014019207 的回复:
[quote=引用 8 楼 u014019207 的回复:] [quote=引用 7 楼 ybjx111 的回复:] [quote=引用 5 楼 u014019207 的回复:] [quote=引用 2 楼 ybjx111 的回复:] 返回true表示接收消息的控件不处理该消息, 你把全部的消息都返回true来过滤掉,自然就不会绘制图片了 在eventFilter中不要直接返回true,否则控件将接收不到任何消息。
我在设计师里面已经添加了一张图片了啊 QLabel里面 就是调用这个的时候 既然图片消失了 才会很吃惊的[/quote] 都是了eventFilter不要直接return true,这样控件讲不会接收到任何消息,自然就不会绘制图片了,你添加的图片就看不到了。[/quote] 大哥 能不能看清楚问题啊。。。 是我本来已经到设计师里面添加一张图片了 这样弄以后 图片既然消失了 我现在是不想eventFitle帮我做任何事情啊 我只是想你们分析下 为什么图片消失了 而不是让他重新帮我绘制一张图片[/quote] bool CMainStartUI::eventFilter(QObject *obj, QEvent *eve) { if (obj == ui.label) { if (eve->type() == QEvent::Enter) setLabelIcon(ui.label,"images/images/on-1.png"); } return true; } void CMainStartUI::setLabelIcon(QLabel *label,const QString &path) { QPixmap pixmap(path); label->setPixmap(pixmap); } 即使这样 图片一样是消失的状态 很莫名其妙 [/quote] 而且我图片路径肯定传对了 如果去掉注册那一行代码 图片是显示的
tts_264 2014-08-08
  • 打赏
  • 举报
回复
引用 8 楼 u014019207 的回复:
[quote=引用 7 楼 ybjx111 的回复:] [quote=引用 5 楼 u014019207 的回复:] [quote=引用 2 楼 ybjx111 的回复:] 返回true表示接收消息的控件不处理该消息, 你把全部的消息都返回true来过滤掉,自然就不会绘制图片了 在eventFilter中不要直接返回true,否则控件将接收不到任何消息。
我在设计师里面已经添加了一张图片了啊 QLabel里面 就是调用这个的时候 既然图片消失了 才会很吃惊的[/quote] 都是了eventFilter不要直接return true,这样控件讲不会接收到任何消息,自然就不会绘制图片了,你添加的图片就看不到了。[/quote] 大哥 能不能看清楚问题啊。。。 是我本来已经到设计师里面添加一张图片了 这样弄以后 图片既然消失了 我现在是不想eventFitle帮我做任何事情啊 我只是想你们分析下 为什么图片消失了 而不是让他重新帮我绘制一张图片[/quote] bool CMainStartUI::eventFilter(QObject *obj, QEvent *eve) { if (obj == ui.label) { if (eve->type() == QEvent::Enter) setLabelIcon(ui.label,"images/images/on-1.png"); } return true; } void CMainStartUI::setLabelIcon(QLabel *label,const QString &path) { QPixmap pixmap(path); label->setPixmap(pixmap); } 即使这样 图片一样是消失的状态 很莫名其妙
tts_264 2014-08-08
  • 打赏
  • 举报
回复
引用 7 楼 ybjx111 的回复:
[quote=引用 5 楼 u014019207 的回复:] [quote=引用 2 楼 ybjx111 的回复:] 返回true表示接收消息的控件不处理该消息, 你把全部的消息都返回true来过滤掉,自然就不会绘制图片了 在eventFilter中不要直接返回true,否则控件将接收不到任何消息。
我在设计师里面已经添加了一张图片了啊 QLabel里面 就是调用这个的时候 既然图片消失了 才会很吃惊的[/quote] 都是了eventFilter不要直接return true,这样控件讲不会接收到任何消息,自然就不会绘制图片了,你添加的图片就看不到了。[/quote] 大哥 能不能看清楚问题啊。。。 是我本来已经到设计师里面添加一张图片了 这样弄以后 图片既然消失了 我现在是不想eventFitle帮我做任何事情啊 我只是想你们分析下 为什么图片消失了 而不是让他重新帮我绘制一张图片
ybjx111 2014-08-08
  • 打赏
  • 举报
回复
返回true表示接收消息的控件不处理该消息, 你把全部的消息都返回true来过滤掉,自然就不会绘制图片了 在eventFilter中不要直接返回true,否则控件将接收不到任何消息。
ybjx111 2014-08-08
  • 打赏
  • 举报
回复
eventFilter里面干了什么? 会不会是这个函数在处理某些消息(如paintevent)时返回了true?
ybjx111 2014-08-08
  • 打赏
  • 举报
回复
引用 5 楼 u014019207 的回复:
[quote=引用 2 楼 ybjx111 的回复:] 返回true表示接收消息的控件不处理该消息, 你把全部的消息都返回true来过滤掉,自然就不会绘制图片了 在eventFilter中不要直接返回true,否则控件将接收不到任何消息。
我在设计师里面已经添加了一张图片了啊 QLabel里面 就是调用这个的时候 既然图片消失了 才会很吃惊的[/quote] 都是了eventFilter不要直接return true,这样控件讲不会接收到任何消息,自然就不会绘制图片了,你添加的图片就看不到了。
tts_264 2014-08-08
  • 打赏
  • 举报
回复
引用 3 楼 lovesmiles 的回复:
bool ceshi::eventFilter(QObject *object, QEvent *e) { return true; } 如果没有猜错,应该在里面加上父类的eventFilter调用
可以加啊 我开始以为是我调用到其他的事件把图片给弄掉了 所以才把这个函数什么都不做 图片既然也消失了 没想明白 能帮忙试试吗
tts_264 2014-08-08
  • 打赏
  • 举报
回复
引用 2 楼 ybjx111 的回复:
返回true表示接收消息的控件不处理该消息, 你把全部的消息都返回true来过滤掉,自然就不会绘制图片了 在eventFilter中不要直接返回true,否则控件将接收不到任何消息。
我在设计师里面已经添加了一张图片了啊 QLabel里面 就是调用这个的时候 既然图片消失了 才会很吃惊的
tts_264 2014-08-08
  • 打赏
  • 举报
回复
引用 1 楼 ybjx111 的回复:
eventFilter里面干了什么? 会不会是这个函数在处理某些消息(如paintevent)时返回了true?
我就是什么都不干 我想知道为什么图片会消失 我这里主要是为了切换移动上去的图片 还有按下的 意思就是 为什么这样 图片会消失 就这么点代码 没有其他的事件了
勤奋的小游侠 2014-08-08
  • 打赏
  • 举报
回复
bool ceshi::eventFilter(QObject *object, QEvent *e) { return true; } 如果没有猜错,应该在里面加上父类的eventFilter调用

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧