设置自定义GtkAccelLabel

问题描述 投票:0回答:1

我正在尝试为我的GtkMenuItem设置自定义GtkAccelLabel,尽管我无法弄清楚如何使用该小部件……对我来说什么也没有显示。

为什么以下电话打错了/不够?

  ...
  fileMi = gtk_menu_item_new_with_label("File");
  label = gtk_accel_label_new ("Strg+X");
  gtk_accel_label_set_accel_widget (label, quitMi);
  ...

这里是完整的复制者:

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

  GtkWidget *window;
  GtkWidget *vbox;

  GtkWidget *menubar;
  GtkWidget *fileMenu;
  GtkWidget *fileMi;
  GtkWidget *quitMi;

  gtk_init(&argc, &argv);

  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");

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

  GtkAccelGroup *accel_group;

  // Create a GtkAccelGroup and add it to the window.
  accel_group = gtk_accel_group_new ();
  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);


  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);

  GtkWidget *label = gtk_accel_label_new ("Strg+X");
  gtk_accel_label_set_accel_widget (label, quitMi);
  gtk_accel_label_refetch (label);

  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 gtk3
1个回答
0
投票

啊,我找到了一个解决方案..虽然不知道是否应该那样做。关键是,MenuItem上已经有一个gtk_accel_label,我可以对其进行修改:

  for (GList* lp = gtk_container_get_children (quitMi); lp != NULL; lp = lp->next)
    {
      if (GTK_IS_ACCEL_LABEL (lp->data))
        gtk_accel_label_set_accel (lp->data, GDK_KEY_0, GDK_MOD1_MASK);
    }
© www.soinside.com 2019 - 2024. All rights reserved.