Qt读写数据流文件(转 CppGuiProgrammingWithQt4)

读取文件:

update 20140525:添加线程处理,在读取大文件时优化,防止app出现application假死状态。

1bool SpreadSheet::readFile(const QString &filePath){ 2    QFile file(filePath); 3 4    if ( !file.open(QIODevice::ReadOnly)) { 5        QMessageBox::warning(this, tr("Spreadsheet"), 6                             tr("Cannot read file %1:\n%2.") 7                             .arg(file.fileName()) 8                             .arg(file.errorString())); 9 10        return false; 11    } 12 13    QDataStream in(&file); 14    in.setVersion(QDataStream::Qt_5_3); 15 16    quint64 magic; 17    in >> magic; 18 19    if (SpreadSheet::MagicNumber != magic) { 20        QMessageBox::warning(this, tr("Spreadsheet"), 21                             tr("The file is not a Spreadsheet file.")); 22 23        return false; 24    } 25 26    clear(); 27 28    quint32 row; 29    quint32 column; 30    QString str; 31 32    QProgressDialog* process = 33            progressDialog(this, tr("Load %1").arg(file.fileName()), SpreadSheet::mMaxRow); 34    process->setModal(true); 35 36    QApplication::setOverrideCursor(Qt::WaitCursor); 37 38    while ( !in.atEnd()) { 39        in >> row >> column >> str; 40        setFormula(row, column, str); 41 42        process->setValue(row); 43 44        if ( process->wasCanceled()) { 45            clear(); 46            delete process; 47            file.close(); 48        } 49    } 50 51    QApplication::restoreOverrideCursor(); 52    delete process; 53 54    return true; 55}

写入文件:

update 20140525:添加线程处理,在写入大文件时优化,防止app出现application假死状态。

1bool SpreadSheet::writeFile(const QString &filePath){ 2    QFile file(filePath); 3 4    if ( !file.open(QIODevice::WriteOnly)) { 5        QMessageBox::warning(this, tr("Spreadsheet"), 6                             tr("Cannot write file %1:\n%2.") 7                             .arg(file.fileName()) 8                             .arg(file.errorString())); 9 10        return false; 11    } 12 13    QDataStream out(&file); 14    out.setVersion(QDataStream::Qt_5_3); 15 16    out << (quint64) SpreadSheet::MagicNumber; 17 18    QProgressDialog* progress = 19            progressDialog(this, tr("Save %1").arg(file.fileName()), SpreadSheet::mMaxRow); 20    progress->setModal(true); 21 22    QApplication::setOverrideCursor(Qt::WaitCursor); 23    QString str; 24 25    for (int i(0); i != SpreadSheet::mMaxRow; ++i) { 26        progress->setValue(i); 27        qApp->processEvents(QEventLoop::ExcludeUserInputEvents); 28 29        if ( progress->wasCanceled()) { 30            file.remove(); 31            delete progress; 32            return false; 33        } 34 35        for (int j(0); j != SpreadSheet::mMaxColumn; ++j) { 36            str = formula(i, j); 37 38            if ( !str.isEmpty()) { 39                out << (quint32)<< (quint32)<< str; 40            } 41        } 42    } 43 44    delete progress; 45    QApplication::restoreOverrideCursor(); 46 47    return true; 48}

使用到的函数:

1QProgressDialog* SpreadSheet::progressDialog(QWidget* widget,  2                                             const QString &str,  3                                             const int range){ 4     QProgressDialog* progressDialog(new QProgressDialog(widget)); 5     progressDialog->setLabelText(str); 6     progressDialog->setRange(0, range); 7 8     return progressDialog; 9}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )