您的位置:首页 > 其它

qevent accept()和ignore() 函数

2016-06-03 12:02 441 查看
这两个函数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中去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: