gtk_text_view 未显示在对话框中

问题描述 投票:0回答:1

我试图制作一个窗口,每当用户单击按钮时就会显示该窗口。 窗口本身确实显示,但其中的文本视图没有显示! 有人知道这个问题的解决办法吗?

代码:

GtkWidget *dialog = gtk_dialog_new();
GtkWidget *box              = gtk_box_new(GtkOrientation::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_child(GTK_WINDOW(dialog),box);
gtk_window_set_resizable(GTK_WINDOW(dialog), false);

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));

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

我已经阅读了将近2个小时的文档,但我仍然没有找到出路。

这就是我看到窗口的方式:

我也在这里尝试过这个例子:https://docs.gtk.org/gtk4/section-text-widget.html

c++ gtk
1个回答
0
投票

我怀疑问题出在对象和变量的范围内。 这里已经有一些关于此的文章,例如:

如何从条目中获取用户输入? GTK 4 C /

无法通过单击C /

中的按钮gtk4向框添加标签

获取 gtk C 上表单输入的值 /

由于我仅使用 GTK4 来使用 C 编程语言,因此这里有一个使用该编程语言的示例来说明如何解决问题。

#include <gtk/gtk.h>

static void show_window(GtkWidget *button)
{
    // create child window with textview
    GtkWidget *window2 = gtk_window_new();
    gtk_window_set_title(GTK_WINDOW(window2), "Child Window");
    gtk_window_set_default_size(GTK_WINDOW(window2), 200, 150);
    GtkWidget *element = gtk_text_view_new();
    const 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));
    gtk_window_set_child(GTK_WINDOW(window2),GTK_WIDGET(element));
    gtk_window_set_modal(GTK_WINDOW(window2),TRUE);
    gtk_widget_set_visible(window2,TRUE);
}

static void activate(GtkApplication* app)
{
    GtkWidget *button1;
    GtkWidget *window1;

    // create app window
    window1 = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window1), "APP-Window");
    gtk_window_set_default_size(GTK_WINDOW(window1), 400, 300);

    button1 = gtk_button_new_with_label("click me");

    gtk_window_set_child(GTK_WINDOW(window1),button1);
    g_signal_connect(button1,"clicked",G_CALLBACK(show_window),NULL);
    gtk_application_add_window(app, GTK_WINDOW(window1));

    gtk_widget_set_visible(window1,TRUE);

}

int main(int argc, char* argv[])
{
    GtkApplication* app;
    app = gtk_application_new("org.gtk.childwindow", G_APPLICATION_DEFAULT_FLAGS);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    g_application_run(G_APPLICATION(app), argc, argv);
    g_object_unref(app);

    return 0;
}

将其翻译成 C++ 应该不难。

© www.soinside.com 2019 - 2024. All rights reserved.