|
2Qter豆
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 将监视器的信号和自定义的槽进行关联
connect(&myWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(showMessage(QString)));
connect(&myWatcher, SIGNAL(fileChanged(QString)), this, SLOT(showMessage(QString)));
// 显示出当前目录下的所有.h文件
QDir myDir(QDir::currentPath());
myDir.setNameFilters(QStringList("*.h"));
ui->listWidget->addItem(myDir.absolutePath() + tr("目录下的.h文件有:"));
ui->listWidget->addItems(myDir.entryList());
// 创建目录,并将其加入到监视器中
myDir.mkdir("mydir");
myDir.cd("mydir");
ui->listWidget->addItem(tr("监视的目录:") + myDir.absolutePath());
myWatcher.addPath(myDir.absolutePath());
// 创建文件,并将其加入到监视器中
QFile file(myDir.absolutePath() + "/myfile.txt");
if (file.open(QIODevice::WriteOnly)) {
QFileInfo info(file);
ui->listWidget->addItem(tr("监视的文件:") + info.absoluteFilePath());
myWatcher.addPath(info.absoluteFilePath());
file.close();
}
}
// 显示文件或目录改变信息
void MainWindow::showMessage(const QString &path)
{
qDebug()<<path;
QDir dir(QDir::currentPath()+"/mydir");
// 如果是目录发生了改变
if (path == dir.absolutePath()){
ui->listWidget->addItem(dir.dirName() + tr("目录发生改变: "));
ui->listWidget->addItems(dir.entryList());
} else { // 如果是文件发生了改变
ui->listWidget->addItem(path + tr("文件发生改变!"));
}
}
代码如上,T1:如果重命名mydir,此时为什么不会发送Signals?T2:重命名之后在该文件夹中创建新文件夹,将同时发送myfile和mydir修改信号,这是为什么呢,不是已经重命名了吗,为什么还会发送信号呢 |
最佳答案
查看完整内容
The fileChanged() signal is emitted when a file has been modified, renamed or removed from disk. Similarly, the directoryChanged() signal is emitted when a directory or its contents is modified or removed. Note that QFileSystemWatcher stops monitoring files once they have been renamed or removed from disk, and directories once they have been removed from disk.
|