You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTK4中Dialog内GtkTextView不显示问题求助

解决GTK4中Dialog内GtkTextView无法显示的问题

你的核心问题是错误地直接修改GtkDialog的根子组件,破坏了GtkDialog自带的布局结构。GtkDialog默认包含content area作为内容容器,应该将你的Box和TextView添加到这个容器中,而不是用gtk_window_set_child直接替换Dialog的子组件。

修正后的代码

GtkWidget *dialog = gtk_dialog_new();
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 60);
GtkWidget *element;

gtk_window_set_title(GTK_WINDOW(dialog), "new task - Hb Tasks");
gtk_window_set_default_size(GTK_WINDOW(dialog), 300, 200);
gtk_window_set_resizable(GTK_WINDOW(dialog), false);

// 获取Dialog自带的content area容器,将Box添加进去
GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
gtk_box_append(GTK_BOX(content_area), box);

element = gtk_text_view_new();
gtk_box_append(GTK_BOX(box), element);
char text[22] = "insert the task name.";
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(element));
gtk_text_buffer_set_text(buffer, text, strlen(text));

// 可选:给Dialog添加确认/取消按钮(符合Dialog使用规范)
gtk_dialog_add_button(GTK_DIALOG(dialog), "_Cancel", GTK_RESPONSE_CANCEL);
gtk_dialog_add_button(GTK_DIALOG(dialog), "_OK", GTK_RESPONSE_OK);

gtk_window_present(GTK_WINDOW(dialog));
loadTasks(dataBase);

关键修改说明

  1. 替换gtk_window_set_child为gtk_dialog_get_content_area:GtkDialog是特殊的Window,内部已经预设了content area作为内容承载容器,直接设置Dialog的child会覆盖这些默认结构,导致TextView无法正确渲染。
  2. 可选添加Dialog按钮:遵循GTK Dialog的使用规范,添加标准按钮能提升交互体验,同时确保Dialog的布局逻辑完整。

额外注意事项

  • 如果你不需要Dialog的默认结构(比如标题栏、按钮栏),可以直接使用gtk_window_new创建普通窗口,而不是GtkDialog。
  • 确保所有GTK组件的添加逻辑都遵循容器层级关系,避免跳过预设容器直接修改根组件。

内容的提问来源于stack exchange,提问作者Hrodebert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:48:27