好的,我正在尝试在C ++(gtkmm 3.0)中创建一个Gtk按钮,它在后台有一个我可以根据状态改变的图像,以及前景中我可以根据语言字符串改变的标签。我尝试扩展Gtk :: EventBox类,它对图像很有用,但是我不能在其中添加标签。我尝试扩展Gtk :: Container类,但后来我不能把它放在我的Gtk :: VButtonBox中。必须有一种更好的方法来做到这一点,而无需重新发明轮子。
任何建议都将不胜感激。
谢谢,保罗
答案 0 :(得分:0)
实际上你需要发明轮子。你需要的是两个小部件的组合。我知道在Gedit,Nautilus和新的Gtk + 3.1.X中都有类似的实现,其中包含一个名为GtkOverlay的小部件。
- GtkOverlay是一个新容器,允许放置一个或多个
“覆盖”小部件位于另一个小部件之上。这可以用于 '浮动状态栏'和类似界面。
来自here。您有两个选择,等待它出来,或者您复制代码并将其调整到您的应用程序,直到新的Gtk +发布。
答案 1 :(得分:0)
这应该有效:
GtkCssProvider* my_css_provider = gtk_css_provider_new();
gtk_css_provider_load_from_data(my_css_provider,"GtkWidget { background:url(yourimage.jpg); }",-1,NULL);
GtkStyleContext* context = gtk_widget_get_style_context(yourbutton);
gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (my_css_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
我用背景测试了它:#F00将按钮转换为漂亮的红色,所以它也应该与图像一起使用,只需保持css标准。您可以基本上完成所有操作,例如更改字体,更改按钮标签的填充等等: - )