2010年9月9日木曜日

gtkmmで動的にウィジェットを追加する

参考:
gtkmm-2.4のソースコードのなかにあるexamples/stock
gtkmm_helloのソースコード(時間短縮のために流用)

#ifndef GTKMM_HELLO_H
#define GTKMM_HELLO_H

#include <iostream>
#include <gtkmm.h>

class GtkmmHello : public Gtk::Window
{
public:
  GtkmmHello();
  virtual ~GtkmmHello();
  void on_button_clicked(Gtk::VBox* vb);

};

#endif //GTKMM_HELLO_H


GtkmmHello::GtkmmHello()
{
  set_title("gtkmm_hello");
  set_border_width(10);

  //manageを使わないとsegmentation faultになる
  Gtk::Button* m_Button = manage(new Gtk::Button("click"));
  Gtk::VBox* vb = manage(new Gtk::VBox(false, 0));
  m_Button->signal_clicked().connect(sigc::bind(
      sigc::mem_fun(*this, &GtkmmHello::on_button_clicked), vb));
  
  vb->pack_start(*m_Button, false, false, 0);
  add(*vb);
  show_all();
}

GtkmmHello::~GtkmmHello()
{
}

void GtkmmHello::on_button_clicked(Gtk::VBox* vb)
{
  Gtk::Button* b = new Gtk::Button("new button");
  b->show();
  vb->pack_start(*b, false, false, 0);
  std::cout << "test" << std::endl;
}

int main (int argc, char *argv[])
{
  Gtk::Main kit(argc, argv);
  GtkmmHello window;
  Gtk::Main::run(window);
  return 0;
}

これが










こうなる

0 件のコメント:

コメントを投稿