添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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);