QTreeWidget类有一个信号itemClicked( QTreeWidgetItem* item,int column ):当树中某个item被点击时,会发出该信号,其中item是被点击的item,而column是该item的列序号。
树中各级对象的勾选状态可以有三种:
Qt::Checket
Qt::UnChecked
Qt::PartiallyChecked
那么接收信号的函数就可以这么来实现:比如,column 0 为勾选的列序号。
void UiTestMain::onTreeItemCheckChange( QTreeWidgetItem* item,int column ){
if( column!=0 )
return;
// 设置子对象的勾选状态
for( int i=0;i<item->childCount();++i )
item->child(i)->setCheckState(0,item->checkState(0));
// 更新父对象的勾选状态
QTreeWidgetItem* p = item->parent();
if( p!=0 ){
p->setCheckState(0,item->checkState(0));
for( int i=0;i<p->childCount();++i )
if( p->child(i)->checkState(0)!=item->checkState(0) ){
p->setCheckState(0,Qt::PartiallyChecked);
return;
}
}
}
测试如下:
初始化时都选中
点击“LED灯具测试”前的复选框,该项目变成未选中,同时“DSP板内测试”相变成部分选中
然后继续点击“SRAM测试”前的复选框,该项目变成未选中,“DSP板内测试”状态不变
依次将“SPI Flash测试”,“拨码开关测试”取消选中,”DSP板内测试“的选择状态都不变,取消”看门狗测试”的选中,“DSP板内测试”变成未选中
大概就是这么个过程吧。