我正在使用GTK3 +,Anjuta(Glade插件)和C进行分配。
我有一个文本视图,但是我无法获取正在使用的文本缓冲区。
给我带来麻烦的代码就是:
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打印其名称。
我可以为UI共享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>
答案 0 :(得分: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:
答案 1 :(得分:1)
您的代码是正确的,除了*buffer
不应该是GtkWidget
之外,
GtkTextBuffer
。换行
GtkWidget *buffer;
到
GtkTextBuffer *buffer;
并且不会出现错误。
为避免宏,请声明textview
为GtkTextView *
查看更多信息: