如何从其他功能访问gtkmm对象?

时间:2016-05-29 13:02:18

标签: c++ gtk gtkmm

我想在加载gtk窗口后更改它的属性,为此我需要从main()以外的其他函数访问该对象。对于此示例,从main()调用changeWidget(),但我想稍后将其链接到按钮。我怎么能做"按钮"可以从changeWidget访问?

main.cc:

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

Buttons buttons;

void changeWidget()
{
    buttons.set_title("title");
}

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

  changeWidget();

  return app->run(buttons);
}

1 个答案:

答案 0 :(得分:0)

正如oldtechaa所述,执行此操作的标准方法是使用回调。 这是一个例子:

(我假设您要更改窗口标题,因为您特别提到了set_title函数)

#include <gtkmm.h>

void changeWidget(Gtk::Window& window)
{
  window.set_title("changeWidget Title");
}

struct my_window : Gtk::Window
{
  my_window() : my_button("button")
  {
    set_default_size(400,200);
    set_title("Original Title");
    add(my_button);

    my_button.signal_clicked().
      connect(sigc::mem_fun(*this, &my_window::handle_my_button_click));

    show_all();
  }

private:
  void handle_my_button_click()
  {
    // set_title("Button Changed Title"); // typically done directly, here
    changeWidget(*this);  // but you could call another function like this
  }

  Gtk::Button my_button;
};


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

  my_window window;

  return app->run(window);
}

希望这有帮助。