1.可以看见 ,按钮的父对象是主窗口
1 //初始化按钮
2 butt.setText("按钮");
3 butt.setParent(this);
2.按钮点击后将会关闭自己
//绑定信号和槽
connect(&butt,&MyButton::pressed,this,
[=]() mutable {
butt.close();
});
3.按钮捕捉到关闭事件时会 ignore 掉
//覆写按钮关闭事件处理函数
void MyButton::closeEvent(QCloseEvent *e)
{
//测试是否捕捉到事件
qDebug() << "按钮捕捉到事件,指针是:"<<e<<endl;
//拒绝关闭事件在该控件处执行 ,并把事件对象指针放行至主窗口
e->ignore();
qDebug() << "当前放行状态:" << e->isAccepted() << endl;
}
4.主窗口会接收传来的关闭事件
//覆写主窗口关闭事件处理函数
void MainWindow::closeEvent(QCloseEvent *e)
{
//测试是否捕捉到事件
qDebug() << "窗口捕捉到事件,指针是:"<<e<<endl;
//承认事件
e->accept();
}
运行程序后 ,点击按钮 ,发现每次点击时按钮都会捕捉到事件 ,同时显示事件是放行状态 ,但是主窗口却根本捕捉不到关闭事件 。我亲自点击主窗口的红叉之后才显示主窗口捕捉到关闭事件。