BarModelMapper Example▲
Sélectionnez
/**
**************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Charts module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
***************************************************************************
*/
#include
"customtablemodel.h"
#include <QtCore/QVector>
#include <QtCore/QTime>
#include <QtCore/QRect>
#include <QtCore/QRandomGenerator>
#include <QtGui/QColor>
CustomTableModel::
CustomTableModel(QObject *
parent) :
QAbstractTableModel(parent)
{
m_columnCount =
6
;
m_rowCount =
12
;
// m_data
for
(int
i =
0
; i &
lt; m_rowCount; i++
) {
QVector&
lt;qreal&
gt;*
dataVec =
new
QVector&
lt;qreal&
gt;(m_columnCount);
for
(int
k =
0
; k &
lt; dataVec-&
gt;size(); k++
) {
if
(k %
2
==
0
)
dataVec-&
gt;replace(k, i *
50
+
QRandomGenerator::
global()-&
gt;bounded(20
));
else
dataVec-&
gt;replace(k, QRandomGenerator::
global()-&
gt;bounded(100
));
}
m_data.append(dataVec);
}
}
CustomTableModel::
~
CustomTableModel()
{
qDeleteAll(m_data);
}
int
CustomTableModel::
rowCount(const
QModelIndex &
amp;parent) const
{
Q_UNUSED(parent)
return
m_data.count();
}
int
CustomTableModel::
columnCount(const
QModelIndex &
amp;parent) const
{
Q_UNUSED(parent)
return
m_columnCount;
}
QVariant CustomTableModel::
headerData(int
section, Qt::
Orientation orientation, int
role) const
{
if
(role !=
Qt::
DisplayRole)
return
QVariant();
if
(orientation ==
Qt::
Horizontal)
return
QString("201%1"
).arg(section);
else
return
QString("%1"
).arg(section +
1
);
}
QVariant CustomTableModel::
data(const
QModelIndex &
amp;index, int
role) const
{
if
(role ==
Qt::
DisplayRole) {
return
m_data[index.row()]-&
gt;at(index.column());
}
else
if
(role ==
Qt::
EditRole) {
return
m_data[index.row()]-&
gt;at(index.column());
}
else
if
(role ==
Qt::
BackgroundRole) {
for
(const
QRect &
amp;rect : m_mapping) {
if
(rect.contains(index.column(), index.row()))
return
QColor(m_mapping.key(rect));
}
// cell not mapped return white color
return
QColor(Qt::
white);
}
return
QVariant();
}
bool
CustomTableModel::
setData(const
QModelIndex &
amp;index, const
QVariant &
amp;value, int
role)
{
if
(index.isValid() &
amp;&
amp; role ==
Qt::
EditRole) {
m_data[index.row()]-&
gt;replace(index.column(), value.toDouble());
emit dataChanged(index, index);
return
true
;
}
return
false
;
}
Qt::
ItemFlags CustomTableModel::
flags(const
QModelIndex &
amp;index) const
{
return
QAbstractItemModel::
flags(index) |
Qt::
ItemIsEditable;
}
void
CustomTableModel::
addMapping(QString color, QRect area)
{
m_mapping.insertMulti(color, area);
}