2016-11-02 2 views
-1

私はGTKmmアプリケーションをクラス(Mainという名前)の中に持っています。私はMainのメソッドをボタンのクリックアクションのコールバック関数として使用します。GTKmm:ボタンクリック信号を接続しようとするとプログラムがクラッシュする

私はボタンを初期化:gtkmmの公式ガイドから報告されたように、私は機能に信号を接続

void Main::on_login_button_login_clicked() 
{ 
    // Code 
} 

#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; 

コールバック関数:

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

プログラムを起動するとクラッシュします。デバッグを通して、私は信号を接続しようとした後にクラッシュすることに気づいた。最後の行のコードにコメントすると、プログラムは動作しますが、(明らかに)シグナルは処理されません。 コンパイル時および実行時にエラーは報告されません。

アドバイスはありますか?

EDIT:間違った信号接続を指摘したため、最後のコードラインを修正しました。

答えて

0

sigc::mem_funは、オブジェクト(this)へのポインタではなく、オブジェクト(*this)をとります。したがって、コードは次のようになります。

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

私は特定のウィジェットで間違いを犯したことをご理解いただきありがとうございます。 3つのシグナルコールバックで3つのウィジェットを初期化して接続しても、質問のウィジェットのみを表示しました –

+0

私の更新された答えを見てください。 –

関連する問題