当前位置: 首页 > news >正文

【Qt】实现定期清理程序日志

在现有Qt程序中实现可配置日志保存天数的代码示例,分为界面修改、配置存储和核心逻辑三部分:

// 1. 在配置文件(如settings.h)中添加保存天数的配置项
class Settings {
public:int logRetentionDays() const {return m_settings.value("Log/RetentionDays", 30).toInt(); // 默认30天}void setLogRetentionDays(int days) {m_settings.setValue("Log/RetentionDays", days);}private:QSettings m_settings;
};// 2. 在界面类头文件中添加控件声明(MainWindow.h)
class MainWindow : public QMainWindow {Q_OBJECT
public:// ... 原有声明
private slots:void onRetentionDaysChanged(int index);void checkLogCleanup();private:QComboBox *m_retentionCombo;QTimer *m_cleanupTimer;Settings m_settings;
};// 3. 界面初始化(MainWindow.cpp)
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 初始化下拉框m_retentionCombo = new QComboBox(this);m_retentionCombo->addItem("3天", 3);m_retentionCombo->addItem("7天", 7);m_retentionCombo->addItem("10天", 10);// 读取保存的值int savedDays = m_settings.logRetentionDays();int index = m_retentionCombo->findData(savedDays);m_retentionCombo->setCurrentIndex(index != -1 ? index : 0);connect(m_retentionCombo, QOverload<int>::of(&QComboBox::currentIndexChanged),this, &MainWindow::onRetentionDaysChanged);// 初始化定时器(每天检查)m_cleanupTimer = new QTimer(this);connect(m_cleanupTimer, &QTimer::timeout, this, &MainWindow::checkLogCleanup);m_cleanupTimer->start(24 * 60 * 60 * 1000); // 24小时
}// 4. 处理配置变更
void MainWindow::onRetentionDaysChanged(int index)
{int days = m_retentionCombo->itemData(index).toInt();m_settings.setLogRetentionDays(days);checkLogCleanup(); // 可选:立即执行一次清理
}// 5. 实现日志清理核心逻辑
void MainWindow::checkLogCleanup()
{QDir logDir("logs");QDate currentDate = QDate::currentDate();int retentionDays = m_settings.logRetentionDays();foreach (const QFileInfo &fileInfo, logDir.entryInfoList(QDir::Files)) {// 从文件名解析日期(假设文件名格式为log_yyyy-MM-dd.txt)QString fileName = fileInfo.fileName();QDate fileDate = QDate::fromString(fileName.mid(4, 10), "yyyy-MM-dd");if (fileDate.isValid()) {int days = fileDate.daysTo(currentDate);if (days > retentionDays) {QFile::remove(fileInfo.absoluteFilePath());}}}
}

实现要点说明:

  1. 界面控件
  • 使用QComboBox提供3/7/10天选项
  • 使用QData关联存储实际天数值
  • 通过QSettings持久化配置
  1. 定时检查
  • 使用QTimer每日触发清理检查
  • 首次启动时立即执行一次清理
  1. 安全增强
  • 文件名日期解析需要验证有效性
  • 删除前可添加确认对话框(生产环境慎用)
  • 建议添加日志记录清理操作
  1. 扩展性
  • 可添加最小保留天数限制(如>=1)
  • 支持自定义天数(需添加QSpinBox)
  • 多线程处理大量文件删除

如果需要更完整的实现,可以添加以下优化:

// 增强版文件日期检测(同时检查文件元数据)
QDate getFileDate(const QFileInfo &fileInfo) {// 优先从文件名解析QDate date = parseDateFromFileName(fileInfo.fileName());// 文件名无效时使用修改日期if (!date.isValid()) {date = fileInfo.lastModified().date();}return date;
}// 带进度提示的清理
void MainWindow::checkLogCleanup() {QDir logDir("logs");int total = logDir.count();int processed = 0;foreach (const QFileInfo &fileInfo, logDir.entryInfoList(QDir::Files)) {// ... 清理逻辑// 更新进度emit cleanupProgress(++processed * 100 / total);QApplication::processEvents();}
}

相关文章:

【Qt】实现定期清理程序日志

在现有Qt程序中实现可配置日志保存天数的代码示例&#xff0c;分为界面修改、配置存储和核心逻辑三部分&#xff1a; // 1. 在配置文件&#xff08;如settings.h&#xff09;中添加保存天数的配置项 class Settings { public:int logRetentionDays() const {return m_settings…...

git bisect 使用二分法查找引入错误的提交

git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时&#xff0c;首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...

一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法

论文标题 中文标题&#xff1a;一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法 英文标题&#xff1a;A Joint Routing and Time-Slot Scheduling Load Balancing Algorithm for In-Vehicle TSN 作者信息 Bo Xu, Xinrui Chang, Dongyang Xu, Shuo Wang, Uzair As…...

【弹性计算】容器、裸金属

容器、裸金属 1.容器和云原生1.1 容器服务1.2 弹性容器实例1.3 函数计算 2.裸金属2.1 弹性裸金属服务器2.2 超级计算集群 1.容器和云原生 容器技术 起源于虚拟化技术&#xff0c;Docker 和虚拟机和谐共存&#xff0c;用户也找到了适合两者的应用场景&#xff0c;二者对比如下图…...

Golang关于结构体组合赋值的问题

现在有一个结构体&#xff0c;其中一个属性组合了另外一个结构体&#xff0c;如下所示&#xff1a; type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?

DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f; 文章目录 DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f;一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT&#xff1a;谁更胜一筹&#xff1f;2.1 语言生成能力评测对比场景…...

新建github操作

1.在github.com的主页根据提示新建一个depository。 2.配置用户名和邮箱 git config --global user.name "name" git config --global user.email "email" 3.生成ssh秘钥 ssh-keygen -t rsa 找到public key 对应的文件路径 cat /root/.ssh/id_rsa 复制显…...

Spring Boot 携手 DeepSeek:开启智能交互新时代

前言 在当今数字化浪潮汹涌澎湃的时代,人工智能技术正以前所未有的速度改变着我们的生活和工作方式。大语言模型作为人工智能领域的一颗璀璨明星,凭借其强大的自然语言处理能力,为各个行业带来了新的发展机遇。DeepSeek 作为一款性能卓越的大语言模型,以其高效、准确的文本…...

基于SSM+uniapp的数学辅导小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户功能模块&#xff1a;用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环…...

HTML的入门

一、HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用来告知浏览器如何组织页面的标记语言。 超文本&#xff1a;就是超越了文本&#xff1b;HTML不仅仅可以用来显示文本(字符串、数字之类)&#xff0c;还可以显示视频、音频等…...

Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1

Rust-GDAL 是 Rust 语言的 GDAL&#xff08;Geospatial Data Abstraction Library&#xff09; 绑定库&#xff0c;用于处理地理数据。由于 GDAL 依赖较多&#xff0c;在 Windows 上的安装相对复杂&#xff0c;本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…...

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手&#xff08;Copilot、DeepSeek、GPT-4o Mini&#xff09; &#x1f4ca; 引言 近年来&#xff0c;AI 编程助手已成为开发者的高效工具&#xff0c;它们可以加速代码编写、优化代码结构&#xff0c;并提供智能提示。本文介绍如何在 IntelliJ I…...

【金三银四】分享数据库笔试题及答案~~

你是否在面试中遇到过关于数据库的笔试题&#xff1f;如何高效地准备这些题目&#xff0c;提升自己的竞争力&#xff1f;本文将为你整理一些经典的数据库笔试题及其答案&#xff0c;助你备战面试。 金三银四马上来了&#xff0c;测试年限较短难免会碰到笔试题&#xff0c;最近…...

3.1 AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论

AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论 引言:AI时代产品经理的范式跃迁 Gartner预测,到2026年75%的AI项目失败将归因于产品管理缺失。本文揭示AI Agent产品经理的六大核心能力模型,通过GitHub Sentinel等案例,展示如何将大模型技术转化为可持续商…...

MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)

目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…...

2D 游戏艺术、动画和光照

原文&#xff1a;https://unity.com/resources/2d-game-art-animation-lighting-for-artists-ebook 笔记 用Tilemap瓷砖大小为1单元&#xff0c;人物大小在0.5~2单元 PPU &#xff1a;单位像素 pixels per unit 2160 4K分辨率/ 正交相机size*2 完整屏幕显示像素点 有骨骼动…...

基于SSM+uniapp的鲜花销售小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、商户功能模块&#xff1a;用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环境&#x…...

【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】

嘿,小伙伴们,今天咱们来聊聊深度学习里的一大明星——卷积神经网络(CNN)。这东西在图像识别、视频处理等领域简直不要太火,甚至人脸识别、物体检测这些高大上的应用,都离不开它的身影。废话不多说,咱们这就开聊! 一、CNN是什么东东? 在人工智能领域,卷积神经网络(…...

java原子操作类实现原理

文章目录 AtomicLong实现原理递增和递减操作代码总结 LongAdder实现原理实现原理LongAdder 代码分析构造方法sum方法reset方法sumThenReset方法longValue方法add 方法longAccumulate 方法 总结 JUC 包提供 了一系列的原子性操作类&#xff0c;这些类都是使用非阻塞算法 CAS 实现…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...