2011-08-13 95 views
1

我有一個QTreeView,它通過重新實現QFileSystemModel來填充。據我所知,QFileSystemModel在rootPath上安裝QFileSystemWatcher。我試圖做的是在我的程序中通知當一個文件直接在rootPath上被刪除,但我還沒有找到任何信號o重新實現的函數提供了我的信息。QFileSystemModel和QFileSystemWatcher從磁盤上刪除

我的應用程序上傳一些文件thrugh一個FTP連接,當文件被完全上傳我的位置刪除它,所以我想從QFileSystemModel的重新實現一個通知時,文件從remove方法directicly(不刪除或相似的東西)。

我希望你能幫助我。我在網上搜索了很多,但我找不到任何東西。

乾杯。

回答

2

您可以使用FileSystemModelrowsAboutToBeRemoved信號(繼承自QAbstractItemModel)。

只要從模型中刪除一行,它就會被觸發。 parent,startend參數允許您獲取文件名(在子項的第0列中)。

示例代碼:

// once you have your model set up: 
... 
QObject::connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex&, int, int)), 
     receiver, SLOT(toBeRemoved(const QModelIndex&, int, int))); 
... 
// in receiver class: 
public slots: 
void toBeRemoved(const QModelIndex &parent, int start, int end) { 
    std::cout << start << " -> " << end << std::endl; 
    std::cout << parent.child(start, 0).data().typeName() << std::endl; 
    std::cout << qPrintable(parent.child(start, 0).data().toString()) << std::endl; 
} 

(使用std ::法院不與Qt的良好實踐,我認爲,這只是讓你開始。)

其他來自QAbstractItemModel的信號可用於發生在文件系統上的其他事件。

+0

感謝它的工作!我在參考文獻中介紹了該函數,但是有一些Qt Creator IDE未建議(包括此)的信號(我不知道爲什麼),所以我之前沒有嘗試過。再次感謝。 –

相關問題