原文链接:https://blog.csdn.net/u012020854/article/details/77648449
/** 清理一个QLayout中的所有QWidget并放入QList中
* @brief PublicClass::clearLayout
* @param layout
* @param wList
* @return
*/
bool PublicClass::clearLayout(QLayout *&layout,QList<QWidget*>&wList)
{
QLayoutItem *item = NULL;
if(!layout){
setLastError("PublicClass::clearLayout:layout is NULL");
return false;
}
while(NULL!=(item = layout->takeAt(0))){
item->widget()->close();//关闭但不释放
wList.append(item->widget());
item = NULL;
}
return true;
}
/** 清理一个QLayout中的所有QWidget
* @brief PublicClass::clearLayout
* @param layout
* @return
*/
bool PublicClass::clearLayout(QLayout *&layout)
{
QLayoutItem *item = NULL;
if(!layout){
setLastError("PublicClass::clearLayout:layout is NULL");
return false;
}
while(NULL!=(item = layout->takeAt(0))){
item->widget()->close();//关闭但不释放
item = NULL;
}
return true;
}
/** 把QList<QWidget*>放入QLayout中
* @brief PublicClass::addLayoutByWidgetList
* @param wList
* @param layout
*/
void PublicClass::addLayoutByWidgetList(QList<QWidget*>wList, QLayout *layout)
{
clearLayout(layout);
for(int i=0;i<wList.size();++i) {
auto var = wList.at(i);
layout->addWidget(var);
}
}
/** 把QWidget放入QLayout中
* @brief PublicClass::addLayoutBy
* @param w
* @param layout
*/
void PublicClass::addLayoutBy(QWidget*&w, QLayout*&layout)
{
clearLayout(layout);
layout->addWidget(w);
}
/** 删除layout中的所有控件
* @brief PublicClass::deleteLayoutItems
* @param layout
*/
void PublicClass::deleteLayoutItems(QLayout*layout)
{
QLayoutItem *item = NULL;
while(NULL!=(item = layout->takeAt(0))){
delete item->widget();//释放
delete item;
item = NULL;
}
}
我是因为要在同一个widget里的layout里交替放置不同的chartView,就是可以根据自己的需求chartView可以在layout里随意切换。而layout只有addwidget()增加chartview,切换之前必须要把layout清空,不然一个layout里会有多个view打挤的情况,达不到要求。也是尝试了很多方法,才找到这个办法,每次要放chartview之前,先把layout中的所有控件清空,这样就保证了每次layout里只有一个我要展示的view,完美的解决了问题。我只用了下面这一个清空的方法就ok了。
void PublicClass::deleteLayoutItems(QLayout*layout)
{
QLayoutItem *item = NULL;
while(NULL!=(item = layout->takeAt(0))){
delete item->widget();//释放
delete item;
item = NULL;
}
}