customtablemodel.cpp
110 lines
| 3.1 KiB
| text/x-c
|
CppLexer
|
r889 | /**************************************************************************** | ||
** | ||||
|
r2433 | ** Copyright (C) 2013 Digia Plc | ||
|
r889 | ** All rights reserved. | ||
** For any questions to Digia, please use contact form at http://qt.digia.com | ||||
** | ||||
** This file is part of the Qt Commercial Charts Add-on. | ||||
** | ||||
** $QT_BEGIN_LICENSE$ | ||||
** Licensees holding valid Qt Commercial licenses may use this file in | ||||
** accordance with the Qt Commercial License Agreement provided with the | ||||
** Software or, alternatively, in accordance with the terms contained in | ||||
** a written agreement between you and Digia. | ||||
** | ||||
** If you have questions regarding the use of this file, please use | ||||
** contact form at http://qt.digia.com | ||||
** $QT_END_LICENSE$ | ||||
** | ||||
****************************************************************************/ | ||||
#include "customtablemodel.h" | ||||
#include <QVector> | ||||
#include <QTime> | ||||
#include <QRect> | ||||
#include <QColor> | ||||
CustomTableModel::CustomTableModel(QObject *parent) : | ||||
QAbstractTableModel(parent) | ||||
{ | ||||
|
r2098 | qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime())); | ||
|
r889 | |||
m_columnCount = 4; | ||||
m_rowCount = 15; | ||||
// m_data | ||||
|
r2098 | for (int i = 0; i < m_rowCount; i++) { | ||
|
r889 | QVector<qreal>* dataVec = new QVector<qreal>(m_columnCount); | ||
|
r2098 | for (int k = 0; k < dataVec->size(); k++) { | ||
if (k % 2 == 0) | ||||
dataVec->replace(k, i * 50 + qrand() % 20); | ||||
|
r889 | else | ||
|
r2098 | dataVec->replace(k, qrand() % 100); | ||
|
r889 | } | ||
m_data.append(dataVec); | ||||
} | ||||
} | ||||
|
r2102 | int CustomTableModel::rowCount(const QModelIndex &parent) const | ||
|
r889 | { | ||
Q_UNUSED(parent) | ||||
return m_data.count(); | ||||
} | ||||
|
r2102 | int CustomTableModel::columnCount(const QModelIndex &parent) const | ||
|
r889 | { | ||
Q_UNUSED(parent) | ||||
return m_columnCount; | ||||
} | ||||
|
r2098 | QVariant CustomTableModel::headerData(int section, Qt::Orientation orientation, int role) const | ||
|
r889 | { | ||
if (role != Qt::DisplayRole) | ||||
return QVariant(); | ||||
|
r2098 | if (orientation == Qt::Horizontal) { | ||
if (section % 2 == 0) | ||||
|
r889 | return "x"; | ||
else | ||||
return "y"; | ||||
|
r2098 | } else { | ||
|
r889 | return QString("%1").arg(section + 1); | ||
|
r2098 | } | ||
|
r889 | } | ||
|
r2102 | QVariant CustomTableModel::data(const QModelIndex &index, int role) const | ||
|
r889 | { | ||
|
r2098 | if (role == Qt::DisplayRole) { | ||
|
r889 | return m_data[index.row()]->at(index.column()); | ||
|
r2098 | } else if (role == Qt::EditRole) { | ||
|
r889 | return m_data[index.row()]->at(index.column()); | ||
|
r2098 | } else if (role == Qt::BackgroundRole) { | ||
foreach (QRect rect, m_mapping) { | ||||
if (rect.contains(index.column(), index.row())) | ||||
|
r889 | return QColor(m_mapping.key(rect)); | ||
|
r2098 | } | ||
|
r889 | // cell not mapped return white color | ||
return QColor(Qt::white); | ||||
} | ||||
return QVariant(); | ||||
} | ||||
|
r2102 | bool CustomTableModel::setData(const QModelIndex &index, const QVariant &value, int role) | ||
|
r889 | { | ||
|
r2098 | if (index.isValid() && role == Qt::EditRole) { | ||
|
r889 | m_data[index.row()]->replace(index.column(), value.toDouble()); | ||
emit dataChanged(index, index); | ||||
return true; | ||||
} | ||||
return false; | ||||
} | ||||
|
r2102 | Qt::ItemFlags CustomTableModel::flags(const QModelIndex &index) const | ||
|
r889 | { | ||
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; | ||||
} | ||||
void CustomTableModel::addMapping(QString color, QRect area) | ||||
{ | ||||
m_mapping.insertMulti(color, area); | ||||
} | ||||