Qt自制Model模型

本文介绍了在Qt中创建自定义Model模型的过程,包括解决编译工程时的配置问题,重点讲解了自定义ListModel、TableModel和TreeModel时的关键步骤,如继承相应基类,理解并设置QModelIndex、角色和数据属性,重写核心函数如rowCount、columnCount、data及headerData等。同时提到了使用QAbstractItemView显示Model,并建议熟悉Qt的数据容器,如QMap和QList。
摘要由CSDN通过智能技术生成

                    

                    

              今天学的东西比较多,先整理下今天的东西。

              因为Qt的版本更新比较多,工程的配置文件的格式不同,可能会出现一些比较意想不到的问题,

              1   今天在编译一个工程时出现 不能包含头文件的情况,在修改了工程的配置文件之后解决,配置文件是后缀为.pro的文件以记事本打开就可以很清楚看到里面的内容, 按格式修改即可。一般添加下面的语段可以解决:

                    QT       += core gui

         greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

首先是类关系图

            

           

2   在学习自定义模型(Model的中,有几点是比较重要的,

           A 自制List和Table模型分别继承ListModel和TableModel类

如果是自制的树形模型TreeModel,则需要从QAbstractItemModel继承。

           B 几个概念:一个model中的每个数据元素都有一个model索引。这个索引指明这个数据位于model的位置,比如行、列等。这就是前面我们曾经说到过的QModelIndex。每个数据元素还要有一组属性值,称为角色(roles)。这个属性值并不是数据的内容,而是它的属性,比如说,这个数据是用来展示数据的,还是用于显示列头的?因此,这组属性值实际上是Qt的一个enum定义的,比较常见的有Qt::DisplayRole和Qt::EditRole,另外还有Qt::ToolTipRole, Qt::StatusTipRole, 和Qt::WhatsThisRole等。并且,还有一些属性是用来描述基本的展现属性的,比如Qt::FontRole, Qt::TextAlignmentRole, Qt::TextColorRole, Qt::BackgroundColorRole等。 

           C 需要重写自己Model的一些格式函数最基本的有如下几个:

               int rowCount(const QModelIndex &parent) const;///

               int columnCount(const QModelIndex &parent) const;     //

               QVariant data(const QModelIndex &index,int role) const;  

                    //返回index坐标的值

              QVariant headerData(int section, Qt::Orientation orientation, int role) const;

                  //返回指定的rolesection区内的值

              bool QAbstractItemModel::setData(const QModelIndex & index, const QVariant & valueint role = Qt::EditRole)

                //在指定的index下面输入数据   并出发View更改数据显示。 

           D  QAbstractItemView Class下面对应的view类显示即可,

   

       

       E  对于每个Model一般需要一个容器记录Model里面的数据,例如TableModel一般对应QMap容易,ListModel对应QList容器,所以需要先了解下容器的一般用法,不过应该是与c++的标准库的用法大致相同。

       F 在明白了整个结构之后,就是程序细节方面的问题,即每个函数是如何实现的,这个可以边学边做。

     基本上就是这样,如果有发现不对的地方,请批评指出。

   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值