好的,我正在尝试在 C++(gtkmm 3.0)中创建一个 Gtk 按钮,该按钮在背景中有一个可以根据状态更改的图像,以及一个可以根据语言字符串更改的前台标签。我尝试扩展适用于图像的 Gtk::EventBox 类,但我无法在其中添加标签。我尝试扩展 Gtk::Container 类,但是我不能把它放在我的 Gtk::VButtonBox 中。必须有更好的方法来做到这一点,而无需重新发明轮子。
任何建议将不胜感激。
谢谢,保罗
实际上,您将需要发明轮子。您需要的是两个小部件的组合。我知道在 Gedit、Nautilus 中有类似的实现,并且新的 Gtk+ 3.1.X 包含一个类似 GtkOverlay 的小部件。
- GtkOverlay 是一个新的容器,它允许将一个或多个
“覆盖”小部件放置在另一个小部件之上。这可用于“浮动状态栏”和类似界面。
那来自这里。你有两个选择,你等待它出来,或者你复制代码并适应你的应用程序,直到新的 Gtk+ 发布。
这应该有效:
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);
我用 background:#F00 测试了它,它把按钮变成了漂亮的红色,所以它也应该适用于图像,只要保持 css 标准。您基本上可以做所有事情,例如更改字体、更改按钮标签的填充等等 :-)