duilib 修复CTreeViewUI复选功能判断不准确的bug

转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42265209

        CTreeViewUI里面自带了复选的功能,但是复选功能存在bug:

        1)当一个分组下面存在子项时,子项被手动全选后,分组的复选框没有自动变为选中状态

         

        2)当一个分组下面存在子项时,当所有子项都取消选中状态时,分组的复选框还是选中状态

      

        分组的CTreeNodeUI控件应该自动判断是否为选中状态,bug被修复后的效果如下:

      

修复过程:


       当某个复选框被单击后会触发CTreeViewUI控件的OnCheckBoxChanged函数,这时应该在这里做出判断,来决定分组的选中状态,为此我给CTreeNodeUI控件增加了IsAllChildChecked函数。

      修改后的OnCheckBoxChanged函数如下:

	bool CTreeViewUI::OnCheckBoxChanged( void* param )
	{
		TNotifyUI* pMsg = (TNotifyUI*)param;
		if(pMsg->sType == _T("selectchanged"))
		{
			CCheckBoxUI* pCheckBox = (CCheckBoxUI*)pMsg->pSender;
			CTreeNodeUI* pItem = (CTreeNodeUI*)pCheckBox->GetParent()->GetParent();
			SetItemCheckBox(pCheckBox->GetCheck(),pItem);

			if(pItem->GetParentNode() != NULL)  //edit by:Redrain  2014.12.11
				pItem->GetParentNode()->IsAllChildChecked();

			return true;
		}
		return true;
	}

        当某个复选框被单击后,去通知他的父控件,让父控件判断是否应该是选中状态。为CTreeNodeUI控件增加的IsAllChildChecked函数如下:

	void CTreeNodeUI::IsAllChildChecked()
	{
		bool bIsAllChildChecked = true;
		bool bIsAllChildUncheck = true;
		int nCount = GetCountChild();
		if(nCount > 0)
		{
			for(int nIndex = 0;nIndex < nCount;nIndex++)
			{
				CTreeNodeUI* pItem = GetChildNode(nIndex);
				if(!pItem->GetCheckBox()->IsSelected())
				{
					bIsAllChildChecked = false;
				}
				else
				{
					bIsAllChildUncheck = false;
				}
			}
			if (bIsAllChildChecked && !GetCheckBox()->IsSelected())
			{
				GetCheckBox()->Selected(true);
				return;
			}
			else if (bIsAllChildUncheck && GetCheckBox()->IsSelected())
			{
				GetCheckBox()->Selected(false);
				return;
			}

		}

	}

总结:


      bug的修复代码已经提交到我自己的Duilib库。

      我的Duilib库代码下载地址:点击打开链接

  Redrain  2014.12.30

时间: 2024-09-20 05:39:19

duilib 修复CTreeViewUI复选功能判断不准确的bug的相关文章

Flex 扩展combobox 实现复选功能

原文:Flex 扩展combobox 实现复选功能      前段时间,老大召唤,给个任务,研究一下flex的combobox控件 实现复选功能(flex自带的combobox控件不可以复选),小兵能力有限,哪里可以扩展呀,网上看了别人写的,发现总是有点瑕疵(关键是还没有注释这个是最蛋疼的):      1.静态数据源正常,动态数据源 第一次点击时 没有取到数据,下拉列表为空.      2. ROLL_OVER  ROLL_OUT 监听混乱,选择一项后下拉框突然收缩了,或者选择几项下拉框突然收

duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug

转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947         这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够好,后来重新修改了代码,并记录到博客. 问题描述:         在仿酷狗程序中,动态添加音乐项目到播放列表里,这是必须的功能,动态添加的功能已经做好.但是我发现,当一个分组本来在收缩状态下,这是给它动态添加音乐项目就会发生很搞笑的问题:分组是收缩状态,而动态添加的项目却显示了出来

duilib 修复 容器控件 rightbordersize和bottombordersize属性显示错误的bug

转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/45560943         DuiLib的容器控件可以用bordersize统一指定边框宽度,也可以用rightbordersize.bottombordersize等属性单独指定某一个边框的宽度.但是rightbordersize.bottombordersize属性显示时存在问题,当给他们设置边框为1的时候是无法显示的,只有设置为2时才会显示.         跟踪

Qt之QTableView添加复选框(QAbstractTableModel)

简述 使用QTableView,经常会遇到复选框,要实现一个好的复选框,除了常规的功能外,还应注意以下几点: 三态:不选/半选/全选 自定义风格(样式) 下面我们介绍一下常见的实现方式: 编辑委托. 方式:利用委托重载createEditor(),激活QCheckBox. 特点:必须双击/选中,才能显示CheckBox控件.一般不满足实际中的直接显示的需要. 使用QTableView的setIndexWidget(const QModelIndex &index, QWidget *widget

win8系统消除文件复选框方法

1.打开win8桌面上的"这台电脑",然后在工具栏上点击"查看"并在展开的工具里选择"选项";如图: 2.打开"文件夹选项",然后点击"查看"切换到查看页面,将"使用复选框以选择项"取消选择并确定即可消除文件夹复选功能,反之即开启.   Win8.1系统在很多细节方面更人性化了,用户会慢慢接受这些新功能,并大幅提高操作效率.

JQuery判断checkbox是否选中及其它复选框操作方法合集_jquery

一.jquery判断checkbox是否选中及改变checkbox状态 jquery判断checked的三种方法: 复制代码 代码如下: .attr('checked):   //看版本1.6+返回:"checked"或"undefined" ;1.5-返回:true或false .prop('checked'): //16+:true/false .is(':checked'):    //所有版本:true/false//别忘记冒号哦 jquery赋值check

java 自动填写表单之下拉框,复选框的判断及操作

问题描述 java 自动填写表单之下拉框,复选框的判断及操作 我想用java实现一个网页的自动填写功能,例如工商局的工商注册页面的注册,现在我不知道该如何处理下拉选和复选框,现在我能实现按下tab,然后自动填写表单的输入框,再按tab键然后在自动填写下一个输入框,现在我无法判断下一个是输入框,复选框或下拉选,以及之后该如何操作 解决方案 下拉框可以用 SetAttribute("value", "sec"); 这样试试 SetAttribute("sele

jQuery获取复选框被选中数量及判断选择值的方法详解_jquery

本文实例讲述了jQuery获取复选框被选中数量及判断选择值的方法.分享给大家供大家参考,具体如下: 获取复选框被选中值 <input type="button" id="btn5" value="获得选中的所有值"> <input type="text" name="dd" id="dd" size="50" /> $("#btn5&

JS实现CheckBox复选框全选、不选或全不选功能_javascript技巧

CheckBox控件表明一个特定的状态(即选项)是选定 (on,值为1) 还是清除 (off,值为0).在应用程序中使用该控件为用户提供"True/False"或"yes/no"的选择.因为 CheckBox 彼此独立工作,所以用户可以同时选择任意多个 CheckBox,进行选项组合. CheckBox复选框JS实现全选.不选.全不选功能,很简单,具体内容如下 思路: 1.获取元素 2.给全选 不选 反选添加点击事件 3.用for循环checkbox 4.把chec