QLayout及其子类 清除添加的widget

起初,我的思路是,先取得Layout的items数量, 然后通过索引来移除每一个items,代码如下:

    QHBoxLayout * hly = new QHBoxLayout;

    for(int i = 0; i < 5; i++)
    {
        QPushButton * btn = new QPushButton;
        hly->addWidget(btn);
    }

    int hlyCount = hly->count();
    qDebug()<<"hlyCount =="<<hlyCount;

    for(int i = 0; i < hlyCount; i++)
    {
        QLayoutItem * item = hly->itemAt(i);
        hly->removeItem(item);
        qDebug()<<"remove item "<<i;
    }

    hlyCount = hly->count();
    qDebug()<<"hlyCount =="<<hlyCount;

而输出结果有些意外:

11:21:42: Starting E:\Qt_projcet\play\build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug\debug\play.exe...
hlyCount == 5
remove item  0
remove item  1
remove item  2
remove item  3
remove item  4
hlyCount == 2
11:21:58: E:/Qt_projcet/play/build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug/debug/play.exe exited with code 0

查看Qt帮助手册有解释,itemAt()有三点值得关注:

1-If there is no such item, the function must return 0
1-如果子项不存在,返回零

2-Items are numbered consecutively from 0
2-item的排序从零开始

3-If an item is deleted, other items will be renumbered.
3-如果子项被删除,其他子项将被从新排序

哇~看到这里,知道了答案。下面看一下更改后的代码:

    QHBoxLayout * hly = new QHBoxLayout;

    for(int i = 0; i < 5; i++)
    {
        QPushButton * btn = new QPushButton;
        hly->addWidget(btn);
    }

    int hlyCount = hly->count();
    qDebug()<<"hlyCount =="<<hlyCount;

    for(int i = hlyCount - 1; i >= 0 ; i--)    //###改动:items编号,从大到小遍历
    {
        QLayoutItem * item = hly->itemAt(i);
        if (item != nullptr)                  //###改动:判断子项是否存在
            hly->removeItem(item);
        qDebug()<<"remove item "<<i;
    }

    hlyCount = hly->count();
    qDebug()<<"hlyCount =="<<hlyCount;

运行结果:

11:44:34: Starting E:\Qt_projcet\play\build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug\debug\play.exe...
hlyCount == 5
remove item  4
remove item  3
remove item  2
remove item  1
remove item  0
hlyCount == 0
11:44:43: E:/Qt_projcet/play/build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug/debug/play.exe exited with code 0

ok了

 

原文链接: https://www.cnblogs.com/azbane/p/11617138.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    QLayout及其子类 清除添加的widget

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/398523

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月12日 上午9:42
下一篇 2023年4月12日 上午9:42

相关推荐