我是靠谱客的博主 酷炫奇迹,最近开发中收集的这篇文章主要介绍Qt中event事件分发器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Qt中event事件分发器

运行程序时会根据实际的操作触发不同的多个事件,例如按下鼠标事件,直观讲好像是点击鼠标后,直接会调用mousePressEvent来处理事件,其实不然,在程序与各事件处理函数之间,还有一个专门用来管理事件的部分,称为事件分发bool event(QEvent *ev)。因此,实际事件处理流程是:用户点击鼠标,程序接收到该动作,将其交付给事件分发,事件分发对事件进行判断,然后传递给对应的事件处理函数,完成事件的处理。

事件分发的返回值为bool类型,如果返回值为true,则表示用户将自己处理该事件,不再向下分发事件,即不再需要对应的事件处理函数来处理。

下面为了验证存在事件分发器,编写代码使用事件分发拦截点击鼠标的事件。

void MyLabel::mousePressEvent(QMouseEvent *ev)
{
    if(ev->button() == Qt::LeftButton)
    {
        qDebug() << "22222";
    }
}

void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{
    if(ev->button() == Qt::LeftButton)
    {
        qDebug() << "66666";
    }
}

void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{
    if(ev->buttons() == Qt::LeftButton)
    {
        qDebug() << "11111";
    }
}

bool MyLabel::event(QEvent *ev)
{
    if(ev->type() == QEvent::MouseButtonPress)
    {
        qDebug() << "点击鼠标拦截";

        return true;  // 返回true表示用户自己处理,不向下分发
    }

    // 其他事件交给父类进行处理
    return QLabel::event(ev);
}

上述代码运行时,"66666""11111"可以正常打印,而由于进行了事件拦截,"22222"将会被"点击鼠标拦截"代替。

注意:上述例子只是为了验证事件处理的过程及事件分发的存在,而不是为了练习如何进行信号拦截,所以不建议在该层对事件进行处理。

最后

以上就是酷炫奇迹为你收集整理的Qt中event事件分发器的全部内容,希望文章能够帮你解决Qt中event事件分发器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部