首页 > 其他分享 >Qt实现系统桌面目录下文件搜索的GUI:功能一:文件查找与现实(下)

Qt实现系统桌面目录下文件搜索的GUI:功能一:文件查找与现实(下)

时间:2023-03-07 20:32:00浏览次数:35  
标签:文件 Qt filePath GUI fileNameItem filesTable ui sizeItem 排序

3、自定义排序

    // 表头排序指示器
    ui->filesTable->setSortingEnabled(true); // 允许排序
    ui->filesTable->horizontalHeader()->setSortIndicatorShown(true); // 显示排序指示器

具体实现:

void MainWindow::createFilesTable()
{
    ui->filesTable = new QTableWidget(0,3);
    ui->filesTable->setSelectionBehavior(QAbstractItemView::SelectRows);

    QStringList labels;
    labels << tr("Filename") <<tr("Path")<< tr("Size");
    ui->filesTable->setHorizontalHeaderLabels(labels);
    ui->filesTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
    ui->filesTable->verticalHeader()->hide();
    ui->filesTable->setShowGrid(false);

    // 表头排序指示器
//    ui->filesTable->setSortingEnabled(true); // 允许排序
//    ui->filesTable->horizontalHeader()->setSortIndicatorShown(true); // 显示排序指示器


    // 菜单
    ui->filesTable->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->filesTable, &QTableWidget::customContextMenuRequested,
                this, &MainWindow::contextMenu);
    connect(ui->filesTable, &QTableWidget::cellActivated,
                this, &MainWindow::openFileOfItem);
}

不过有点问题:

因为size字段带了单位后是字符,字符的大小比较会有点问题,因此在实现中先关闭。

解决办法

1、通过文本排序QTextListFormatstyleindex进行排序。

2、lamb表达式对排序规则进行自定义。

4、文件图标获取

 QIcon icon = iconProvider.icon(filePath);

具体实现:

void MainWindow::showFiles(const QStringList &paths)
{
    QFileIconProvider iconProvider;
    for(const QString &filePath : paths){
        // 获取图标
        const QString toolTip = QDir::toNativeSeparators(filePath);
        const QString relativePath = QDir::toNativeSeparators(currentDir.relativeFilePath((filePath)));
        const qint64 size = QFileInfo(filePath).size();

        QIcon icon = iconProvider.icon(filePath);

        QTableWidgetItem *fileNameItem = new QTableWidgetItem(relativePath);
        fileNameItem->setData(absoluteFileNameRole, QVariant(filePath));
        fileNameItem->setToolTip(toolTip);
        fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);
        // 添加图标进入名称的位置
        fileNameItem->setIcon(icon);

        // 添加路径
        QTableWidgetItem *pathItem = new QTableWidgetItem(filePath);
        pathItem->setData(absoluteFileNameRole, QVariant(filePath));
        pathItem->setToolTip(toolTip);
        pathItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);

        // 大小
        QTableWidgetItem *sizeItem = nullptr;
        // 如果是目录则sizeItem值为空
        QFileInfo fileInfo(filePath);
        if(fileInfo.isDir()){
            // 如果是目录,直接设置为nullptr, 不显示大小
            sizeItem = nullptr;
        }else{
            // 如果是目录,计算文件大小并设置为sizeItem
            sizeItem =  new QTableWidgetItem(tr("%1 KB")
                                             .arg(int((size + 1023) / 1024)));
            sizeItem->setData(absoluteFileNameRole, QVariant(filePath));
            sizeItem->setToolTip(toolTip);
            sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
            sizeItem->setFlags(sizeItem->flags() ^ Qt::ItemIsEditable);
        }
        int row = ui->filesTable->rowCount();
        ui->filesTable->insertRow(row);
        ui->filesTable->setItem(row, 0, fileNameItem);
        ui->filesTable->setItem(row, 1, pathItem);
        ui->filesTable->setItem(row, 2, sizeItem);
    }

    ui->fileFoundLabel->setText(tr("%n file(s) found (Double click on a file to open it)", nullptr, paths.size()));
    ui->fileFoundLabel->setWordWrap(true);
}

5、目录查找范围

findRecursion函数中,这部分放在else循环外 遍历搜索的子目录。在内的话就不遍历子目录的内容

        foreach (const QString& dir, currentDir.entryList(QDir::Dirs | QDir::NoSymLinks | QDir::NoDotAndDotDot))
        {
            findRecursion(prefix + dir, fileName, result);
        }

6、 功能实现

image-20230219104015295

标签:文件,Qt,filePath,GUI,fileNameItem,filesTable,ui,sizeItem,排序
From: https://blog.51cto.com/ydlin/6106453

相关文章

  • 文件树生成
    文件树生成1.项目地址https://github.com/kenanpengyou/dir-tree-noter2.使用方式将根文件拖进窗口即可......
  • Linux - 本机与服务器文件互传(rz&sz)
    软件版本:secureCRTVersion8.7.3(build2279)rz和sz都是使用Zmodem文件传输协议。rz:ReceiveZmodemsz:SendZmodem#centOS安装命令$yum-yinstal......
  • 在线编辑器粘贴word图片且图片文件自动上传功能
    ​ ueditor粘贴不能粘贴word中的图片是一个很头疼的问题,在我们的业务场景中客户要求必须使用ueditor并且支持word的图片粘贴,因为这个需求头疼了半个月,因为前端方面因为安......
  • c++笔架-编译,头文件,链接
    编译是按任意顺序进行的,并且每个文件是独立编译的,所以如果不用头文件的话,其他文件中定义的函数,在当前文件中是不可见的。也就是说没有定义。头文件只包含declaration,不包......
  • 限制图片上传时的文件大小和尺寸
    constbeforeUpload=(file:any)=>{    constisLt2M=file.size/1024/1024<2;  if(!isLt2M){    ElMessage.error('上传头像图片大......
  • QT Linux下编译qwt3d
    原文链接 1、从下面网址下载bugfix版本的qwtplot3dhttps://sourceforge.net/p/qwtplot3d/code/HEAD/tree/branches/multiple_curves_0_2_x/  2、解压刚刚下载的......
  • 富文本编辑器粘贴word图片且图片文件自动上传功能
    ​ 1.编辑器修改(可选)1.1在 ueditor/config.json 中添加代码块    /* 上传word配置 */    "wordActionName":"wordupload",/* 执行上传视频的action......
  • vba 文件操作
    文件Dir[(pathname[,attributes])];pathname可选参数,用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串(""......
  • spring源码02-xml配置文件解析过程
    本文主要讲解spring通过xml进行配置时对xml的加载和解析过程、自定义标签的处理,重点是流程,不说明详细细节;一、创建ClassPathXmlApplicationContext对象//创建容器,并启动......
  • QT windows下编译qwt3d
    原文链接一下,是直接抄过来的:环境:windowQTcreator1:编译QWT3dQWT3d下载地址::https://sourceforge.net/projects/qwtplot3d/files/我们选择最新版本下载解压  解压......