首页 > 代码库 > 第五十八课、自定义模型类(上)------------------狄泰软件学院

第五十八课、自定义模型类(上)------------------狄泰软件学院

 一、自定义模型类

1、QStandardItemModel是一个通用的模型类

(1)、能够以任意的方式组织数据(线程、非线性)

(2)、数据组织的基本单位为数据项(QStandardItem)

(3)、每一个数据项能够存储多个具体数据(附加数据角色)

(4)、每一个数据项能够对数据状态进行控制(可编辑、可选...)

2、Qt中的通用模型类QStandardItemModel

(1)、QStandardItemModel继承自抽象的模型类QAbstractItemModel

(2)、QStandardItem与QAbstractItemModel是聚合关系

(3)、QAbstractItemModel里面存储的东西是各种各样的

(4)、变体类型可以返回不同的类型

技术分享

3、Qt中的变体类型QVariant(类型可变)

(1)、 QVariant是一个用于封装的类型

(2)、QVariant能够表示大多数常见的值类型

(3)、QVariant每次只能封装(保存)单一类型的值

(4)、QVariant的意义在于能够设计“返回类型可变的函数”

4、变体类型QVariant中的常用成员函数

技术分享  

技术分享
#include <QtCore/QCoreApplication>
#include <QVariant>
#include <QPoint>
#include <QDebug>
#include <QString>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    QVariant v1(1);
    QVariant v2(3.14);
    QVariant v3("520");
    QVariant v4(QPoint(15, 15));
    QVariant v5;

    qDebug() << v1.type();//指的是v1存储的值的类型
    qDebug() << v1.typeName();
    qDebug() << v1.toInt();

    qDebug() << endl;

    qDebug() << v2.type();
    qDebug() << v2.typeName();
    qDebug() << v2.toInt();//会发生截断
    qDebug() << v2.toDouble();
    qDebug() << v2.value<double>();//注意使用方法,模板

    qDebug() << endl;

    qDebug() << v3.type();
    qDebug() << v3.typeName();
    qDebug() << v3.toInt();
    qDebug() << v3.value<QString>();

    qDebug() << endl;

    bool k = true;

    qDebug() << v4.type();
    qDebug() << v4.typeName();
    qDebug() << v4.toInt(&k);//0
    qDebug() << k;//false
    qDebug() << v4.toPoint();

    qDebug() << endl;

    qDebug() << v5.isValid();//false, 因为v5里面没有装具体的类型数据,所以是无效的,以后使用前都应该判断一下
    return a.exec();
}
main.cpp
//打印结果
QVariant::int
int
1


QVariant::double
double
3
3.14
3.14


QVariant::QString
QString
520
"520"


QVariant::QPoint
QPoint
0
false
QPoint(15,15)


false

二、工程中的使用

1、工程中常用模型设计

(1)、解析数据源中的数据(数据库、网络、串口等)

(2)、将解析后的数据存入QStandardItem对象中(解析成可读的形式)

(3)、根据数据间的关系在QStandardItemModel对象中组织数据项

(4)、选择合适的视图显示数据值

2、工程中常用的模块设计

技术分享 

3、实例分析

(1)、在文件中以行的形式存储了考试成绩信息(ID、Name、Score)

(2)、开发GUI程序显示文件中的数据

A、计算平均成绩

B、查找最好成绩和最坏成绩

C、可刷新显示的内容和删除的内容

4、系统架构图

(1)、将读文件这种底层操作封装在数据层完成

(2)、读后数据到了内存,然后交于数据表示层来进行具体表示

(3)、数据表示层交于数据组织层(相当于一个模型),数据组织层根据需要传给视图

(4)、显示数据

 技术分享

5、系统核心类图(每一次对应一个(或者一组)类)

技术分享

6、系统实现

Next Lesson

三、小结

 (1)、QStandardItemModel是一个通用的模型类

(2)、QStandardItemModel能够以任意的方式组织数据

 (3)、使用QVariant能够设计“返回值类型可变的函数”

(4)、工程中常用数据应用架构为4层结构:数据层、数据表示层、数据组织层、数据显示层

第五十八课、自定义模型类(上)------------------狄泰软件学院