QFileSystemWatcher+QTableView监控目录下文件变化

news/2025/2/22 4:20:06/文章来源:https://www.cnblogs.com/pandamohist/p/18716029

目标

  • 监控目录下的指定类型的文件,显示文件的序号、名称以及大小。
  • 目录下的文件变化时(删除文件,新增文件后),程序界面可以实时显示目录下的状态。

效果图

  • 监控目录下的 .h 文件

完整源码

#include <QApplication>
#include <QTableView>
#include <QFileSystemWatcher>
#include <QStandardItemModel>
#include <QDir>
#include <QVBoxLayout>
#include <QWidget>
#include <QDebug>
#include <QHeaderView>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget* parent = nullptr) : QWidget(parent){// 设置布局QVBoxLayout* layout = new QVBoxLayout(this);// 创建 QTableViewtableView = new QTableView(this);// 创建数据模型(3列:序号、文件名、文件大小)model = new QStandardItemModel(this);model->setColumnCount(3);model->setHeaderData(0, Qt::Horizontal, "Index");model->setHeaderData(1, Qt::Horizontal, "File Name");model->setHeaderData(2, Qt::Horizontal, "File Size");// 设置模型tableView->setModel(model);// 设置列宽tableView->setColumnWidth(0, 50);  // 序号列tableView->setColumnWidth(1, 250); // 文件名列tableView->setColumnWidth(2, 100); // 文件大小列// 隐藏行头(行号)tableView->verticalHeader()->setVisible(false);// 创建 QFileSystemWatcherfileWatcher = new QFileSystemWatcher(this);// 设置监控目录directory = QApplication::applicationDirPath(); // 监控当前目录fileWatcher->addPath(directory);// 初始加载文件列表loadFileList();// 连接信号槽,当目录变化时刷新文件列表connect(fileWatcher, &QFileSystemWatcher::directoryChanged, this, &MainWindow::refreshFileList);// 将 QTableView 添加到布局layout->addWidget(tableView);setLayout(layout);}private:// 加载文件列表void loadFileList(){QDir dir(directory);QStringList filters;filters << "*.h"; // 只监控 .h 文件QStringList fileList = dir.entryList(filters, QDir::Files | QDir::NoDotAndDotDot);model->removeRows(0, model->rowCount()); // 清空现有数据int row = 0;for (const QString& fileName : fileList){QFileInfo fileInfo(dir.filePath(fileName));// 创建三列的数据项QList<QStandardItem*> rowItems;rowItems << new QStandardItem(QString::number(row + 1)); // 序号(从1开始)rowItems << new QStandardItem(fileName);                // 文件名rowItems << new QStandardItem(QString::number(fileInfo.size())); // 文件大小model->appendRow(rowItems);row++;}}// 刷新文件列表void refreshFileList(){qDebug() << "Directory changed, refreshing file list...";loadFileList(); // 重新加载文件列表}private:QTableView* tableView;QStandardItemModel* model;QFileSystemWatcher* fileWatcher;QString directory; // 监控的目录
};int main(int argc, char* argv[])
{QApplication app(argc, argv);MainWindow window;window.setWindowTitle(".h File Monitor with Index");window.resize(1000, 800);window.show();return app.exec();
}#include "main.moc"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/883867.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器安装Nginx

环境CentOS 8 使用编译安装 NginxNginx使用Docker安装确实有点麻烦,需要将很多前端文件映射到容器内部,不推荐 正式环境 1、安装环境需要的依赖包 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2、在你的linux服务器上创建目录:nginx cd /root &…

WPF的DataGrid简单使用

简单做个记录。有时候会忘记某个样式怎么调整; 首先写一个DataGrid,AlternatingRowBackground表示隔行更改背景色;AlternationCount表示隔的行数;:1 <DataGrid Grid.Row="1" 2 AlternatingRowBackground="Snow" 3 Alternation…

报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant

与 TEN 相聚在「LET’S VISION 2025」大会,欢迎来展位上跟我们交流。这次我们还准备了一场聚焦「computer use」的工作坊,功能新鲜上线,线下首波体验!📅 TEN 展位:2025年3月1日-2日TEN workshop:2025年3月2日 13:30开始📍 上海浦东鲜花港TEN Framework 是一个主流对话…

本地AI搭建

搭建本地博客AI 目录搭建本地博客AI环境下载ollama选择模型选择embedding模型查看性能测试选择合适的嵌入模型(Embedder)估算内存选择模型量化类型介绍Q5_0 vs Q5_KQ5_K 变体(Q5_K_S、Q5_K_M、Q5_K_L)选择LLM模型下载模型下载LLM下载Embedder下载AnythingLLM配置向量数据库测试…

无需编码5分钟免费部署云上调用满血版DeepSeek

大家好,我是 V 哥。如何自己部署DeepSeek调用满血版。首先,如果你遇到了使用公共服务器时的延迟或限制,想要本地部署以获得更好的性能和稳定性。你是不是也想自己来部署DeepSeek呢,其实除了自己部署本地DeepSeek,还可以在云上免费部署满血版DeepSeek,接下来,V 哥来介绍这…

svm(support vector machine)之svr(support vector regression)学习笔记(?)

1.SVR和SVC的区分:SVR:构建函数拟合数据;SVC:二向数据点的划分(分类)注:SVR的是输入时给出的实际值 \(y_{i}\),SVC的 \(y_{i}\)是输入时给出的类别,即+1,-1。 2.SVR的目的:找到一个函数\(f(x)\),使之与训练数据给出的实际目标\(y_{i}\) 的偏差几乎不超过\(ε\),同时…

电脑必学基础操作,任何设备不白买,免费实现远程办公

随着科技的发展、时代的进步,手机、电脑、平板设备还有越来越多的软件应用已成为人们学习、工作、娱乐、社交中必不可少的工具。然而,固然这些智能化的产品益处颇多,若想要更好的掌握它们的妙用,更高效的进行使用,那可以好好了解一下一些基础操作!这不仅能够帮助我们获得…

GitLab中重置ssh密钥

1、通过命令查看当前密钥地址 ls ~/.ssh 2、从新生成新的密钥 ssh-keygen -t rsa -b 4096 -C "your-email@example.com"3、找到public key 名称为 id_rsa.pub 复制其内容,在新建密钥的时候粘贴到key中即可

网络安全红队学习资源

关于网络安全红队方向的学习资源介绍Red Team Notes 红队将模拟恶意攻击者最有可能使用的TTP,并试图获得皇冠上的宝石(通常是一面旗帜)。 https://red.tymyrddin.dev/awesome-pentest 💻🛡️ 一个为渗透测试精心策划的资源、工具和其他有趣的东西的集合。 https://githu…

利用流处理实现实时生成式 AI 应用

在过去的十年里,我们已经显著转向实时、数据中心化的应用程序。无论是在电子商务推荐、欺诈检测还是物联网事件分析中,用户现在都期望通过持续的数据流获得即时且符合上下文的响应。MongoDB 灵活的文档模型和实时能力使其非常适用于这些动态工作负载,尤其是当它与 Kafka 等流…

连续学习论文A Comprehensive Survey of Continual Learning:Theory, Method and Application阅读:

连续学习是指智能系统能够在其生命周期内逐步获取、更新、积累和利用知识的能力。主要挑战是灾难性遗忘,即学习新任务时旧任务性能急剧下降。CL 的目标包括平衡稳定性和可塑性、任务内与任务间的泛化能力以及资源效率。 2.2节对连续学习不同的种类进行了分类 包括不同任…

2025 氧化铝

跌势快要结束了