如何从其他函数访问 gtkmm 对象

How to access gtkmm object from other function?

本文关键字:访问 gtkmm 对象 函数 其他      更新时间:2023-10-16

我想在加载 gtk 窗口后更改它的属性,为此我需要从 main() 以外的另一个函数访问该对象。对于此示例,changeWidget() 是从 main() 调用的,但我想稍后将其链接到一个按钮。我如何才能从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);
}

正如 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);
}

希望这有帮助。