(30)模型视图架构里的树表视图 QTreeView 的代码使用范例,篇二:举一个小例子,基于更普遍的表格模型 QStandardItemModel

(1)先给出书上的讲解:从原理上来讲,QStandardItemModel 也可以存储树状结构的项数据,与 QTreeView 结合以目录树形式显示数据,实现起来稍微复杂一点,我们就不设计示例来演示了。 :

在这里插入图片描述

++在 Qt 的模型与视图架构里,有列表模型 QStringListModel表格模型 QStandardItemModel唯独没有专门的树模型,只是 Qt 官方的大师们为特别常用的文件系统实现了特例树模型 QFilesystemModel。但若不是文件系统,就不可以使用这个特例树模型了。
本篇,咱们尝试完善它,用 普普通通的 QStandardItemModel 来实现树模型。在树模型里,一行是一个节点,虽然一行包含了多列。树模型可以看成是放平的树,树根在最左边,这样就看起来像一棵树了。

(2)

在这里插入图片描述

++代码版如下

Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget)
{   ui->setupUi(this);

    m_QStandardItemModel = new QStandardItemModel(3, 3, this);
    m_QStandardItemModel->setHorizontalHeaderLabels({"cA", "cB", "cC"});

    QStandardItem * aItem;    //这里开始填充表格,生成条目,并加入表格
    for(int i = 0 ; i < 3 ; i++)
        for(int j = 0; j < 3; j++)
        {   aItem = new QStandardItem(QString::number(i * 3 + j));
            m_QStandardItemModel->setItem(i, j, aItem);
        }

    aItem = m_QStandardItemModel->item(1, 0);
    aItem->setRowCount   (2); //为[1,0] 建立子表,先确定容量
    aItem->setColumnCount(3);

    QStandardItem * child;    //依次往子表里插入 ascii 码字符,只是举例子
    for(int i = 0 ; i < 2 ; i++)
        for(int j = 0; j < 3; j++)
        {   child = new QStandardItem( QString(char('a' + i * 3 + j)) );
            aItem->setChild(i, j, child);
        }

    ui->treeView->setModel(m_QStandardItemModel); //这里必须采用树视图
}

++运行效果如下

在这里插入图片描述

(3)补充:由二维表来构造树表,只可以为每一行的第一列扩充成子表。而且子表还是二维表。学过 mysql
数据库的都知道,所谓关系,就是二维表
。QT 里的表格,大致就是图示的这种结构 :

在这里插入图片描述

(4)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhangzhangkeji

谢谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值