事件过滤器比较强大
bool FormSearch::eventFilter(QObject *obj, QEvent *event)
{
if (obj == this->lineEdit)
{
if(event->type() == QEvent::FocusIn)
this->clearText();
if(event->type() == QEvent::MouseButtonDblClick)
this->clearText();
QKeyEvent *e = static_cast<QKeyEvent*>(event);
if(e->key() == Qt::Key_Space && (e->modifiers() & Qt::ShiftModifier))
this->clearText();
}
return QWidget::eventFilter(obj,event);
}
过滤器,是针对某个特定的控件,来定义行为。包括键盘,鼠标移入移出等行为。
QEvent下的如FocusIn是由众多的小事件构成的。
还可以针对某一个特定的事件,就是吧event转换成QKeyEvent或者是QMouseEvent类指针。如果是多键组合而成。那么就是类似上方代码。
最后在把事件分发出去。
然后选择控件去installEventFilter(QObject *obj); obj这个指针,会在自身使用的时候转过来引用eventFilter函数。
enter不是回车键哦,return才是。
每个控件包含一个列表,总是先去调用列表中得过滤器,然后再进行自己得处理。所以如果直接返回true,那么这个控件基本上就是不会产生事件了,甚至自身得绘图等事件都不会有。
最先到达子部件,一步步往上传得。
事件系统:
来源:oschina
链接:https://my.oschina.net/u/866162/blog/413872