QFileSystemWatcher 只在 main() 中工作
QFileSystemWatcher working only in main()
我正尝试像下面的示例一样使用 QFileSystemWatcher:
How to use QFileSystemWatcher to monitor a folder for change
我的问题是,当我在 main() 函数中创建它时,观察器确实起作用,如下所示:
#include "mainwindow.h"
#include <QApplication>
#include <QFileSystemWatcher>
#include <QDebug>
#include "systemfilewatcher.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFileSystemWatcher watcher;
watcher.addPath("C:/QtTest");
SystemFileWatcher* mc = new SystemFileWatcher();
QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc,
SLOT(showModified(QString)));
MainWindow w(&watcher);
w.show();
return a.exec();
}
然而,当我在我的 ui 中尝试完全相同的代码时,如下所示,它不起作用:
MainWindow::MainWindow(QFileSystemWatcher folder, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QFileSystemWatcher watcher;
watcher.addPath("C:/QtTest");
SystemFileWatcher* mc = new SystemFileWatcher();
QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc, SLOT(showModified(QString)));
这是我的 "systemfilewatcher.h" :
#ifndef SYSTEMFILEWATCHER
#define SYSTEMFILEWATCHER
#include <QWidget>
#include <QMessageBox>
class SystemFileWatcher : public QWidget
{
Q_OBJECT
public:
SystemFileWatcher(QWidget* parent=0)
:QWidget(parent){}
~SystemFileWatcher(){}
public slots:
void showModified(const QString& str)
{
QMessageBox::information(this,"Directory Modified", str);
}
};
#endif // SYSTEMFILEWATCHER
}
我的目标是检测何时在目标目录中创建文件并将其名称放入 QString 堆栈中。我不知道我在这里做错了什么,有人可以帮我吗?
在第二种情况下,您的 QFileSystemWatcher watcher
是在堆栈上创建的,并在构造函数结束后立即销毁。你必须在某处保留对它的引用,可能作为你的 SystemFileWatcher
class
的属性
我正尝试像下面的示例一样使用 QFileSystemWatcher: How to use QFileSystemWatcher to monitor a folder for change 我的问题是,当我在 main() 函数中创建它时,观察器确实起作用,如下所示:
#include "mainwindow.h"
#include <QApplication>
#include <QFileSystemWatcher>
#include <QDebug>
#include "systemfilewatcher.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFileSystemWatcher watcher;
watcher.addPath("C:/QtTest");
SystemFileWatcher* mc = new SystemFileWatcher();
QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc,
SLOT(showModified(QString)));
MainWindow w(&watcher);
w.show();
return a.exec();
}
然而,当我在我的 ui 中尝试完全相同的代码时,如下所示,它不起作用:
MainWindow::MainWindow(QFileSystemWatcher folder, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QFileSystemWatcher watcher;
watcher.addPath("C:/QtTest");
SystemFileWatcher* mc = new SystemFileWatcher();
QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc, SLOT(showModified(QString)));
这是我的 "systemfilewatcher.h" :
#ifndef SYSTEMFILEWATCHER
#define SYSTEMFILEWATCHER
#include <QWidget>
#include <QMessageBox>
class SystemFileWatcher : public QWidget
{
Q_OBJECT
public:
SystemFileWatcher(QWidget* parent=0)
:QWidget(parent){}
~SystemFileWatcher(){}
public slots:
void showModified(const QString& str)
{
QMessageBox::information(this,"Directory Modified", str);
}
};
#endif // SYSTEMFILEWATCHER
}
我的目标是检测何时在目标目录中创建文件并将其名称放入 QString 堆栈中。我不知道我在这里做错了什么,有人可以帮我吗?
在第二种情况下,您的 QFileSystemWatcher watcher
是在堆栈上创建的,并在构造函数结束后立即销毁。你必须在某处保留对它的引用,可能作为你的 SystemFileWatcher
class