我试图制作一个窗口,每当用户单击按钮时就会显示该窗口。 窗口本身确实显示,但其中的文本视图没有显示! 有人知道这个问题的解决办法吗?
代码:
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 /
中的按钮gtk4向框添加标签由于我仅使用 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++ 应该不难。