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> == メッセージボックス(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> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - ダイアログ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse