resourceModel basics
This commit is contained in:
parent
a079802abb
commit
8b2cb8fc5a
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <QDir>
|
||||
#include <QFileSystemModel>
|
||||
#include <QVector>
|
||||
|
||||
class QFileInfo;
|
||||
|
||||
class QtResourceModel : public QAbstractItemModel {
|
||||
|
||||
public:
|
||||
QtResourceModel( const QDir& root, QObject* parent = nullptr );
|
||||
virtual ~QtResourceModel();
|
||||
|
||||
virtual QModelIndex index(int, int, const QModelIndex&) const override;
|
||||
|
||||
virtual QModelIndex parent(const QModelIndex&) const override;
|
||||
|
||||
virtual int rowCount(const QModelIndex&) const override;
|
||||
|
||||
virtual int columnCount(const QModelIndex&) const override;
|
||||
|
||||
virtual QVariant data(const QModelIndex&, int) const override;
|
||||
|
||||
private:
|
||||
using internalData = QFileInfo;
|
||||
|
||||
QDir root;
|
||||
QVector<internalData*> internals;
|
||||
};
|
|
@ -30,10 +30,12 @@ INCLUDEPATH += $$PWD/include/
|
|||
SOURCES += \
|
||||
src/injector.cpp \
|
||||
src/qtdebugger.cpp \
|
||||
src/qtresourcemodel.cpp \
|
||||
src/resourceexplorer.cpp
|
||||
|
||||
HEADERS += \
|
||||
include/qtdebugger.h \
|
||||
include/qtresourcemodel.h \
|
||||
include/resourceexplorer.h
|
||||
|
||||
FORMS += \
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
#include "qtresourcemodel.h"
|
||||
|
||||
#include <QFileInfo>
|
||||
|
||||
QtResourceModel::QtResourceModel( const QDir& root, QObject* parent ) :
|
||||
QAbstractItemModel( parent ),
|
||||
root( root.absolutePath() )
|
||||
{
|
||||
}
|
||||
|
||||
QtResourceModel::~QtResourceModel() {
|
||||
for( internalData* inter : internals ) {
|
||||
delete inter;
|
||||
}
|
||||
internals.clear();
|
||||
}
|
||||
|
||||
QModelIndex QtResourceModel::index(int row, int column, const QModelIndex& parent) const {
|
||||
if (!hasIndex(row, column, parent))
|
||||
return QModelIndex();
|
||||
|
||||
internalData* parentItem;
|
||||
|
||||
if (parent.isValid()) {
|
||||
parentItem = static_cast<internalData*>(parent.internalPointer());
|
||||
} else {
|
||||
parentItem = new internalData( root, "." );
|
||||
// internals.append( parentItem );
|
||||
}
|
||||
|
||||
if (parentItem->isDir()) {
|
||||
QDir parentDir( parentItem->absolutePath() );
|
||||
QFileInfoList entrys = parentDir.entryInfoList(QDir::Filter::AllEntries, QDir::SortFlag::DirsFirst | QDir::SortFlag::Name );
|
||||
if ( entrys.size() < row ) {
|
||||
internalData* childItem = new internalData( entrys.at(row) );
|
||||
// internals.append( childItem );
|
||||
|
||||
return createIndex(row, column, childItem);
|
||||
}
|
||||
}
|
||||
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
QModelIndex QtResourceModel::parent(const QModelIndex& index) const {
|
||||
if (!index.isValid())
|
||||
return QModelIndex();
|
||||
|
||||
internalData* childItem = static_cast<internalData*>(index.internalPointer());
|
||||
internalData* parentItem = new internalData( childItem->dir().absolutePath() );
|
||||
// internals.append( parentItem );
|
||||
|
||||
if (parentItem->absolutePath() == root.absolutePath())
|
||||
return QModelIndex();
|
||||
|
||||
return createIndex(0, 0, parentItem);
|
||||
}
|
||||
|
||||
int QtResourceModel::rowCount(const QModelIndex& parent) const {
|
||||
if (parent.column() > 0)
|
||||
return 0;
|
||||
|
||||
|
||||
QDir parentDir;
|
||||
if( parent.isValid() ) {
|
||||
internalData* parentItem = static_cast<internalData*>(parent.internalPointer());
|
||||
if ( ! parentItem->isDir()) {
|
||||
return 0;
|
||||
}
|
||||
parentDir = QDir( parentItem->absolutePath() );
|
||||
} else {
|
||||
parentDir = root;
|
||||
}
|
||||
|
||||
QFileInfoList entrys = parentDir.entryInfoList(QDir::Filter::AllEntries, QDir::SortFlag::DirsFirst | QDir::SortFlag::Name );
|
||||
return entrys.size();
|
||||
}
|
||||
|
||||
int QtResourceModel::columnCount(const QModelIndex& parent) const {
|
||||
return 2;
|
||||
}
|
||||
|
||||
QVariant QtResourceModel::data(const QModelIndex& index, int role) const {
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
internalData* item = static_cast<internalData*>( index.internalPointer() );
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
if ( index.column() == 0)
|
||||
return QVariant( item->fileName() );
|
||||
if ( index.column() == 1)
|
||||
return QVariant( item->size() );
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
|
@ -1,13 +1,12 @@
|
|||
#include "resourceexplorer.h"
|
||||
#include "ui_resourceexplorer.h"
|
||||
|
||||
#include <QFileSystemModel>
|
||||
#include "qtresourcemodel.h"
|
||||
|
||||
ResourceExplorer::ResourceExplorer(QWidget *parent) : QMainWindow( parent ), ui(new Ui::ResourceExplorer) {
|
||||
this->ui->setupUi(this);
|
||||
|
||||
QFileSystemModel* model = new QFileSystemModel;
|
||||
model->setRootPath( ":/" );
|
||||
QtResourceModel* model = new QtResourceModel( QDir( ":/" ), this );
|
||||
this->ui->treeView->setModel( model );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue