SSブログ

ディレクトリ選択ダイアログの表示 [Qt]

ウィンドウタイトルを変えるだけで、えらいとまどってしまいましたが、気を取り直して、とりあえず、各ボタンのスロットを作っていきます。まずは、関数の枠から・・。

ボタンを右クリックし、「Go to slot...」を実行して行きます。

10121400.png
追加は容易になりました


残り三つのボタンに対応するslotを作成して、ヘッダファイルを見てみたら、インデントがおかしいです・・。カーソル位置がおかしかったのか・・?

10121401.png
これは手で直します


ソースを見る限り、追加したslotは「private slots:」ラベルの下に追加されていくみたいですね。後から追加した方が上の方に追加されています。

ちなみに、関数の枠もちゃんとできています。

10121402.png
こっちは作成した順に追加されています


ログを仕込んで、実行したところ、全てのボタンが反応しました。

10121403.png
ログで確認


では、とりあえずQFileDIalogを「追加」ボタンから呼び出してみます。簡単に使いたいならstatic関数を呼べばいいとのこと。下記の関数が用意されています。

QFileDialog::getExistingDirectory 存在するディレクトリの指定に使用。
QFileDialog::getOpenFileName 存在するファイルを一つだけ指定するのに使用。
QFileDialog::getOpenFileNames 存在する一つ以上のファイルを指定するのに使用。
QFileDialog::getSaveFileName 一つのファイル名を指定するのに使用。ファイルは存在していても無くてもどちらでもいい。


コピー元の追加は複数指定できた方が便利ですし、できたらディレクトリだけでなくファイル名も指定できると自由度が増す気がします。と言うことで、QFileDialog::getOpenFileNamesを使ってみたいのですが、これがディレクトリを指定できるのかどうかが不明です。まあ、試してみましょう。

引数は下記のものが用意されています。

QWidget *parent = 0親ウィジェット。これを設定するとモーダルダイアログになるとのこと。親ウィジェットの中央に表示されるとのこと。thisでいいと思います。
const QString & caption = QString()ダイアログのタイトルバーに表示される文字列ですね。設定しない場合はデフォルトの文字列が使われるとのこと。
const QString & dir = QString()ワークディレクトリ。ファイル名を含む場合は、そのファイルが選択された状態になる。
const QString & filter = QString()フィルター。複数のフィルターを指定する時は、「;;」で区切るとのこと。書式が不明・・。
QString * selectedFilter = 0選択されているフィルター。
Options options = 0


とりあえず、このように実装してみました。

void MainWindow::on_addButton_clicked()
{
    qDebug() << "on_addButton_clicked()";

    QStringList *srcList = new QStringList();

    *srcList = QFileDialog::getOpenFileNames(this, tr("バックアップ元の選択"));
    qDebug() << *srcList;

    delete srcList;
}
うまくいくか?


実行して、ファイルダイアログを起動したところ、このような画面に・・。タイトルが化けてます・・。

10121404.png
タイトル部分が文字化け・・


ディレクトリを選択して、「開く」を押したところ、そのディレクトリ内に入ってしまいました・・。ファイルを選択して「開く」を押したらうまくいった様です・・。このダイアログではディレクトリは選択できませんね・・。

と言うことで、QFileDialog::getOpenFileNamesでは、ディレクトリの選択は出来ませんね・・。

仕方がないので、QFileDialog::getExistingDirectoryを利用します。

void MainWindow::on_addButton_clicked()
{
    qDebug() << "on_addButton_clicked()";

    QStringList *srcDir = new QStringList();

    *srcList = QFileDialog::getExistingDirectory(this, tr("バックアップ元の選択"));
    qDebug() << *srcDir;

    delete srcDir;
}
うまくいくか?


これで、1つづつですが、ディレクトリの選択は出来るようになりました。が、相変わらず、キャプションの文字化けが残っています・・。

10121405.png
文字化けを直したい


次回はこれを調べましょう。つづく。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

ブログを作る(無料) powered by SSブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。