已经解决了,贴一点代码片断(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 ;
}