Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他QObject对象的事件,在事件到达之前对其进行处理。
上示的图片黑色键盘是一个独立的Widget的子类CKeyboardForm,白色的背景部分是一个独立的主窗口。现在要实现在白色背景上任意点击某一位置即可实现虚拟键盘的收起,很显然这里就要通过CKeyboardForm来截取全局的鼠标(触摸屏)点击事件,并在代码的监视处实现以上的功能,这就是事件过滤的方法。实现一个事件的过滤包括两个步骤
1.在目标对象上调用installEventFilter(),注册监视对象。
2.在监视对象的EventFilter()函数中处理目标对象的事件。
注册监视对象的位置是在CKeyboardForm的构造函数当中:CKeyboardForm::CKeyboardForm(QWidget parent)
: QWidget(parent)
{
m_lstCharacterBtn.clear();
m_eCurrentMode = InputMode::en;
m_bUpperMode = false;
m_iSymbolPage = 0;
QDesktopWidget desktopWidget = QApplication::desktop();
//global capture
qApp->installEventFilter(this);
}
事件过滤器注册之后,发送到qApp的事件首先到达CKeyboardForm::eventFilter()函数,然后在到达最终