gpt4 book ai didi

c - 在 GTK+ 3 C 中创建菜单时不显示菜单

转载 作者:行者123 更新时间:2023-11-30 16:59:55 25 4
gpt4 key购买 nike

Screenshot of the output

我是 gtk+ 的新手。在学习在 gtk+ 中创建菜单时,我只需复制粘贴以下代码,当我运行它时......我不知道问题是什么,但只显示窗口。它不显示任何菜单或菜单栏...如果有人遇到过这个问题请帮助我...

    #include <gtk/gtk.h>
GdkPixbuf *create_pixbuf(const gchar * filename)
{
GdkPixbuf *pixbuf;
GError *error = NULL;
pixbuf = gdk_pixbuf_new_from_file(filename, &error);
if (!pixbuf) {
fprintf(stderr, "%s\n", error->message);
g_error_free(error);
}
return pixbuf;
}

int main(int argc, char *argv[])
{

GtkWidget *window;
GtkWidget *icon;
GtkWidget *vbox;

GtkWidget *menubar;
GtkWidget *fileMenu;
GtkWidget *fileMi;
GtkWidget *quitMi;
GtkWidget *text_view;
GtkWidget *buffer;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Write Pad");
gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

icon = create_pixbuf("Web.png");
gtk_window_set_icon(GTK_WINDOW(window), icon);

vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);


text_view = gtk_text_view_new ();
gtk_box_pack_start (GTK_BOX (vbox), text_view, 1, 1, 0);

buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));



menubar = gtk_menu_bar_new();
fileMenu = gtk_menu_new();

fileMi = gtk_menu_item_new_with_label("File");
quitMi = gtk_menu_item_new_with_label("Quit");

gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);
gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);


g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

g_signal_connect(G_OBJECT(quitMi), "activate", G_CALLBACK(gtk_main_quit), NULL);



gtk_widget_show_all(window);

gtk_main();

return 0;
}

最佳答案

代码存在一些问题。您声明的所有变量都使用 GtkWidget * 类型,而函数 create_pixbufgtk_text_view_get_buffer 返回 GdkPixbuf * 的数据code> 和 GtkTextBuffer * 类型。您还使用了已弃用的函数。

此外,您可以在GtkTextView相关函数之后调用菜单相关函数,从而将菜单放置在窗口底部。

这是工作代码:

#include <gtk/gtk.h>

GdkPixbuf *
create_pixbuf (const gchar *filename)
{
GdkPixbuf *pixbuf;
GError *error = NULL;

pixbuf = gdk_pixbuf_new_from_file (filename, &error);

if (!pixbuf) {
fprintf (stderr, "%s\n", error->message);
g_error_free (error);
}

return pixbuf;
}

int
main (int argc, char *argv[])
{
GtkWidget *window;
GdkPixbuf *icon;
GtkWidget *vbox;

GtkWidget *menubar;
GtkWidget *fileMenu;
GtkWidget *fileMi;
GtkWidget *quitMi;
GtkWidget *text_view;
GtkTextBuffer *buffer;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
icon = create_pixbuf ("Web.png");

gtk_window_set_title (GTK_WINDOW (window), "Write Pad");
gtk_window_set_default_size (GTK_WINDOW (window), 500, 400);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
gtk_window_set_icon (GTK_WINDOW (window), icon);

vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);

menubar = gtk_menu_bar_new ();
fileMenu = gtk_menu_new ();

fileMi = gtk_menu_item_new_with_label ("File");
quitMi = gtk_menu_item_new_with_label ("Quit");

gtk_menu_item_set_submenu (GTK_MENU_ITEM (fileMi), fileMenu);
gtk_menu_shell_append (GTK_MENU_SHELL (fileMenu), quitMi);
gtk_menu_shell_append (GTK_MENU_SHELL (menubar), fileMi);
gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);

text_view = gtk_text_view_new ();
gtk_box_pack_start (GTK_BOX (vbox), text_view, TRUE, TRUE, 0);

buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));

g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
g_signal_connect (G_OBJECT (quitMi), "activate", G_CALLBACK (gtk_main_quit), NULL);

gtk_widget_show_all (window);

gtk_main ();

return 0;
}

关于c - 在 GTK+ 3 C 中创建菜单时不显示菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37911216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com