赞
踩
QFileSystemWatcher类提供了一个接口,用于监视文件和目录以进行修改。
QFileSystemWatcher通过观察指定路径的列表来监视文件系统中文件和目录的更改。
调用addPath()来监视特定的文件或目录。可以使用addPaths()函数添加多个路径。现有的路径可以通过使用removePath()和removePaths()函数删除。
QFileSystemWatcher检查添加到它的每个路径。可以使用Files()函数访问已添加到QFileSystemWatcher中的文件,使用directories()函数访问目录。
fileChanged()信号在文件被修改、重命名或从磁盘删除时发出。类似地,当目录或其内容被修改或删除时,会发出directoryChanged()信号。
注意,一旦文件被重命名或从磁盘中删除,QFileSystemWatcher就会停止监视文件,一旦目录从磁盘中删除,QFileSystemWatcher就会停止监视目录。
QFileSystemWatcher::QFileSystemWatcher(QObject *parent = Q_NULLPTR)
QFileSystemWatcher::QFileSystemWatcher(const QStringList &paths, QObject *parent = Q_NULLPTR)
QFileSystemWatcher::~QFileSystemWatcher()
bool QFileSystemWatcher::addPath(const QString &path)
QStringList QFileSystemWatcher::addPaths(const QStringList &paths)
QStringList QFileSystemWatcher::directories() const
QStringList QFileSystemWatcher::files() const
bool QFileSystemWatcher::removePath(const QString &path)
QStringList QFileSystemWatcher::removePaths(const QStringList &paths)
//当指定路径上的目录被修改(例如,当一个文件被添加或删除时)或从磁盘中移除时,发出这个信号。
void QFileSystemWatcher::directoryChanged(const QString &path)
//当指定路径上的文件被修改、重命名或从磁盘中删除时,发出此信号。
void QFileSystemWatcher::fileChanged(const QString &path)
请注意,如果在短时间内有几个变化,其中一些变化可能不会发出此信号,所以有这种文件短时间变化的情况,在addPath之前,最好添加个延迟。然而,变化序列中的最后一个变化总是会产生这个信号。
注意,这是一个私人信号。它可以用于信号连接,但不能由用户发出。
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QCoreApplication> #include <QDebug> #include <QFile> #include <QFileSystemWatcher> #include <QGridLayout> #include <QMainWindow> #include <QMessageBox> #include <QPlainTextEdit> #include <QPushButton> #include <QStandardPaths> #include <QTextStream> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget* parent = 0); ~MainWindow(); private slots: void slotOpenFile(); void slotFileChanged(); private: void createFile(); private: Ui::MainWindow* ui; QPushButton* m_pBtnOpenFile; // QPushButton* m_pBtnRefreshFile; QPlainTextEdit* m_pTextShowContent; QString m_filePath; QFileSystemWatcher* m_pFileWatcher; }; #endif // MAINWINDOW_H
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); resize(600, 400); QWidget* widget = centralWidget(); //界面布局 m_pBtnOpenFile = new QPushButton(tr("打开文件"), this); // m_pBtnRefreshFile = new QPushButton(tr("刷新文件内容"), this); m_pTextShowContent = new QPlainTextEdit(this); QGridLayout* grid = new QGridLayout(widget); grid->addWidget(m_pBtnOpenFile, 0, 2, 1, 1); grid->addWidget(m_pTextShowContent, 1, 0, 6, 5); setLayout(grid); //创建txt文件 createFile(); //文件检测 m_pFileWatcher = new QFileSystemWatcher(); m_pFileWatcher->addPath(m_filePath); connect(m_pBtnOpenFile, &QPushButton::clicked, this, &MainWindow::slotOpenFile); connect(m_pFileWatcher, &QFileSystemWatcher::fileChanged, this, &MainWindow::slotFileChanged); } MainWindow::~MainWindow() { delete ui; if (m_pFileWatcher) { delete m_pFileWatcher; m_pFileWatcher = nullptr; } } void MainWindow::slotOpenFile() { QFile file(m_filePath); if (!file.exists()) { qDebug() << "文件不存在!"; } if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "文件打开失败!"; } QTextStream in(&file); while (!in.atEnd()) { m_pTextShowContent->appendPlainText(in.readAll()); } } void MainWindow::slotFileChanged() { if (m_pFileWatcher->files().isEmpty()) { qDebug() << "被检测的文件为空"; return; } QMessageBox messageBox(this); messageBox.setWindowTitle("警告"); messageBox.setIcon(QMessageBox::Warning); messageBox.setText("文件已被修改,是否重新加载?"); messageBox.addButton("否", QMessageBox::RejectRole); messageBox.addButton("是", QMessageBox::AcceptRole); if (messageBox.exec() == QDialog::Accepted) { m_pTextShowContent->clear(); slotOpenFile(); //重新加载文件 } } void MainWindow::createFile() { QString desktopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); m_filePath = desktopPath + "/test.txt"; QFile file(m_filePath); if (!file.exists()) { qDebug() << "文件不存在!"; } if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { qDebug() << "文件打开失败!"; } QString str = "目前打开的是一个新文件,用于测试文件是否被修改!"; QTextStream out(&file); out << str; //将str写入文件 file.close(); }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。