GTKmm:程序崩溃时,试图连接按钮点击信号

GTKmm: program crashes when trying to connect a button clicked signal

本文关键字:按钮 连接 信号 程序 崩溃 GTKmm      更新时间:2023-10-16

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

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

有什么建议吗?

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

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

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