保存检查物品从uitree单元阵列

43岁的观点(30天)
KostasK
KostasK 2021年9月2日
编辑: 科比冲击 2021年9月30日
你好,
我刚开始使用 uitree 我设计的一个基本的应用程序。我想要做的是保存 NodeData 从每个检查项目在细胞阵列。例如假设有以下代码。
函数mycheckboxtreeapp
无花果= uifigure;
cbt = uitree(图,“复选框”,“位置”,20 150 150);
%分配回调以响应节点检查和选择
认知行为疗法。CheckedNodesChangedFcn = @checkchange;
认知行为疗法。SelectionChangedFcn = @selectchange;
%第一级节点
category1 = uitreenode (cbt,“文本”,“蔬菜”,“NodeData”[]);
category2 = uitreenode (cbt,“文本”,“水果”,“NodeData”[]);
%二级节点。
%节点数据是食物的重量(克)
p1 = uitreenode (category1,“文本”,“黄瓜”,“NodeData”,400);
p2 = uitreenode (category1,“文本”,“胡萝卜”,“NodeData”,65);
p3 = uitreenode (category2,“文本”,“苹果”,“NodeData”,183);
p4 = uitreenode (category2,“文本”,“香蕉”,“NodeData”,120);
%扩大树
扩大(cbt);
%为CheckedNodesChangedFcn创建函数回调
%执行这个函数时,它会显示所有检查项目的总重量
函数checkchange (src、事件)
节点= event.LeafCheckedNodes;
如果~ isempty(节点)
data = [nodes.NodeData];
显示器(和(数据));
结束
结束
%为SelectedNodesChangedFcn创建函数回调
%执行这个函数时,它会显示所选择的项的名称
函数selectchange (src、事件)
节点= event.SelectedNodes;
显示(node.Text);
结束
结束
Pretaining上面的,如果我从树上的所有项目检查,我想要这样的
{[400 65]120 [183]}
类似地,如果我拥有了所有的东西,除了最后一项检查我将得到以下:
{65年[400][183]}
等等……
因为某些原因我不能完成。当我打电话给 cbt.CheckedNodes.NodeData 我得到一个接一个的数字
提前谢谢你的帮助。

接受的答案

科比冲击
科比冲击 2021年9月30日
编辑:科比冲击 2021年9月30日
我认为唯一的好方法是手动过滤通过父母和这样做。所以在checkChange你需要这样做:
如果~ isempty(节点)
父母= [nodes.Parent];
[uniqueParents, sort1 sort2] =独特的(父母);
cellSortedData =细胞(max (sort2), 1);
i = 1:尺寸(节点,1)
cellSortedData {sort2(我),1}(+ 1,- 1)=(我).NodeData节点;% Matlab不爱最后+ 1但honeslty容易多了,如果你有小数字并不重要
结束
结束
现在这种方法将通过你的规格,但它需要更复杂的如果你需要总是输出相同大小cellSortedData(例如,如果你想选择第二个基本节点,希望第一个细胞元素是空的)。不过,不是太难。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!