QLayout及其子类 清除添加的widget
起初,我的思路是,先取得Layout的items数量, 然后通过索引来移除每一个items,代码如下:
QHBoxLayout * hly = new QHBoxLayout;
for(int i = ; i < ; i++)
{
QPushButton * btn = new QPushButton;
hly->addWidget(btn);
}
int hlyCount = hly->count();
qDebug()<<"hlyCount =="<<hlyCount;
for(int i = ; i < hlyCount; i++)
{
QLayoutItem * item = hly->itemAt(i);
hly->removeItem(item);
qDebug()<<"remove item "<<i;
}
hlyCount = hly->count();
qDebug()<<"hlyCount =="<<hlyCount;
而输出结果有些意外:
::: Starting E:\Qt_projcet\play\build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug\debug\play.exe...
hlyCount ==
remove item
remove item
remove item
remove item
remove item
hlyCount ==
::: E:/Qt_projcet/play/build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug/debug/play.exe exited with code
查看Qt帮助手册有解释,itemAt()有三点值得关注:
-If there is no such item, the function must return
-如果子项不存在,返回零 -Items are numbered consecutively from
-item的排序从零开始 -If an item is deleted, other items will be renumbered.
-如果子项被删除,其他子项将被从新排序
哇~看到这里,知道了答案。下面看一下更改后的代码:
QHBoxLayout * hly = new QHBoxLayout;
for(int i = ; i < ; i++)
{
QPushButton * btn = new QPushButton;
hly->addWidget(btn);
}
int hlyCount = hly->count();
qDebug()<<"hlyCount =="<<hlyCount;
for(int i = hlyCount - ; i >= ; i--) //###改动:items编号,从大到小遍历
{
QLayoutItem * item = hly->itemAt(i);
if (item != nullptr) //###改动:判断子项是否存在
hly->removeItem(item);
qDebug()<<"remove item "<<i;
}
hlyCount = hly->count();
qDebug()<<"hlyCount =="<<hlyCount;
运行结果:
::: Starting E:\Qt_projcet\play\build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug\debug\play.exe...
hlyCount ==
remove item
remove item
remove item
remove item
remove item
hlyCount ==
::: E:/Qt_projcet/play/build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug/debug/play.exe exited with code
ok了
QLayout及其子类 清除添加的widget的更多相关文章
- 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren
前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...
- ArcGIS API for JavaScript 4.2学习笔记[10] 2D添加指北针widget、视图保存、视图padding(第二章完结)
这几个例子是第二章除了入门之外比较简单的几个,就做个合集,把最核心的代码(第二参数)和 引用放上来即可,不作多解释. 2D地图添加指北针widget 2D地图一般修正方向为正北方就需要这个widget ...
- 给你的app添加桌面widget
首先,什么是桌面widget,桌面widget是一种桌面插件,如下图: 这种类型的控件叫做widget,一般长按桌面会弹出一个界面让你选择控件,选择完了拖到桌面就能使用了. 下面我们为这个app来添加 ...
- 设计模式-Composite(结构型模式) 用于 递归构建 树 状 的组合结构,与Decorator的区别是 Composite旨在通过构造子类而添加新操作,而Decorator直接添加新操作。
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Component.h #pragma once class Component { public: Component( ...
- 三种方法为QLineEdit添加清除内容按钮
很多时候我们会发现输入的一长串内容不得不全部删除重新输入,这时比起一直按着退格键不放一个清除内容按钮更受欢迎. 今天我将介绍三种为QLineEdit添加清除内容按钮的方法,其中两种方法有较强的功能针对 ...
- PagerTabStrip在ViewPager的页面中添加标题显示
package com.qf.day18_viewpager_demo_05; import java.util.ArrayList; import java.util.List; import an ...
- Android 之窗口小部件详解--App Widget
Android 之窗口小部件详解--App Widget 版本号 说明 作者 日期 1.0 添加App Widge介绍和示例 Sky Wang 2013/06/27 1 App ...
- Qt 给QWidget添加工具栏
在Qt中,给主窗口(QMainWindow类)添加工具栏非常方便,直接使用addToolBar 即可,如下所示: fileToolBar = addToolBar(tr("&File ...
- 使用 Android Studio 开发 widget 安卓桌面插件
•What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...
随机推荐
- ssl与ssh
openssl genrsa -out private_key.pem 1024 ssh-keygen -t rsa -C zzf073@163.com ssl是安全会话协商机制: ssh是安全访问机 ...
- C#写日志工具类
代码: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System ...
- Attract队作品简介
湖南师范大学 Attract队 荣获“航天宏图杯”PIE遥感图像处理软件二次开发大赛二等奖 作品名称:基于深度学习的遥感影像分类系统-以长沙市居住区分类为例 团队简介:周亮(指导老师).张慧(组长) ...
- Python语言获取目录下所有文件
#coding=utf-8# -*- coding: utf-8 -*-import osimport sysreload(sys) sys.setdefaultencoding('utf-8') d ...
- css样式篇
list-style list-style-type 设置列表项标记的类型 list-style-position 可设置outside(列表项目标记放置在文本以内,且环绕文本根据标记对齐) ...
- php 使用fsockopen 发送http请求
需求背景 在公司开发这么一个需求,每天三次定时催付待客服催付状态的订单,设定每天15.16.17点三次执行job任务来给一批订单打电话催付,需要三个时间点都把待客服催付的订单拨打一遍电话,根据数据组统 ...
- charles代理设置与数据劫持
1.安装charles,点击帮助——ssl代理——在移动设备或远程浏览器上安装charles root证书,看到如下界面: 2.在手机保证和电脑连接同一个wifi的前提下,开启手机代理,输入服务器地址 ...
- 【React】Redux入门 & store体验
组件间传值联动是令人头疼的问题,尤其是一个组件影响多个其他组件状态变化的时候,常常需要一级一级与父组件传值,与父组件的兄弟组件传值等等, 如何化繁为简地处理‘牵一发动全身’的清理就是将所有组件的sta ...
- docker数据卷之持久化操作
docker Docker三大核心组件:(运行起来的镜像就可以称作容器) Docker 镜像--Dcoker images:类比与类 Docker 仓库--Docker registeries: Do ...
- JavaScript实现的图片循环播放
直接上干货 <html> <head> <title>Banner Cycler</title> <script> var banners ...