スピンボタン
概要
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`
結果