Chapter 4. ボタン

Table of Contents

gtkmmでは四つの基本的なボタンを提供しています:

押しボタン

Gtk::Button. 標準的なボタンです。たいていはラベルか画像が貼ってあります。押すことがアクションの引き金となります。ボタンセクションを見てください。

トグルボタン

Gtk::ToggleButton. 押すと戻る通常のボタンと違って、これはもう一度押すまで、へこんだままでいます。これはオン・オフスイッチに便利です。トグルボタンセクションを見てください。

チェックボックス

Gtk::CheckButton. これはトグルボタンと同じように振るまいますが、状態を横にラベルを置いた小さな四角で表します。これはオン・オフの設定が必要な場面で最も使われるべきでしょう。チェックボタンセクションを見てください。

ラジオボタン

Gtk::RadioButton. 古いカーラジオの選局ボタンから名づけられました。このボタンはグループの中で相互に排他的なオプションに使われます。ボタンのグループの中から一つを押すと、他のものは全てオフになります。小さなウィジットで側にラベルがあるという点でチェックボックスに似ていますが、ふつう見かけは異なります。ラジオボタンセクションを見てください。

覚えておいてください。GTK+のテーマ機能によりウィジットの外見は変わりえます。チェックボックスとラジオボタンの場合も、それらの見た目はかなり変わることがあります。

ボタン

コンストラクタ

ボタンを生成するにはやり方がふたつあります。Gtk::Buttonコンストラクでラベル文字列を指定するものと、あとでset_label()で設定するものです。

キーボードによるアクセラレータを指定するには、ラベルの文字列の先頭にアンダースコアを打ち、オプションのmnemonicパラメータをtrueにしてください。例えば:

Gtk::Button* pButton = new Gtk::Button("_Something", true);

できるだけStockにあるアイテムを使ってください。そうすれば他のアプリケーションと一貫性を保つことができ、アイコンを使うことで見かけもずっといいものになります。例えば、

Gtk::Button* pButton = new Gtk::Button(Gtk::Stock::OK);

これで全ての言語で標準のラベル、キーボードアクセラレータ、アイコンを使うようになります。

Gtk::Buttonもまたコンテナですから、なにか他のウィジット、Gtk::Imageなどを中に置くことができます。

Reference

この例では画像とラベルを中に入れたボタンを生成しています。

Figure 4.1. ボタンの例

ボタンの例

Source Code

File: buttons.h

#ifndef GTKMM_EXAMPLE_BUTTONS_H
#define GTKMM_EXAMPLE_BUTTONS_H

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

class Buttons : public Gtk::Window
{
public:
  Buttons();
  virtual ~Buttons();

protected:
  //Signal handlers:
  virtual void on_button_clicked();

  //Child widgets:
  Gtk::Button m_button;
};

#endif //GTKMM_EXAMPLE_BUTTONS_H

File: main.cc

#include <gtkmm/main.h>
#include "buttons.h"

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

  Buttons buttons;
  //Shows the window and returns when it is closed.
  Gtk::Main::run(buttons);

  return 0;
}

File: buttons.cc

#include "buttons.h"
#include <iostream>

Buttons::Buttons()
{
  m_button.add_pixlabel("info.xpm", "cool button");

  set_title("Pixmap'd buttons!");
  set_border_width(10);

  m_button.signal_clicked().connect( sigc::mem_fun(*this,
              &Buttons::on_button_clicked) );

  add(m_button);

  show_all_children();
}

Buttons::~Buttons()
{
}

void Buttons::on_button_clicked()
{
  std::cout << "The Button was clicked." << std::endl;
}

覚えておいてください。XPMLabelBoxクラスはコンテナになれるウィジットの内部に、XPMファイルとラベルを配置するのに使われます。

シグナル

Gtk::Buttonウィジットは次のシグナルを持っています。ですが、一番使う機会が多いのはclickedシグナルを扱うことでしょう:

pressed

ボタンが押されたときに発行されます。

released

ボタンが離されたときに発行されます。

clicked

ボタンを押して離したときに発行されます。

enter

マウスポインタがボタンウィンドウの上を動いたときに発行されます。

leave

マウスポインタがボタンウィンドウの上から離れたとき発行されます。