C GTK状态栏是如何工作的?什么';我的代码怎么了?
我想有一个状态栏,所以我开始制作一个只有状态栏的小程序,这样我就可以看到它是如何工作的 现在,我只想能够得到一些文字,但它显示了一个随机字符,而不是 有人能看到我的代码有什么问题吗C GTK状态栏是如何工作的?什么';我的代码怎么了?,c,gtk,C,Gtk,我想有一个状态栏,所以我开始制作一个只有状态栏的小程序,这样我就可以看到它是如何工作的 现在,我只想能够得到一些文字,但它显示了一个随机字符,而不是 有人能看到我的代码有什么问题吗 #include <gtk/gtk.h> int main (int argc, char *argv[]) { GtkWidget *window, *statusbar, *vbox; gchar *info; gtk_init(&argc, &argv); win
#include <gtk/gtk.h>
int main (int argc, char *argv[]) {
GtkWidget *window, *statusbar, *vbox;
gchar *info;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request(window, 250, -1);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
statusbar = gtk_statusbar_new();
/* stack for info messages */
g_object_set_data(G_OBJECT(statusbar), "info", (gpointer) "1");
g_object_set_data(G_OBJECT(statusbar), "info", (gpointer) "2");
g_object_set_data(G_OBJECT(statusbar), "info", (gpointer) "3");
/* stack for warning messages */
g_object_set_data(G_OBJECT(statusbar), "warning", (gpointer) "A");
g_object_set_data(G_OBJECT(statusbar), "warning", (gpointer) "B");
g_object_set_data(G_OBJECT(statusbar), "warning", (gpointer) "C");
/* get id for the message at the top of the info stack? */
guint id = gtk_statusbar_get_context_id(statusbar, "info");
/* show the top message from the info stack ? */
gtk_statusbar_push(statusbar, id, info);
vbox = gtk_vbox_new(FALSE, 5);
gtk_box_pack_start_defaults(GTK_BOX (vbox), statusbar);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
您声明了
GtkWidget*statusbar
,但是gtk\u statusbar…
方法期望GtkStatusbar*
:使用gtk\u statusbar(statusbar)
强制转换它将删除警告。这不是一个大问题,因为该程序无论如何都会工作:最大的问题是您在使用info
时没有初始化它
以下代码在此处按预期工作:
/* gcc -o status status.c $(pkg-config --cflags --libs gtk+-2.0) */
#include <gtk/gtk.h>
int main (int argc, char *argv[]) {
GtkWidget *window, *statusbar, *vbox;
gchar *info;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request(window, 250, -1);
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
statusbar = gtk_statusbar_new();
/* stack for info messages */
g_object_set_data(G_OBJECT(statusbar), "info", (gpointer)
"1");
g_object_set_data(G_OBJECT(statusbar), "info",
(gpointer) "2");
g_object_set_data(G_OBJECT(statusbar), "info",
(gpointer) "3");
/* stack for warning messages */
g_object_set_data(G_OBJECT(statusbar), "warning",
(gpointer) "A");
g_object_set_data(G_OBJECT(statusbar), "warning",
(gpointer) "B");
g_object_set_data(G_OBJECT(statusbar),
"warning", (gpointer) "C");
/* get id for the message at the top of the
* info stack? */
guint id = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "info");
/* show the top message from the info stack
* ? */
info = "This was uninitialized";
gtk_statusbar_push(GTK_STATUSBAR(statusbar), id, info);
vbox = gtk_vbox_new(FALSE, 5);
gtk_box_pack_start_defaults(GTK_BOX
(vbox),
statusbar);
gtk_container_add(GTK_CONTAINER(window),
vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
不是你没有的代码-里面没有
gtk\u statusbar\u pop
!酷!谢谢。现在让我们假设我希望状态栏显示警告消息2。那怎么办?我搞不懂这个推送/流行的概念是怎么工作的。哇。非常感谢你。你真的很在行!
/* gcc -o status status.c $(pkg-config --cflags --libs gtk+-2.0) */
#include <gtk/gtk.h>
int main (int argc, char *argv[]) {
GtkWidget *window, *statusbar, *vbox;
gchar *info;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request(window, 250, -1);
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
statusbar = gtk_statusbar_new();
/* stack for info messages */
g_object_set_data(G_OBJECT(statusbar), "info", (gpointer)
"1");
g_object_set_data(G_OBJECT(statusbar), "info",
(gpointer) "2");
g_object_set_data(G_OBJECT(statusbar), "info",
(gpointer) "3");
/* stack for warning messages */
g_object_set_data(G_OBJECT(statusbar), "warning",
(gpointer) "A");
g_object_set_data(G_OBJECT(statusbar), "warning",
(gpointer) "B");
g_object_set_data(G_OBJECT(statusbar),
"warning", (gpointer) "C");
/* get id for the message at the top of the
* info stack? */
guint id = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "info");
/* show the top message from the info stack
* ? */
info = "This was uninitialized";
gtk_statusbar_push(GTK_STATUSBAR(statusbar), id, info);
vbox = gtk_vbox_new(FALSE, 5);
gtk_box_pack_start_defaults(GTK_BOX
(vbox),
statusbar);
gtk_container_add(GTK_CONTAINER(window),
vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
gtk_statusbar_push(GTK_STATUSBAR(statusbar), id, "First message");
// Now the statusbar shows "First message"
gtk_statusbar_push(GTK_STATUSBAR(statusbar), id, "Second message");
// Now the statusbar shows "Second message"
gtk_statusbar_pop(GTK_STATUSBAR(statusbar), id);
// Now the statusbar shows "First message"