スピンボタン
概要
Gtk::SpinButtonによってスピンボタンを作成する。
基本的には
・SpinButton::set_range() で範囲をセット
・SpinButton::set_increments() で変化量をセット
・SpinButton::set_value() で初期値をセット
するだけで良いが、gtkmmのバージョンが2.4の場合は
上下の矢印ボタンを押しても値が変化しないというバグ(?)がある。
よってgtkmm2.4の場合は SpinButton::on_spinbutton_digits_changed() を
オーバロードして自前で値をセットする必要がある。
ソース
spin.cpp ( gtkmm2.5 以降 )#include <gtkmm.h> class MainWin : public Gtk::Window { Gtk::SpinButton m_spin; public: MainWin(); }; MainWin::MainWin() { m_spin.set_range( 1, 5 ); m_spin.set_increments( 1, 1 ); m_spin.set_value( 2 ); add( m_spin ); show_all_children(); } int main( int argc, char *argv[] ) { Gtk::Main kit( argc, argv ); MainWin mainwin; Gtk::Main::run( mainwin ); return 0; }spin.cpp ( gtkmm2.4 用)
#include <gtkmm.h> #include <sstream> class MySpinButton : public Gtk::SpinButton { public: MySpinButton() : Gtk::SpinButton(){} protected: // gtkmm2.4の場合は値が変わったら自前でテキストをセットする // 必要がある( gtkmm2.4 のバグ? ) virtual void on_spinbutton_digits_changed() { std::stringstream ss; ss << (int)get_value(); set_text( ss.str() ); } }; class MainWin : public Gtk::Window { MySpinButton m_spin; public: MainWin(); }; MainWin::MainWin() { m_spin.set_range( 1, 5 ); m_spin.set_increments( 1, 1 ); m_spin.set_value( 2 ); add( m_spin ); show_all_children(); } int main( int argc, char *argv[] ) { Gtk::Main kit( argc, argv ); MainWin mainwin; Gtk::Main::run( mainwin ); return 0; }
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。g++ spin.cpp -o spin `pkg-config gtkmm-2.4 --cflags --libs`
結果
