class Storage{public: Storage() { tasks = DataBaseApi::SelectAllTasks(); projects = DataBaseApi::SelectAllProjects(); }; //вернуть все задачи с id проекта QVector <Task> tasksAtProject(int id).........private: QVector <Task> tasks; QVector <Project> projects;};
beginInsertRows(QModelIndex(), ind, ind); Task tsk; storage_ptr->tasks.prepend(tsk); endInsertRows();или emit dataChanged();
QModelIndex TaskProxyModel::mapToSource(const QModelIndex &proxyIndex) const{//возвращаем индексы всех задач из второго проекта ( sourceModel()->index(1,0) )return sourceModel()->index(proxyIndex.row(), 0,sourceModel()->index(1,0));}QModelIndex TaskProxyModel::index(int row, int column, const QModelIndex &parent) const{ return createIndex(row, column);}QModelIndex TaskProxyModel::parent(const QModelIndex &child) const{ return QModelIndex();}//вычисляем количество строк нижнего уровня (с задачами) в иерархической моделиint TaskProxyModel::rowCount(const QModelIndex &parent) const{ int rows = 0; for ( int i = 0; i < sourceModel()->rowCount(QModelIndex()); i++) { for ( int j = 0; j < sourceModel()->rowCount(sourceModel()->index(i,0)); j++) { rows++; } } return rows;}int TaskProxyModel::columnCount(const QModelIndex &parent) const{ return 1;}QVariant TaskProxyModel::data(const QModelIndex &index, int role) const{ return sourceModel()->data(mapToSource(index), role);}
QModelIndex ProjectModel::index(int row, int column, const QModelIndex &parent) const{ if (!hasIndex(row, column, parent)) return QModelIndex(); if (!parent.isValid()) { // Первый уровень return createIndex(row, column, -1); // Родитель с индексом -1 }else if (parent.internalId() == -1) {// Второй уровень return createIndex(row, column, parent.row()); // номер строки родителя. } return QModelIndex();}
class Storage{public:......... ProjectModel getProjectModel() const; TaskModel getTaskModel() const;.........};
Storage::Storage() { tasks = DataBaseApi::SelectAllTasks(); projects = DataBaseApi::SelectAllProjects(); contacts = DataBaseApi::SelectAllContacts();};//вернуть все задачи с id проектаQVector <Task> Storage::tasksAtProject(int id){ QVector <Task> _tasks; for (int i =0; i<tasks.size(); i++) { if (tasks.at(i).ProjectID == id) _tasks.push_back(tasks.at(i)); } return _tasks;}//отредактировать задачу в списке задачvoid Storage::replaceTask(Task tsk){ for (int i =0; i<tasks.size(); i++) { if (tasks.at(i).TaskID == tsk.TaskID) tasks.replace(i,tsk); }}//заменить проект в списке проектовvoid Storage::replaceProject(Project prj){ for (int i =0; i<projects.size(); i++) { if (projects.at(i).ProjectID == prj.ProjectID) projects.replace(i,prj); }}
C++ (Qt)class Storage : public QObject{Q_OBJECTpublic: Storage() {...} addProject(const Project &pr) { container.push_back(pt); emit dataChanged(); } addTask(int idProject, const Task &task) { ... emit dataChanged(); } const QVector<Project> &projects() const; const QVector<Task> &allTask() const; const QVector<Task> &task(int idProject) const; ну и так далееprivate: QVector<Project> container;};