[Qt6][QML][问题]主窗口隐藏后子窗口关闭导致程序关闭的问题

最近写的项目添加实时音乐频谱,需要弹出新的窗口

教程被应用在MediaStateT中

MediaStateT Github项目地址: https://github.com/taxue-alfred/MediaStateT

MediaStateT Gitee项目地址: https://gitee.com/MediaState/MediaStateT

问题引出

前几节讲到,我们实现了如下的窗口效果:

这个弹出的界面是主窗口,我们需要在此之上弹出一个新的窗口。但是随即发现一个问题。先来看看主窗口隐藏的代码:

//结束动画结束之后隐藏窗口
onFinished:{
    show_timer.stop()
    pop_window.hide() //这一行隐藏了窗口
}

可以看到这一行把主窗口在动画结束之后进行了隐藏。

我们此时创建新的窗口。但是当新建的窗口被关闭之后,发现整个程序被退出,随即发现程序的析构函数被执行。

于是总结出:当主窗口不处于活跃状态的时候,子窗口关闭会执行析构函数

解决思路

那么怎么解决?我们换个思路==> 既然想要达到隐藏效果,那么我们将主窗口的宽高设置为0,0是不是也可以达到隐藏的效果呢?我们来试一试:

//新建一个函数,pop_window指的是主窗口的动画模块,参照我前面的教程就知道这个模块具体是干嘛的了,这里不再赘述
function disattack(){
        pop_window.width = 0
        pop_window.height = 0
    }

然后我们来修改onFinished这个信号被触发时执行的语句:

//结束动画结束之后隐藏窗口
onFinished:{
    show_timer.stop()
        pop_window.disattack()
}

当然,在下次需要弹出的时候还需要恢复其原来的宽高:

//显示弹窗,这里函数我前面的教程也有写,这里不再赘述。
function showWindow(){
    if(sign === 0){
        //恢复大小
        //content_loader为Loader的ID
        pop_window.width = content_loader.width
        pop_window.height = content_loader.height

        show_anim.start()
        sign = 1
    }
}

按照这个思路,下次子窗口关闭之后主窗口如果被关闭就可以考虑你是不是隐藏了主窗口造成的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值