• 7012阅读
  • 1回复

【提问】checklist树型复制问题 [复制链接]

上一主题 下一主题
离线flyingwind
 
只看楼主 倒序阅读 楼主  发表于: 2006-01-11
已知一个层次不确定的带可选框的树型目录,现在要复制他的结点,条件是如果某个结点的所有孩子结点都被选中,则复制该结点(但是不能复制其孩子结点)。
例:
a
  b
    c
          child
    d
    e
  f
    g
    h
如果 b及其所有孩子结点都被选中,则复制时只是复制结点 b。
我想用递归,可是不知道该怎么来找共同点。
大道泛兮,其可左右!
离线flyingwind
只看该作者 1楼 发表于: 2006-01-13
已经解决了,贴一点代码片断(qt版本为3.3.1)

思路:
如果 pListItem 状态为On      ,对当前item进行处理,然后递归检测他的下一个结点
如果 pListItem 状态为 NoChange , 递归判断它的第一个孩子结点
如果 pListItem 状态为 Off,判断下一个结点

代码片断:
void CRoleAdminFrm::GetSuperItemOn( QListViewItem* pInListItem)
{
     QListViewItem* pListItem = NULL;
     QListViewItem* pItem = pInListItem;
     QCheckListItem::ToggleState state = ((QCheckListItem*)pItem)->state();

     switch( state )
     {
     case QCheckListItem::ToggleState::NoChange:
           GetSuperItemOn( pItem->firstChild() );
           break;

     case QCheckListItem::ToggleState::On:
           // 处理选中item的相关操作

           if ( pItem->nextSibling())
           {
                        GetSuperItemOn( pItem->nextSibling() );
           }
           else if( pItem->parent() && (pItem->parent())->nextSibling())
           {
                 GetSuperItemOn( (pItem->parent())->nextSibling() );                        
           }
           break;
     
     case QCheckListItem::ToggleState::Off:
           if ( pItem->nextSibling())
           {
                 GetSuperItemOn( pItem->nextSibling() );
           }
           else if( pItem->parent() && (pItem->parent())->nextSibling() )
           {
                 GetSuperItemOn( (pItem->parent())->nextSibling() );
           }
           break;
     default:
           ;
     }
     return ;
}
大道泛兮,其可左右!
快速回复
限100 字节
 
上一个 下一个