Qt事件系统
2013-07-10 20:55
225 查看
TheEventSystem
在Qt中,事件是继承了虚拟类HowEventsareDelivered
当发生一个事件,Qt通过构造一个适当的该函数本身不处理事件:根据传送的事件类型,它为特定的时间类型调用一个事件处理程序,并根据事件是被接受或忽略发送一个响应。
一些事件,如
EventTypes
大多数的事件类型有特别的类,尤其是一些类支持多于一种实际的事件类型。
每个事件都有一个定义在
由于程序需要多种复杂的方式的响应,Qt的事件传送机制也是灵活的。
EventHandlers
通常事件被传送的方法是调用一个虚函数。例如,例如,下面的代码处理了自定义的checkbox鼠标左键按下事件,把其他按键按下的事件传送给基类
voidMyCheckBox::mousePressEvent(QMouseEvent*event)
{
if(event->button()==Qt::LeftButton){
//handleleftmousebuttonhere
}else{
//passonotherbuttonstobaseclass
QCheckBox::mousePressEvent(event);
}
}
如果你想取代基类的函数,你必须自己实现每件事。然而,如果你只想扩展基类的功能,你可以实现自己想实现的部分,在任何你不想处理情况,可以调用基类来获得默认的处理。
偶尔,可能没有特定事件的函数,或者特定事件的函数功能不充分。最常见的例子包含Tab按下。通常,
这些对象可以重新实现
boolMyWidget::event(QEvent*event)
{
if(event->type()==QEvent::KeyPress){
QKeyEvent*ke=static_cast< QKeyEvent*>(event);
if(ke->key()==Qt::Key_Tab){
//specialtabhandlinghere
returntrue;
}
}elseif(event->type()==MyCustomEventType){
MyCustomEvent*myEvent=static_cast<MyCustomEvent*>(event);
//customeventhandlinghere
returntrue;
}
returnQWidget::event(event);
}
我们注意到对于没有处理的所有情况都调用了
EventFilters
有时一个对象需要检查并可能拦截被传送给其他对象的事件。例如,对话框一般需要为一下widget过滤键盘按键事件。例如,修改返回键处理。当一个过滤器对象的
boolFilterObject::eventFilter(QObject*object, QEvent*event)
{
if(object==target&&event->type()==QEvent::KeyPress){
QKeyEvent*keyEvent=static_cast< QKeyEvent*>(event);
if(keyEvent->key()==Qt::Key_Tab){
//Specialtabhandling
returntrue;
}else
returnfalse;
}
returnfalse;
}
以上代码演示了另一种拦截Tab按键事件并发送到特定目标widget的方法。在这种情况下,事件过滤器处理了相关的事件并返回true阻止事件被进一步处理。其他的事件则被忽略,事件过滤器返回false以允许它们被发送到目标widget,通过任何已经安装的事件过滤器。
为整个程序过滤所有的事件也是可能的,通过为
SendingEvents
很多程序想创建和发送自己的事件。你可以用像Qt的事件循环一样的方法发送事件,通过构造合适的事件对象并用要创建自定义的事件类型,需要定义一个事件号,必须大于
相关文章推荐
- QT事件--阐述的比较系统
- [Q学习]9 Qt事件系统——投递事件
- Qt如何向系统发送键盘和鼠标事件?
- Qt之事件系统(一)
- Qt 事件系统
- Qt事件系统
- Qt 事件系统
- Qt 自定义model实现文件系统的文件名排序(重定义sort函数即可。忽然开窍了:其实捕捉点击Header事件,内部重排序,全部刷新显示即可)
- qt的事件系统一点点基础知识
- Qt之事件系统(二)
- Qt之事件系统
- Qt事件系统
- QT的事件系统
- QT——设置窗口的固定大小、QProcess、定时器事件、QString::arg、系统时间、QPixmap 和 QImage 区别
- Qt 事件系统
- QT的事件系统
- [Q学习]11 Qt事件系统——过滤事件
- [Q学习]10 Qt事件系统——处理事件
- Qt之事件系统
- Qt事件系统基本概念