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:设置以单个单元格、还是一行、一列方式选择
参数含义为:
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);