Qt 寿命倒计时设计实现
本篇文章实现一个用来倒计时人生已经度过时间的计算器,珍惜生活的每一天。
这个小软件逻辑比较简单,花了一两个小时完成总体设计开发,逻辑如下:
/**************************************************************** Doc : widget.h Author : BingLee Date : 2021-07-14 Info : life counter head file. this class for calculate how much life time have past. https://blog.csdn.net/Bing_Lee (C)All rights reserved. ******************************************************************/ #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QList> class QDateTime; class QLabel; class QGridLayout; namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: void init(); void refreshShow(); void load(); void save(); bool readFileToString(const QString &path, QString &documentFullStr); bool writeStringToFile(const QString &path, QString &documentFullStr); bool readXmlData(QString &documentFullStr); bool writeXmlData(QString &documentFullStr); private slots: void slot_calculate(); private: Ui::Widget *ui; QString m_logPath; QString m_name; int m_age; int m_row; int m_colume; int m_month; int m_squareLength; QDateTime *m_birthDate; QDateTime *m_todayDate; QList<QLabel *> m_labelList; QGridLayout *m_gridLayout; }; #endif // WIDGET_H
void Widget::slot_calculate() //计算度过的月份和剩余月份. 2021-07-14 https://blog.csdn.net/Bing_Lee { m_name = ui->LE_Name->text(); m_age = ui->LE_Age->text().toUInt(); *m_birthDate = QDateTime::fromString(ui->LE_Birth->text(), DATE_STYLE); ui->LE_Today->setText(m_todayDate->toString(DATE_STYLE)); int days = m_birthDate->daysTo(*m_todayDate); m_month = days / 30; m_squareLength = qSqrt(m_age * 12); refreshShow(); ui->progressBar->setValue(m_month * 100 / m_age / 12 ); save(); } bool Widget::readFileToString(const QString &path, QString &documentFullStr) //读取文件到QString. 2021-07-14 https://blog.csdn.net/Bing_Lee { if (!QFile::exists(path)) { qDebug()<<"file doesn't exist!"; return false; } QFile xmlFile(path); if (!xmlFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<path<<" open failed!"; return false; } QTextStream reader(&xmlFile); documentFullStr.clear(); documentFullStr = reader.readAll(); return true; } bool Widget::writeStringToFile(const QString &path, QString &documentFullStr) //写入QString到文件. 2021-07-14 https://blog.csdn.net/Bing_Lee { if (!QFile::exists(path)) { qDebug()<<"file doesn't exist!"; } QFile file(path); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { return false; } QTextStream writer(&file);//写入 writer<<documentFullStr; file.close(); return true; } bool Widget::readXmlData(QString &documentFullStr) //解析xml文档. 2021-07-14 https://blog.csdn.net/Bing_Lee { QXmlStreamReader reader(documentFullStr); QString nameStr, birthStr, ageStr; QXmlStreamAttributes attributes; while (!reader.atEnd()) { if (reader.isStartElement()) { attributes = reader.attributes(); if (reader.name() == "Name") { nameStr = attributes.value("value").toString(); } else if (reader.name() == "Birth") { birthStr = attributes.value("value").toString(); } else if (reader.name() == "Age") { ageStr = attributes.value("value").toString(); } } reader.readNext(); } if (reader.hasError()) //error check, and output error infomation. { qDebug()<<"ProductXmlProcess" << " read error: "<< reader.errorString(); return false; } else { if (!nameStr.isEmpty() && !birthStr.isEmpty() && !ageStr.isEmpty()) { m_name = nameStr; *m_birthDate = QDateTime::fromString(birthStr, DATE_STYLE); m_age = ageStr.toInt(); } return true; } } bool Widget::writeXmlData(QString &documentFullStr) //保存数据到xml. 2021-07-14 https://blog.csdn.net/Bing_Lee { QXmlStreamWriter writer(&documentFullStr); writer.setAutoFormatting(true); writer.writeStartDocument(); writer.writeStartElement("xsl:stylesheet"); writer.writeAttribute("xmlns:xsl", "http://www.w3.org/1999/XSL/Transform"); { writer.writeStartElement("Name"); writer.writeAttribute("value", m_name); writer.writeEndElement(); writer.writeStartElement("Birth"); writer.writeAttribute("value", m_birthDate->toString(DATE_STYLE)); writer.writeEndElement(); writer.writeStartElement("Age"); writer.writeAttribute("value", QString::number(m_age)); writer.writeEndElement(); } writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); return true; }
保存采用新建或加载log.xml文件实现,如下:
如果喜欢本文,请帮忙给博主点赞、评论、关注三连哦~
源代码下载链接