2

GUIデザインにGlade-3を使用していますが、この問題が発生し続けています。シグナルをイベントにマッピングするGTK+ドキュメントやGlade-3(3.4.5)には何も表示されません。GTK +ソースコードにこの情報を見つける場所はありますか?

注:この質問では、イベントとシグナルがGTKで同じものではないことを認識することが重要です。

例:

次の信号を受信するために次のイベントを必要とするイベントボックスがあります。特定の信号に必要なイベントを特定するにはどうすればよいですか?

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
4

3 に答える 3

3

OK、あなたの言いたいことはわかったと思います。gtk シグナルと gdk イベントを一致させるこの表を見つけました。ここにあります。

于 2009-09-07T03:44:03.093 に答える
2

私があなたの質問を正しく解釈したと仮定すると、Gladeファイルで指定した信号をソースコードの関数に接続したいと考えています。これを行う方法は、libgladeを使用して生成ファイルをロードするかGtkBuilderを使用するかによって異なります。どちらも似ていますが、完全を期すためにCでサンプルを提供します。

libgladeを使用すると、次のようになります。

GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals

GtkBuilderを使用すると、次のようになります。

GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals

GtkBuilderを使用する場合、シグナル接続関数の2番目のパラメーターは、シグナルハンドラーに渡されるデータへのポインターに置き換えることができます。

今後、libgladeは非推奨になりつつあるため、GtkBuilderを使用することをお勧めします。

リンク

上記の2つの機能に関する関連ドキュメントへのリンクは次のとおりです。

于 2009-05-30T04:32:00.900 に答える
1

イベントをキャプチャすることができますgdk_event_handler_set()

まず、起動時に独自のGDKイベントハンドラーを登録します。

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);

...次に、それを使用して有用な情報を印刷し、次のようにイベントをGTK+に渡すことを忘れないでくださいgtk_main_do_event()

void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
    printf("Received GdkEvent of type %d", event->type);

    gtk_main_do_event(event); // Pass event to GTK+
}
于 2011-09-07T10:17:24.547 に答える