【发布时间】:2018-11-06 03:46:56
【问题描述】:
如何使用 gtk_popover_menu_new() 来实现简单的 gtk_menu_button_new()? 当我尝试使用 Glade 时,它可以完美运行,但是,我需要 .c 代码,而不是 .ui 代码。 我在 Internet 上找不到仅将 .c 用于 Popovermenu 的单个示例代码
谁能提供非常简单的示例代码,其中弹出菜单包含几个按钮?最好是在 int main 中编写窗口设计代码,而不是 static void activate。
There will be .gif that will show what I want to make
附:我知道,为了在里面放置多个按钮,我需要使用 GTK_BOX。
编辑:我添加了包含菜单按钮的示例代码,但它不起作用。请完成此代码,使其像在 .gif 中一样工作。
编译:gcc pkg-config --cflags gtk+-3.0 -o './testprogram.run' './testprogramcode.c' pkg-config --libs gtk+-3.0
编辑 2:我在 testBox 中添加了一个按钮
代码:
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
//Create window
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
gtk_window_set_title(GTK_WINDOW(window), "Simple menu");
//Creating fixed container
GtkWidget *fixedContainer = gtk_fixed_new ();
gtk_container_add(GTK_CONTAINER(window), fixedContainer);
//Creating and adding new menu button in fixed container
GtkWidget *testMenuButton = gtk_menu_button_new ();
gtk_fixed_put (GTK_FIXED(fixedContainer), testMenuButton, 50, 50);
//Adding popover to menu button
GtkWidget *testPopOver = gtk_popover_new (testMenuButton);
//Creating GTK_BOX to hold popover box contents
GtkWidget *testBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
//Creating and adding new button in testBox
GtkWidget *testButton = gtk_button_new ();
gtk_box_pack_start(GTK_BOX(testBox), testButton, TRUE, TRUE, 5);
//How to add testBox to testPopOver?
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
【问题讨论】:
-
您为什么不喜欢
.ui文件?如果您不想依赖外部文件,可以将其直接包含到您的 C 程序中。 -
我避免使用 .ui 文件,因为它比直接放置没有中间人的 gui 对象更浪费计算机资源(我假设 .ui 是中间人)。我正在做所有事情,即使我使程序开发时间更长,我也可以做些什么来尽可能快地编程工作。如果我可以在快和快一点之间做出选择,我会选择快一点。