您的位置:首页 > 编程语言 > Qt开发

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

2017-11-23 16:48 555 查看
先看一下效果:



注意关键代码:

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: