gtkmm/GUIプログラミング - 2

今回はwidgetをクラスで表現してそれを表示するところまで書いてみます。
何はともあれ例から。

#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <gtkmm/button.h>

class MainWindow : public Gtk::Window
{
    Gtk::Button mButton;
public:
    MainWindow();
    ~MainWindow();
};

MainWindow::MainWindow()
: mButton("Hello World!")
{
    set_border_width(10);
    add(mButton);
    mButton.show();
}

MainWindow::~MainWindow(){}

int main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);
    MainWindow aWindow;
    kit.run(aWindow);

    return 0;
}


このように希望するウィジェットのクラスを継承することで、ウィジェットをクラスとして表現することが出来ます。
コンテナは他のウィジェットをメンバとして持つことが出来ます。この場合、ボタンウィジェットをメンバとして持っています。
ボタンウィジェットはコンストラクタの引数に描画するラベルの文字列を取るのでMainWindowのコンストラクタでそれを指定します。
set_border_width()メソッドはGtk::Windowから参照できるメソッドで、HTMLで言うとパディングの部分に当たる数値の設定用メソッドです。
また、空ウィンドウの時のウィンドウもそうでしたが、オブジェクトを生成しただけでは可視化されません。
そこでadd()メソッドを用いてMainWindowのコンテナにmButtonを追加します。
その後、mButton自身が持っているshow()メソッドを用いて可視化します。
なお、show()の反対の役割をするのがhide()メソッドです。ただしhideというよりはfinishみたいなもんです。Gtk::Main::runに渡したウィジェットオブジェクトでこのメソッドを実行するとプログラムが正常終了します。


あとはこのようにクラス定義を行ったオブジェクトをmain関数で生成しGtk::Main::runに渡します。


後で読んで内容を理解できるか不安だけど、これで第二回まとめを終了します。