QT局部变量内存释放问题

图片说明

上图圈红的代码,按钮不显示。我可以理解为。函数调用栈内存释放。导致按钮对象被释放。

图片说明

这个图中的QPainter q
不是也是局部变量对象么,为什么就能将资源图片显示到窗体上呢?

由于这两个的区别,我有点不确定以后开发,应该如何构建对象了。我是C++、QT新手。不知道哪个知识没有学到位,请各位大拿指点下,谢谢。

4个回答

问题1:楼主分析的很对,确实是栈上的被释放
T推荐是在堆中申请内存
就是QPushButton *pushbutton=new QPushButton();

基本qt里面的layout啊,widget啊editline啊云云各种控件啊布局啊,还有animation啊musicplayer啊
都是推荐使用new的,到时候可以在构造函数里面写个this->setAttribute(Qt::WA_DeleteOnClose);
再在析构函数里面统一析构

问题2:这里的p是栈上的,但是它调用drawPixmap时候是对ui进行操作的。p没了但是ui还在
看这句话
头文件的 Ui::Widget *ui;
再在构造函数的实现看new Ui::Widget
可以看出ui是堆中的
就像A改变B,A消失了,但是在B身上的痕迹不会消失。除非析构B。
举个实例就是
A*a=new A()
void fun()
{
b=3
a.任意属性=b
}
是的b'没了但是a改变了

ruyulin
ruyulin 谢谢。
一年多之前 回复

变量p相当于一个画笔,把图都画完了这个笔存不存在都无所谓了,绘出来的图在画布上,是不会消失的。这样容易懂了吧

因为变量虽然是局部的,但是指针分配在堆上面,bitmap就可以读取的。

因为pointer的parent被指向了this

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!