我在一个函数里创建gtkentry,并且在2个notebook页面使用这个函数创建gtkentry,直接发生了崩溃。但是如果设置placeholder,就不会有任何问题,代码就是下面的:
#include <gtk/gtk.h>
GtkWidget* get_language_page() {
GtkWidget* page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
GtkWidget* labelName = gtk_label_new("Name");
gtk_box_pack_start(GTK_BOX(page), labelName, FALSE, FALSE, 5);
GtkWidget *nameEntry = gtk_entry_new();
// 必须设置placeholder,即使是空字符串
gtk_entry_set_placeholder_text(GTK_ENTRY(nameEntry), "请输入内容...");
gtk_box_pack_start(GTK_BOX(page), nameEntry, FALSE, FALSE, 5);
return page;
}
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Notebook Example");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
GtkWidget *notebook = gtk_notebook_new();
gtk_container_add(GTK_CONTAINER(window), notebook);
// 添加两个页面
GtkWidget *page1 = get_language_page();
GtkWidget *page2 = get_language_page();
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page1, gtk_label_new("Page 1"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page2, gtk_label_new("Page 2"));
gtk_widget_show_all(window);
gtk_main();
return 0;
} 有视频为证
后来我直接不用函数了,直接在代码里直接创建,还是一样的问题:
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Notebook Example");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
GtkWidget *notebook = gtk_notebook_new();
gtk_container_add(GTK_CONTAINER(window), notebook);
// 添加两个页面
GtkWidget *page1 = gtk_entry_new();
GtkWidget *page2 = gtk_entry_new();
//不加placeholder直接崩溃,加了就没有问题
gtk_entry_set_placeholder_text(GTK_ENTRY(page1), "请输入内容...");
gtk_entry_set_placeholder_text(GTK_ENTRY(page2), "请输入内容...");
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page1, gtk_label_new("Page 1"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page2, gtk_label_new("Page 2"));
gtk_widget_show_all(window);
gtk_main();
return 0;
} 下午我又发现了一个问题,几乎与上一个gtkentry是同样的类型。
在2个notebook页面,使用函数创建内容。并且函数里都创建了一个GtkTextView,结果就是,在切换页面的时候竟然textview的内容自己消失了。并且不能编辑textview。我怎么问AI,怎么改都没有用。
上一个gtkentry奇怪的加了placeholder就能用了。这个GtkTextView根本没有placeholder的属性。
我想起之前下载gtk3的时候好像是看到过一句话,某个版本有严重问题。我就想到换版本,最后我换了gtk3的版本。原版是gtk+-bundle_3.4.2-20130513_win32这个版本,我换成了gtk+-bundle_3.6.4-20130513_win32,结果编译运行没有任何错误,所有的问题都解决了。
原来就是gtk版本的问题。我不知道这么缺陷的版本问题这么明显竟然还能发布。
所以我的结论就是gtk+-bundle_3.4.2-20130513_win32是有严重问题的版本不能用。