|
10Qter豆
本帖最后由 caiwei_cs 于 2014-12-25 11:18 编辑
widget.cpp- // 事件过滤器
- bool Widget::eventFilter(QObject *obj, QEvent *event)
- {
- // 如果是lineEdit部件上的事件
- if(obj == lineEdit){
- if(event->type() == QEvent::KeyPress)
- qDebug() << tr("Widget的事件过滤器");
- }
- return QWidget::eventFilter(obj,event);
- }
复制代码 mylineedit.cpp- // 事件
- bool MyLineEdit::event(QEvent *event)
- {
- if(event->type() == QEvent::KeyPress)
- qDebug() << tr("MyLineEdit的event()函数");
- // 执行QLineEdit类event()函数的默认操作
- //return false;
- return QLineEdit::event(event);
- }
复制代码 把return QWidget::eventFilter(obj,event); 和return QLineEdit::event(event); 中的任意一个改为return false;那个lineedit都不会在界面显示了。
我能理解这两句话是调用基类的方法。帮助里面还有:In your reimplementation of this function, if you want to filter the event out, i.e. stop it being handled further, return true; otherwise return false.
我不明白的是,不管怎么样,怎么会影响他的显示呢?
|
最佳答案
查看完整内容
1、Qobject::event()和绘制有什么关系么?
你这里将return QLineEdit::event(event);注释的话绘制事件(QEvent:aint)就不会传给QLineEdit这个widget处理,就不会调到void QLineEdit::paintEvent(QPaintEvent *)。
2、return true 或者false和截获绘制事件有什么关系。
bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)
函数中写的很明显了,如果事件过滤器处理了该事件(也就是eventFilter return true ...
|