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()<<"按下鼠标事件传给了我";
}
这句话却有输出。
因此再重申一遍,事件的传递过程没有传给父类(基类)传给了父组件.