7

いくつかのフィルターを含むgetSaveFileNameがあり、ユーザーが[保存]ダイアログを開いたときにそのうちの1つを選択したいと思います。Qtのドキュメントには次のように書かれています。

selectedFilterを目的の値に設定することにより、デフォルトのフィルターを選択できます。

私は次の変種を試します:

QString selFilter="All files (*.*)";
QFileDialog::getSaveFileName(this,"Save file",QDir::currentPath(),
    "Text files (*.txt);;All files (*.*)",&selFilter);

ただし、ダイアログが表示されると、[テキストファイル]フィルター(通常、リストの最初のフィルター)が選択されます。また、次のすべてを試しました。

selFilter="All files";
selFilter="All files (*.*)\n";
selFilter="All files (*.*);;";
selFilter="All files (*.*)\0";

そしてこの変種の異なる混合物。私のコードのフィルターリストのフォーマットは、ドキュメント(Qtドキュメントの例の行)に従って行われます:

"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"

selFilter変数への出力は正しく機能することに注意してください。ユーザーが[OK]を押すと、selFilter変数にはユーザーが選択したフィルターが含まれます。

プラットフォーム:Linux(OpenSUSE 12.1)、Qt 4.7.4、gcc4.6.2。

では、デフォルトのフィルターを設定する方法は?!

4

2 に答える 2

1

このサンプル アプリケーションを試して、違いがあるかどうかを確認してください。この場合のように直接ダイアログ構築を使用すると、オブジェクトをより詳細に制御できます。

#include <QApplication>
#include <QFileDialog>

int main(int argc, char **argv)
{
    QApplication app(argc,argv);

    QString filters("Music files (*.mp3);;Text files (*.txt);;All files (*.*)");
    QString defaultFilter("Text files (*.txt)");

    /* Static method approach */
    QFileDialog::getSaveFileName(0, "Save file", QDir::currentPath(),
        filters, &defaultFilter);

    /* Direct object construction approach */
    QFileDialog fileDialog(0, "Save file", QDir::currentPath(), filters);
    fileDialog.selectNameFilter(defaultFilter);
    fileDialog.exec();

    return 0;
}

通常、このような動作はメモリ破損の兆候です。ただし、valgrind (Qt 4.8.1 を使用) で確認したところ、FontConfig からの誤検知はいくつかあります。

于 2012-09-23T08:54:08.797 に答える
0

問題は部分的に解決されました。私の Qt バージョン (4.7.4) のバグのようです。

次のサンプル アプリケーションを作成しました。

#include <QApplication>
#include <QFileDialog>

int main(int argc, char **argv)
{
        QApplication app(argc,argv);

        QFileDialog::getSaveFileName(0,"Save file",QDir::currentPath(),
        "Music files (*.mp3);;Text files (*.txt);;All files (*.*)",
            new QString("Text files (*.txt)"));
        return 0;
}

3つの異なるプラットフォーム用にコンパイルしました:

  1. Linux (OpenSUSE 12.1)、Qt 4.7.4、gcc 4.6.2
  2. Linux(CentOS)、Qt 4.7.3、gcc 4.1.2
  3. MS Windows、Qt 4.8.1、gcc 4.4.0

最初のプラットフォームでは、ダイアログのデフォルトのフィルターは「音楽ファイル」でしたが、2 番目と 3 番目のプラットフォームでは、意図したとおり「テキスト ファイル」でした。

于 2012-09-23T07:28:38.033 に答える