自定义模型
实例分析
需求分析
在文件中以行的形式存储了考试成绩信息(ID, Name,Score)
开发GUI程序显示文件中的信息,并能计算平均成绩,查找最好成绩与最差成绩,可刷新显示的内容和删除内容
系统架构
工程中常用数据应用架构为4层结构:
数据层、数据表示层、数据组织层、数据显示层
4层架构设计的好处:
4层架构间耦合性低,非常易于扩展和维护
系统核心类图
系统架构图
类设计
DataSource类
1、 设置数据源并读取数据
2、 对数据进行解析后生成数据对象
ScoreInfo类
1、 封装数据源中的一组完整数据
2、 提供返回具体数据值的接口函数
ScoreInfoModel类
1、 使用标准模型类QStandardItemModel作为成员
2、 以ScoreInfo类对象为最小单位进行数据组织
数据交互流程图
界面设计
上下文菜单
1、 定义QMenu对象
2、 连接QMenu对象中的QAction对象到槽函数
3、 定义事件过滤器,并处理ContexMenu事件
4、 在当前鼠标位置打开菜单对象
//ScoreInfo.h
#ifndef SCOREINFO_H
#define SCOREINFO_H
#include <QObject>
/*类DataSource(数组层)与类ScoreInfoModel(数据组织层)依赖于类ScoreInfo,应该最先实现类ScoreInfo
class ScoreInfo : public QObject
{
Q_OBJECT
QString m_id;
QString m_name;
int m_score;
public:
explicit ScoreInfo(QObject* parent = 0);
explicit ScoreInfo(QString id, QString name, int score, QObject* parent= 0);
ScoreInfo(const ScoreInfo& obj);
ScoreInfo& operator= (const ScoreInfo& obj);
QString id();
QString name();
int score();
};
#endif // SCOREINFO_H
//ScoreInfo.cpp
#include "ScoreInfo.h"
ScoreInfo::ScoreInfo(QObject* parent) :QObject(parent)
{
m_id = "NULL";
m_name = "NULL";
m_score = -1;
}
ScoreInfo::ScoreInfo(QString id, QStringname, int score, QObject* parent)
{
m_id = id;
m_name = name;
m_score = score;
}
ScoreInfo::ScoreInfo