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

目标#

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

效果图#

  • 监控目录下的 .h 文件

完整源码#

Copy Highlighter-hljs
#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"
posted @   mohist  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示
CONTENTS