LINUX.ORG.RU

помогите с первыми шагами в GTK


0

0

Добрый день!
Возникла необходимость написать программу на GTK, которого я к несчастью пока не знаю. Изучил на opennet.ru документацию, но осталось несколько вопросов:
1. В glade я создал форму, кнопку, GtkImage, диалог открытия файла. Я хочу что б по нажатию на кнопку открывалась картинка. Создал обработчик нажатия на кнопку, в нем написал:
const gchar *selected_filename;
selected_filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (ImageDialog));
g_print ("Selected filename: s\n", selected_filename);

Говорит, что ImageDialog не создан. Логично, ведь он создается в create_ImageDialog. Как написать правильно?
Насколько я понял, потом нужно будет использовать
GtkWidget* gtk_image_new_from_file (const gchar *filename);
таким образом мне нужно будет написать что-то вроде
Image = gtk_image_new_from_file(selected_filename)
Будет ли это верным?

2. Как получить координаты курсора мыши в GtkImage?

3. Подскажите документацию по который вы учились писать под GTK (желательно электронную).

Я понимаю что мои вопросы могут показаться совсем глупыми, извините я только учусь, до этого писал под Delphi. Заранее спасибо!

anonymous

1. лучше использовать GtkFileChooser. а для вывода картинки используй gtk_image_set_from_file()

2. обрабатывать motion_notify

3. tutorial и описание api на оф. сайте. плюс gtk-demo

ananas ★★★★★
()
Ответ на: комментарий от ananas

Можно еще вопрос? Мне кажется я совсем запутался. Насколько я заметил все примеры, которые идут с Gtk+ Reference Manual предполагают создание виджетов руками. Как я уже писал: я решил использовать glade. Стоит все та же задача: открыть картинку по нажатию на кнопку. В обработчике события clicked кнопки пишу:

if (gtk_dialog_run (GTK_DIALOG (lookup_widget(NULL,"filechooserdialog1"))) == GTK_RESPONSE_ACCEPT) { char *filename;

filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER ("filechooserdialog1")); gtk_image_set_from_file("image1",filename); g_free (filename); }

Конечно же вылетает. Догадываюсь что я неправильно использую GTK_DIALOG, потому что NULL в lookup_widget быть не должно, но как указать на GtkDialog?

anonymous
()
Ответ на: комментарий от anonymous

про lookup_widget() забудь. открываешь проект при помощи glade_xml_new(), потом выдергиваешь нужные виджеты через glade_xml_get_widget().

если обработчики событий указаны в .glade файле - glade_xml_signal_autoconnect() и добавить к параметрам линкера -export-dynamic

ananas ★★★★★
()
Ответ на: комментарий от ananas

Прошу прощения что опять пристаю, но спросить (кроме гула и документации) мне больше не у кого. Я создал GtkEventBox, в нем создал GtkImage. В GtkImage подгрузил изображение. Создал обработчик события button_press_event у GtkEventBox, в нем пишу: gdouble my_x; my_x=gdk_image_get_pixel(lookup_widget(GTK_WIDGET(widget),"img"),10,10 ); g_printf("%d",my_x); my_x=event->x; g_printf("%d",my_x); return FALSE; При нажатии на картинку в консоль выводиться: (poly1:15023): Gdk-CRITICAL **: gdk_image_get_pixel: assertion `GDK_IS_IMAGE (image)' failed

Больше ничего не выводится. Когда я закрываю окно в консоль пишеться столько нулей, сколько было g_printf(). Почему вывод в консоль идет после закрытия приложения? И почему не выводится координата x? И как побороть ошибку с gdk_image_get_pixel?

Заранее благодарен!

P.S. вместо glade_xml_get_widget() использую lookup_widget потому, что не хочу что б коллеги в винде нуждались еще и в библиотеках glade.

anonymous
()
Ответ на: комментарий от anonymous

Черт, постоянно забываю про User line break :(

Прошу прощения что опять пристаю, но спросить (кроме гула и документации) мне больше не у кого. Я создал GtkEventBox, в нем создал GtkImage. В GtkImage подгрузил изображение. Создал обработчик события button_press_event у GtkEventBox, в нем пишу:
gdouble my_x;
my_x=gdk_image_get_pixel(lookup_widget(GTK_WIDGET(widget),"img"),10,10 );
g_printf("%d",my_x);
my_x=event->x;
g_printf("%d",my_x);
return FALSE;
При нажатии на картинку в консоль выводиться:
(poly1:15023): Gdk-CRITICAL **: gdk_image_get_pixel: assertion `GDK_IS_IMAGE (image)' failed

Больше ничего не выводится. Когда я закрываю окно в консоль пишеться столько нулей, сколько было g_printf(). Почему вывод в консоль идет после закрытия приложения? И почему не выводится координата x? И как побороть ошибку с gdk_image_get_pixel?

Заранее благодарен!

P.S. вместо glade_xml_get_widget() использую lookup_widget потому, что не хочу что б коллеги в винде нуждались еще и в библиотеках glade.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.