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

Qt5开发从入门到精通——第九篇六节( Qt5 文件及磁盘处理—— 监视文件和目录变化)

CSDN话题挑战赛第2期
参赛话题:学习笔记

目录

  • 前言
  • 一、监视文件和目录变化概述
  • 二、效果实例
  • 三、原码实例
    • watcher.h
    • main.cpp
    • watcher.cpp
  • 四、总结

前言

一、监视文件和目录变化概述

在 Qt 中可以使用 QFileSystemWatcher 类监视文件和目录的改变。在使用 addPath() 函数监视指定的文件和目录时,如果需要监视多个目录,则可以使用 addPaths()函数加入监视。若要移除不需要监视的目录,则可以使用 removePath()和 removePaths()函数 。
当监视的文件被修改或删除时,产生一个 fileChanged()信号 。 如果所监视的目录被改变或删除,则产生 directoryChanged()信号。
Qt 提供了 QFile 类用于进行文件操作。 QFile 类提供了读写文件的接口,可以读写文本文件、二进制文件和 Qt 的资源文件。
处理文本文件和二进制文件,可以使用 QTextStream 类和 QDataStream 类。处理临时文件可以使用 QTemporaryFile, 获取文件信息可以使用 QFilelnfo, 处理目录可以使用 QDir, 监视文件和目录变化可以使用 QFileSystemWatcher 。

二、效果实例

图一
新建文件或者删除文件会触发“目录发生变化”

在这里插入图片描述
图二
在这里插入图片描述

三、原码实例

watcher.h

#ifndef WATCHER_H
#define WATCHER_H

#include <QWidget>
#include <QLabel>
#include <QFileSystemWatcher>

class watcher : public QWidget
{
    Q_OBJECT

public:
    watcher(QWidget *parent = 0);
    ~watcher();
public slots:
    void directoryChanged(QString path);
private:
    QLabel *pathLabel;
    QFileSystemWatcher fsWatcher;

};

#endif // WATCHER_H

main.cpp

#include "watcher.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    watcher w;
    w.show();

    return a.exec();
}

watcher.cpp

#include "watcher.h"
#include <QVBoxLayout>
#include <QDir>
#include <QMessageBox>
#include <QApplication>
watcher::watcher(QWidget *parent)
    : QWidget(parent)
{
    QStringList args=qApp->arguments();
    QString path;
    if (args.count()>1)  /*读取命令行指定的目录作为监视目录。如果没有指定,则监视当前目录。*/
    {
        path=args[1];
    }else
    {
        path=QDir::currentPath();
    }
    pathLabel = new QLabel;
    pathLabel->setText(tr(" 监视的目录: ")+path);
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    mainLayout->addWidget(pathLabel);
    fsWatcher.addPath(path);
    /*将目录的 directoryChangedO信号与响应函数 directoryChangedO连接。*/
    connect(&fsWatcher,SIGNAL(directoryChanged(QString)),this,SLOT(directoryChanged(QString)));

}

watcher::~watcher()
{

}

/*响应函数 directoryChangedO使用消息对话框提示用户目录发生了改变,*/
void watcher::directoryChanged(QString path)
{
   //QMessageBox::information(NULL,tr(" 目录发生变化 "),path);
    pathLabel->setText(tr(" 目录发生变化: ")+path);
}


四、总结

Qt5 文件及磁盘处理—— 监视文件和目录变化会在应用程序开发中经常用到的。

相关文章:

  • 接收节点无线广播发送的数据,并printf打印出来(含核心代码)_物联网挑战赛第四届第一题
  • 【CSDN:国庆活动】——“问答”里的成长记录
  • WEB安全之DIV CSS基础(四):三种定位和堆叠顺序
  • C++ -------- 类型转换
  • 【youcans 的图像处理学习课】11. 形态学图像处理(中)
  • 大二数据库实验-MySQL语句(Employee、Department、Salary)
  • 实验3 数据文件操作和异常处理
  • 【微信小程序】button和image组件的基本使用
  • 【吴恩达深度学习】——NLP和Word Embedding
  • 图解mysql(五)——日志篇
  • 图解mysql(六)——内存篇
  • 【数据库原理 | MySQL】 前世今生(入坑篇)
  • Python脚本在win10下开机自启动
  • docker安装rocketmq
  • 【C++】基础入门(三):引用超全整理
  • $translatePartialLoader加载失败及解决方式
  • [NodeJS] 关于Buffer
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • C++类的相互关联
  • Create React App 使用
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • DataBase in Android
  • Debian下无root权限使用Python访问Oracle
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HashMap剖析之内部结构
  • iOS 系统授权开发
  • iOS 颜色设置看我就够了
  • javascript数组去重/查找/插入/删除
  • markdown编辑器简评
  • mysql 5.6 原生Online DDL解析
  • nodejs:开发并发布一个nodejs包
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python实现BT种子转化为磁力链接【实战】
  • 从零开始在ubuntu上搭建node开发环境
  • 多线程 start 和 run 方法到底有什么区别?
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于遗传算法的优化问题求解
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 问题之ssh中Host key verification failed的解决
  • 一份游戏开发学习路线
  • 由插件封装引出的一丢丢思考
  • 在Unity中实现一个简单的消息管理器
  • ​【已解决】npm install​卡主不动的情况
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (¥1011)-(一千零一拾一元整)输出
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (二)JAVA使用POI操作excel
  • (二)Linux——Linux常用指令
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)shell中括号的特殊用法 linux if多条件判断