2012-01-04 5 views
1

Я пытаюсь нарисовать диаграмму рассеяния с помощью cairo в gtk3. Для начала я использую примеры здесь: http://zetcode.com/tutorials/cairographicstutorial/используя cairo с gtk3

Они скомпилированы с gtk2 успешно, но не отображают изображения. Они не компилируются с gtk3, но приводят к следующей ошибке:

example.c: In function ‘on_expose_event’: 
example.c:17:31: error: ‘GtkWidget’ has no member named ‘window’ 

Любая помощь по этому вопросу будет принята с благодарностью.

btw Я использую для записи, используя ArchLinux, если это помогает.

ответ

7

В Gtk3 было довольно много изменений. Нет ни одного участника , выставленного в составе GtkWidget, участники были перемещены в GtkWidgetPrivate, что непрозрачно, поэтому вы не можете получить доступ к элементам напрямую с GtkWidget. Вам нужно будет использовать функцию доступа, в этом случае, когда вам нужен window член GtkWidget, вы можете использовать gtk_widget_get_window, но это может не исправить пример кода, с которым вы работаете. Обратите внимание, что сигнал expose_event был заменен сигналом draw, поэтому вам нужно будет обновить функцию, которая на самом деле рисуется соответствующим образом (on_expose_event в вашем случае, я думаю). Пожалуйста, обратитесь к this link, чтобы просмотреть список изменений, необходимых для переключения на Gtk3. Вы можете обратиться к источнику, предоставленному приложением gtk-demo, или demos/gtk-demo из исходного кода Gtk3, чтобы получить образец кода.
Что касается изображения, которое не отображается в случае Gtk2, если вы работаете с образцом изображения, убедитесь, что файл изображения доступен по пути, указанному в источнике.
Надеюсь, это поможет!

Смежные вопросы