做一个GTK按钮圆

做一个GTK按钮圆,gtk,Gtk,如何将GtkBtton做成圆形?有几个选项 调整样式。基础集中没有“圆度”选项。一些主题引擎可能提供边界图像规格或圆度,但它不会在任何地方工作 强制创建一个主题,使其看起来也符合您的需要。这并不难,只要加载一个gtkrc字符串来指定所需的主题即可。您将需要确保用户具有主题,或者可以使用回退 子类化按钮并自己绘制。一种方法是将边框和浮雕设置为0,打包图像,并响应状态更改事件以使用适当的预发光(悬停)图像。另一种方法是重写expose事件并根据需要绘制按钮 公认的答案是: 基础集中没有“圆度”选项

如何将GtkBtton做成圆形?

有几个选项

  • 调整样式。基础集中没有“圆度”选项。一些主题引擎可能提供边界图像规格或圆度,但它不会在任何地方工作
  • 强制创建一个主题,使其看起来也符合您的需要。这并不难,只要加载一个gtkrc字符串来指定所需的主题即可。您将需要确保用户具有主题,或者可以使用回退
  • 子类化按钮并自己绘制。一种方法是将边框和浮雕设置为0,打包图像,并响应状态更改事件以使用适当的预发光(悬停)图像。另一种方法是重写expose事件并根据需要绘制按钮

    • 公认的答案是:

      基础集中没有“圆度”选项

      好吧,现在有了

      在特殊情况下,可以通过添加.circular样式类使按钮变圆

      因此,例如:

      gtk_style_context_add_class(
          gtk_widget_get_style_context( GTK_WIDGET(button) ),
          "circular"
      );
      
      这项工作同时使用了标准主题Adwaita和HighContrast

      但也有一个问题:这仅适用于未设置
      展开
      属性或未手动放大的按钮。我还没有弄清楚这是否可以与
      GtkButton
      s具有
      expand
      ed大小的按钮一起使用,就像我想要的放大按钮一样,我得到的是圆角,但两侧是平坦区域。:/我猜开发人员没有想过,也不在乎。。。关于支持具有
      圆形
      样式类的较大按钮。也许我会在IRC上问一下


      更新:这是经过修补的,因此曲率现在会一直延伸,而不是平直的线段。如果尺寸为非正方形,您仍然会得到椭圆形而不是圆形,但它们会一直弯曲。

      感谢您的建议。你能用一个示例发布在expose event方法中绘制按钮的位置吗?G_DEFINE_TYPE(RButton,RButton,GTK_TYPE_button)static void RButton_class_init(RButtonClass klass){((GtkWidgetClass)klass)->expose_event=RButton_expose;}替换GTK_button_油漆如下:static gint RButton_expose(GtkWidget*widget,GdkEventExpose*event){if(GTK_widget_可绘制(widget)){GtkWidget*child=GTK_BIN(widget)->child;GtkButton*button=GTK_按钮(widget);GtkStateType state state state=GTK_widget_state(widget);GtkShadowType shadow type shadow=button->按下?GTK_shadow_IN:GTK_shadow_OUT;GTK_按钮(按钮和事件->区域,状态类型,阴影类型,“按钮”,“按钮故障”);如果(子)gtk容器传播公开(gtk容器(小部件),子,事件);}返回FALSE;}