Button (按钮)

5.1.1. 构造函数

可以通过两种方式来创建按钮,你可以在 Gtk::Button 构造函数中指定标签字符串,或者以后调用 set_label() 来指定标签。

如果你想为按钮定义一个快捷键,那么可以在标签字符串中的某个字符前面加上一个下划线,并且指定可选的参数助记符(mnemonic)为 true。例如:

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

任何时候你都应尽可能的使用 Stock Item,这样可以使你的应用程序和其它的保持一致,并且可以通过使用图标来改善程序的外观。例如,

Gtk::Button* pButton = new Gtk::Button(Gtk::Stock::OK);
这样在所有的语言中都会使用标准的文字,标准的快捷键,以及标准的图标。

Gtk::Button 同时也是一个容器,因此你可以在其中放任何其它的组件,比如放一个 Gtk::Image 在里面。

参考

5.1.2. 示例

这个示例创建了一个有图片和文字标签的按钮。

图 5-1按钮示例

源代码

File: buttons.h (For use with gtkmm 3, not gtkmm 2)

#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:
  void on_button_clicked();

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

#endif //GTKMM_EXAMPLE_BUTTONS_H

File: main.cc (For use with gtkmm 3, not gtkmm 2)

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

int main(int argc, char *argv[])
{
  Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example");

  Buttons buttons;

  //Shows the window and returns when it is closed.
  return app->run(buttons);
}

File: buttons.cc (For use with gtkmm 3, not gtkmm 2)

#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;
}

5.1.3. 信号

Gtk::Button 组件有下面列出的那些信号,不过大多数情况下,你只需要处理 clicked 信号:

pressed (按下)

当按钮按下时发出。

released (释放)

当按钮释放后发出。

clicked (点击)

当按钮按下并抬起时发出。

enter (进入)

当鼠标指针移到按钮上时发出。

leave (离开)

当鼠标指针离开按钮时发出。