回复: 如何动态删除QGridLayout里的控件
#6 [alexltr 01-09 15:01]
用Cofei的方法可以删除控件,不用hide()函数了。
但程序还是越运行所占的内存越大,找了很久不知是什么原因。
这个小程序的功能主要是根据不同的选项用PushButton在Layout中显示不同内衣的等码表。每显示一次前先将前一次显示的PushButton全部删掉。程序的主要代码如下:
void SizeLayout::showSizeLayout()
{
setViewType();
removeAllSizes();
setSizeFont();
int rowSpeed=rowSpeedSpin->value();
int columnSpeed=columnSpeedSpin->value();
QPalette pal=palette();
pal.setColor(QPalette::ButtonText,Qt::blue);
for(int row=0; rowsetStyleSheet ("background-color: rgb(180,180,180);color: rgb(15,15,15);");
sizeLayout->addWidget(sizeButton,row,column+row);
sleep(columnSpeed);
}
sleep(rowSpeed);
}
}
void SizeLayout::removeAllSizes()
{
QLayoutItem *sizeBtn;
wh ..
#7 [算了不说了 01-10 11:12]
删除方法不对.
gridlayout->removeWidget(gridlayout->itemAt(x)->widget());
#8 [alexltr 01-10 22:00]
引用第7楼算了不说了于2011-01-10 11:12发表的 :
删除方法不对.
gridlayout->removeWidget(gridlayout->itemAt(x)->widget());
已测试过,单用此法无法真正删除。还是显示在layout里.
还是要用4楼cofei的方法才可以真正从视觉上删除掉。
但内存占用问题还是没有解决,还是会越来越大。
void SizeLayout::removeAllSizes()
{
QLayoutItem *sizeBtn;
while((sizeBtn=sizeLayout->takeAt(0)) !=0)
{
sizeLayout->removeWidget(sizeBtn->widget());
sizeBtn->widget()->setParent(0);
delete sizeBtn;
}
}
#9 [alexltr 01-11 20:24]
现在我上传所有的代码,请大家多多指点。试看是否可以找出内存问题的所在。
这是我的第一个QT小程序,没有什么实际应用功能。是边学边写的,主要是应用和检验自己所学的内容。
开头的构造函数可能有点臃肿,按道理应该分开几个SLOT写的。
#10 [jdwx 01-11 21:39]
是不是可以考虑用对话框,或者用其它的控件和方法。