Qt 创建文件浏览器
2016-04-11 19:01
225 查看
摘要:
使用Qt来实现文件浏览器 主要有两种方式: 一种,使用QDir获取目录列表,使用QListWidget作为视图窗口显示目录。获取目录列表的核心函数是:
QDir::entryInfoList; 其返回值类型 QFileInFoList 文件信息列表,可以获取文件的各种信息
QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
参数一: 文件名称过滤器 (实质是一个QStringList 字符串列表)
参数二: 属性过滤器
参数三: 设置排序类型
第二种:树目录 使用Model/view架构来处理目录数据和显示之间的关系(相关内容见【1】),其中Model模型为:QFileSystemModel View模型为QtreeView;
其关键的两个核心函数为:QTreeView::setModel(model) 和 QTreeView::setRootIndex(index);
浏览器构成: 1 一个返回上级菜单按钮 2 一个文本框显示当前地址 3一个核心widget(显示文件目录)
实现: 将相关部件封装成一个widget部件 然后将其添加到主界面的浮动窗口中
获取文件路径:使用了QtreeView的两个信号函数:void QTreeView::expanded(const QModelIndex & index) 和 void QTreeView::clicked(const QModelIndex & index)
其中传递的参数QModeIIndex (模型索引【2】) 提供类相关的文件信息索引。其包含了三个重要的属性:行号、列号以及父索引 可以帮助我们定位为相对应的文件信息。 之后我们调用QFileInfo
QFileSystemModel::fileInfo(const QModelIndex & index) const 返回一个fileInfo类(这是我们最终想要的)。该类可以返回对应文件的据对文件路径。还可以返回文件名和后缀名(可以用作筛选文件)
部分代码(书目录):
#ifndef FILEBROWSER
#define FILEBROWSER
#include<QtGui>
#include<QtWidgets>
class FileBrowser : public QWidget
{
Q_OBJECT
public:
FileBrowser(QWidget *parent);
void showFileInfoList(QFileInfoList list);
public slots:
void slotShowDir(QListWidgetItem * item);
void slotShow(QDir dir);
void UpButtonClicked();
public:
QLineEdit *LineEditDir;
QListWidget *ListWidgetFile;
QPushButton *UpButton;
};
#endif // FILEBROWSER
#include"treeview.h"
#include<QDebug>
#include<QFileInfo>
fileView::fileView(QWidget *parent):
QWidget(parent)
{
//创建变量
tree=new QTreeView(this);
model=new QFileSystemModel();
LineEditDir = new QLineEdit(this);
UpButton=new QPushButton(this);
UpButton->setIcon(QIcon(":/Images/ImageSource/return.png"));
//添加布局
QVBoxLayout *vbLayout = new QVBoxLayout(this); //垂直布局
QHBoxLayout *hbLayout = new QHBoxLayout(); //水平布局
hbLayout->addWidget(UpButton);
hbLayout->addWidget(LineEditDir);
vbLayout->addLayout(hbLayout);
vbLayout->addWidget( tree );
model->setRootPath("");
tree->setModel(model);
tree->setRootIndex(model->index("/home"));
// 设置窗口样式
tree->setAnimated(true);
tree->setIndentation(20);
tree->setSortingEnabled(true);
tree->setColumnWidth(0, tree->width()*2);
const QSize availableSize = parent->size();
tree->resize(availableSize);
tree->header()->setStretchLastSection(true);
tree->header()->setSortIndicator(0, Qt::AscendingOrder);
tree->header()->setSortIndicatorShown(true);
#if QT_VERSION >= 0x050000
tree->header()->setSectionsClickable(true);
#else
tree->header()->setClickable(true);
#endif
//槽函数
connect(tree,SIGNAL(expanded(QModelIndex)),this,SLOT(slotshowDir(QModelIndex)));//展开信号
connect(tree,SIGNAL(clicked(QModelIndex)),this,SLOT(slotshowDir(QModelIndex))); //单击信号
connect(tree->selectionModel(),SIGNAL(currentChanged(QModelIndex,QModelIndex)),this,SLOT(slotshowDir(QModelIndex)));
//item发生变化作为信号
}
void fileView::slotshowDir(const QModelIndex &index)
{
QFileInfo tmpInfo=model->fileInfo(index); //获取文件信息
QString absolutepath=tmpInfo.absoluteFilePath(); //获取文件的绝对路径路径(包括文件名)
if(tmpInfo.isDir())
{
LineEditDir->setText(absolutepath);
}
else if(tmpInfo.isFile())
{
QString ext=tmpInfo.suffix(); //获取文件后缀名 筛选后缀名为png和jpg 输出地址
// qDebug()<<"extension:"<<ext;
if((ext=="png")|(ext=="jpg"))
qDebug()<<"filepath:"<<tmpInfo.absoluteFilePath();
}
}
参考文献:
【1】model/view架构
【2】Modellindex
【3】Qt目录树实现
【4】Qt创建文件浏览器
相关文章推荐
- Qt QString.arg参数的一点注意
- Qt移动应用开发(三):使用精灵图片实现帧动画
- QString 的使用技巧
- qt 中的基本知识
- qt中文乱码问题(1)
- qtreewidget 添加复选按钮
- Qt做发布版,解决声音和图片、中文字体乱码问题
- Ubuntu14.04 x64 qt集成cuda开发
- Qt之等待提示框(QMovie播放gif图片,等待文字变化等)
- 发布的QT程序无法显示图标和图片的问题
- Qt下libusbwin32的使用方法
- LinqToSqlite
- Qt不规则界面及组件的实现
- Qt下 QString转char*
- Qt 水平滚动字幕2
- Qt实现滚动字幕效果
- Qt实现滚动图片效果
- Qt实现图片渐进渐出效果
- Qt类之QDockWidget类
- Qt类之QAction