我从头开始学习GTK4,使用GTKBuilder XML构建对象,使用CSS从文件中添加样式信息,使用:
const char cssPath[] = "/a/path/that/is/confirmed/to_be/working.css";
GtkCssProvider * cssProvider = gtk_css_provider_new();
gtk_css_provider_load_from_path(cssProvider, cssPath);
gtk_style_context_add_provider_for_display(gdk_display_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);
当我使用一个通用的CSS选择器时,我的风格变化会产生影响,比如:
box { background-color: white; }
/* box goes white as expected */
但是当我尝试使用特定对象的id="0"来瞄准它时;myBox";XML属性,它不起作用:
box#myBox { background-color: white; }
/* no colour change happens */
或
#myBox { background-color: white; }
/* no colour change happens here either */
我的XML.ui文件中的相关部分是:
<object class="GtkBox" id="myBox">
<property name="halign">GTK_ALIGN_CENTER</property>
<child>
<object class="GtkLabel" id="centreLabel">
<property name="single-line-mode">true</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
也许我误解了CSS选择器相对于使用GtkBuilder实例化的对象的工作方式?我已经阅读了文档,所以我非常感谢任何人在这里提供的帮助!
干杯。
使用UI文件中的name
属性,可以设置希望<object>
具有的特定Css名称。为了使用这个自定义名称,您还需要将#
放在Cs中的myBox
名称前面,这已经完成了。
要定义name
属性,只需在UI文件中的Box对象下添加此行:
<property name="name">myBox</property>
以下是您的UI文件应该是什么样子:
<object class="GtkBox" id="myBox">
<property name="halign">GTK_ALIGN_CENTER</property>
<property name="name">myBox</property>
<child>
<object class="GtkLabel" id="centreLabel">
<property name="single-line-mode">true</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
</object>
</child>
</object>
以下是Cs应该是什么样子(你已经这样做了(:
#myBox { background-color: white; }
我刚刚用GTK3完成了这项工作。可怕的文档。
无论如何,我遇到了和您完全相同的问题,解决方案是忽略GTK文档(见图(。
您需要以下内容来引用命名节点,我将使用您的示例:
box#myBox { background-color: white; }
更改为:
#myBox box{ background-color: white; }
GTK网站上没有列出此解决方案。