1) Подключаю функцыю к 9 кнопкам, где в качестве данных передаю адрес gint переменной, при каждом вызове функции значение n увеличивается от 0 до 8
for(i=0;i<9;i++){
button = gtk_button_new ();
g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (click),&n);
gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,0);
}т.е. при нажатии на определенную кнопку должен происходить вызов одной и той же функции но с разным значением в data
static void click(GtkWidget *widget,gpointer data)
{
g_print("data: %d\n",*(gint*)data);
}но выводится постоянно число 8
data: 8
data: 8
data: 8
data: 8
data: 8Как тогда определить какая клавиша была нажата, для каждой кнопки заводить отдельную функцию обратного вызова?
2) Создал кнопку с изображением:
image_1 = gtk_image_new_from_file ("1.xpm");
image_2 = gtk_image_new_from_file ("2.xpm");
gtk_container_add (GTK_CONTAINER (button), image_1);Как сменить иконку на кнопке с image_1 на image_2
так правильно?gtk_container_remove (GTK_CONTAINER (widget), image_1);
gtk_container_add (GTK_CONTAINER (widget), image_2);
gtk_widget_show(image_2);может есть правильный способ.
3) Как задать размер окна, и запретить изменение размера
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
ставлю размер:
gtk_window_set_default_size(GTK_WINDOW(window),400,400);
запрещаю изменение размера:
gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
и после этой функции размер возвращается к исходному
значит все юзают Qt...
зря за Gtk взялся...
>1) Подключаю функцыю к 9 кнопкам, где в качестве данных передаю адрес gint переменной, при >каждом вызове функции значение n увеличивается от 0 до 8
>for(i=0;i<9;i++){
> button = gtk_button_new ();
> g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (click),&n);
> gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,0);
>}Я так понимаю, перебор идет не по i, а по n?
Иначе я просто затрудняюсь увидеть тут увеличение n. (:
Видимо, вся проблема в том, что передавая &n, то есть _адрес_ переменной n, ты получаешь в рез-те то, что выводимое тобой *(gint*)data является тем же самым n. Вернее значением, взятым по адресу, где хранится n. Фактически, если ты остановишь цикл на 4х итерациях вместо 8ми, то получишьdata: 4
data: 4
data: 4Если посмотришь в отладчике в нутри callback'а, то ты увидишь, что они все получают одинаковый параметр - адрес переменной n. Что ты, собственно, туда и передал. (:
Передавай значение.
Ну почему же никто не программирует? программируют, достаточно взглянуть на убунту.
Другое дело в россии это делают так, ни шатко не валко. :-)
Если хотите освоить ГТК приобретите пару книг:
Андрей Костельцов GTK+ Разработка переносимых интерфесов
Артур Гриффитс Программирование GNOME/GTK+Ага на первый ответили, ну повторюсь.
1)g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (click),&n);
ну когда в цикле делаешь коннект со ссылкой на одну и туже переменную вряд ли стоит ожидать что поведение функций будет различным попробуй так:
g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (click),i);2)можно конечно и так как ты написал. но можно и так:
gtk_button_set_image(GTK_BUTTON(widget), image_2);
тут есть одна тонкость если захочешь использовать image_1, то он окажеться уже удаленным :)
что бы этого не произошло сделай предварительно:
gtk_widget_ref(image_1);
3) что бы окно не меняло размер надо вызвать функцию ....
gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
правильно :)а вот чтобы оно не уменьшалось надо задать необходимый размер ВЛОЖЕННОГО в окно
виджета:
gtk_widget_set_size_request(widget_in_window, 360, 360);
ну а за ним и gtk_window_set_resizable вызвать.