【发布时间】:2015-01-25 03:07:11
【问题描述】:
所以我正在尝试使用 C 在 GTK3+ 中创建一个简单的菜单。我正在尝试重新创建在以下位置找到的菜单:
https://developer.gnome.org/gtk-tutorial/stable/x743.html
所以我复制了代码,并一直试图隔离我需要的部分,并将所说的部分转换为 3+。我对这个代码段不太走运。首先,不推荐使用 gtk_option_menu,取而代之的是 gtk_combo_box。我试图找到相关的教程,但没有任何结果。
老实说,我什至不知道如何使用 GTK 创建菜单背后的理论,所以我很难进行转换。我在这里几乎是瞎飞。
我的代码如下:
#include "/usr/include/gtk-3.0/gtk/gtk.h"
static void print_stuff( GtkWidget *item, gpointer data) {
printf("Hello World!\n");
return;
}
static GtkWidget *make_menu_item(gchar *name, GCallback callback, gpointer data ){
GtkWidget *item;
item = gtk_menu_item_new_with_label (name);
g_signal_connect (item, "activate", callback, (gpointer) data);
gtk_widget_show (item);
return item;
}
static void create_range_controls( void ){
GtkWidget *window;
GtkWidget *box1, *box2, *box3;
GtkWidget *button;
GtkWidget *scrollbar;
GtkWidget *separator;
GtkWidget *opt, *menu, *item;
GtkWidget *label;
GtkWidget *scale;
GObject *adj1, *adj2;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_title(GTK_WINDOW(window), "range controls");
box1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER (window), box1);
gtk_widget_show(box1);
opt = gtk_option_menu_new ();
menu = gtk_menu_new ();
item = make_menu_item ("Top", G_CALLBACK (print_stuff), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
item = make_menu_item ("Bottom", G_CALLBACK (print_stuff), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
item = make_menu_item ("Left", G_CALLBACK (print_stuff), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
item = make_menu_item ("Right", G_CALLBACK (print_stuff), NULL);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu);
gtk_box_pack_start(GTK_BOX (box1), opt, TRUE, TRUE, 0);
gtk_widget_show(opt);
gtk_widget_show (window);
}
int main( int argc, char *argv[] ){
gtk_init (&argc, &argv);
create_range_controls ();
gtk_main ();
return 0;
}
谁能说明我做错了什么,为什么?有没有 GTK3+ 的教程,比如我上面链接的 GTK2+ 教程?
谢谢!
【问题讨论】:
-
该教程适用于 GTK+ 2(如页面顶部所述)。我不知道any version of the GTK+ 3 documentation 中的教程是否涵盖菜单(我自己也没有实际使用过 GTK+ 3 菜单,所以 IDK;抱歉)。此外,您绝对不想包含 GTK+ 头文件的绝对路径。正如 GTK+ 3 教程将展示的,您需要包含
<gtk/gtk.h>并让pkg-config在编译时正确设置包含搜索路径。 -
我知道它适用于 GTK2,但我需要 GTK3。如果我需要 GTK2,那么教程就足够了。我尝试以这种方式包含它,但由于某种原因它不起作用。我到处都得到未定义的引用。相反,我是手动完成的,而且对于我实际开始工作的其他事情,它似乎工作得很好。
-
是的,我向您指出了 GTK+ 3 教程和文档。您在构建可执行程序时是否忘记使用
pkg-config --libs? GTK+ 3 教程确实描述了这一点。 (或者,您可以放弃本教程并直接访问参考页面...)
标签: c user-interface gtk gtk3