我想在下面的例子中使用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堆棧中。我不知道我在這裏做錯了什麼,有人可以幫我嗎?
由於在C++中對對象生命週期的誤解,此問題相當微不足道的錯誤。這個問題和Qt的特殊組合對其他人沒有用處,因此我投票結束 - 在SO上存在太多相同問題的化身。 – 2015-02-15 20:12:44