最後に使用したフォルダをqmlのファイルダイアログ(Qtバージョン5.6を使用)に保存します。これは、ローカルファイルを扱うとき十分に機能しますが、UNC形式のパスによって対処リモートコンピュータ上のファイルを使用していないときFileDialogのフォルダをQMLのUNCパスから設定する方法は?
/////////////
/// myApp.qml
/////////////
import QtQuick 2.3
import QtQuick.Dialogs 1.1
import Qt.labs.settings 1.0
Settings {
id: settings
property url lastUsedFolder;
}
FileDialog {
id: openDialog
onVisibleChanged:
{
if(visible && myApp.doesFolderStillExist(settings.lastUsedFolder))
{
console.log("setting folder of dialog")
folder = settings.lastUsedFolder
console.log(folder)
}
}
onAccepted:
{
console.log("saving folder: " + folder)
settings.lastUsedFolder = folder;
}
}
/////////////
/// myApp.cpp
/////////////
bool myApp::doesFolderStillExist(QUrl folderUrl)
{
QFileInfo folder(folderUrl.toLocalFile());
if (folder.exists())
return true;
return false;
}
:私はそれを行う方法は、次のようなurlプロパティlastUsedFolder
を持っQSettingsています\\myRemotePC.somewhere.com\myData\
などです。
このアドレスに移動してダイアログを受け入れると、フォルダはonAcceptedメソッドによって保存され、コンソールにはsaving folder: file://myRemotePC.somewhere.com/myData
が印刷されます。その後、再びダイアログを開くと、onVisibleChangedがトリガされます。 doesFolderStillExists
メソッドでは、フォルダが表示されます。つまり、QUrl.toLocalFileが機能しているように見えます。また、settings.lastUsedFolder
に保存されているパスは、まだ保存されているものと同じです。換言すれば、
QWindowsNativeFileDialogBase::shellItem: SHCreateItemFromParsingName(file:///myRemotePC.somewhere.com/myData) failed()
:;しかし、その後、次のエラーでfolder
プロパティに割り当てライン上のアプリがクラッシュする(Windows 7の最後のコンソールプリントは、単に「ダイアログの設定フォルダ」です)それは私が前にそれから読むとまったく同じ値を使用してダイアログのフォルダプロパティを設定しようとするとクラッシュし、それが私を混乱させます。
私が気付いたのは、エラーメッセージにはfile:
の後に3つのスラッシュが付きますが、フォルダとして設定しているパスには2つしかありません。私はさまざまな方法でパスを変更しようとした:
file:
が完全に省略されている場合、ダイアログがデフォルトの場所にオープンし、おそらく意味のある方法でアドレスの解析に失敗 - 種類の- を期待されています関係なく、私は
file:
後に追加または削除スラッシュどのように多くの楽しみ、同じエラーメッセージは、私が保存し、再できることを私につながる何かアドバイスをいただければ幸いです
示すパスに3つのスラッシュで常に表示されません - 最後に使用したフォルダをFileDialog内で、「ローカル」と「ローカル」の両方で使用できる方法で使用するたとえそれが現在使用されている方法とは異なる方法で実行されたとしても、UNCパスを使用することができます。
C++側からダイアログを実行するのはおそらくオプションですが、かなり醜いものですが、より良い方法があると思いますが、ありがとうございます。リモートドライブをドライブとして接続してもクラッシュする問題は解決されません。ネットワークドライブを使用するとソフトウェアがクラッシュするという私たちのサポートに書き留めています(私の分野では、ネットワークドライブを多く使用しています)。私は、パスがUNCであるかどうかを確認して、それが「記憶」されていないかどうかを確認することができますが、それはユーザーから少し利便性があります。 – tomj
しかし、そうでなければ、FileDialogがonFolderChangedの間にある種の変換/修正を行っているようですが、UNCパスを考慮していないようです。( – tomj
https:// bugreportsというバグを投稿しました。 qt.io/browse/QTBUG-63710 –