Qt Creator 模块学习 —— 事件系统(下)

Qt Creator 模块学习 —— 事件系统(下)

1.事件的接受与忽略

我们知道事件的发生,那么在事件发生后到底是选择接受事件并作出调整还是忽略事件,需要我们通过代码来实现。
首先先来说接受,事件的接受并不是一次次传递的,准确来说谁先收到事件,谁就可以选择接受或忽略,接受(不忽略)了的话,其余的就接受不到了。
首先在widget的设计师界面加入一个按钮
其次新建mybutton类,并将widget设计师界面的按钮提升为mybutton类
在widget中加入以下函数:

    connect(ui->pushButton,&mybutton::clicked,
            [=](){
    
    
        qDebug()<<"按钮被按下";
    }
            );

然后运行并点击按钮,输出“按钮被按下”
然后在mybutton中加入

void mybutton::mousePressEvent(QMouseEvent *ev){
    
    
    if(ev->button()==Qt::LeftButton){
    
    
        qDebug()<<"按下的是左键";
    }
    else{
    
    
        QPushButton::mousePressEvent(ev);
    }
}

运行按下左键输出的仅仅为按下的是左键
即被忽视了。要想不被忽视把else中的代码放于外边即可。(也即是让事件信号继续传递)
同时在事件的传递过程中传递的并非是给了父类(基类),而是给了父组件。
咱们可以通过一些小例子来看一下:
在mybutton中的代码做一些小修改

void mybutton::mousePressEvent(QMouseEvent *ev){
    
    
    if(ev->button()==Qt::LeftButton){
    
    
        qDebug()<<"按下的是左键";
        ev->ignore();
    }
    else{
    
    
        QPushButton::mousePressEvent(ev);
    }
}

运行代码,发现并没有输出按钮被按下,随后我们在widget中加入新函数

void Widget::mousePressEvent(QMouseEvent *ev){
    
    
    qDebug()<<"按下鼠标事件传给了我";
}

这句话却有输出。
在这里插入图片描述

因此再重申一遍,事件的传递过程没有传给父类(基类)传给了父组件.

猜你喜欢

转载自blog.csdn.net/m0_50210478/article/details/108355173