目标
- 监控目录下的指定类型的文件,显示文件的序号、名称以及大小。
- 目录下的文件变化时(删除文件,新增文件后),程序界面可以实时显示目录下的状态。
效果图
- 监控目录下的
.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"