2016-06-20 125 views
1

我正在使用QFileDialog均爲getOpenFileNamegetSaveFileName。我在網絡上有一個文件(慢速連接),我加載了getOpenFileName。然後,如果我嘗試創建新的QFileDialog,則需要永久加載。QFileDialog慢速網絡

我用Process Monitor查看了進程,我可以看到它在我上次打開文件的網絡位置的每個文件中緩慢爬行。在我重新啓動計算機之前它一直很慢。我能做些什麼來加快速度?

下面是一些代碼:

打開文件對話框

QString filename; 
QFileDialog fd(this); 
filename = fd.getOpenFileName(this,tr("Open CSV File"), ".",tr("CSV Files (*.csv)")); 

保存文件對話框

QString filename; 
QFileDialog fd(this); 
filename = fd.getSaveFileName(this,tr("Save CSV File"), ".",tr("CSV Files (*.csv)")); 

謝謝。

回答

2

不幸的是,如果您像使用本機對話框一樣,那麼您就可以做的其他事情。 getOpenFileName打開本機文件對話框,它是枚舉目標目錄中的文件的本機平臺代碼。

如果你不需要本機對話框,你可以做各種事情來解決阻塞/同步目錄迭代接口,從根本上解決異步I/O資源問題。

+0

要迂腐,你*可以*做些什麼。您可以自己重新實現這些功能,並以不同方式處理網絡響應緩慢(例如,通過顯示錯誤 - 顯然無法更快地獲得實際結果)。 –

+0

@JesperJuhl是的,不幸的是,大多數文件系統訪問是同步的,因爲操作系統的內部經常被破壞,並且完全隱藏了現實世界的異步性。所以例如通常您可以異步地從大文件中讀取塊,但即使您嘗試將其作爲重疊/異步操作執行,也會阻止讀取目錄內容。你可以做的最好的辦法是把它全部扔進工作者線程並顯示你自己的對話框,並在OS調用返回時停止線程。這是浪費和傷心。原生對話可能是異步...但不是因爲VFS dir迭代不是:( –

+0

所以,正如我所說...;) –

1

嘗試選項QFileDialog::DontUseNativeDialog。這應該禁止打開本機對話框。

我使用非本機對話框(通過從QFileDialog派生)多年來擺脫你描述的問題。

+0

看起來這是人們常見的問題,但在這裏並沒有發生幫助。我猜在這一點上的錯誤。 – dlams