2014-09-18 1 views
0

Я работаю на распайке с помощью GTK3 + Anjuta (плагин Поляны) и C.Невозможно получить GtkTextBuffer от Text View - C, GTK3

У меня есть текстовый вид, но у меня возникают проблемы получая текстовый буфер, который он использует.

код, который дает мне проблемы заключается в следующем:

GtkWidget * text_view_hilera_1; 
    GtkWidget * buffer; 
    text_view_hilera_1 = gtk_builder_get_object(build_princ,"txt_hilera1"); 
    buffer = gtk_text_view_get_buffer(text_view_hilera_1); 
    error(gtk_buildable_get_name(buffer)); 

Error() является функцией, которая просто выводит строку, для отладки. Кажется, что функция get_buffer() не возвращает значение null, я проверил это. Это действительно возвращает что-то, не-нулевой указатель, но к чему я не знаю, потому что буфер не выполняет каждое утверждение.

(nw:6368): Gtk-CRITICAL **: gtk_buildable_get_name: assertion `GTK_IS_BUILDABLE (buildable)' failed 

Он также не GTK_IS_TEXT_BUFFER и GTK_IS_WIDGET. Текстовое представление работает нормально и печатает свое имя с gtk_buildable_get_name.

Я могу поделиться XML для пользовательского интерфейса, но он слишком велик для сообщения. Если вам нужны какие-то конкретные разделы, просто спросите меня. Спасибо за помощь!

Это XML для представления текста:

      <object class="GtkTextView" id="txt_hilera1"> 
          <property name="width_request">19</property> 
          <property name="height_request">60</property> 
          <property name="visible">True</property> 
          <property name="can_focus">True</property> 
          <property name="vscroll_policy">natural</property> 
          <property name="wrap_mode">char</property> 
          </object> 

ответ

2

Прототип gtk_text_view_get_buffer() является:

GtkTextBuffer *gtk_text_view_get_buffer (GtkTextView *text_view);


Вместо того, чтобы объявить buffer как GtkWidget *, объявим его как GtkTextBuffer * ,

Поскольку вы используете общий GtkWidget * для text_view_hilera_1, бросайте его GtkTextView* с GTK_TEXT_VIEW() макросъемки при вызове gtk_text_view_get_buffer().

Важные детали:

GtkWidget *text_view_hilera_1; 
GtkTextBuffer *buffer; 

//...builder-related code 

buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view_hilera_1)); 

RE: