Model Data
此实例用来展示如何使用QAbstractItemMode来管理和展示数据,可以学习如何自定义model。
前置实例
- 无
实例位置
Qt_Offical_demo/modeldata
运行结果
- Table展示数据。
- 使用QChart显示数据。
- 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;
};
customtablemodel
类继承自QAbstractTableModel
;- 成员变量中有一个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)