Qt eventFilter实现信号与槽

    对于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的元对象系统中去
}
发布了83 篇原创文章 · 获赞 34 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/105018573