C++ 如何从具有图像的按钮检索图像源文件名?

C++ 如何从具有图像的按钮检索图像源文件名?,c++,gtk3,C++,Gtk3,我开始学习GTK3,遇到了一个障碍。 我声明了一个按钮数组Gtk::Button buttons[15],并将它们链接到同一个onClicked()函数。每个按钮都包含一个唯一的图像。 当用户单击按钮时,我想检索图像的文件名,以便知道单击了哪个按钮,图像会定期更改,因此我没有给它们标签 // creating the button array for(int i = 0; i < 15; i++){ Gtk::Image image("nothing.png"); button[

我开始学习GTK3,遇到了一个障碍。 我声明了一个按钮数组Gtk::Button buttons[15],并将它们链接到同一个onClicked()函数。每个按钮都包含一个唯一的图像。 当用户单击按钮时,我想检索图像的文件名,以便知道单击了哪个按钮,图像会定期更改,因此我没有给它们标签

// creating the button array 
for(int i = 0; i < 15; i++){
  Gtk::Image image("nothing.png");
  button[i].signal_clicked().connect(sigc::mem_fun(*this,
    &Window::doOnButtonClicked));
  button[i].set_image(image);
}


//doOnButtonClicked
void Window::doOnButtonClicked(Gtk::Button button){
   onClicked(&button);
}


//the onClicked() code
void onClicked(Gtk::Button * button){
  GValue value = G_VALUE_INIT;
  g_value_init (&value, G_TYPE_STRING);
  g_object_get_property(G_OBJECT(button->get_image()), "file", &value);
  string source = g_value_get_string(&value);
  cout<<source;
 }
//创建按钮数组
对于(int i=0;i<15;i++){
Gtk::Image(“nothing.png”);
按钮[i]。单击信号()。连接(sigc::mem_fun(*此,
&窗口::doOnButtonClicked);
按钮[i]。设置图像(图像);
}
//杜恩布顿舔
无效窗口::doOnButtonClicked(Gtk::按钮){
单击一次(&按钮);
}
//onClicked()代码
单击无效(Gtk::按钮*按钮){
GValue value=G_value_INIT;
g_value_init(&value,g_类型_字符串);
g_object_get_属性(g_object(按钮->get_image())、“文件”、&value);
字符串源=g\u值\u获取\u字符串(&value);

GTK不允许通过ID识别控件吗?这听起来好像是错误的方法。我对GTK很陌生,所以我不知道这是什么意思。我不能做按钮[5],因为我不知道用户正在单击哪个按钮。我求助于使用sigc::bind(sigc::mem_fun(*this,&Window::doOnButtonClicked)),按钮[I]);我意识到我不能作为Gtk::Button这样做,因为复制ctor已被删除。如果有人能告诉我sigc::mem_fun中的*this(*this,&Window::doOnButtonClicked),我将不胜感激);指被单击的按钮,如果是,我如何使用它。几年前尝试使用GTK,并将其作为跨平台库提供给WxWidgets。在windows和wx中,单击特定按钮会导致调用特定处理程序。因此,您知道调用回调时单击的控件。它是关闭,你会被告知一个按钮被点击了,但不是一个…WxWidgets允许创建一个程序,只需要重新编译运行在x64 windows、x64 linux、x32 windows下,只是为了一笑-一个树莓pi。对不起,我不能帮你进一步。