qt实现文件浏览器

Windows的资源管理器,大家很熟悉吧,可以放回上一级,查找到下一级………QtQDir 类可以实现显示文件系统目录的效果。

笔者的机器环境:Windows8.1

看代码~~

fileview_widget.h

[cpp] view plain copy
print ?
  1. #ifndef FILEVIEWWIDGET_H  
  2. #define FILEVIEWWIDGET_H  
  3.   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9. #include   
  10. #include   
  11. #include   
  12. #include   
  13.   
  14. class FileViewWidget : public QWidget  
  15. {  
  16.     Q_OBJECT  
  17. public:  
  18.     FileViewWidget(QWidget *parent=0);  
  19.   
  20.     //—用双击浏览器中显示的目录进入下一级,或者返回上一级目录。  
  21.     void showFileInfoList(QFileInfoList list);  
  22.   
  23.     public slots:  
  24.         //–显示当前目录下的所有文件  
  25.         void slotShow(QDir dir);  
  26.   
  27.         //—-根据选择显示下一级目录下的文件,  
  28.         void slotDirShow(QListWidgetItem *Item);  
  29.   
  30. private:  
  31.     QLineEdit *fileLineEdit;  
  32.     QListWidget *fileListWidget;  
  33.     QVBoxLayout *vLayout;  
  34.     QFileInfoList list;  
  35. };  
  36.   
  37. #endif  //FILEVIEWWIDGET_H  
#ifndef FILEVIEWWIDGET_H




define FILEVIEWWIDGET_H

include

include

include

include

include

include

include

include

include

class FileViewWidget : public QWidget
{
Q_OBJECT
public:
FileViewWidget(QWidget *parent=0);

//---用双击浏览器中显示的目录进入下一级,或者返回上一级目录。
void showFileInfoList(QFileInfoList list);

public slots:
    //--显示当前目录下的所有文件
    void slotShow(QDir dir);

    //----根据选择显示下一级目录下的文件,
    void slotDirShow(QListWidgetItem *Item);

private:
QLineEdit *fileLineEdit;
QListWidget *fileListWidget;
QVBoxLayout *vLayout;
QFileInfoList list;
};

endif //FILEVIEWWIDGET_H fileview_widget.cpp

[cpp] view plain copy
print ?
  1. #include “fileview_widget.h”  
  2. #include  
  3.   
  4. FileViewWidget::FileViewWidget(QWidget *parent/*=0*/) :QWidget(parent)  
  5. {  
  6.     //—–实例化对象  
  7.     fileLineEdit = new QLineEdit(“/”this);  
  8.     fileListWidget = new QListWidget(this);  
  9.   
  10.     //—布局  
  11.     vLayout = new QVBoxLayout(this);  
  12.     vLayout->addWidget(fileLineEdit);  
  13.     vLayout->addWidget(fileListWidget);  
  14.   
  15.     //–设置对应信号与槽  
  16.     connect(fileLineEdit, SIGNAL(returnPressed()),   
  17.                 this, SLOT(slotDirShow(QDir)));  
  18.     connect(fileListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)),  
  19.                 this, SLOT(slotDirShow(QListWidgetItem*)));  
  20.     QString rootStr = ”/”;  
  21.     QDir rootDir(rootStr);  
  22.     QStringList stringlist;  
  23.     stringlist << ”*”;  
  24.     list = rootDir.entryInfoList(stringlist);  
  25.     showFileInfoList(list);  
  26.   
  27.     //—显示布局  
  28.     setLayout(vLayout);  
  29.     //—-设置窗口属性  
  30.     setWindowTitle(”File View”);  
  31. }  
  32.   
  33. //–显示当前目录下的所有文件  
  34. void FileViewWidget::slotShow(QDir dir)  
  35. {  
  36.      QStringList stringList;  
  37.      stringList << ”*”;  
  38.      QFileInfoList InfoList = dir.entryInfoList(stringList, QDir :: AllEntries, QDir :: DirsFirst);  
  39.      showFileInfoList(InfoList);  
  40. }  
  41.   
  42. //—用双击浏览器中显示的目录进入下一级,或者返回上一级目录。  
  43. void FileViewWidget::showFileInfoList(QFileInfoList list)  
  44. {  
  45.     //–清空列表控件  
  46.     fileListWidget->clear();  
  47.   
  48.     //—-取出所有项,按照目录,文件方式添加到控件内  
  49.     for (unsigned int i = 0; i < list.count(); i++)  
  50.     {  
  51.         QFileInfo tmpFileInfo = list.at(i);  
  52.         if (tmpFileInfo.isDir())  
  53.         {  
  54.             QIcon icon(”dir.png”);  
  55.             QString fileName = tmpFileInfo.fileName();  
  56.             QListWidgetItem*tmpListWidgetItem = new QListWidgetItem(icon, fileName);  
  57.             fileListWidget->addItem(tmpListWidgetItem);  
  58.         }  
  59.         else  
  60.         {  
  61.             QIcon icon(”file.png”);  
  62.             QString fileName = tmpFileInfo.fileName();  
  63.             QListWidgetItem*tmpListWidgetItem = new QListWidgetItem(icon, fileName);  
  64.             fileListWidget->addItem(tmpListWidgetItem);  
  65.         }  
  66.     }  
  67. }  
  68.   
  69. //—-根据用户的选择显示下一级目录下的文件,  
  70. void FileViewWidget::slotDirShow(QListWidgetItem *Item)  
  71. {  
  72.     //—-保存下一级目录名  
  73.     QString string = Item->text();  
  74.     QDir dir;  
  75.     //—-设置路径为当前目录路径  
  76.     dir.setPath(fileLineEdit->text());  
  77.     //—–重新设置路径  
  78.     dir.cd(string);  
  79.     //—-更新当前显示路径, 这里获取的是绝对路径  
  80.     fileLineEdit->setText(dir.absolutePath());  
  81.     //—显示当前文件目录下的所有文件  
  82.     slotShow(dir);  
  83. }  
#include "fileview_widget.h"




include

FileViewWidget::FileViewWidget(QWidget parent/=0*/) :QWidget(parent)
{
//-----实例化对象
fileLineEdit = new QLineEdit("/", this);
fileListWidget = new QListWidget(this);

//---布局
vLayout = new QVBoxLayout(this);
vLayout->addWidget(fileLineEdit);
vLayout->addWidget(fileListWidget);

//--设置对应信号与槽
connect(fileLineEdit, SIGNAL(returnPressed()), 
            this, SLOT(slotDirShow(QDir)));
connect(fileListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
            this, SLOT(slotDirShow(QListWidgetItem*)));
QString rootStr = "/";
QDir rootDir(rootStr);
QStringList stringlist;
stringlist << "*";
list = rootDir.entryInfoList(stringlist);
showFileInfoList(list);

//---显示布局
setLayout(vLayout);
//----设置窗口属性
setWindowTitle("File View");

}

//–显示当前目录下的所有文件
void FileViewWidget::slotShow(QDir dir)
{
QStringList stringList;
stringList << “*”;
QFileInfoList InfoList = dir.entryInfoList(stringList, QDir :: AllEntries, QDir :: DirsFirst);
showFileInfoList(InfoList);
}

//—用双击浏览器中显示的目录进入下一级,或者返回上一级目录。
void FileViewWidget::showFileInfoList(QFileInfoList list)
{
//–清空列表控件
fileListWidget->clear();

//----取出所有项,按照目录,文件方式添加到控件内
for (unsigned int i = 0; i < list.count(); i++)
{
    QFileInfo tmpFileInfo = list.at(i);
    if (tmpFileInfo.isDir())
    {
        QIcon icon("dir.png");
        QString fileName = tmpFileInfo.fileName();
        QListWidgetItem*tmpListWidgetItem = new QListWidgetItem(icon, fileName);
        fileListWidget->addItem(tmpListWidgetItem);
    }
    else
    {
        QIcon icon("file.png");
        QString fileName = tmpFileInfo.fileName();
        QListWidgetItem*tmpListWidgetItem = new QListWidgetItem(icon, fileName);
        fileListWidget->addItem(tmpListWidgetItem);
    }
}

}

//—-根据用户的选择显示下一级目录下的文件,
void FileViewWidget::slotDirShow(QListWidgetItem *Item)
{
//—-保存下一级目录名
QString string = Item->text();
QDir dir;
//—-设置路径为当前目录路径
dir.setPath(fileLineEdit->text());
//—–重新设置路径
dir.cd(string);
//—-更新当前显示路径, 这里获取的是绝对路径
fileLineEdit->setText(dir.absolutePath());
//—显示当前文件目录下的所有文件
slotShow(dir);
}
main.cpp

[cpp] view plain copy
print ?
  1. #pragma once  
  2. #include   
  3. #include “fileview_widget.h”  
  4.   
  5. int main(int argc, char *argv[])  
  6. {  
  7.     QApplication a(argc, argv);  
  8.   
  9.     FileViewWidget win;  
  10.     win.show();  
  11.   
  12.     return a.exec();  
  13. }  
#pragma once




include

include “fileview_widget.h”

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

FileViewWidget win;
win.show();

return a.exec();

}


   下面是运行结果

                                                     


这里笔者列出关于QDir::Filter 的过滤方式,信息来源:assistant

[plain] view plain copy
print ?
  1. Constant    Value   Description  
  2. QDir::Dirs  0x001   List directories that match the filters.  
  3. QDir::AllDirs   0x400   List all directories; i.e. don’t apply the filters to directory names.  
  4. QDir::Files 0x002   List files.  
  5. QDir::Drives    0x004   List disk drives (ignored under Unix).  
  6. QDir::NoSymLinks    0x008   Do not list symbolic links (ignored by operating systems that don’t support symbolic links).  
  7. QDir::NoDotAndDotDot    NoDot | NoDotDot    Do not list the special entries ”.” and ”..”.  
  8. QDir::NoDot 0x2000  Do not list the special entry ”.”.  
  9. QDir::NoDotDot  0x4000  Do not list the special entry ”..”.  
  10. QDir::AllEntries    Dirs | Files | Drives   List directories, files, drives and symlinks (this does not list broken symlinks unless you specify System).  
  11. QDir::Readable  0x010   List files for which the application has read access. The Readable value needs to be combined with Dirs or Files.  
  12. QDir::Writable  0x020   List files for which the application has write access. The Writable value needs to be combined with Dirs or Files.  
  13. QDir::Executable    0x040   List files for which the application has execute access. The Executable value needs to be combined with Dirs or Files.  
  14. QDir::Modified  0x080   Only list files that have been modified (ignored on Unix).  
  15. QDir::Hidden    0x100   List hidden files (on Unix, files starting with a ”.”).  
  16. QDir::System    0x200   List system files (on Unix, FIFOs, sockets and device files are included; on Windows, .lnk files are included)  
  17. QDir::CaseSensitive 0x800   The filter should be case sensitive.  
Constant    Value   Description
QDir::Dirs  0x001   List directories that match the filters.
QDir::AllDirs   0x400   List all directories; i.e. don't apply the filters to directory names.
QDir::Files 0x002   List files.
QDir::Drives    0x004   List disk drives (ignored under Unix).
QDir::NoSymLinks    0x008   Do not list symbolic links (ignored by operating systems that don't support symbolic links).
QDir::NoDotAndDotDot    NoDot | NoDotDot    Do not list the special entries "." and "..".
QDir::NoDot 0x2000  Do not list the special entry ".".
QDir::NoDotDot  0x4000  Do not list the special entry "..".
QDir::AllEntries    Dirs | Files | Drives   List directories, files, drives and symlinks (this does not list broken symlinks unless you specify System).
QDir::Readable  0x010   List files for which the application has read access. The Readable value needs to be combined with Dirs or Files.
QDir::Writable  0x020   List files for which the application has write access. The Writable value needs to be combined with Dirs or Files.
QDir::Executable    0x040   List files for which the application has execute access. The Executable value needs to be combined with Dirs or Files.
QDir::Modified  0x080   Only list files that have been modified (ignored on Unix).
QDir::Hidden    0x100   List hidden files (on Unix, files starting with a ".").
QDir::System    0x200   List system files (on Unix, FIFOs, sockets and device files are included; on Windows, .lnk files are included)
QDir::CaseSensitive 0x800   The filter should be case sensitive.


                

转载自:http://blog.csdn.net/hk_5788/article/details/42435787

你可能感兴趣的:(QT)