> 文章列表 > 【QT 基础教程 十五】QTreeView类解析

【QT 基础教程 十五】QTreeView类解析

【QT 基础教程 十五】QTreeView类解析

文章目录

    • 概要:本期主要介绍Qt中QTableView类的结构和操作实现。
    • 一、简介
    • 二、操作接口
    • 三、源码分享
    • 结尾

概要:本期主要介绍Qt中QTableView类的结构和操作实现。

一、简介

头文件:#include<QTreeView>
模块:QT += widgets
父类:QAbstractItemView
功能:Qt中的QTreeView可以将数据项显示在树视图

二、操作接口

  1. setEditTriggers:设置单元格是否可编辑、如何操作来编辑。
ui->treeView->setEditTriggers(QTreeView::NoEditTriggers);			//单元格不能编辑
  1. setSelectionBehavior:设置以单个单元格、还是一行、一列方式选择
ui->treeView->setSelectionBehavior(QTreeView::SelectRows);			//一次选中整行
  1. setSelectionMode:设置单选、多选
ui->treeView->setSelectionMode(QTreeView::SingleSelection);        //单选,配合上面的整行就是一次选单行
  1. setAlternatingRowColors:设置每间隔一行,背景色不同
ui->treeView->setAlternatingRowColors(true);                       //每间隔一行颜色不一样,当有qss时该属性无效
  1. setFocusPolicy(Qt::NoFocus): 常用来取消单元格的虚线框
ui->treeView->setFocusPolicy(Qt::NoFocus);                         //去掉鼠标移到单元格上时的虚线框
  1. setModel 绑定视图和模型
ui->treeView->setModel(mTreeItemModel);                            //绑定视图模型

对于界面显示数据的增加、删除,不能通过视图来操作(视图只用于显示模型中的数据),所以对于显示数据的操作应该对于该视图绑定的模型进行操作。

三、源码分享

#ifndef TREEVIEW_H
#define TREEVIEW_H#include <QDialog>
#include <QTreeView>
#include <QStandardItemModel>
#include <QStandardItem>QT_BEGIN_NAMESPACE
namespace Ui { class TreeView; }
QT_END_NAMESPACEclass TreeView : public QDialog
{Q_OBJECTpublic:TreeView(QWidget *parent = nullptr);~TreeView();/* 初始化树视图 */void InitTreeView();private:Ui::TreeView *ui;/* 标准模型 */QStandardItemModel *mTreeItemModel;};
#endif // TREEVIEW_H
#include "treeview.h"
#include "ui_treeview.h"TreeView::TreeView(QWidget *parent): QDialog(parent), ui(new Ui::TreeView)
{ui->setupUi(this);mTreeItemModel = new QStandardItemModel(this);InitTreeView();                 //初始化
}TreeView::~TreeView()
{delete ui;
}void TreeView::InitTreeView()
{//1. 设置视图属性ui->treeView->setEditTriggers(QTreeView::NoEditTriggers);			//单元格不能编辑ui->treeView->setSelectionBehavior(QTreeView::SelectRows);			//一次选中整行ui->treeView->setSelectionMode(QTreeView::SingleSelection);        //单选,配合上面的整行就是一次选单行ui->treeView->setAlternatingRowColors(true);                       //每间隔一行颜色不一样,当有qss时该属性无效ui->treeView->setFocusPolicy(Qt::NoFocus);                         //去掉鼠标移到单元格上时的虚线框//2. 列头相关设置
//    ui->treeView->header()->hide();                                  //隐藏列头ui->treeView->header()->setStretchLastSection(true);               //最后一列自适应宽度ui->treeView->header()->setDefaultAlignment(Qt::AlignCenter);      //列头文字默认居中对齐//3. 初始化模型mTreeItemModel->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("序号") << QStringLiteral("名称"));     //设置列头for(int i = 0;i < 5;i ++){//一级节点,加入mModelQList<QStandardItem*> items1;QStandardItem* item1 = new QStandardItem(QString::number(i));QStandardItem* item2 = new QStandardItem(QStringLiteral("1级节点"));items1.append(item1);items1.append(item2);mTreeItemModel->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("2级节点"));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("3级节点"));items3.append(item5);items3.append(item6);item3->appendRow(items3);}}}ui->treeView->setModel(mTreeItemModel);                            //绑定视图模型
}

结尾

本期就简单介绍了树视图的使用,以及一些常用属性的设置。下期再会吧:)