1

そこで、Ctrl+c を押してプログラムを終了する機能を実装したいと思います。これは私がしました:

static void
quitit(GtkWidget   *widget,
       GdkEventKey *event,
       gpointer    data)
{
    if(event->state == GDK_CONTROL_MASK &&
       event->keyval == 'c')
        gtk_main_quit();
}

...

int
main(int argc,
     char **argv)
{ 
    ...

    g_signal_connect(window, "key_press_event",
                     G_CALLBACK(quitit), NULL);

    ... (Other keypress events)
}

さて、これはうまくいきました。しかし問題は、接続した他のすべてのキープレスイベントが機能しなくなったことですが、マウスクリックは引き続き機能します。私はこれを理解できませんでした。誰でも私を助けることができますか?

4

1 に答える 1

2

The key-press-eventsignal のコールバックのプロトタイプは次のとおりです。

gboolean  user_function (GtkWidget *widget,
                         GdkEvent  *event,
                         gpointer   user_data): Run Last

GOBject シグナルのドキュメントによると、TRUE を返して他のハンドラがイベントに対して呼び出されるのを停止するか、FALSE を返してイベントをさらに伝播する必要があります。

として定義quitit()しているためvoid、FALSE (0) 以外の任意の値を返すことができます。したがって、他のハンドラーの呼び出しを停止します。

quitit()解決策は、 agbooleanを返し、FALSEを返すように の定義を変更することです。

于 2013-04-15T00:41:12.270 に答える