头文件:
#include <QStandardItem>
#include <QStandardItemModel>
#include <QTreeView>
源码:
QStandardItemModel *model = new QStandardItemModel(treeView);
connect(model,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(treeItemChanged(QStandardItem*)));
QIcon treeitemicon(":/resource/treeitem");
QIcon treerooticon(":/resource/treerootitem");
model->setHorizontalHeaderLabels(QStringList()<<QString("Setting"));
QStandardItem* itemProject = new QStandardItem(treerooticon,QString("atmosphere"));
QStandardItem* itemProject1 = new QStandardItem(treerooticon,QString("pollution"));
itemProject->setCheckable(true);
itemProject1->setCheckable(true);
model->appendRow(itemProject);
model->appendRow(itemProject1);
QStandardItem* itemChild = new QStandardItem(treeitemicon,QString("childitem"));
QStandardItem* itemChild1 = new QStandardItem(treeitemicon,QString("childitem1"));
QStandardItem* itemChild2 = new QStandardItem(treeitemicon,QString("childitem2"));
QStandardItem* itemChild3 = new QStandardItem(treeitemicon,QString("childitem3"));
itemChild->setCheckable(true);
itemChild1->setCheckable(true);
itemChild2->setCheckable(true);
itemChild3->setCheckable(true);
QList<QStandardItem*>ItemList;
QList<QStandardItem*>ItemList2;
ItemList<<itemChild<<itemChild1;
ItemList2<<itemChild2<<itemChild3;
itemProject->appendRows(ItemList);
itemProject1->appendRows(ItemList2);
treeView->setModel(model);
void Widget::treeItemChanged(QStandardItem *item)
{ qDebug()<<"item changed trigger";
if ( item->isCheckable()&&item->hasChildren())
{
Qt::CheckState state = item->checkState ();
for(int i = 0;i<item->rowCount();++i)
{
QStandardItem* childItems = item->child(i);
childItems->setCheckState(state);
}
}
}
实例: