对于Qt来说,信号与槽机制是其通信的一大亮点,但是Qt中也提供了其他的方法实现数据间的通信,如invokeMethod反射机制实现通信(https://blog.csdn.net/xx18030637774/article/details/105017306),另外Qt还提供了使用eventFilter来实现数据通信,具体实现如下:
1)首先使用eventFilter来进行数据通信的对象,需要自己安装事件过滤器,具体如下(以QPushButton为例):
QPushButton *btn = new QPushButton(this);
btn->installEventFilter(this);
2) 然后继承eventFilter函数,对QPushButton对应的事件进行捕捉和处理,具体代码如下:
bool eventFilter(Qobject *obj, QEvent *event) {if (event->type() == QEvent::MouseButtonPress) {QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);if (mouseEvent->button() == Qt::LeftButton) {if (obj == btn) {//do something about press btn button;}}}//其他情况:如果对象的event是自定义的事件,则需要把相关的事件注册到Qt的元对象系统中去
}