gpt4 book ai didi

c++ - 在 c++ 中将 gtk_signal_connect 与成员函数一起使用

转载 作者:行者123 更新时间:2023-11-30 02:12:45 29 4
gpt4 key购买 nike

将 GTK+ 信号连接到非静态成员函数的最佳方法是什么?

我在 c++ 中有一个使用 gtk 的 GUI 类,我想做这样的事情:

Gui::Gui ()
{
gtk_signal_connect(GTK_OBJECT(somObject),
"clicked",
GTK_SIGNAL_FUNC( &(this->ClickHandler) ),
NULL);
}

void Gui::ClickHandler(GtkWidget *w, gpointer data)
{
// handle the click
}

我知道这是行不通的,因为 GTK_SIGNAL_FUNC 不能指向成员函数,除非它是静态函数,那么最好的方法是什么?是否可以使用单个代理处理函数和 boost::bind 以某种方式?这是我尝试过的:

gtk_signal_connect(GTK_OBJECT(somObject), "clicked", 
GTK_SIGNAL_FUNC( SigHandler ),
boost::bind( &(Gui::ClickHandler), this) );

void SigHandler(GtkWidget *w, gpointer data)
{
data(w);
}

void Gui::ClickHandler(GtkWidget *w) { // handle the click }

这里是错误: gui.cc: 错误: 'data' 不能用作函数

最佳答案

我假设您的类包含信号处理程序需要访问的一些内部数据。如果没有,只需为信号处理程序使用静态函数。否则,这里有几个想法:

  • 从成员函数中创建一个 sigc++ 或 boost 仿函数;将其设置为传递给信号处理程序的数据。使用仅调用仿函数的通用信号处理程序。

  • 在构造期间,在某处注册该类的每个实例,并使用一个信号处理程序为每个已注册的实例调用成员函数。

关于c++ - 在 c++ 中将 gtk_signal_connect 与成员函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396050/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com