首页| 论坛| 消息

回复: 如何动态删除QGridLayout里的控件
#11 [alexltr 01-12 21:04]
引用第10楼jdwx于2011-01-11 21:39发表的 :
是不是可以考虑用对话框,或者用其它的控件和方法。
用对话框也许可以吧。但这好像不符合我的要求,感觉不好看。
而且我还是想知道我的方法为什么不行? 毕竟学习嘛。
#12 [cycloneii 01-12 22:18]
至于这么麻烦吗?我写了一个很简单的测试程序,上面是3x3的qpushbotton矩阵,下面是一个qcombox和一个qpushbutton,从qcombox里面可以选择删除哪一个qpushbutton,如果为空,表示删除全部,按下delete按键,开始删除,没有任何问题,附上代码如下
#13 [cycloneii 01-12 22:35]
其实没有必要每次判断gridlayout是否还有子对象,直接用findchildren之类的函数,一次性的找到所有的子对象,然后用遍历整个子对象队列,删除该子对象即可
#14 [alexltr 01-12 22:58]
我现在的问题不是单单是怎样删除layout里面的pushbutton.
里面的pushbuttons的排列是表示某种等量关系的图示,程序的使用者可以根据不同的选项显示不同的图示。
也就是说,删除原有的pushbuttons后,还要重新产生新的pushbuttons来排列出新的图示。
而在这个过程中,程序运行所占的内存却越来越大,直到使用者关闭程序才释放内存。这才是问题的所在。
而你的程序只解决了如何删除的问题。Thank you anyway.
#15 [cycloneii 01-13 11:29]
引用第14楼alexltr于2011-01-12 22:58发表的:
我现在的问题不是单单是怎样删除layout里面的pushbutton.
里面的pushbuttons的排列是表示某种等量关系的图示,程序的使用者可以根据不同的选项显示不同的图示。
也就是说,删除原有的pushbuttons后,还要重新产生新的pushbuttons来排列出新的图示。
而在这个过程中,程序运行所占的内存却越来越大,直到使用者关闭程序才释放内存。这才是问题的所在。
.......
你把removeAllSizes()改成我的删除方式就可以避免内存泄露了
代码也给你吧,我做过测试了
void SizeLayout::removeAllSizes()
{
QList items = sizeBox->findChildren(QString());
foreach(QPushButton*item, items)
{
delete item;
}
}

<< 1 2 3 4 5 >> (3/5)

回复 发表
主题 版块