1,简介
上一篇展示了一个最简单的QTreeView示例,只是刚刚能显示数据而已。
实际使用中,需要对QTreeView的各项属性进行配置,下面介绍一下常用设置项。
先看最终效果:
2,QTreeView常用设置项
void MainWindow::InitTree() { //1,QTreeView常用设置项 QTreeView* t = ui->treeView; t->setEditTriggers(QTreeView::NoEditTriggers); //单元格不能编辑 t->setSelectionBehavior(QTreeView::SelectRows); //一次选中整行 t->setSelectionMode(QTreeView::SingleSelection); //单选,配合上面的整行就是一次选单行 t->setAlternatingRowColors(true); //每间隔一行颜色不一样,当有qss时该属性无效 t->setFocusPolicy(Qt::NoFocus); //去掉鼠标移到单元格上时的虚线框 //2,列头相关设置 // t->header()->hide(); //隐藏列头 t->header()->setStretchLastSection(true); //最后一列自适应宽度 t->header()->setDefaultAlignment(Qt::AlignCenter); //列头文字默认居中对齐 //3,构造Model QStandardItemModel* model = new QStandardItemModel(ui->treeView); model->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("序号") << QStringLiteral("名称")); //设置列头 for(int i=0;i<5;i++) { //一级节点,加入mModel QList<QStandardItem*> items1; QStandardItem* item1 = new QStandardItem(QString::number(i)); QStandardItem* item2 = new QStandardItem(QStringLiteral("一级节点")); items1.append(item1); items1.append(item2); model->appendRow(items1); for(int j=0;j<5;j++) { //二级节点,加入第1个一级节点 QList<QStandardItem*> items2; QStandardItem* item3 = new QStandardItem(QString::number(j)); QStandardItem* item4 = new QStandardItem(QStringLiteral("二级节点")); items2.append(item3); items2.append(item4); item1->appendRow(items2); for(int k=0;k<5;k++) { //三级节点,加入第1个二级节点 QList<QStandardItem*> items3; QStandardItem* item5 = new QStandardItem(QString::number(k)); QStandardItem* item6 = new QStandardItem(QStringLiteral("三级节点")); items3.append(item5); items3.append(item6); item3->appendRow(items3); } } } //4,应用model t->setModel(model); //一些项在应用model后设置 //5,设第一列初始宽度;第一列固定宽度 t->header()->resizeSection(0,100); t->header()->setSectionResizeMode(0,QHeaderView::Fixed); //6,默认选中一级节点的第一行 QModelIndex rootIndex = t->rootIndex(); QModelIndex selIndex = model->index(0,0,rootIndex); t->setCurrentIndex(selIndex); }
3,说明
QTreeView常用接口:
1,setEditTriggers:设置单元格是否可编辑、如何操作来编辑。
参数含义为:
enum EditTrigger { NoEditTriggers = 0, //不可编辑 CurrentChanged = 1, //任何时候都能对单元格修改 DoubleClicked = 2, //双击单元格 SelectedClicked = 4, //单击已选中的内容 EditKeyPressed = 8, //键盘的编辑键,如F2 AnyKeyPressed = 16, //按下任意键就能修改 AllEditTriggers = 31 //以上条件全包括 };
2,setSelectionBehavior:设置以单个单元格、还是一行、一列方式选择
参数含义为:
扫描二维码关注公众号,回复:
958342 查看本文章
enum SelectionBehavior { SelectItems, //选中单个单元格 SelectRows, //选中一行 SelectColumns //选中一列 };
3,setSelectionMode:设置单选、多选
enum SelectionMode { NoSelection, //不能选择 SingleSelection, //单选 MultiSelection, //多选,不用按ctrl键即可多选,选择新项时不取消之前选择,已选中的再选择会取消选择 ExtendedSelection, //多选,按ctrl、shift键多选,选择新项时取消之前选择 ContiguousSelection //多选,需要按ctrl或shift都是shift选中效果,即选中两次点击之间的所有元素 };
4,setAlternatingRowColors:设置每间隔一行,背景色不同,如图
5,setFocusPolicy(Qt::NoFocus) ; // 常用来取消单元格的虚线框
6,t->header()->setStretchLastSection(true); //最后一列自适应宽度
7,t->header()->setDefaultAlignment(Qt::AlignCenter); //列头文字默认居中对齐
8,//设第一列初始宽度;第一列固定宽度
t->header()->resizeSection(0,100);
t->header()->setSectionResizeMode(0,QHeaderView::Fixed);
9,//,默认选中一级节点的第一行
QModelIndex rootIndex = t->rootIndex();
QModelIndex selIndex = model->index(0,0,rootIndex);
t->setCurrentIndex(selIndex);