簡體   English   中英

QFileSystemModel 不發出 fileRenamed 信號

[英]QFileSystemModel doesn't emit fileRenamed signal

我正在嘗試使用 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()));

恐怕您對這個QFileSystemModel class 期望過高。如果重命名操作發生在 model 之外,它不會也無法捕獲。我查看了fileRenamed()信號的所有用途,似乎它唯一發出的地方是這里: https://code.woboq.org/qt5/qtbase/src/widgets/dialogs/qfilesystemmodel.cpp.html#933

如果你 go 上面幾行,你可以看到當重命名發生在這個 function https://code.woboq.org/qt5/qtbase/src/widgets/dialogs/qfilesystemmodel.cpp.html#873換句話說,如果您使用QFileSystemModel::setData()為項目設置名稱,它將重命名該項目並發出信號。 這是發出信號的唯一方法。

這是合乎邏輯的,如果重命名發生在你的程序之外,那么就沒有確定的方法來發現某個文件被重命名了。 您的應用程序只觀察到一些文件消失了,另一個具有不同名稱的文件出現了。 當然,您可以檢查文件的時間戳和大小是否相同,它們是否也在同一個父文件夾中,也許還可以檢查文件內容......只有當這些東西匹配時,唯一的區別在於文件名,那么您可以斷定該文件已重命名。 但這是你必須自己編程的東西。 QFileSystemModel不會為你做這件事,因為它不知道你的具體意圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM