来自C ++插件的QML类型只发出一次

时间:2016-01-28 22:59:58

标签: c++ qt qml qt5.5

我有一个C ++插件,用 QFileSystemWatcher 监视文件更改,并使用自定义QML类型插槽连接它的 fileChanged 信号,如下所示:

//In the custom QML type constructor
QObject::connect(&this->_watcher, SIGNAL(fileChanged(QString)),
                        this, SLOT(fileChangedSlot(QString)));

插槽功能:

void CustomQMLTypeClass::fileChangedSlot(QString file)
{
    Q_UNUSED(file);
    emit fileChanged();
}

在QML方面:

CustomQMLType{
    fileUri: "some/file/path/file.format"
    onFileChanged: console.log("File changed")
}

在运行程序时,一切顺利,但是当我这样做时,即:

  回声" sth" >>一些/文件/路径/ file.format

不止一次,通知只会触发一次。为什么? O.o

1 个答案:

答案 0 :(得分:0)

显然问题在于QFileSystemWatcher,它有时会奏效,而其他人则不会。 由于我可以处理成本,我的快速解决方案是改变插槽:

void CustomQMLTypeClass::fileChangedSlot(QString &file)
{
    _watcher.removePath(file);
    _watcher.addPath(file);
    emit fileChanged();
}

现在它按预期工作,但不知道为什么,也无法理解QFileSystemWatcher's source。最后我决定KDE的KDirWatch更好。