GTKmm:尝试连接按钮点击信号

时间:2016-11-02 11:21:04

标签: c++ gtk gtkmm

我在类(名为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));

启动程序并崩溃。通过调试我注意到它在尝试连接信号后崩溃了。在评论最后一行代码时,该程序可以工作,但(显然)没有处理任何信号。 编译和运行时没有报告错误。

有任何建议吗?

编辑:我纠正了最后一个代码行,因为我指出了错误的信号连接。

1 个答案:

答案 0 :(得分:0)

sigc::mem_fun函数作为第一个参数接受一个对象(*this),而不是一个指向该对象的指针(this)。所以你的代码应该是这样的:

loginWidgets.Login->signal_clicked().connect(
    sigc::mem_fun(*this, &Main::on_login_button_login_clicked));