找回密码
 立即注册
收起左侧

QFileSystemWatcher中监视的目录重命名的错误

3
回复
6325
查看
[复制链接]
累计签到:5 天
连续签到:1 天
来源: 2015-8-29 17:13:10 显示全部楼层 |阅读模式
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.
回复

使用道具 举报

累计签到:1571 天
连续签到:1 天
2015-8-29 17:13:11 显示全部楼层
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.
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2015-8-30 18:35:55 显示全部楼层
yafeilinux 发表于 2015-8-30 11:11
The fileChanged() signal is emitted when a file has been modified, renamed or removed from disk. Sim ...

那就是说如果重命名监视的目录将不会发送该目录的修改信号咯?额,文件重命名就可以发送信号,目录重命名不发送信号,这会不会不太合理呢?
回复

使用道具 举报

累计签到:1571 天
连续签到:1 天
2015-9-7 22:19:21 显示全部楼层
llccyy02 发表于 2015-8-30 18:35
那就是说如果重命名监视的目录将不会发送该目录的修改信号咯?额,文件重命名就可以发送信号,目录重命名 ...

恩。记着以前使用这个的时候,也感觉不是很好用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了