qt窗口跳转问题

chenbingliang 2012-10-31 05:40:39
我设置了三个窗口,一个主窗口Main,在主窗口里声明了B窗口的指针对象 B *b;在Main窗口点击按钮之后show出B窗口
b = new B;
b->show();
this->close();
然后在Main的析构函数里delete了对象b,紧接着在窗口B中close的时候出现段错误,调试的时候发现原因是Main里delete了对象b。想请问窗口跳转还有其他方法吗?
...全文
316 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
乔巴好萌 2012-11-01
  • 打赏
  • 举报
回复
你不要在主窗口main里维护b对象
可以另外创建一个全局对象来负责这些窗口间的同步
比如
QWidgetHandler *handler = new QWidgetHandler;
QObject::connect( main,SIGNLA(close()),this,SLOT(handleMainClose());
然后在handleMainClose里处理主窗口的隐藏事件
乔巴好萌 2012-11-01
  • 打赏
  • 举报
回复

你原来的问题可以归结为
在main的入口处 设置一个“超级”对象,这个对象的生存期是比你要显示和隐藏的那2个对象的生存期长的
由这个超级对象来负责同步2个窗口的隐藏和显示

你原来的问题 是2个widget对象互相耦合
比如 A 包含 B 但B创建又依赖A A在创建B之前又已经被释放

chenbingliang 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
每个窗口的构造函数里增加一行代码:
setAttribute(Qt::WA_DeleteOnClose);

xxxxxxshowwindow()//显示新窗口的槽
{
xxxxwindow *w = new xxxxwindow;
w.show();
close();
}
[/Quote]
楼上的 就是这个xxxxwindow 定义的*w 我需要去delete它吗?还有我发现我的主窗口跳转到B窗口的时候 在退出B窗口时程序执行了主窗口的析构函数 主函数的析构函数里面delete了B窗口的对象。此时出现了段错误。还有若是在主窗口定义Qt::WA_DeleteOnClose,窗口无法跳转。 纠结中
jdwx 2012-11-01
  • 打赏
  • 举报
回复
每个窗口的构造函数里增加一行代码:
setAttribute(Qt::WA_DeleteOnClose);

xxxxxxshowwindow()//显示新窗口的槽
{
xxxxwindow *w = new xxxxwindow;
w.show();
close();
}
chenbingliang 2012-11-01
  • 打赏
  • 举报
回复
再问一下 就是我在弹出B窗口、close掉Main窗口的时候,Main的析构函数用不用delete掉B对象
chenbingliang 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你应该在B的关闭事件中delete掉自己
[/Quote]
我没有重写closeEvent 就是弄了个按钮 添加了信号槽 在点击按钮后close掉B窗口 析构函数里面没有delete掉B窗口自己 我要delete this吗?
chenbingliang 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
干脆就不要delete只要hide不要的窗口,show需要的,只是占用内存多些,现在的PC内存都很大,不差这点内存。
[/Quote]
我是放在ARM板上跑的程序 内存吃紧 希望做到严谨一些 有没有其他好的窗口跳转方法
chenbingliang 2012-11-01
  • 打赏
  • 举报
回复
是否可以在new出一个窗口对象时直接设置窗口关闭后自动释放?

B *b = new B;
b->setAttribute(Qt::WA_DeleteOnClose,true);
b->show();
chenbingliang 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
你不要在主窗口main里维护b对象
可以另外创建一个全局对象来负责这些窗口间的同步
比如
QWidgetHandler *handler = new QWidgetHandler;
QObject::connect( main,SIGNLA(close()),this,SLOT(handleMainClose());
然后在handleMainClose里处理主窗口的隐藏事件
[/Quote]
谢谢你的回复 对于这种方法 那我在handleMainClose函数里面要操作什么?show出新窗口吗?是不是也用new?
  • 打赏
  • 举报
回复
你应该在B的关闭事件中delete掉自己
jdwx 2012-10-31
  • 打赏
  • 举报
回复
干脆就不要delete只要hide不要的窗口,show需要的,只是占用内存多些,现在的PC内存都很大,不差这点内存。

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧