需求是这样的,在点击的槽函数中创建一个子Widget并show出来,一开始代码如下
void LeftWidget::createPtn_clicked(){
LeftWidgetCreateWidget *_createWidget = new LeftWidgetCreateWidget(this->parentWidget()->parentWidget());
_createWidget->show();
}
这样是肯定不行的,因为每一次点击按钮都会创建出一个新的Widget,而widget的close并不会使其释放资源,只是隐藏了这个widget的窗口,运行后期大量的widget会严重占用内存资源。
比较普遍的解决方法是使用setAttribute(Qt::WA_DeleteOnClose, true);
setAttribute(Qt::WA_DeleteOnClose, true);
为widget设置close就释放资源的额属性。
但是这样做会导致widget频繁的释放和建立,也影响效率,于是我最终采用了如下方案
void LeftWidget::createPtn_clicked(){
static LeftWidgetCreateWidget *_createWidget = new LeftWidgetCreateWidget(this->parentWidget()->parentWidget());
_createWidget->show();
}
在声明前添加了一个static,使指针成为局部静态变量,从而无论用户点击多少次只有一个子widget隐藏在后台。下面测试一下效果,在_createWidget的构造函数中输出“创建”,并多次点击按钮触发函数
发现永远只创建一次!成功!