Qt框架新建QWidget内添加QLabel不显示问题求助
问题根因
- 你代码中的
QLabel label1是函数内的栈局部变量,当on_btn_edit_clicked回调函数执行完成后,栈空间会被回收,label1对象会被自动析构销毁,因此弹出的窗口中已经不存在该Label对象,自然无法显示。
修复方案
最常用的修复方式是将QLabel改为堆上创建,依托Qt的父子对象自动回收机制避免内存泄漏,修改后的代码如下:
void maquette::on_btn_edit_clicked() { QWidget* wdg = new QWidget; wdg->resize(320, 340); wdg->setWindowTitle("Modiffier"); // 堆上创建QLabel,父对象绑定为wdg,wdg销毁时会自动回收label内存 QLabel* label1 = new QLabel("matricule", wdg); label1->setGeometry(100, 100, 100, 100); wdg->show(); }
可选替代方案
如果不想用堆分配,也可以将QLabel声明为maquette类的成员变量,函数执行完成后成员变量不会被销毁,也可以正常显示。需要注意如果多次点击按钮创建多个窗口,成员变量只会保留最后一个创建的Label的引用,可根据业务需求选择对应方案。
内容的提问来源于stack exchange,提问作者yassine
相关产品推荐
相关产品推荐

