новичек в Gtk+, Rtl, 10-Май-08, 12:23 [смотреть все]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); и после этой функции размер возвращается к исходному |
- новичек в Gtk+,
Rtl, 15:49 , 10-Май-08 (1)значит все юзают Qt... зря за Gtk взялся...
- новичек в Gtk+,
E.L.K., 03:23 , 11-Май-08 (2)>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+,
NuINu, 21:37 , 11-Май-08 (3)Ну почему же никто не программирует? программируют, достаточно взглянуть на убунту. Другое дело в россии это делают так, ни шатко не валко. :-) Если хотите освоить ГТК приобретите пару книг: Андрей Костельцов 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 вызвать.
|