13,174
回編集
| 333行目: | 333行目: | ||
ModelessDlg->show(); | ModelessDlg->show(); | ||
} | } | ||
</syntaxhighlight> | |||
<br><br> | |||
== メッセージボックス(QMessageBoxクラス) == | |||
QMessageBoxクラスを使用して、メッセージボックスを表示する。<br> | |||
[書式] QMessageBox <変数名>(親ウインドウのポインタ, タイトル, 表示文字列, ボタン, デフォルト) | |||
<br> | |||
<center> | |||
QMessageBoxクラスのアイコン(enum QMessageBox::Icon)<br> | |||
{| class="wikitable" style="background-color:#fefefe;" | |||
|- | |||
! style="background-color:#00ffff;" | アイコン | |||
! style="background-color:#00ffff;" | 値 | |||
! style="background-color:#00ffff;" | 説明 | |||
! style="background-color:#00ffff;" | 標準Pixmap | |||
|- | |||
| NoIcon || 0 || アイコンなし || | |||
|- | |||
| Information || 1 || 情報 || SP_MessageBoxInformation | |||
|- | |||
| Warning || 2 || 警告 || SP_MessageBoxWarning | |||
|- | |||
| Critical || 3 || 重大な問題 || SP_MessageBoxCritical | |||
|- | |||
| Question || 4 || 質問 || SP_MessageBoxQuestion | |||
|} | |||
</center> | |||
<br> | |||
==== 簡素なメッセージボックス ==== | |||
状況に応じて、以下に示す4種類を使い分ける。<br> | |||
変数iRetには、<code>QMessageBox::Yes</code>または<code>QMessageBox::No</code>のいずれかが入る。<br> | |||
また、<code>QMessageBox::question</code>は、ボタンを指定しない場合でも[Yes]ボタンと[No]ボタンが表示される。<br> | |||
<syntaxhighlight lang="c++"> | |||
QMessageBox::information(this, tr("情報"), tr("メッセージ")); | |||
QMessageBox::warning(this, tr("警告"), tr("メッセージ")); | |||
QMessageBox::critical(this, tr("致命的エラー"), tr("メッセージ")); | |||
int iRet = QMessageBox::question(this, tr("確認"), tr("メッセージ")); | |||
</syntaxhighlight> | |||
<br> | |||
==== 標準のメッセージボックス ==== | |||
複数のボタンを表示して選択されたボタンを返す。<br> | |||
<br> | |||
書式1は最初の3つの引数が必須、書式2は必要な情報を後で指定する。<br> | |||
書式1の最後の引数にはウインドウフラグがあるが、ここでは省略している。<br> | |||
[書式1] QMessageBox <変数名>(アイコン, タイトル, 表示文字列, ボタン, 親ウインドウのポインタ) | |||
[書式2] QMessageBox <変数名>(親ウインドウのポインタ) | |||
<br> | |||
以下の例では、上記の書式1の形式でメッセージボックスを表示している。<br> | |||
<syntaxhighlight lang="c++"> | |||
QMessageBox MsgBox(QMessageBox::Question, tr("確認"), tr("これでよろしいですか?"), | |||
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, this); | |||
int iRet = MsgBox.exec(); | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、上記の書式2の形式でメッセージボックスを表示している。<br> | |||
<code>setDefaultButton</code>メソッドにより、標準でフォーカスが当たるボタンを指定できる。<br> | |||
<syntaxhighlight lang="c++"> | |||
QMessageBox MsgBox(this); | |||
MsgBox.setIcon(QMessageBox::Question); | |||
MsgBox.setWindowTitle(tr("確認")); | |||
MsgBox.setText(tr("これでよろしいですか?")); | |||
MsgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); | |||
MsgBox.setDefaultButton(QMessageBox::Cancel); | |||
MsgBox.setButtonText(QMessageBox::Yes, tr("OK")); | |||
MsgBox.setButtonText(QMessageBox::No, tr("Cancel")); | |||
MsgBox.setButtonText(QMessageBox::Cancel, tr("Back")); | |||
int iRet = MsgBox.exec(); | |||
</syntaxhighlight> | |||
<br> | |||
==== ボタンについて ==== | |||
QMessageBoxクラスでは、様々なボタンが用意されている。<br> | |||
各ボタンには意味があるため、それに応じて使用する必要がある。<br> | |||
<br> | |||
<u>ボタンは記述した順番で並ぶわけではないので注意すること。</u><br> | |||
<u>[Cancel]ボタンを記述しない場合、メッセージボックス右上の[x]ボタンが使用できなくなる可能性がある。</u><br> | |||
<center> | |||
QMessageBoxクラスのボタン(enum QMessageBox::StandardButton)<br> | |||
{| class="wikitable" style="background-color:#fefefe;" | |||
|- | |||
! style="background-color:#00ffff;" | ボタン名 | |||
! style="background-color:#00ffff;" | 値 | |||
! style="background-color:#00ffff;" | 説明 | |||
! style="background-color:#00ffff;" | 役割名 | |||
|- | |||
| Ok || 0x00000400 || 了解 || AcceptRole | |||
|- | |||
| Open || 0x00002000 || 開く || AcceptRole | |||
|- | |||
| Save || 0x00000800 || 保存 || AcceptRole | |||
|- | |||
| Cancel || 0x00400000 || キャンセル || RejectRole | |||
|- | |||
| Close || 0x00200000 || 閉じる || RejectRole | |||
|- | |||
| Discard || 0x00800000 || 破棄または保存しない || DestructiveRole | |||
|- | |||
| Apply || 0x02000000 || 現在の変更を適用する || ApplyRole | |||
|- | |||
| Reset || 0x04000000 || リセット || ResetRole | |||
|- | |||
| RestoreDefaults || 0x08000000 || デフォルトに戻す || ResetRole | |||
|- | |||
| Help || 0x01000000 || ヘルプ || HelpRole | |||
|- | |||
| SaveAll || 0x00001000 || 全て保存 || AcceptRole | |||
|- | |||
| Yes || 0x00004000 || はい || YesRole | |||
|- | |||
| YesToAll || 0x00008000 || 全てはい || YesRole | |||
|- | |||
| No || 0x00010000 || いいえ || NoRole | |||
|- | |||
| NoToAll || 0x00020000 || 全ていいえ || NoRole | |||
|- | |||
| Abort || 0x00040000 || 異常終了 || RejectRole | |||
|- | |||
| Retry || 0x00080000 || 再試行 || AcceptRole | |||
|- | |||
| Ignore || 0x00100000 || 無視 || AcceptRole | |||
|- | |||
| NoButton || 0x00000000 || ボタンなし || 無効 | |||
|} | |||
</center> | |||
<br> | |||
下表に、各ボタンの役割を示す。<br> | |||
<center> | |||
QMessageBoxクラスのボタンの役割(enum QMessageBox::ButtonRole)<br> | |||
{| class="wikitable" style="background-color:#fefefe;" | |||
|- | |||
! style="background-color:#00ffff;" | ロール名 | |||
! style="background-color:#00ffff;" | 値 | |||
! style="background-color:#00ffff;" | 説明 | |||
|- | |||
| InvalidRole || -1 || 無効 | |||
|- | |||
| AcceptRole || 0 || 同意および受諾<br>(OK, Save, SaveAll, Open, Retry, Ignore) | |||
|- | |||
| RejectRole || 1 || 拒否<br>(Abort, Close, Cancel) | |||
|- | |||
| DestructiveRole || 2 || 変更を破棄して閉じる。<br>(Discard) | |||
|- | |||
| ActionRole || 3 || ダイアログ内の要素を変更する。 | |||
|- | |||
| HelpRole || 4 || ヘルプ要求<br>(Help) | |||
|- | |||
| YesRole || 5 || 受諾または全て受諾<br>(Yes, YesToAll) | |||
|- | |||
| NoRole || 6 || 拒否または全て拒否<br>(No, NoToAll) | |||
|- | |||
| ResetRole || 7 || ダイアログ内の項目をデフォルトに戻す。<br>(Reset, RestoreDefaults) | |||
|- | |||
| ApplyRole || 8 || 変更を適用する。<br>(Apply) | |||
|} | |||
</center> | |||
<br> | |||
==== プッシュボタン追加 ==== | |||
メッセージボックスに任意のボタンを追加する場合、以下のように記述する。<br> | |||
任意のボタンでは、役割も指定する必要がある。<br> | |||
<syntaxhighlight lang="c++"> | |||
QMessageBox MsgBox(this); | |||
QPushButton *anyButton = MsgBox.addButton(tr("hoge"), QMessageBox::ActionRole); | |||
MsgBox.setWindowTitle(tr("hogeボタンの表示")); | |||
MsgBox.setText(tr("メッセージ")); | |||
MsgBox.exec(); | |||
if(MsgBox.clickedButton() == anyButton) | |||
{ // [hoge]ボタンが押下された場合 | |||
// 処理を記述 | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== 概要ダイアログ ==== | |||
Qtのライセンス等の情報を表示する。<br> | |||
<syntaxhighlight lang="c++"> | |||
QMessageBox MsgBox; | |||
MsgBox.aboutQt(this, tr("Qtについて")); | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、ソフトウェアの説明を表示している。<br> | |||
<code>about</code>メソッドでは、必ずソフトウェアのアイコンが表示される。<br> | |||
<syntaxhighlight lang="c++"> | |||
QString strOverView = "<span style=\"font-weight:bold\">Qtサンプル画面</span><br><br>" | |||
"このプログラムはQt C++で作成したものです。<br>" | |||
"いろいろなレイアウトやウィジェットの使用例が入っています。<br><br>" | |||
"※ご注意<br>" | |||
"必ずしもこの使用法が正しいとは限りません。<br>" | |||
"自分で使うプログラムとしては十分動くというだけです。<br>" | |||
"何の保証もありませんので、自己責任でお使いください。<br><br>" | |||
"Top Page: " | |||
"<a href=\"http://www.sample.com/index.html\">" | |||
"http://dorafop.my.coocan.jp/index.html</a>"; | |||
QMessageBox MsgBox; | |||
MsgBox.about(this, tr("このプログラムについて"), strOverView); | |||
</syntaxhighlight> | |||
<br> | |||
<code>QMessageBox</code>クラスにおいて、任意のアイコンを表示する場合は、以下のように記述する。<br> | |||
<syntaxhighlight lang="c++"> | |||
QMessageBox MsgBox(this); | |||
MsgBox.setText(text); | |||
MsgBox.setWindowTitle(tr("このプログラムについて")); | |||
MsgBox.setIconPixmap(QPixmap(":/images/logo.png")); | |||
MsgBox.exec(); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||