2

GtkActionシグナルをコールバックopen_fileに接続しようとしていますが、ファイルメニューで[開く]を選択しても何も起こらないため、何かが欠落しているようです。手がかりはありますか?

test.c

#include <gtk/gtk.h>

void open_file(GtkAction *action, gpointer user_data)
{
   g_print("open_file\n");
}


int main(int argc, char *argv[])
{
   GtkBuilder *builder;
   GObject *window;

   gtk_init(&argc, &argv);

   builder = gtk_builder_new();
   gtk_builder_add_from_file(builder, "test.ui", NULL);

   window = gtk_builder_get_object(builder, "window");
   g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
   gtk_widget_show_all(GTK_WIDGET(window));

   gtk_main();
   return 0;
}

test.ui

<interface>
   <object class="GtkUIManager" id="uiman">
     <child>
        <object class="GtkActionGroup" id="actiongroup">
           <child>
              <object class="GtkAction" id="file">
                 <property name="label">_File</property>
              </object>
           </child>
           <child>
              <object class="GtkAction" id="open">
                 <property name="stock_id">gtk-open</property>
                 <signal name="activate" handler="open_file"/>
              </object>
           </child>
        </object>
     </child>
     <ui>
        <menubar name="menu_bar">
           <menu action="file">
              <menuitem action="open"/>
           </menu>
        </menubar>
     </ui>
   </object>

   <object id="window" class="GtkWindow">
     <property name="title">Test</property>
     <child>
        <object class="GtkVBox" id="vbox">
           <child> 
              <object class="GtkMenuBar" id="menu_bar" constructor="uiman"/>
              <packing>
                 <property name="expand">FALSE</property>
              </packing> 
           </child>
        </object>
     </child>
   </object>
</interface>
4

2 に答える 2

2

を呼び出さない限り、gladeファイルのシグナルは切断されたままになりますgtk_builder_connect_signals()

于 2012-02-01T08:52:04.383 に答える
1

プログラムをWindowsに移植する場合は、関数プロトタイプ/定義でG_MODULE_EXPORTを使用する必要がある場合もあります。

G_MODULE_EXPORT void my_callback(void); /* For example */
于 2014-05-30T09:40:30.273 に答える