千家信息网

Qt运行时间记录类怎么使用

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍"Qt运行时间记录类怎么使用",在日常操作中,相信很多人在Qt运行时间记录类怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Qt运行时间记录类怎么
千家信息网最后更新 2024年11月23日Qt运行时间记录类怎么使用

这篇文章主要介绍"Qt运行时间记录类怎么使用",在日常操作中,相信很多人在Qt运行时间记录类怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Qt运行时间记录类怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、前言

在早期开发的软件中,尤其是初学者入门者写的软件,软件运行久了,难免遇到意外崩溃的时候,可是大部分的运行设备可能在现场客户那,需要记住每一次从软件启动后到软件意外关闭前的运行时间,需要记录的信息包括:编号+开始时间+结束时间+已运行时间,每次完整的运行过程只产生一条记录,每次运行时间改变以后更新当前这条记录即可。这样就可以确切的了解到软件在现场的真实运行情况是否糟糕,如果没有这个记录(当然可以选择记录存储到数据库),程序又重启恢复了,也不知道到底每次运行了多久,从几点到几点。为了写的简单点,不干扰原有的数据库文件,我一般选择输出到文本文件。

主要功能:

  1. 可以启动和停止服务,在需要的时候启动。

  2. 可以指定日志文件存放目录。

  3. 可以指定时间日志输出间隔。

  4. 可以单独追加一条记录到日志文件。

  5. 日志为文本格式,清晰明了。

二、代码思路

void SaveRunTime::getDiffValue(const QDateTime &startTime, const QDateTime &endTime, int &day, int &hour, int &minute){    qint64 sec = startTime.secsTo(endTime);    day = hour = minute = 0;    int seconds = 0;    while (sec > 0) {        seconds++;        if (seconds == 60) {            minute++;            seconds = 0;        }        if (minute == 60) {            hour++;            minute = 0;        }        if (hour == 24) {            day++;            hour = 0;        }        sec--;    }}void SaveRunTime::initLog(){    //判断当前年份的记事本文件是否存在,不存在则新建并且写入标题    //存在则自动读取最后一行的id号  记事本文件格式内容    //幢号    开始时间                结束时间                已运行时间    //1      2016-01-01 12:33:33    2016-02-05 12:12:12     day: 0  hour: 0  minute: 0    logFile = QString("%1/%2_runtime_%3.txt").arg(path).arg(name).arg(QDate::currentDate().year());    QFile file(logFile);    if (file.size() == 0) {        if (file.open(QFile::WriteOnly | QFile::Text)) {            QString strID = QString("%1t").arg("编号");            QString strStartTime = QString("%1tt").arg("开始时间");            QString strEndTime = QString("%1tt").arg("结束时间");            QString strRunTime = QString("%1").arg("已运行时间");            QString line = strID + strStartTime + strEndTime + strRunTime;            QTextStream stream(&file);            stream << line << NEWLINE;            file.close();            lastID = 0;        }    } else {        if (file.open(QFile::ReadOnly)) {            QString lastLine;            while (!file.atEnd()) {                lastLine = file.readLine();            }            file.close();            QStringList list = lastLine.split("t");            lastID = list.at(0).toInt();        }    }    lastID++;}void SaveRunTime::appendLog(){    logFile = QString("%1/%2_runtime_%3.txt").arg(path).arg(name).arg(QDate::currentDate().year());    QFile file(logFile);    //写入当前首次运行时间    if (file.open(QFile::WriteOnly | QFile::Append | QFile::Text)) {        QString strID = QString("%1t").arg(lastID);        QString strStartTime = QString("%1t").arg(startTime.toString("yyyy-MM-dd HH:mm:ss"));        QString strEndTime = QString("%1t").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));        int day, hour, minute;        getDiffValue(startTime, QDateTime::currentDateTime(), day, hour, minute);        QString strRunTime = QString("%1 天 %2 时 %3 分").arg(day).arg(hour).arg(minute);        QString line = strID + strStartTime + strEndTime + strRunTime;        QTextStream stream(&file);        stream << line << NEWLINE;        file.close();    }}void SaveRunTime::saveLog(){    //每次保存都是将之前的所有文本读取出来,然后替换最后一行即可    logFile = QString("%1/%2_runtime_%3.txt").arg(path).arg(name).arg(QDate::currentDate().year());    QFile file(logFile);    //如果日志文件不存在,则初始化一个日志文件    if (file.size() == 0) {        initLog();        appendLog();        return;    }    if (file.open(QFile::ReadWrite)) {        //一行行读取到链表        QStringList content;        while (!file.atEnd()) {            content.append(file.readLine());        }        //重新清空文件        file.resize(0);        //如果行数小于2则返回        if (content.count() < 2) {            file.close();            return;        }        QString lastLine = content.last();        QStringList list = lastLine.split("t");        //计算已运行时间        int day, hour, minute;        getDiffValue(startTime, QDateTime::currentDateTime(), day, hour, minute);        QString strRunTime = QString("%1 天 %2 时 %3 分").arg(day).arg(hour).arg(minute);        //重新拼接最后一行        list[2] = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");        list[3] = strRunTime;        lastLine = list.join("t");        //重新替换最后一行并写入新的数据        content[content.count() - 1] = lastLine;        QTextStream stream(&file);        stream << content.join("") << NEWLINE;        file.close();    }}

三、效果图

到此,关于"Qt运行时间记录类怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0