我在类(名为Main
)对象中有一个GTKmm应用程序。我使用Main
方法作为回调函数,用于按钮的单击操作。
我用以下内容初始化按钮:
#define GTK_LOGIN_BUTTON_LOGIN "lw_loginButton"
[...]
builder->get_widget(GTK_LOGIN_BUTTON_LOGIN, loginWidgets.Login);
其中:
struct LoginWidgets {
Gtk::Button *Login;
Gtk::Entry *username;
Gtk::Entry *password;
} loginWidgets;
回调函数:
void Main::on_login_button_login_clicked()
{
// Code
}
我将信号连接到GTKmm官方指南报告的功能:
loginWidgets.Login->signal_clicked().connect(
sigc::mem_fun(this,&Main::on_login_button_login_clicked));
启动程序并崩溃。通过调试我注意到它在尝试连接信号后崩溃了。在评论最后一行代码时,该程序可以工作,但(显然)没有处理任何信号。 编译和运行时没有报告错误。
有任何建议吗?
编辑:我纠正了最后一个代码行,因为我指出了错误的信号连接。
答案 0 :(得分:0)
sigc::mem_fun
函数作为第一个参数接受一个对象(*this
),而不是一个指向该对象的指针(this
)。所以你的代码应该是这样的:
loginWidgets.Login->signal_clicked().connect(
sigc::mem_fun(*this, &Main::on_login_button_login_clicked));