Qt官方demo日拱一卒-Model Data

该实例通过QAbstractItemModel展示了如何管理和展示数据,重点在于自定义的CustomTableModel类,它使用QList和QHash存储数据并实现与QTableView、QChart的同步更新。QHeaderView、QLineSeries和QVXYModelMapper等类也被应用到数据展示中。理解自定义模型的实现是关键,特别是数据结构的设计和重载的相关函数。
摘要由CSDN通过智能技术生成

Model Data

此实例用来展示如何使用QAbstractItemMode来管理和展示数据,可以学习如何自定义model。

前置实例

实例位置

Qt_Offical_demo/modeldata

运行结果

在这里插入图片描述

  1. Table展示数据。
  2. 使用QChart显示数据。
  3. Table控件和QChart控件都使用Model管理数据,能保持同步更新。

使用的类

  • QTableView
  • QAbstractTableModel
  • QHash
  • QChart
  • QChartView
  • QLineSeries
  • QVXYModelMapper
  • QHeaderView

代码分析

分析自定义的模型类customtablemodel类:

class CustomTableModel

分析头文件

customtablemodel.h

class CustomTableModel : public QAbstractTableModel
{
   
    Q_OBJECT
public:
    explicit CustomTableModel(QObject *parent = 0);

    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    int columnCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
    Qt::ItemFlags flags(const QModelIndex &index) const;

    void addMapping(QString color, QRect area);
    void clearMapping() {
    m_mapping.clear(); }

private:
    QList<QVector<qreal> * > m_data;
    QHash<QString, QRect> m_mapping;
    int m_columnCount;
    int m_rowCount;
};
  1. customtablemodel类继承自QAbstractTableModel;
  2. 成员变量中有一个QList,用于储存数据;一个QHash,用于存储映射。

customtablemodel.cpp

CustomTableModel::CustomTableModel(QObject *parent) :
    QAbstractTableModel(parent)
{
   
	//设置随机数seed
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
	//设置tablemodel为15行4列
    m_columnCount = 4;
    m_rowCount = 15;

    // m_data
    for (int i = 0; i < m_rowCount; i++) 
    {
   
    	//注意QVector的用法
        QVector<qreal>* dataVec = new QVector<qreal>(m_columnCount)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值