Qt+QFile+QFileDialog处理多文件行数统计及有效行判定Demo

先看一下效果:


注意关键代码:

    m_fileDialog = new QFileDialog(this);
    m_fileDialog->setWindowTitle(tr("Open"));
    m_fileDialog->setDirectory(".");
    m_fileDialog->setNameFilter(tr("Files(*.txt)"));
    m_fileDialog->setFileMode(QFileDialog::ExistingFiles);
QFileDialog提供的setFileMode方法Qt提供了几种情况:(我做的Demo中是可以进行多个文件选择的)

enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, DirectoryOnly };


注意,我的Demo是根据我的具体需求订的无效行,你可以自己定义无效行的规则


源码如下:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QFile>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    m_fileDialog = new QFileDialog(this);
    m_fileDialog->setWindowTitle(tr("Open"));
    m_fileDialog->setDirectory(".");
    m_fileDialog->setNameFilter(tr("Files(*.txt)"));
    m_fileDialog->setFileMode(QFileDialog::ExistingFiles);
    m_fileDialog->hide();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_openFile_clicked()
{
    m_fileDialog->show();
    if(m_fileDialog->exec() == QDialog::Accepted) {
        QStringList files = m_fileDialog->selectedFiles();
        int allD = files.count();
        int allH = 0;
        int allBad = 0;
        for(int i = 0; i < allD; i++) {
            QString path = files[i];
            qDebug() << "path:" << path;
            QStringList list;
            int eNum = 0;
            QFile file(path);
            if (file.open(QIODevice::ReadOnly)) {
                while (!file.atEnd()) {
                    QByteArray tmp = file.readLine();
                    list<<tmp;
                    if(tmp.isEmpty() || tmp.split(',').first().isEmpty()) {
                        eNum++;
                    }
                }
                file.close();
            }
            int gTmp = list.count() - eNum;
            allH += list.count();
            allBad += eNum;
            QFileInfo info(path);
            QString str = QString("%1行数: %2, 无效\350\241\214\346\225\260: %3, 有效行数: %4").arg(info.fileName())
                    .arg(QString::number(list.count())).arg(QString::number(eNum)).arg(QString::number(gTmp));
            ui->treeWidget->addTopLevelItem(new QTreeWidgetItem(QStringList() << str));
        }
        ui->label->setText(QString("文件\350\241\214\346\225\260: %0, \346\211\200\346\234\211\350\241\214\346\225\260: %1, \346\234\211\346\225\210\350\241\214\346\225\260: %2, \346\227\240\346\225\210\350\241\214\346\225\260: %3").arg(QString::number(allD))
                           .arg(QString::number(allH)).arg(QString::number(allH-allBad)).arg(QString::number(allBad)));
        // 文件数:  , 所有行数:  , 有效行数:  , 无效行数:
    }
}

void Widget::on_clearBtn_clicked()
{
    ui->treeWidget->clear();
}



©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页