0

我正在使用 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>
4

2 回答 2

2

的原型gtk_text_view_get_buffer()是:

GtkTextBuffer *gtk_text_view_get_buffer (GtkTextView *text_view);


与其声明bufferGtkWidget *,不如将其声明为GtkTextBuffer *

由于您使用的是泛型for 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) );

回覆:

于 2014-09-19T17:15:07.810 回答
1

您的代码是正确的,但*buffer不应该是 aGtkWidget而是 a GtkTextBuffer。将您的行更改
GtkWidget *buffer;
GtkTextBuffer *buffer;
,不会出现错误。
为了避免宏textview声明GtkTextView *

查看更多:

  1. https://developer.gnome.org/gtk3/stable/GtkTextView.html

  2. https://developer.gnome.org/gtk3/stable/GtkTextBuffer.html

于 2020-10-24T10:59:12.747 回答