QFileSystemWatcher+QTableView监控目录下文件变化
目标#
- 监控目录下的指定类型的文件,显示文件的序号、名称以及大小。
- 目录下的文件变化时(删除文件,新增文件后),程序界面可以实时显示目录下的状态。
效果图#
完整源码#
#include <QApplication>
#include <QTableView>
#include <QFileSystemWatcher>
#include <QStandardItemModel>
#include <QDir>
#include <QVBoxLayout>
#include <QWidget>
#include <QDebug>
#include <QHeaderView>
class MainWindow : public QWidget
{
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr) : QWidget(parent)
{
// 设置布局
QVBoxLayout* layout = new QVBoxLayout(this);
// 创建 QTableView
tableView = 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);
// 创建 QFileSystemWatcher
fileWatcher = 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"
作者: mohist
出处:https://www.cnblogs.com/pandamohist/p/18716029
版权:本站使用「CC BY 4.0」创作共享协议,未经作者同意,请勿转载;若经同意转载,请在文章明显位置注明作者和出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异