我正在嘗試使用 QFileSystemModel 觀察目錄中的更改。每當我重命名根路徑中的檔案時,只會發出 directoryLoaded() 信號。我希望發出 fileRenamed() 信號,以便我知道哪個檔案被重命名為新名稱。這是我的代碼:
model = new QFileSystemModel;
model->setRootPath("C:/test/");
QObject::connect(model, SIGNAL(fileRenamed(const QString&, const QString&, const QString&)), this, SLOT(updateRename()));
QObject::connect(model, SIGNAL(directoryLoaded(const QString&)), this, SLOT(loadDir()));
uj5u.com熱心網友回復:
恐怕你對這QFileSystemModel門課期望太高了。如果重命名操作發生在模型之外,它不會也無法捕獲。我查看了fileRenamed()信號的所有用途,似乎它發出的唯一地方是這里:https ://code.woboq.org/qt5/qtbase/src/widgets/dialogs/qfilesystemmodel.cpp.html#933
如果你在上面幾行,你可以看到當重命名發生在這個函式中時觸發了這個https://code.woboq.org/qt5/qtbase/src/widgets/dialogs/qfilesystemmodel.cpp.html#873換句話說,如果您使用QFileSystemModel::setData()為專案設定名稱,它將重命名專案并發出信號。這是發出信號的唯一方法。
這是合乎邏輯的,如果重命名發生在您的程式之外,那么沒有確定的方法可以找出某個檔案被重命名了。您的應用程式只觀察到某個檔案消失了,而另一個具有不同名稱的檔案出現了。當然,您可以檢查檔案的時間戳和大小是否相同,它們是否也在同一個父檔案夾中,也許還可以檢查檔案內容......只有這些東西匹配并且唯一的區別在于檔案名,那么您可以斷定該檔案已被重命名。但這是你必須自己編程的東西。QFileSystemModel不會為你做,因為它不知道你的具體意圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/463648.html
標籤:C qt qfilesystemmodel qfilesystemwatcher
上一篇:獲取QGraphicsItem內的QWidget的位置
下一篇:基于單詞匹配的格式字串
