2015-02-12 46 views
-1

我想在下面的例子中使用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

回答

1

在第二種情況下,您的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