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

Qt 中directoryChanged监听某个目录的内容是否发生变化

  • Qt 中,directoryChanged 是 QFileSystemWatcher 类的一个信号,用于监听某个目录的内容是否发生变化(如添加、删除文件或子目录)

✅ 一、功能说明

  • QFileSystemWatcher::directoryChanged(const QString &path) 信号的作用是:
  • 当你监视的目录内容发生变化时,会发出这个信号。
  • 比如: 新增文件/文件夹 删除文件/文件 重命名文件/文件夹

✅ 二、使用方法

filewatcher.h

#ifndef FILEWATCHER_H
#define FILEWATCHER_H#include <QObject>
#include <QStringList>
#include <QFileSystemWatcher>class FileWatcher : public QObject
{Q_OBJECT
public:explicit FileWatcher(const QString &dirPath, QObject *parent = 0);private slots:void onDirectoryChanged(const QString &path);private:QFileSystemWatcher *watcher;QString watchDir;QStringList currentFiles;void updateFileList();
};#endif // FILEWATCHER_H
#include "filewatcher.h"
#include <QDir>
#include <QMessageBox>
#include <QDebug>FileWatcher::FileWatcher(const QString &dirPath, QObject *parent): QObject(parent), watchDir(dirPath)
{watcher = new QFileSystemWatcher(this);if (QDir(watchDir).exists()) {watcher->addPath(watchDir);updateFileList();connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(onDirectoryChanged(QString)));} else {qDebug() << "目录不存在: " << dirPath;}
}void FileWatcher::updateFileList()
{QDir dir(watchDir);dir.setFilter(QDir::Files | QDir::NoSymLinks);currentFiles = dir.entryList(); // 保存当前文件列表
}void FileWatcher::onDirectoryChanged(const QString &path)
{QDir dir(path);dir.setFilter(QDir::Files | QDir::NoSymLinks);QStringList newFileList = dir.entryList();// 找出被删除的文件QStringList deletedFiles;foreach (QString file, currentFiles) {if (!newFileList.contains(file)) {deletedFiles << file;}}if (!deletedFiles.isEmpty()) {QString msg = QString::fromLocal8Bit("以下文件被删除:\n") + deletedFiles.join("\n");QMessageBox::warning(0, QString::fromLocal8Bit("文件删除警告"), msg);}// 更新当前文件列表currentFiles = newFileList;
}

✅ 三、注意事项

  1. 只能监控一级内容变化
    它 不会递归 监控子目录变化,除非你手动为每个子目录也调用 addPath()。

如果你需要递归监听,需要手动遍历子目录并添加到监控列表。

http://www.xdnf.cn/news/977797.html

相关文章:

  • 达梦数据库DCA考试命令行操作
  • flink1.19.2+cdc-3.2.1遇到的问题及解决方案
  • Ubuntu 实现可视化组raid和升级raid
  • 成功在 Conda Python 2.7 环境中安装 Clipper(eCLIP peak caller)
  • Linux 系统可视化管理工具
  • python学习打卡day50
  • JPA将大数据量的Excel文件导入到数据库中
  • 拼音字母a和g的写法
  • AI Agent 核心策略解析:Function Calling 与 ReAct 的设计哲学与应用实践
  • React 第五十九节 Router中 createBrowserRouter使用详解与案例分析
  • Etcd数据持久化机制:WAL与Snapshot解析
  • python数据结构和算法(5)
  • zset类型
  • Bright Data网页抓取工具实战:BOSS直聘爬虫 + PandasAI分析洞察前端岗位市场趋势
  • 深度学习小项目合集之图像分割识别-视频介绍下自取
  • ThreadLocal实现原理
  • SpringBoot前后台交互 -- 登录功能实现(拦截器+异常捕获器)
  • 音频导入规范
  • 大模型实战篇之ChatGPT(国内可以用)一、实现连续对话智能体
  • 【Linux shell】条件判断和流程控制
  • DL00124-基于YOLOv12深度学习的棉花叶片病害检测含完整数据集
  • BERT 模型微调与传统机器学习的对比
  • uniapp音乐播放createInnerAudioContext
  • 零基础实战:云开发家政维修小程序搭建指南
  • UniApp组件封装,2025年最新HarmonyOS鸿蒙模块化开发项目式教程
  • vue3 + element plus 实现表格列头、行的添加及拖动换位
  • vue前端面试题——记录一次面试当中遇到的题(1)
  • element-ui 的el-table,多选翻页后,之前选择的数据丢失问题处理
  • 黑马教程强化day2-1
  • JAVA毕业设计227—基于SpringBoot+hadoop+spark+Vue的大数据房屋维修系统(源代码+数据库)