好的,我试图在c++ (gtkmm 3.0)中创建一个Gtk按钮,该按钮在背景中有一个图像,我可以根据状态进行更改,在前景中有一个标签,我可以根据语言字符串进行更改。我尝试扩展Gtk::EventBox类,它非常适合图像,但我不能在其中放置标签。我尝试扩展Gtk::容器类,但我不能把它放在我的Gtk::VButtonBox。一定有更好的方法来做这件事,而不用重新发明轮子。
如有任何建议,不胜感激。
谢谢,保罗
应该可以:
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标准。基本上你可以做任何事情,比如改变字体,改变按钮标签的填充等等:-)
实际上你需要发明轮子。您需要的是两个小部件的组合。我知道在Gedit、Nautilus和新的Gtk+ 3.1中有类似的实现。X包含一个类似的小部件,叫做GtkOverlay。
GtkOverlay是一个新的容器,允许放置一个或多个
"覆盖"小部件在另一个小部件的顶部。这可以用于"浮动状态栏"和类似的界面。
它来自这里。你有两种选择,要么等待它出来,要么复制代码并将其改编到你的应用中,直到新的Gtk+发布。