Qt里怎么从layout里移除控件

微雨流光 2012-12-12 10:41:38
1个4x4的gridlayout 有16个窗体

现在变为3x3 想先把里面的窗体都移除 然后再加入9个

调用removeWidget方法似乎无效 求解应该如何从layout里移除widget?

right_above_layout->removeWidget(vec_VideoWidget[i]);
...全文
1521 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdwx 2012-12-16
  • 打赏
  • 举报
回复 1
也就是两步: 1:layout->removeWidget(widget); 2:widget->deleteLater(); 很多个就要每个都做一遍。
Jonix 2012-12-16
  • 打赏
  • 举报
回复
delete 控件名;
songhuirong1 2012-12-13
  • 打赏
  • 举报
回复
我最近在公司做一个项目,刚好有这个需求,我贴出这部分代码,自己慢慢去研究吧。
void CentralWidget::setDrivePlateAddrAndElectronStorageCabinetCount(int drivePlateAddr, int electronStorageCabinetCount)
{
    int prevCount = info->getElectronStorageCabinetCount();

    for(int i = 0; i < prevCount; ++i)
    {
        delete labels[i];
        labels[i] = NULL;
    }

    labels.clear();

    for(int i = 0; i < electronStorageCabinetCount; ++i)
        labels.append(new Label(this));

    for(int i = 0; i < electronStorageCabinetCount; ++i)
    {
        int row = i / LINE_COUNT;
        int column = i % LINE_COUNT;
        gridLayout->addWidget(labels[i], row, column);
    }

    for(int i = 0; i < labels.count(); ++i)
    {
        connect(labels[i], SIGNAL(updateBoxDoorCheckState(int)), this, SLOT(updateBoxDoorCheckState(int)));
        connect(labels[i], SIGNAL(updateGoodsCheckState(int)), this, SLOT(updateGoodsCheckState(int)));
    }

    info->initInfo(drivePlateAddr, electronStorageCabinetCount);
}
微雨流光 2012-12-13
  • 打赏
  • 举报
回复
引用 2 楼 heksn 的回复:
直接把gridlayout delete掉试试
好像也不行
  • 打赏
  • 举报
回复
直接把gridlayout delete掉试试
微雨流光 2012-12-12
  • 打赏
  • 举报
回复

16,199

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧