qt点按钮切换其他窗口只能用指针吗
用下面的代码不行void Form_login::on_pushButton_clicked(){
Widget w;
w.show();
close();
}
后来查了下用下面代码就可以
void Form_login::on_pushButton_clicked()
{
Widget * w =new Widget;
w->show();
close();
}
main()下面用
Widget w;
w.show();
又能直接显示出来的
本帖最后由 psvajaz 于 2023-3-23 11:55 编辑
其实在开发中不建议使用方法二实现,应该是在父窗体中实现弹窗操作,因为你在同级窗体中调用,会存在资源释放的问题。
代码1:在窗体方法中定义了一个类变量,当调用了类变量show后,把本窗体关掉了,内核会触发释放类变量的资源释放,会出现widget窗体显示后立即被关闭
代码2:因为使用指针调用,关闭窗体后,指针对象不会被立刻销毁,所以会出现正常widget窗体的效果,但是对于资源释放的角度来说,widget的窗体一致存在,无法被释放,容易出现内存溢出 方法二这样,会内存泄漏啊,你这函数执行完,new出来的内存没有被释放,并且你永远无法访问到了..... 阿阿阿阿勇 发表于 2023-3-23 13:17
方法二这样,会内存泄漏啊,你这函数执行完,new出来的内存没有被释放,并且你永远无法访问到了.....
那还有什么好方法切换窗口 第一种不是不行,你直接Widget w; 是在栈上分配的内存。这个方法执行完毕这个w对象就销毁了。
main()中可以使用是因为,你在main()中开始 qt的事件循环QApplication a(argc, argv); return a.exec(); 在程序没有退出前,w不会被销毁,所以你能看到新widget。
你要是想实现窗口切换,可以在主界面中定义一个属性Widget * w,然后在主界面的构造函数中 w =new Widget;使用new 关键字在堆中分配空间。需要显示时,使用w->show();即可 阿阿阿阿勇 发表于 2023-3-23 13:17
方法二这样,会内存泄漏啊,你这函数执行完,new出来的内存没有被释放,并且你永远无法访问到了.....
把Widget * w;写入类的私有变量
第2个代码改成
w = new Widget;
w->show();
close();
再在Form_login的析构函数加入delete语句就可以了吧
比如加入这个
if (w != null)
deletew; dong555 发表于 2023-3-23 17:40
把Widget * w;写入类的私有变量
第2个代码改成
w = new Widget;
这种方法是可以的{:1_921:}
页:
[1]