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

来源:互联网 发布:网络侦探 丁香兽 编辑:程序博客网 时间:2024/06/05 23:57

先看一下效果:


注意关键代码:

    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();}



原创粉丝点击