Qt 实现浏览本地文件、双击打开选中的文档

一、首先在建立的Qt工程的.h文件中添加我们需要的头文件

#include <QDir>
#include <QFileInfoList>
#inlcude <QFileInfo>
#include <QProcess>

 二、添加所需的私有槽函数、私有成员

void showFileInfoList(QFileInfoList list); //根据获取的QFileInfoList显示本地目录
void slotDirShow(QListWidgetItem *item);   //由双击的文件确定新的目录
void slotShow(QDir dir);  //由新的目录调用showFileInfoList显示

private:
  QString myPath;   //记录文件当前路径

三、在构造函数中确定初始目录,并调用显示

 myPath = "D:";
 QDir dir(myPath);
 QFileInfoList list;

 list = dir.entryInfoList();
 showFileInfoList(list);

 连接对应槽函数(鼠标双击事件)

connect(ui->listWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
                this,SLOT(slotDirShow(QListWidgetItem*)));

四、实现对应的函数

void MainWindow::showFileInfoList(QFileInfoList list)
{
    ui->listWidget->clear();
    for(int i=0; i<list.count() ;i++)
    {
        QFileInfo tmpFileInfo = list.at(i);
        if(tmpFileInfo.isDir())    //为目录则添加文件夹图标及对应文件名
        {
            QIcon icon(":/1.jpg");    
            QString fileName = tmpFileInfo.fileName();
            QListWidgetItem *tmp = new QListWidgetItem(icon, fileName);
            ui->listWidget->addItem(tmp);
        }
        else if(tmpFileInfo.isFile())    //为普通文件则添加普通文件图标及对应文件名
        {
            QIcon icon(":/2.jpg");
            QString fileName = tmpFileInfo.fileName();
            QListWidgetItem *tmp = new QListWidgetItem(icon, fileName);
            ui->listWidget->addItem(tmp);
        }
    }

}

void MainWindow::slotShow(QDir dir)
{
    QFileInfoList list = dir.entryInfoList();
    showFileInfoList(list);
}

//鼠标双击触发,接受item参数
void MainWindow::slotDirShow(QListWidgetItem *item)
{
    QString str = item->text();
    QDir dir;

    dir.setPath(myPath);
    if(!dir.cd(str))         //如果进入失败,则为普通文件,创建新的进程打开对应文件
    {
        QStringList arguments;
        QString start_path = myPath+"\\" + str;
        arguments << "/c" << start_path;

        QProcess* process = new QProcess;

        qDebug() << start_path << endl;
        process->start("cmd.exe",arguments);  //开启新进程打开文件
        return;
    }
    myPath = dir.absolutePath();    //更新路径
    slotShow(dir);
}

五、实现效果(双击文件夹则进入,双击普通文件则打开)

       

猜你喜欢

转载自www.cnblogs.com/xiehuan-blog/p/9585193.html