QFileSystemWatcher只有在工作的main()

问题描述:

我想在下面的例子中使用QFileSystemWatcher像: How to use QFileSystemWatcher to monitor a folder for change 我的问题是,观察者不工作时,我在main()函数创建如以下:QFileSystemWatcher只有在工作的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堆栈中。我不知道我在这里做错了什么,有人可以帮我吗?

+0

由于在C++中对对象生命周期的误解,此问题相当微不足道的错误。这个问题和Qt的特殊组合对其他人没有用处,因此我投票结束 - 在SO上存在太多相同问题的化身。 – 2015-02-15 20:12:44

在第二种情况下,您的QFileSystemWatcher watcher在堆栈上创建,并在构造函数结束后立即销毁。您必须在某处保留对它的引用,可能作为您的属性SystemFileWatcher

+0

通过更改此行解决了我的问题: QFileSystemWatcher watcher();通过这个: 这个: QFileSystemWatcher * watcher = new QFileSystemWatcher(); 感谢您的帮助。 – 2015-02-12 03:59:19

+1

小心,这样做,如果不保留对你不能销毁它的对象的引用,你会得到内存泄漏 – Smasho 2015-02-12 04:04:25

+0

@Smasho不在Qt中,如果实例是QObject派生的 – 2015-09-14 13:20:55