Название: Как хранить данные в модели??
Отправлено: sektor от Май 13, 2020, 14:42
Добрый день! Есть модель в котором хранится данные на год, колонки это количесво дней в году а строки устанавливается пользователем. Представление должно показывать только выбранный пользователем месяц! Храню данные в 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(); }
Название: Re: Как хранить данные в модели??
Отправлено: Пантер от Май 15, 2020, 19:59
Почитай про QSortFilterProxyModel. Хотя, я бы рекомендовал тебе пересмотреть свой подход, какой-то он не правильный....
|