c - 使用 GMenu 的菜单中的大间隙

标签 c linux gtk

使用 GMenu (Gnome/Gtk) 创建菜单时,菜单项的标签(-> 图片)之间存在巨大间隙。有什么想法如何解决这个问题吗?

#include <gio/gio.h>
#include <glib.h>
#include <glib-object.h>
#include <glib/gi18n.h>

//....
//....


if(title && (action || submenu))
{
   GMenuItem *item;

   if(submenu)
   {
      item = g_menu_item_new_submenu (title, G_MENU_MODEL(submenu));
   }
   else
   {
      item = g_menu_item_new(title, action);
      if (icon != NULL)
      {
         g_menu_item_set_attribute (item, "icon", "s", icon);
      }
   }

//.....
//....

Picture

最佳答案

不幸的是,事情就是这样intended to be 。 您可以坚持使用已弃用的 GtkImageMenuItem ,除非您将应用程序移植到 GTK 4,否则这不是问题。如果您确实想避免弃用的组件,可以将图像 + 标签包装在 GtkBox 中 正如文档所建议的,虽然它不是那么简单,但需要一些怪癖才能获得像样的解决方案:

  1. 您需要在菜单上使用 gtk_menu_set_reserve_toggle_size 并将其设置为 FALSE
  2. 然后,您需要为每个菜单项创建标签和图像,但是对于没有图标的项目,需要创建一个充当填充物的图像,即 gtk_image_new_from_icon_name ("", GTK_ICON_SIZE_BUTTON)

您可以找到完整工作的示例 here .

注意:不能保证这能在 GTK 4 上正常工作。

关于c - 使用 GMenu 的菜单中的大间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57411101/

相关文章:

linux - 是否可以在不复制参数字符串的情况下读取符号链接(symbolic link)值?

linux - 无法进入 Gentoo Linux 中的文件系统目录

sdl - 用 GTK+ 替换 SDL 用于鼠标和键盘并显示帧缓冲区

c - 使用 GtkGLArea 的 OpenCL/OpenGL 互操作

c - 删除链表中的元素,直到找到单词

c - 调试 C 代码

linux - unix 文件系统中软链接(soft link)相互指向的行为?

c++ - 父类方法中不兼容的 cv 限定符

c - 如何在 C 程序中使用 gnuplot 绘制图表

c - 设置创建的文件权限