‘GtkWidget {aka struct _GtkWidget}’ не имеет члена с именем «window» - PullRequest
1 голос
/ 11 марта 2019

Я недавно попробовал свои силы в изучении GTK, используя «Основы разработки GTK +» Эндрю Краузе (это самая последняя книга 2007 года по GTK, которую я смог найти).До сих пор около половины программ компилируются и запускаются напрямую, а другая половина устарела, и я могу найти замену с небольшим поиском.Я пользуюсь некоторыми онлайн-уроками, но в них нет подробного объяснения, которое есть в книге мистера Краузе.

В идеальном мире я хотел бы иметь современную книгу, чтобы учиться, но этонедоступен.Таким образом, мне приходится переходить туда-сюда между книгой (GTK2) и онлайн-источниками (GTK3).

Мой вопрос: когда я пытаюсь скомпилировать исходный код из книги, я получаю несколько ошибок.Мне удалось обновить весь код, за исключением проблемы, которую я назвал в названии, которую я не могу преодолеть.

Из книги, окна событий главы 3, эта строка - та, с которой у меня возникают проблемы:

gdk_window_set_cursor (eventbox->window, gdk_cursor_new (GDK_HAND1));

Мне удалось изменить его, чтобы он работал до этого момента, но все равно получаю ошибку при компиляции:

gdk_window_set_cursor (eventbox->window, gdk_cursor_new_for_display   (gdk_display_get_default(), GDK_HAND1));

При компиляции я получаю:

eventboxes.c:37:33: error: ‘GtkWidget {aka struct _GtkWidget}’ has no member named ‘window’


gdk_window_set_cursor (eventbox->window, gdk_cursor_new_for_display (gdk_display_get_default(), GDK_HAND1));

Прочитав некоторые другие элементы в Интернете, такие как этот ", используя cairo с gtk3 "

Я обнаружил, что изменения между GTK2 и GTK3 сделали членов, таких как window,недоступен.

Извините за длинное сообщение по моему вопросу: есть ли способ в GTK3 заставить строку кода работать, или я просто выполняю поручение дурака и должен позволить этому умереть?

1 Ответ

2 голосов
/ 12 марта 2019

Этот точный код можно исправить следующим образом:

GdkWindow * gdk_window = gtk_widget_get_window (window);
gdk_window_set_cursor (gdk_window, gdk_cursor_new (GDK_HAND1));

Однако я не думаю, что будет хорошей идеей изучать Gtk3 с книгами Gtk2.Вы можете прочитать их, чтобы получить общий вид, но затем переключитесь на документацию gtk, приложение gtk3-demo для некоторых рецептов, gtk3-widget-factory исходный код и, конечно, SO.

...