Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > gtk+ signals


Автор: Ni@m 30.6.2005, 17:09
Беда с сигналами!! Я пытаюсь связать с событием функцию и передать в нее данные, но возникает проблемма. Функция вызывается в любом случае, а вот данные передаются только в случае, если они инициализированны в main()(возможно если и иглобально), но если связка и данные инициализируются в другой функции, то - беда, данные теряются.
Использую для связки g_signal_connect, gtk_signal_connect.

Автор: Ni@m 1.7.2005, 21:32
Сам решил. Даже не знаю как. Вроде всегда до этого так делал.
Вот на всякий случай выкладываю рабочий код.

Код

#include <gnome.h>

void 
destroy()
{    
    gtk_main_quit();
}

void 
func_handle(GtkWidget *widget,
            gpointer data)
{
    g_message("%s",(gchar*)data);
}

GtkWidget *
createB()
{
    gchar *yep = "from function!";
    GtkWidget *button = gtk_button_new_with_label("second");
    g_signal_connect(G_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(func_handle),yep);
    gtk_widget_show(button);
    return button;
}

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

    GtkWidget *app;
    
    gnome_init("test","0.0",argc,argv);
    app = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(app),"destroy",GTK_SIGNAL_FUNC(destroy),NULL);    
    
    gchar *yep = "from main!";

    GtkWidget *box = gtk_vbox_new(TRUE,0);
    
    GtkWidget *button1 = gtk_button_new_with_label("first");
    g_signal_connect(G_OBJECT(button1),"clicked",GTK_SIGNAL_FUNC(func_handle),yep);
    gtk_widget_show(button1);
    
    GtkWidget *button2 = createB();
    
    gtk_box_pack_start(GTK_BOX(box), button1,FALSE,FALSE,0);
    gtk_box_pack_start(GTK_BOX(box), button2,FALSE,FALSE,0);
    
    gtk_widget_show(box);
    
    gtk_container_add(GTK_CONTAINER(app),box);

    gtk_widget_show(app);
    gtk_main();
    
    return 0;
}

Автор: v4v4n 26.9.2008, 16:53
Помогите скомпилировать эту программу в ubuntu 8.04
Код

:~$ cc gshow.c -lgnomeui
gshow.c:1:19: ошибка: gnome.h: No such file or directory



Автор: Kekek 27.9.2008, 19:18
Цитата(v4v4n @ 26.9.2008,  16:53)
Помогите скомпилировать эту программу в ubuntu 8.04
Код

:~$ cc gshow.c -lgnomeui
gshow.c:1:19: ошибка: gnome.h: No such file or directory


pkg-config --cflags libgnomeui-2.0
pkg-config --libs libgnomeui-2.0


Автор: v4v4n 27.9.2008, 19:45
Kekek, спасибо!

Код

CC=gcc
LDLIBS=`pkg-config --libs libgnomeui-2.0`
CFLAGS=-Wall -g `pkg-config --cflags libgnomeui-2.0`

gshow: gshow.o
    $(CC) $(LDLIBS) gshow.o -o gshow
    
gshow.o: gshow.c
    $(CC) $(CFLAGS) -c gshow.c
    
clean:
    rm -f gshow
    rm -f *.o

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)