#include "CTreeItem.h"
#include "CTreeItemModel.h"
CTreeItemModel::CTreeItemModel(const QStringList &data, QObject *parent)
:QAbstractItemModel(parent)
{
QList<QVariant> rootData;
rootData<<"name";
//rootData<<"icon"<<"name";
m_pRootItem = new CTreeItem(rootData);
loadData(data, m_pRootItem);
}
CTreeItemModel::~CTreeItemModel()
{
delete m_pRootItem;
}
int CTreeItemModel::columnCount(const QModelIndex &parent) const
{
if (parent.isValid())
{
return static_cast<CTreeItem*>(parent.internalPointer())->columnCount();
}
else
{
return m_pRootItem->columnCount();
}
}
QModelIndex CTreeItemModel::index(int row, int column, const QModelIndex &parent) const
{
CTreeItem *parentItem;
if(!parent.isValid())
{
parentItem = m_pRootItem;
}
else
{
parentItem = static_cast<CTreeItem*>(parent.internalPointer());
}
CTreeItem *childItem = parentItem->child(row);
if(childItem)
{
return createIndex(row, column, childItem);
}
else
{
return QModelIndex();
}
}
QModelIndex CTreeItemModel::parent(const QModelIndex & index ) const
{
if(index.isValid())
{
CTreeItem * childItem = static_cast<CTreeItem*>(index.internalPointer());
CTreeItem * parentItem = childItem->parent();
if(parentItem == m_pRootItem)
{
return QModelIndex();
}
else
{
return createIndex(parentItem->row(),20,parentItem);
}
}
else
{
return QModelIndex();
}
}
int CTreeItemModel::rowCount ( const QModelIndex & parent ) const
{
CTreeItem *parentItem;
if(parent.isValid())
{
parentItem = static_cast<CTreeItem*>(parent.internalPointer());
}
else
{
parentItem = m_pRootItem;
}
return parentItem->childCount();
}
QVariant CTreeItemModel::data(const QModelIndex &index, int role ) const
{
if(!index.isValid())
{
return QVariant();
}
if(role != Qt::DecorationRole)
{
return QVariant();
}
CTreeItem *item = static_cast<CTreeItem*>(index.internalPointer());
return item->data(index.column());
}
QVariant CTreeItemModel::headerData(int section, Qt::Orientation orientation,int role) const
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
return m_pRootItem->data(section);
return QVariant();
}
void CTreeItemModel::loadData(const QStringList &data, CTreeItem *parent)
{
QList<CTreeItem*> parents;
QList<int> indentations;
parents << parent;
QString sFilePath;
foreach(sFilePath, data)
{
QFileIconProvider fileIcon;
QIcon icon = fileIcon.icon(sFilePath);
QString sFileName = QFileInfo(sFilePath).fileName();
if (sFileName.isEmpty())
{
sFileName = sFilePath.left(2);
}
QFont fileFont(sFileName,9);
fileFont.setStyleStrategy(QFont::PreferAntialias);
fileFont.setFamily("Arial");
QPixmap map(200 ,16);
map.fill(Qt::transparent);//把场景设置成透明
QPainter painter(&map);
painter.setFont(fileFont);
painter.drawPixmap(0 ,0 , icon.pixmap(QSize(16,16)));
painter.drawText(24,13 , sFileName);
QList<QVariant> columnData;
columnData<<map;
columnData<<QFileInfo(sFilePath).fileName();
CTreeItem *chiled = new CTreeItem(columnData, parents.last(), sFilePath);
parents.last()->appendChild(chiled);
if (QFileInfo(sFilePath).isDir())
{
QDir dir(sFilePath);
dir.setFilter(QDir::Dirs| QDir::NoDotAndDotDot);
QFileInfoList list = dir.entryInfoList();
if (list.count()>1)
{
chiled->appendChild(0);
}
// if (parents.last()->childCount() > 0)
// {
// parents<<parents.last()->child(parents.last()->childCount()-1);
// }
// parents.pop_back();
}
}
}
QString CTreeItemModel::filePath(const QModelIndex &index)
{
CTreeItem *pCurrentItem;
pCurrentItem = static_cast<CTreeItem*>(index.internalPointer());
return pCurrentItem->getFilePath();
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT 自定义资源管理器
共52个文件
obj:16个
cpp:11个
h:5个
4星 · 超过85%的资源 需积分: 49 310 下载量 77 浏览量
2011-03-03
17:57:22
上传
评论 6
收藏 4.5MB RAR 举报
温馨提示
使用了QT的QFileSystemModel + QTreeView 做的一个文件管理系统,这里我做了两种种不同的方法来建立这个文件系统
资源推荐
资源详情
资源评论
收起资源包目录
FileSystem.rar (52个子文件)
FileSystem
FileSystem.sln 896B
FileSystem.ncb 17.86MB
Debug
FileSystem.pdb 2.5MB
FileSystem.ilk 1.33MB
FileSystem.exe 105KB
FileSystem.suo 34KB
Release
FileSystem.exe 54KB
FileSystem
main.cpp 203B
filesystem.ui 2KB
FileSystem.vcproj.CHENCHENG-PC.Miloc.user 1KB
CFileSystemModel.h 189B
CTreeItemModel.cpp 4KB
Resources
filesystem.qrc 70B
GeneratedFiles
qrc_filesystem.cpp 727B
Debug
moc_filesystem.cpp 2KB
moc_CTreeItemModel.cpp 2KB
moc_CFileSystemModel.cpp 2KB
Release
moc_filesystem.cpp 2KB
moc_CTreeItemModel.cpp 2KB
ui_filesystem.h 4KB
FileSystem.vcproj 15KB
CTreeItem.h 677B
CFileSystemModel.cpp 494B
filesystem.h 528B
Debug
CTreeItem.obj 167KB
filesystem.obj 239KB
CFileSystemModel.obj 132KB
moc_CTreeItemModel.obj 126KB
vc90.idb 1.92MB
qrc_filesystem.obj 9KB
BuildLog.htm 9KB
moc_CFileSystemModel.obj 126KB
moc_filesystem.obj 127KB
mt.dep 67B
main.obj 125KB
FileSystem.exe.intermediate.manifest 621B
vc90.pdb 1.71MB
CTreeItemModel.obj 215KB
filesystem.cpp 2KB
Release
CTreeItem.obj 27KB
filesystem.obj 61KB
moc_CTreeItemModel.obj 9KB
vc90.idb 1.91MB
qrc_filesystem.obj 2KB
BuildLog.htm 9KB
moc_filesystem.obj 9KB
mt.dep 67B
main.obj 28KB
FileSystem.exe.intermediate.manifest 616B
CTreeItemModel.obj 67KB
CTreeItemModel.h 786B
CTreeItem.cpp 1KB
共 52 条
- 1
cc5358979
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页