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

概要:本期主要介绍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_NAMESPACE

class TreeView : public QDialog
{
    Q_OBJECT

public:
    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 ++)
    {
        //一级节点,加入mModel
        QList<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);                            //绑定视图模型
}

结尾

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葛狂的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值