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クッションおく形に変更させてもらいます。すんまそん!
Commented on 2009/04/23 Thursday 07:20:15
by Presencia | コメント編集
[PR]QFileDialogでファイル名取得 | eventFilterを使ってみた >>
HOME | 戻る