MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの基礎 - ダイアログのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの基礎 - ダイアログ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == ダイアログの種類 == 下表に、Qtにおいて、標準で存在するダイアログの種類を示す。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | 用途 ! style="background-color:#00ffff;" | クラス名 |- | ファイル・ディレクトリ選択 || QFileDialog |- | 色選択 || QFontDialog |- | インプットボックス || QInputDialog |- | プログレスバー || QProgressDialog |- | 印刷関連 || QPrintDialog |- | メッセージボックス || QMessageBox |} </center> <br><br> == ファイル・ディレクトリ選択ダイアログ == ==== QFileDialogクラス ==== 下表に、用途別に<code>QFileDialog</code>のメソッドを示す。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | メソッド ! style="background-color:#00ffff;" | 用途 ! style="background-color:#00ffff;" | 戻り値 |- | getOpenFileName || ローカルファイル選択(開く) || QString |- | getOpenFileNames || 複数ローカルファイル選択(開く) || QStringList |- | getOpenFileUrl || リモートファイル選択(開く) || QUrl |- | getOpenFileUrls || 複数リモートファイル選択(開く) || QList<QUrl> |- | getSaveFileName || ローカルファイル選択(保存) || QString |- | getSaveFileUrl || リモートファイル選択(保存) || QUrl |- | getExistingDirectory || ローカルフォルダ選択 || QString |- | getExistingDirectoryUrl || リモートフォルダ選択 || QUrl |} </center> <br> フィルタを指定すると、拡張子で絞ってファイルを表示することができる。<br> # 書式フォーマット [書式];;見出し(拡張子1 拡張子2 ...) [;;見出し(拡張子1 ...)] # 例 すべて(*.*);;音声(*.wav *.wma *.mp3);;動画(*.wmv *.avi) <br> 下表に、<code>QFileDialog</code>クラスのオプションを示す。(enum QFileDialog::Option)<br> <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | 定義 ! style="background-color:#00ffff;" | 値 ! style="background-color:#00ffff;" | 説明 |- | ShowDirsOnly || 0x00000001 || フォルダのみ表示する。<br>(<code>FileMode</code>が<code>Directory</code>の時に有効) |- | DontResolveSymlinks || 0x00000002 || シンボリックリンクを解釈しない。<br>(指定しない場合、解釈する) |- | DontConfirmOverwrite || 0x00000004 || 既存ファイル選択時に確認画面を表示しない。<br>(指定しない場合、表示する) |- | DontUseNativeDialog || 0x00000010 || OS標準のダイアログを使用しない。<br>(指定しない場合、使用する) |- | ReadOnly || 0x00000020 || ReadOnlyを表示する。 |- | HideNameFilterDetails || 0x00000040 || ファイル名フィルタの詳細が隠されているか示す。 |- | DontUseCustomDirectoryIcons || 0x00000080 || ディレクトリのアイコンは常に標準のものを使用する。<br><u>ただし、カスタムアイコンを使用すると負荷が大きいため、<br>ディレクトリのアイコンは常に標準のものを使用した方がよい。</u> |} </center> <br> <u>※注意</u><br> <u>シンボリックリンク(ショートカット)を選択しても、ディレクトリ欄には表示されない。</u><br> <br> <u>また、DontResolveSymlinksを指定すると、シンボリックリンク(ショートカット)を選択した場合、エラーメッセージを出力する。</u><br> <u>指定しない場合、シンボリックリンク(ショートカット)を解釈するため、リンク先のファイルまたはディレクトリを選択したことになる。</u><br> <br> ==== ファイル選択ダイアログ ==== ===== ファイルを開く(getOpenFileNameメソッド) ===== ファイルとディレクトリの一覧を表示する。<br> getOpenFileNameメソッドは、ファイルを1つ選択できる。<br> # 書式フォーマット [書式] 親, タイトル, パス, フィルター, 選択フィルタ, オプション <br> 以下の例では、初期表示のパスを/home/<ユーザ名>、フィルタを2番目のフィルタ(*.txt)として表示する。<br> <code>getOpenFileName</code>メソッドの戻り値には、選択したファイル名がフルパスで代入される。(キャンセルした場合、空文字が代入される)<br> 変数<code>SelFilter</code>には、初期に選択するフィルターが入る。(キャンセルした場合、元のままになる)<br> <syntaxhighlight lang="c++"> QString SelFilter = tr("テキスト(*.txt)"); QString FileName = QFileDialog::getOpenFileName(this, tr("ファイルを開く"), "~/", tr("すべて(*.*);;テキスト(*.txt);;ソース(*.h *.cpp)"), &SelFilter, QFileDialog::DontUseCustomDirectoryIcons); if(FileName.isEmpty()) { // キャンセル // キャンセル処理を記述 } </syntaxhighlight> <br> また、引数を全て省略する場合、標準のダイアログが表示される。<br> 標準のダイアログとは、タイトルは"開く"、初期表示のパスは"実行ファイルが存在するディレクトリ"となる。<br> また、フィルタ欄は表示されない。<br> <syntaxhighlight lang="c++"> QString fileName = QFileDialog::getOpenFileName(); </syntaxhighlight> <br> ===== 名前を付けて保存(getSaveFileNameメソッド) ===== <code>getSaveFileName</code>メソッドを使用して、ファイルを1つ保存することができる。<br> 既に同じ名前のファイルが存在する場合、上書きの確認メッセージが表示される。<br> [書式] getSaveFileName(親ウインドウのポインタ, ダイアログのタイトル, 初期表示のパス, フィルタ, 選択フィルタ, オプション) <br> パスに<code>.(カレントディレクトリ)</code>を指定する時、実行ファイルが存在するディレクトリを表示する。<br> <code>getSaveFileName</code>メソッドの戻り値は、選択したファイル名のフルパスである。(キャンセルした場合、空文字となる)<br> 選択フィルタ(下例では、変数SelFilter)には、選択したフィルタが代入される。(キャンセルした場合、元のままとなる)<br> 選択フィルタ(下例では、変数SelFilter)を指定しない場合、フィルタの初期表示はフィルタの1つ目の要素(下例では、*.tif *.tiff)となる。<br> <syntaxhighlight lang="c++"> QString SelFilter = ""; QString FileName = QFileDialog::getSaveFileName(this, tr("名前を付けて保存"), ".", tr("TIFF image document(*.tif *.tiff);;Portable network graphic(*.png)"), &SelFilter, QFileDialog::DontUseCustomDirectoryIcons); if(FileName.isEmpty()) { // キャンセル // キャンセル処理を記述 } </syntaxhighlight> <br> <code>getSaveFileName</code>メソッドの引数を全て省略する時、標準のダイアログが表示される。<br> この時、ダイログのタイトルは"名前を付けて保存"、初期表示のパスは"実行ファイルが存在するディレクトリ"となる。<br> また、フィルタ欄と既存ファイルの上書き確認メッセージは表示される。<br> <syntaxhighlight lang="c++"> QString FileName = QFileDialog::getSaveFileName(); </syntaxhighlight> <br> ==== ディレクトリ選択ダイアログ(getExistingDirectoryメソッド) ==== <code>getExistingDirectory</code>メソッドを使用して、ディレクトリの一覧を表示する。<br> ディレクトリを1つ選択することができる。<br> # 書式フォーマット [書式] getExistingDirectory(親ウインドウのポインタ, ダイアログのタイトル, 初期表示のパス, オプション) <br> QFileDialog::Optionsにおいて、ShowDirsOnlyを指定することで、ディレクトリのみ表示することができる。<br> <code>getExistingDirectory</code>メソッドの戻り値は、選択したディレクトリ名のフルパスである。(キャンセルした場合、空文字となる)<br> また、以下のメッセージに対応するため、オプションにHideNameFilterDetailsを指定する。 selectNameFilter: Invalid parameter 'Directories' not found in 'All Files (*)'. <br> <syntaxhighlight lang="c++"> QFileDialog::Options options = QFileDialog::ShowDirsOnly | QFileDialog::HideNameFilterDetails | QFileDialog::DontUseCustomDirectoryIcons; QString DirName = QFileDialog::getExistingDirectory(this, tr("ディレクトリの選択"), "~/", options); if(DirName.isEmpty()) { // キャンセル // キャンセル処理を記述 } </syntaxhighlight> <br> また、オプションに<code>DontUseNativeDialog</code>を指定する時、下図に示すダイアログが表示される。<br> <br> <code>getExistingDirectory</code>メソッドの引数を全て省略する場合、標準のダイアログが表示される。<br> この時、タイトルは"フォルダーの選択"、初期表示のパスは"実行ファイルが存在するディレクトリ"となる。<br> <syntaxhighlight lang="c++"> QString DirName = QFileDialog::getExistingDirectory(); </syntaxhighlight> <br><br> == 色選択ダイアログ(QColorDialogクラス) == RGBを10進または16進で入力できる色選択ダイアログである。<br> <br> <code>getColor</code>メソッドを使用すると、Qt標準の色選択ダイアログを表示する。<br> [書式] getColor(色, 親ウインドウのポインタ, ダイアログのタイトル, オプション) <br> 以下の例では、初期表示として、青で透明度を指定している。<br> <br> <code>getColor</code>メソッドの戻り値は、選択した色情報クラスである。(キャンセルした場合、Validがfalseになる)<br> 色は、#AARRGGBB形式、#RRGGBB形式、Qt定義色(<code>Qt::red</code>等)で指定する。<br> 透明度(AA、アルファチャンネル)を省略する時、初期値は255となる。<br> <code>ShowAlphaChannel</code>オプションを指定しない場合、AAに初期値を指定しても戻り値は固定でFF(255)となる。<br> <syntaxhighlight lang="c++"> QColor color = QColorDialog::getColor("#800a64c8", this, tr("色選択"), QColorDialog::ShowAlphaChannel); if(color.isValid()) { // color.name(); → "#0a64c8" (#RRGGBB) // color.name(QColor::HexArgb); → "#800a64c8" (#AARRGGBB) // int r, g, b, a; // color.getRgb(&r, &g, &b, &a); → r=10, g=100, b=200, a=128 } </syntaxhighlight> <br> <center> QColorDialogのオプション(enum QColorDialog::ColorDialogOption)<br> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | オプション名 ! style="background-color:#00ffff;" | 値 ! style="background-color:#00ffff;" | 説明 |- | ShowAlphaChannel || 0x00000001 || アルファチャンネル(透明度)を表示する。 |- | NoButtons || 0x00000002 || OKとキャンセルのボタンを表示しない。<br>(ライブダイアログで役立つ) |- | DontUseNativeDialog || 0x00000004 || OS標準ではなくQt標準の色選択を使用する。<br>(指定しない場合、有効)。 |} </center> <br> <code>getColor</code>メソッドの引数を全て省略する時、標準のダイアログが表示される。<br> この時、標準ダイアログのタイトルは"Select Color"、色は白(#ffffff)、アルファチャンネルの項目は無い。<br> <syntaxhighlight lang="c++"> QColor color = QColorDialog::getColor(); </syntaxhighlight> <br><br> == フォント選択ダイアログ(QFontDialog) == フォント選択ダイアログは、フォントを選択できるダイアログである。<br> <code>QFontDialog</code>クラスの<code>getFont</code>メソッドは、Qt標準のフォント選択ダイアログを表示する。<br> [書式1] getFont(結果, 初期フォント, 親ウインドウのポインタ, ダイアログのタイトル, オプション) [書式2] getFont(結果, 親ウインドウのポインタ) <br> 以下の例では、初期フォントを18pxのCourier、等幅フォントとしている。<br> <code>getFont</code>メソッドの戻り値は、選択したフォント情報のクラスである。(キャンセルした場合、第1引数はfalseとなる)<br> [Esc]キーを押下する場合は、キャンセルしたものと見なされる。<br> <syntaxhighlight lang="c++"> bool ok; QFont font = QFontDialog::getFont(&ok, QFont("Courier", 18), this, tr("フォント選択"), QFontDialog::MonospacedFonts); if(ok) { // font.family(); → "Courier" // font.pointSize(); → 18 // font.italic(); → false (true:Font styleがItalic) // font.bold(); → false (true:Font styleがBold) // font.weight(); → 50 (bold()=trueの時は75) // font.strikeOut(); → false (true:EffectsのstrikeOutオン) // font.underline(); → false (true:Effectsのunderlineオン) } </syntaxhighlight> <br> <center> QFontDialogクラスのオプション(enum QFontDialog::FontDialogOption)<br> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | オプション名 ! style="background-color:#00ffff;" | 値 ! style="background-color:#00ffff;" | 説明 |- | NoButtons || 0x00000001 || [OK]ボタンと[キャンセル]ボタンを表示しない。<br>(ライブダイアログで役立つ)<br><u>ただし、ダイアログ右上の[閉じる]ボタンが使用できなくなる。</u> |- | DontUseNativeDialog || 0x00000002 || OS標準ではなくQt標準のフォント選択を使用する。<br>指定しない場合、Qt標準のフォント選択を使用する。 |- | ScalableFonts || 0x00000004 || スケーラブルフォントを表示する。<br>スケーラブルフォントとは、拡大縮小しても精度の変わらないフォントである。 |- | NonScalableFonts || 0x00000008 || スケーラブルフォント以外を表示する。 |- | MonospacedFonts || 0x00000010 || 等幅フォントを表示する。 |- | ProportionalFonts || 0x00000020 || 可変幅フォントを表示する。 |} </center> <br> 第1引数は必須であり、他の引数を全て省略する時、標準のフォント選択ダイアログが表示される。<br> この時、ダイアログのタイトルは"Select Font"、使用可能なフォントをアルファベット順に並べて、その先頭が選択された状態となる。<br> <syntaxhighlight lang="c++"> bool ok; QFont font = QFontDialog::getFont(&ok); </syntaxhighlight> <br><br> == モーダルダイアログ == <syntaxhighlight lang="c++"> // mainwindow.cpp void MainWindow::OnBtnClicked() { ModalDialog ModalDlg; ModalDlg.setModal(true); ModalDlg.exec(); } </syntaxhighlight> <br><br> == モードレスダイアログ == <syntaxhighlight lang="c++"> // mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "ModelessDialog.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; std::unique_ptr<ModelessDialog> ModelessDlg; }; #endif // MAINWINDOW_H </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // mainwindow.cpp void MainWindow::OnBtnClicked() { ModelessDlg = std::make_unique<ModelessDialog>(this); ModelessDlg->show(); } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - ダイアログ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse