qevent accept()和ignore() 函数

来源:互联网 发布:cf你的网络存在异常 编辑:程序博客网 时间:2024/05/18 02:15

这两个函数accept/ignore的功能,只是设定标记,



一些事件类型可以被传递。这意味着假如目标对象不处理一个事件,Qt会试着寻找另外的事件接收者。用新的目标来调用QApplication::notify()。举例来讲,key事件是传递的,假如拥有焦点的Widget不处理特定键,Qt会分发相同的事件给父widget,然后是父亲的父亲,直到最顶层widget。
那么何时接收该事件,何时忽略呢?

通过accept( )函数和ignore( )函数。

可被传递的事件有一个accept()函数和一个ignore()函数,你可以用它们来告诉Qt,你“接收”或是 “忽略”这个事件。假如事件handler调用accept(),这个事件将不会再被传递。假如事件handler调用 ignore(),Qt会试着查找另外的事件接收者。 像大多数的开发者一样,你可能不会被调用accept()或是ignore()所烦恼。缺省情况下是“接收”,在 QWidget中的缺省实现是调用ignore(),假如你希望接收事件,你需要做的是重新实现事件handler,避免 调用QWidget的实现。假如你想“忽略”事件,只需简单地传递它到QWidget的实现。下面的代码演示了这一点:
void MyFancyWidget::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Key_Escape) {
doEscape();
} else {
QWidget::keyPressEvent(event);
}
}
在上面的例子里,假如用户按了"ESC"键,我们会调用doEscape()并且事件被“接收”了(这是缺省的情况), 事件不会被传递到父widget,假如用户按了别的键,则调用QWidget的缺省实现。
void QWidget::keyPressEvent(QKeyEvent *event)
{
event->ignore();
}
应该感谢ignore(),事件会被传递到父widget中去。
0 0
原创粉丝点击