Qt 在布局里进行窗口切换

原文链接: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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值