Добрый день! Есть модель в котором хранится данные на год, колонки это количесво дней в году а строки устанавливается пользователем. Представление должно показывать только выбранный пользователем месяц! Храню данные в QHach <QModelIndex, QVAriant> но почему то данные сохраняются на один месяц
Как реализовать сохранение данных по индексу на год 365 дней а отображать по выбранному месяцу
class modelG : public QAbstractTableModel
{
Q_OBJECT
public:
modelG(int row, int coll, QObject* parent = nullptr);
// QAbstractItemModel interface
public:
int _rowCount = 0;
int _columnCount =0;
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);
void showMonth(int month);
private:
QDate _date;
protected:
QHash<QModelIndex, QVariant> cellDate;
signals:
void dataChanged(QModelIndex, QModelIndex);
// QAbstractItemModel interface
public:
Qt::ItemFlags flags(const QModelIndex &index) const;
};
//----------------------------------------------------------------------------------
class DegurnHaur : public modelG
{
Q_OBJECT
public:
DegurnHaur(QStringList nameDegurn, QObject* parent = nullptr);
public slots:
void setHoursDegurn(int idDegurn, QDate date, int haurs);
void newData(int degurn, int day, int data);
private slots:
//void newData(int degurn, int day, int data);
// QAbstractItemModel interface
private:
QStringList NameList;
public:
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
};
#include "modelg.h"
#include <QBrush>
#include <QColor>
#include <QDebug>
modelG::modelG(int row, int cols, QObject *parent)
: QAbstractTableModel (parent), _rowCount(row), _columnCount(cols)
{
//NameList << "Абдулганиева С" << "Курбанова С" << "Титова А" << "Чуркина Е" << "Абдулганиева А";
}
int modelG:: rowCount(const QModelIndex &) const
{
return _rowCount;
}
int modelG::columnCount(const QModelIndex &) const
{
return _columnCount;
}
QVariant modelG::data(const QModelIndex &index, int role) const
{
if(!index.isValid()){
return QVariant();
}
if(role == Qt::DisplayRole || role == Qt::EditRole){
// qDebug() << _date.addDays(index.column()).dayOfYear();
if(index.column()<_date.daysInMonth())
return cellDate.value(index.sibling(index.row(), _date.addDays(index.column()).dayOfYear()), QVariant());
}
return QVariant();
}
bool modelG::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(!index.isValid()){
return false;
}
if(role == Qt::DisplayRole || role == Qt::EditRole){
cellDate.insert(index,value);
qDebug() << index.row();
qDebug() << index.column();
emit dataChanged(index, index);
}
return false;
}
void modelG::showMonth(int month)
{
beginResetModel();
_date = QDate::currentDate();
_date.setDate(_date.year(), month, 1);
_columnCount = _date.daysInMonth() + 3;
qDebug() << cellDate;
// for(int i=0; i<60; i++){
// // int day = _date.addDays(i).dayOfYear();
// qDebug() << cellDate.value(index(0, i)) << i;
// }
endResetModel();
}
Qt::ItemFlags modelG::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable;
}
//-------------------------------------------------------------------------------
DegurnHaur::DegurnHaur(QStringList nameDegurn, QObject *parent)
: modelG(nameDegurn.size(), 0, parent)
{
NameList = nameDegurn;
showMonth(1);
}
//----------------------замисываем данные по дату -------------------------
void DegurnHaur::setHoursDegurn(int idDegurn, QDate date, int haurs)
{
newData(idDegurn, date.dayOfYear(), haurs);
}
//-----------------запись в модель
void DegurnHaur::newData(int degurn, int day, int data)
{
// qDebug() << day;
setData(index(degurn, day), data, Qt::EditRole);
}
//--------------колонки и строки
QVariant DegurnHaur::headerData(int section, Qt::Orientation orientation, int role) const
{
if(orientation == Qt::Horizontal){
switch (role) {
case Qt::DisplayRole:
if(section<(_columnCount-3)) return section+1;//NameList.at(section);
else if(section==_columnCount-3) return "Факт";
if(section==(_columnCount-2)) return "Норма";
if(section==(_columnCount-1)) return "Пререр";
break; case Qt::BackgroundRole:
if(section<(_columnCount-3)){
// QDate _date_t = _date;
// _date_t.setDate(_date.year(), _date.month(), section+1);
// if(_date_t.dayOfWeek()==6 || _date_t.dayOfWeek()==7) return QBrush(QColor(255, 150, 150, 80)); // окрас выходных
// else return QBrush(QColor(200, 200, 200, 50));
}
}
}
if(orientation == Qt::Vertical){
switch (role) {
case Qt::DisplayRole:
return NameList.at(section);
}
}
return QVariant();
}