忍者ブログ

プログラム関連~チラシの裏~

スパム対策したりプログラム組んだり色々やってる為替とは別の面を表に出してみた。

<< | 2024/04 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | >>

マイクロアド リンク

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

QFileDialogでファイル名取得

QFileDialogを利用したサンプルを作成してみました。
WindowsAPIでいう所GetOpenFileNameとGetSaveFileNameを簡単に設定できるようにした機能です。
MFCでいうならGetOpenFIleDialogだったかな?

では、ファイルオープンのダイアログを表示する。サンプル。

●フィルタリストの作成をします。ファイルを開く時などのダイアログで
Bitmapファイルだけ表示したり、jpgだけ表示したりする時に活用できます。
-- 以下ソース--
// ファイルのフィルタリスト
QStringList fileFilterList;
fileFilterList += tr("ALL IMAGE FILE (*.bmp *.png *.jpg *.jpeg *.xpm *.xbm *.ppm)");
fileFilterList += tr("Windows Bitmap (*.bmp)");
fileFilterList += tr("PNG (*.png)");
fileFilterList += tr("JPEG (*.jpg *.jpeg)");
fileFilterList += tr("XPM (*.xpm)");
fileFilterList += tr("XBM (*.xbm)");
fileFilterList += tr("PPM (*.ppm)");
fileFilterList += tr("All Files (*.*)");
●ダイアログの作成と設定。
コンストラクタで一度に色々と設定する方法。
デフォルトでQWidget*とQFileDialog::AcceptOpenかAcceptSaveを指定して
簡単に作り出す方法の2種類があります。
しかし、実用性があるのは面倒な設定を行う方法です。
QFileDialogのコンストラクタで親Widget,ダイアログタイトル、初期ディレクトリの設定、フィルタリスト。
の設定を行うのがいいでしょう。また、フィルタは後からも設定できます。
ちなみにQStringでフィルタを作成する場合は;;で区切りを作成します。
-- 以下ソース--

// ファイルオープン用のダイアログ作成
QFileDialog *openDlg = new QFileDialog(
        this,// 親widget 
tr("Open File"),// ダイアログタイトル QDir::currentPath());// 起動時のディレクトリ // ファイルフィルターを設定します デフォルトはリストの最初。 openDlg->setNameFilters(fileFilterList); // 保存ダイアログとオープンダイアログの設定 デフォルOPEN openDlg->setAcceptMode(QFileDialog::AcceptOpen); QStringList fileNames;// ファイル名の取得 // ファイル名を取得するとリストにつかされます。 if(openDlg->exec()){ // ファイルリストの取得。 fileNames = openDlg->selectedFiles(); } // 開いたファイル名をステータスバーに表示 ui.statusbar->showMessage(fileNames.at(0)); // ファイル名取得複数ファイルある場合は、foreach等で取得するといい。 if(fileNames.size()){ // 画像ファイルをQLabelに設定してイメージサイズを設定する。 QPixmap image(fileNames.at(0)); imageLabel->setPixmap(image); imageLabel->resize(image.size()); } delete (openDlg);//最後にダイアログを削除。

●ファイルを保存する場合
ファイルを保存する場合も同じQFileDialogを使います。
// 保存ダイアログを使用します
QFileDialog *saveDlg = new QFileDialog(
        this,//親widget
        tr("Save File"),// ダイアログタイトル
        QDir::currentPath()// 保存パス
        );
QStringList saveFilterList = fileFilterList;
saveFilterList.takeFirst();// ALL IMAGEを除去
saveFilterList.takeLast();// ALL FILEを除去
saveDlg->setNameFilters(saveFilterList);
// 自動で拡張子をファイル名に設定します デフォルト true
saveDlg->setNameFilterDetailsVisible(false);
// 保存ダイアログとして設定
saveDlg->setAcceptMode(QFileDialog::AcceptSave);
// 上書き保存時のメッセージフラグ デフォルトtrue
saveDlg->setConfirmOverwrite(true);

QStringList fileNames;
// 保存ファイル名を取得する
if(saveDlg->exec()){
    fileNames = saveDlg->selectedFiles();
}

// ファイル名取得複数ファイルある場合は、foreach等で取得するといい。
const QPixmap *savePixmap = imageLabel->pixmap();
if(fileNames.size() && (0 != savePixmap)){
    QString filter = saveDlg->selectedNameFilter();
    QString type = "BMP";
    if(tr("Windows Bitmap (*.bmp)") == filter){
        type = "BMP";
    }else if(tr("PNG (*.png)") == filter){
        type = "PNG";
    }else if(tr("JPEG (*.jpg *.jpeg)") == filter){
        type = "JPG";
    }else if(tr("XPM (*.xpm)") == filter){
        type = "XPM";
    }else if(tr("XBM (*.xbm)") == filter){
        type = "XBM";
    }else if(tr("PPM (*.ppm)") == filter){
        type = "PPM";
    }
    // Labelに設定したPixmapを保存します。
     savePixmap->save(fileNames.at(0), type.toLocal8Bit());
    // 保存するファイル名をステータスバーに表示
    ui.statusbar->showMessage(fileNames.at(0));
}

delete (saveDlg);

なんか、変なファイルツールでダウンロードを連続する人がいて警告メールもらってるので
1クッションおく形に変更させてもらいます。すんまそん!

ソースコード:ダウンロード(zip)
PR
無題
Well said.

Commented on 2009/04/23 Thursday 07:20:15

by Presencia | コメント編集

この記事にコメントする







  Vodafone絵文字入力用パレット表示ボタン i-mode絵文字入力用パレット表示ボタン Ezweb絵文字入力用パレット表示ボタン

この記事へのトラックバック




ブログ内検索
最新コメント
[06/24 Kazelcmo]
[06/24 Kazelxyk]
[04/23 Presencia]
最新トラックバック
ブログ関連リンク

カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
カウンター
FX NEWS

-外国為替-

AdminControlMenu: AdminMenu | NewEntry | EditComment | EditTrackback

忍者ブログ [PR]