Я пытаюсь создать в GitAhead другой вид файлов diff. Они уже предоставляют Treemodel, которая отлично работает. Я пытаюсь поместить оболочку между моделью и представлением, чтобы показать только измененные файлы. На данный момент я хотел бы просто переслать модель, но вид ничего не показывает. rowCount () вызывается нормально, а затем вызывается index (), но data () никогда не вызывается. Кто-нибудь знает, почему я не могу переслать модель?
TreeWrapper.h:
#include "TreeWrapper.h"
#include "TreeModel.h"
#include "conf/Settings.h"
#include "git/Blob.h"
#include "git/Diff.h"
#include "git/RevWalk.h"
#include "git/Submodule.h"
#include <QStringBuilder>
#include <QUrl>
namespace {
const QString kLinkFmt = "<a href='%1'>%2</a>";
} // anon. namespace
TreeWrapper::TreeWrapper(TreeModel* model, QObject *parent):
mModel(model),
QAbstractItemModel(parent)
{
}
TreeWrapper::~TreeWrapper()
{
}
void TreeWrapper::setTree(const git::Tree &tree, const git::Diff &diff)
{
beginResetModel();
mModel->setTree(tree, diff);
endResetModel();
}
int TreeWrapper::rowCount(const QModelIndex &parent) const
{
int count = mModel->rowCount(parent);
return count;
}
int TreeWrapper::columnCount(const QModelIndex &parent) const
{
return mModel->columnCount(parent);
}
bool TreeWrapper::hasChildren(const QModelIndex &parent) const
{
bool children = mModel->hasChildren(parent);
return children;
}
QModelIndex TreeWrapper::parent(const QModelIndex &index) const
{
return mModel->parent(index);
}
QModelIndex TreeWrapper::index(
int row,
int column,
const QModelIndex &parent) const
{
QModelIndex index = mModel->index(row, column, parent);
bool valid = index.isValid();
return index;
}
QVariant TreeWrapper::data(const QModelIndex &index, int role) const
{
return mModel->data(index, role);
}
bool TreeWrapper::setData(
const QModelIndex &index,
const QVariant &value,
int role)
{
return mModel->setData(index, value, role);
}
Qt::ItemFlags TreeWrapper::flags(const QModelIndex &index) const
{
return mModel->flags(index);
}
TreeWrapper.h:
#ifndef TREEWRAPPER
#define TREEWRAPPER
#include "git/Diff.h"
#include "git/Index.h"
#include "git/Tree.h"
#include "git/Repository.h"
#include <QAbstractItemModel>
#include <QFileIconProvider>
class TreeModel;
class TreeWrapper : public QAbstractItemModel
{
Q_OBJECT
public:
TreeWrapper(TreeModel* model, QObject *parent = nullptr);
virtual ~TreeWrapper();
void setTree(const git::Tree &tree, const git::Diff &diff = git::Diff());
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &index) const override;
QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex()) const override;
QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole) const override;
bool setData(
const QModelIndex &index,
const QVariant &value,
int role = Qt::EditRole) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
private:
TreeModel* mModel{nullptr};
};
#endif // TREEWRAPPER
Нижнее древовидное представление использует непосредственно древовидную модель, в верхнем - я бы хотел поместить Оболочку между моделью и представлением.