7

単にファイルを保存しようとしています。ただし、デフォルトのサフィックスを自動的に取得するには、サフィックスなしでファイル名を入力する必要があります(setDefaultSuffix()が行います)。

このためだけに、ネイティブの保存ダイアログを完全に失うことはしたくありません。exec()はQDialogからオーバーロードされないため、ネイティブフックを完全にバイパスします(falseの場合でもDontUseNativeDialogオプションは無視されます)。

ファイルの上書き警告を無効にし、関数が戻った後にデフォルトのサフィックスを自分で追加した場合、ユーザーが上書きしたくない場合はダイアログを再度開きます...それは醜いです。

デフォルトのサフィックスがない場合は、キャッチしてすばやく挿入できるシグナルはありますか?ネイティブダイアログなので、推測していません。

フィルタで何か問題がありますか?フィルタの選択肢は1つだけです。その拡張子を使用する必要があります。

これはかなり足りないようです。保存ダイアログを起動して「test」と入力するだけで、拡張子のないファイルが作成されることはありません。「テスト」、はい。「テスト」する方法はありません。ロードを押して保存したファイルが表示されない場合、ユーザーは本当に混乱します。

Qtのクロスプラットフォーム部分は、最小公分母のファイルダイアログ機能を提供していると思いますか?

4

2 に答える 2

5

はい、Qtソースコードを見ると、静的関数のみがネイティブファイルダイアログを使用していることがわかります。残念ながら、他の方法でネイティブダイアログを取得することはできません...

于 2010-04-09T17:43:35.043 に答える
0

静的関数のフィルターオプションを試しましたか?[編集:おっと、あなたがすでに持っていることに気づきました。]

たとえば、私はこれを自分で試しましたが、物事はかなり合理的であるようです。

QString filter = "Text files (*.txt)";
QString selectedFilter;
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter);

保存ダイアログにtestと入力すると、 test.txtが返されます。テストに
入る。保存ダイアログでtest..txtを返します。保存ダイアログにtest.fooと 入力すると、 test.fooが返されます。

その名前の既存のファイルがすでに存在する場合、これらはすべて適切な上書きダイアログを表示します。

接尾辞なしでtestを取得する唯一の方法は、引用符( "test")で囲むか、最初に*。*(すべてのファイルを表示する)を入力してからtestを入力することです。(1つの奇妙な点はselectedFilter、使用されていない場合でも、ダイアログに表示されるフィルターが含まれることです)。

于 2010-04-09T17:19:59.090 に答える