崩溃解决_Qt子窗口关闭按钮后打开崩溃

Qt子窗口关闭按钮后打开崩溃 翻译一下就是Qt有一个父窗口,然后通过按钮弹出窗口这个叫子窗口,子窗口关闭后再次打开就会崩溃。

其实有两种解决方法,第一种可以用hide方式关闭子窗口,就是隐藏,不销毁,但是会占用更多内存,尤其是处理大数据的应用,可能会吃掉很多,还有一点就是你要处理,可能要刷新,但是用隐藏就没有办法刷新,且卡住时,关闭再打开这样就无效了。

第二种方法,其实挺简单,核心就是用指针打开窗口,关闭后(这里销毁了)指针就没了,下次打开子窗口时,不会重新启动应用(说人话就是打开应用最开始执行的东西执行不到)所以就会访问野指针,然后程序崩溃;

这边举一个典型示例

按钮一个,然后不是转到槽,而是在程序启动的地方用一个connect来连接按钮,然后捕获,调用东西,然后出问题。

可以把它转到槽,并且采用多重验证,就是判断==nullptr,或者先初始化,之类的。提供一下

复制代码
void Widget::on_pushButton_6_clicked()
{
    if (ppage2 == nullptr) {
        ppage2 = new sonWidget(this);
        ppage2->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
        connect(ppage2, &searchWidget::destroyed, this, [=](){
            ppage2 = nullptr;
        });
        connect(ppage2, &sonWidget::back, this, [=](){
            ppage2->close();
        });
    }
    if (ppage2->isHidden()) {
        ppage2->show();
    } else {
        ppage2->raise();
    }
}

然后这里就简单完成,记得在程序运行的最开始执行代码的地方加一个初始化(nullptr)这里也提供一下

复制代码
ppage2 = nullptr;

这里的ppage2是自己定义的,不是统一的。

崩溃问题就解决了

相关推荐
如竟没有火炬几秒前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划
三品吉他手会点灯17 分钟前
C语言学习笔记 - 32.嵌入式C语言学习阶段对初学编程者的建议
c语言·开发语言·笔记·学习
l1t18 分钟前
DeepSeek总结的一种带宽高效的压缩基数排序FractalSortCPU
开发语言·python
沐知全栈开发20 分钟前
jEasyUI 树形网格动态加载详解
开发语言
Java源头21 分钟前
PHP 身份证二要素检测
开发语言·php
折哥的程序人生 · 物流技术专研25 分钟前
《Java 100 天进阶之路》第21篇:Java Object类
java·开发语言·后端·面试·哈希算法
谙弆悕博士29 分钟前
快速学C语言——第17章:多文件编程与头文件规范
c语言·开发语言·算法·学习方法·头文件·多文件编程
熊猫_豆豆35 分钟前
仿真模拟两颗卫星的自主交会对接过程(Python版)
开发语言·python
三品吉他手会点灯38 分钟前
C语言学习笔记 - 31.数据类型 - 基本输入输出函数printf与scanf
c语言·开发语言·笔记·学习
sycmancia39 分钟前
Qt中的事件处理(二)
开发语言·qt