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中去。
一些事件类型可以被传递。这意味着假如目标对象不处理一个事件,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中去。
相关文章推荐
- SSH框架网上商城项目第13战之Struts2文件上传功能
- Emacs 移动行和区域move lines and regions with M-n M-p
- Android 目录过长造成的error Error:too long on Windows, keep below 240 characters :
- Visual Studio Team Services使用教程【3】:默认团队权限说明
- 无线显示netsh查看命令
- Spring 基础
- Android 插件化之Droid Plugin
- 【Spring】【笔记】《Spring In Action》第5章 数据库处理
- Cursor window allocation of 2048 kb failed
- Android 面试基础知识整理
- 列表的多选操作
- 【iOS开发】Gitlab教程 (一)
- Visual Studio Team Services使用教程【2】:添加团队成员
- 本地socket(unix domain socket)
- 如何删除我们的应用在AppStore中的负面评论
- PHP异步请求 POST和GET方式
- http conentType file separator
- 使用js模拟点击a链接 无效的解决方案
- ST、SC、FC、LC光纤接头区别
- zabbix 警告发邮件(新手版)