m0_60797829 2022-04-11 11:23 采纳率: 61.1%
浏览 65

有关 Qt 子控件 ignore() 了事件之后父控件却没有接收到传来的事件的问题

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();
}

运行程序后 ,点击按钮 ,发现每次点击时按钮都会捕捉到事件 ,同时显示事件是放行状态 ,但是主窗口却根本捕捉不到关闭事件 。我亲自点击主窗口的红叉之后才显示主窗口捕捉到关闭事件。

  • 写回答

2条回答 默认 最新

  • kinghero123456 2022-04-11 11:59
    关注
    
    //覆写按钮关闭事件处理函数
    void MyButton::closeEvent(QCloseEvent *e)
    {
         QPushButton::closeEvent(e);  //加上这个试试
        //测试是否捕捉到事件
        qDebug() << "按钮捕捉到事件,指针是:"<<e<<endl;
     
        //拒绝关闭事件在该控件处执行 ,并把事件对象指针放行至主窗口
        e->ignore();
     
        qDebug() << "当前放行状态:" << e->isAccepted() << endl;
    }
    

    QPushButton::closeEvent(e); //ignore之前 加上这个试试

    评论

报告相同问题?

问题事件

  • 创建了问题 4月11日

悬赏问题

  • ¥15 如何用MATLAB写一段烟幕弹拦截导弹的代码?
  • ¥15 这两个验证谁能解决,带价来
  • ¥15 matlab可视化全球TEC含量图
  • ¥15 怎么将普通C++转入UE5
  • ¥15 求一段多输入类型的matlab lstm的代码
  • ¥15 零基础200题编字典问题
  • ¥15 win11移除微软账户登录
  • ¥15 部署zabbix登录时跳转如下页面
  • ¥15 cup+fpga+88E1111 rgmii to sgmii
  • ¥15 请问如何从gprmax中导出的merged.out文件获取雷达数据(应该是个二维数组吧),我看到网上很多对雷达数据的操作但是都没有说如何获得这个数据,因为out文件不能直接操作要转成其他格式是吧