retireSakiの日記

たぶん引退した?ソフトウエアエンジニアのブログ

GTKmm (3.0) と glade によるアプリ (8) - ダイアログのモダールとモードレス表示

f:id:retireSaki:20181028141923j:plain

 今回は、前回の" GTKmm (3.0) と glade によるアプリ (7) - ツールバーの表示、非表示切り替えとaboutダイアログの表示 "で作成したプログラムを使って、aboutダイアログをモーダル表示とモードレス表示 でそれぞれ表示させてみたいと思います。
retiresaki.hatenablog.com


 やり方は、glade 側で指定する方法と cpp で設定する方法の1つあります。
今回は単純なので、ソースコード類は提供しません。


■ glade で設定する方法

 この場合、ソースコード側で設定すると、当然コード側を優先するけっかとなりますので、ソースコード側では無設定とします。

f:id:retireSaki:20181028142117j:plain

 上の画像の赤丸で囲んだ箇所が設定する場所です。
現在のシリーズでは glade のXMLデータを実行時に読み込んでいるので、gladeファイルを変更しても、再コンパイルする必要はありませんので、アプリを実行するだけで結果をみることができます。

f:id:retireSaki:20181028142209j:plain
モードレス (false : 未チェック) 指定時

f:id:retireSaki:20181028142222j:plain
モーダル (true : チェック) 指定時

※モーダルは裏側にメインウィンドウが隠れています


ソースコードで設定する方法

 該当ソースファイルは MainWindow.cpp

void MainWindow::on_app_about()
{
    APP_AboutDialog *about_dialog = nullptr;

    refBuilder->get_widget_derived("aboutDialog", about_dialog);
    about_dialog->set_transient_for(*this);
    // true = modal, false = modeless
    about_dialog->set_modal(true);
    about_dialog->show_all();
}
〜

 set_modal() 関数を使って、aboutダイアログのモーダル/モードレスを設定します。
  true : モーダル
  false : モードレス

 モーダルを設定する場合、親となる widgetset_transient_for() 関数を使って指定します。

f:id:retireSaki:20181028142301j:plain
モードレス (false) 設定時

f:id:retireSaki:20181028142314j:plain
モーダル (true) 設定時

※モーダルは裏側にメインウィンドウが隠れています


 以上です。
 簡単でしたね!

Gtk+3入門

Gtk+3入門

注目記事

「Amazon.co.jpアソシエイト」または「[乙の名称を挿入]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。