您尚未登录。

楼主 #1 2021-01-21 19:17:44

Eden
会员
注册时间: 2020-05-22
已发帖子: 31
积分: 27.5

请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

1.我在.h文件中创建了控件的指针,然后再构造函数里面给指针分配,编译没有问题,放到板子上就出现段错误,试过不在.h文件里面而在构造函数里面创建指针,运行之后也会出现段错误  如图:
%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20210121185006.png

2.我看到网上的资料,需要用到多窗口时都是重新建一个类(sub_widget),然后在主窗口(main_widget)定义一个新类的对象, 通过hide()和show()分别隐藏和显示窗口
我想要释放资源所以把hide换成了close,也在sub_widget里面设置了Qt::WA_DeleteonClose这个参数,可是第二次进入sub_widget的时候就会挂掉。
请问有什么其他方法可以在关闭窗口的时候同时释放掉资源吗,或者是我上面的这种方法用的不恰当

离线

#2 2021-01-22 08:12:05

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,138
积分: 1090.5

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

close之后要delete那个widget/window指针分配的对象
close之后如果再用这个指针需要再new一个新widget/Window给指针

离线

楼主 #3 2021-01-22 14:28:08

Eden
会员
注册时间: 2020-05-22
已发帖子: 31
积分: 27.5

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

达克罗德 说:

close之后要delete那个widget/window指针分配的对象
close之后如果再用这个指针需要再new一个新widget/Window给指针

你好,我按照你说的测试了一下,代码如下,这样子依然会有错误,如果析构函数里面不delete sub就没有问题,请问该怎么修改呢
2.png

离线

#4 2021-01-22 15:05:19

心情复杂
会员
注册时间: 2019-12-15
已发帖子: 37
积分: 30

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

为啥要this->close();

离线

楼主 #5 2021-01-22 15:50:01

Eden
会员
注册时间: 2020-05-22
已发帖子: 31
积分: 27.5

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

心情复杂 说:

为啥要this->close();

sub_widget 是一个新的窗口,按钮按下之后的操作不应该是把Main_widget 关掉然后再去打开新的窗口吗

离线

#6 2021-01-22 17:13:35

心情复杂
会员
注册时间: 2019-12-15
已发帖子: 37
积分: 30

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

Eden 说:
心情复杂 说:

为啥要this->close();

sub_widget 是一个新的窗口,按钮按下之后的操作不应该是把Main_widget 关掉然后再去打开新的窗口吗

你是通过Main_widget来创建sub_widget的 那你第一次点按钮之后就把他close了 那以后咋办 难道你的按钮只用一次的?

离线

楼主 #7 2021-01-22 17:48:19

Eden
会员
注册时间: 2020-05-22
已发帖子: 31
积分: 27.5

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

心情复杂 说:
Eden 说:
心情复杂 说:

为啥要this->close();

sub_widget 是一个新的窗口,按钮按下之后的操作不应该是把Main_widget 关掉然后再去打开新的窗口吗

你是通过Main_widget来创建sub_widget的 那你第一次点按钮之后就把他close了 那以后咋办 难道你的按钮只用一次的?

你好,我是想实现这个功能:
有Main,Sub两个界面,界面上分别有一个按钮, 按下界面Main的按钮之后,跳转到Sub界面同时把Main界面的资源释放掉,再Sub界面按下按钮之后重新绘制Main界面同时把Sub界面的资源释放
我的理解是:在Main界面按下按钮时,使用close关掉这个界面,同时创建sub界面,这样子的话按钮应该就是一次性的,按完之后这个界面关闭,跳到其他界面,如果不用close的话是不是就是 sub界面把main界面覆盖了而已,Main界面还是存在的
上面在析构函数里面delete sub感觉好像是不对的,因为close会触发它的析构函数,但是这样子不知道在哪里释放sub这个指针

您方便留个联系方式吗,我好向您请教

离线

#8 2021-01-22 19:35:18

心情复杂
会员
注册时间: 2019-12-15
已发帖子: 37
积分: 30

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

Eden 说:
心情复杂 说:
Eden 说:

sub_widget 是一个新的窗口,按钮按下之后的操作不应该是把Main_widget 关掉然后再去打开新的窗口吗

你是通过Main_widget来创建sub_widget的 那你第一次点按钮之后就把他close了 那以后咋办 难道你的按钮只用一次的?

你好,我是想实现这个功能:
有Main,Sub两个界面,界面上分别有一个按钮, 按下界面Main的按钮之后,跳转到Sub界面同时把Main界面的资源释放掉,再Sub界面按下按钮之后重新绘制Main界面同时把Sub界面的资源释放
我的理解是:在Main界面按下按钮时,使用close关掉这个界面,同时创建sub界面,这样子的话按钮应该就是一次性的,按完之后这个界面关闭,跳到其他界面,如果不用close的话是不是就是 sub界面把main界面覆盖了而已,Main界面还是存在的
上面在析构函数里面delete sub感觉好像是不对的,因为close会触发它的析构函数,但是这样子不知道在哪里释放sub这个指针

您方便留个联系方式吗,我好向您请教

请教倒不用,我也是个Qt菜鸟。:rolleyes:
可以提供点思路给你
你可以在A对象的btn的槽函数里:定义B对象 绑定信号A1到 B的槽 B1 B->Show();  发送信号A1 将A对象的Close和Delete放到B的槽函数里
反之亦然

离线

#9 2021-01-23 21:31:20

Dillon
会员
注册时间: 2017-12-15
已发帖子: 7
积分: 6.5

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

按照楼主描述的需求,可以创建一个继承自qobject类的管理类,
它持有mainwindow和subwidget对象指针,实例化mainwindow并显示,创建2个槽函数,分别响应mianwindow和subwidget关闭信号,槽函数里实例化另一个窗口并显示,同时也要再次连接信号槽。2个窗口设置关闭自动释放内存。

离线

楼主 #10 2021-01-25 09:26:39

Eden
会员
注册时间: 2020-05-22
已发帖子: 31
积分: 27.5

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

心情复杂 说:
Eden 说:
心情复杂 说:

你是通过Main_widget来创建sub_widget的 那你第一次点按钮之后就把他close了 那以后咋办 难道你的按钮只用一次的?

你好,我是想实现这个功能:
有Main,Sub两个界面,界面上分别有一个按钮, 按下界面Main的按钮之后,跳转到Sub界面同时把Main界面的资源释放掉,再Sub界面按下按钮之后重新绘制Main界面同时把Sub界面的资源释放
我的理解是:在Main界面按下按钮时,使用close关掉这个界面,同时创建sub界面,这样子的话按钮应该就是一次性的,按完之后这个界面关闭,跳到其他界面,如果不用close的话是不是就是 sub界面把main界面覆盖了而已,Main界面还是存在的
上面在析构函数里面delete sub感觉好像是不对的,因为close会触发它的析构函数,但是这样子不知道在哪里释放sub这个指针

您方便留个联系方式吗,我好向您请教

请教倒不用,我也是个Qt菜鸟。:rolleyes:
可以提供点思路给你
你可以在A对象的btn的槽函数里:定义B对象 绑定信号A1到 B的槽 B1 B->Show();  发送信号A1 将A对象的Close和Delete放到B的槽函数里
反之亦然

好的,谢谢您,我去试一下

离线

楼主 #11 2021-01-25 09:27:54

Eden
会员
注册时间: 2020-05-22
已发帖子: 31
积分: 27.5

Re: 请教,qt多窗口时怎样释放资源,还有创建控件指针出现段错误

Dillon 说:

按照楼主描述的需求,可以创建一个继承自qobject类的管理类,
它持有mainwindow和subwidget对象指针,实例化mainwindow并显示,创建2个槽函数,分别响应mianwindow和subwidget关闭信号,槽函数里实例化另一个窗口并显示,同时也要再次连接信号槽。2个窗口设置关闭自动释放内存。

好的,我去试一下,谢谢您

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn