1

我正在从头开始学习 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="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 实例化的对象?我已阅读文档,因此我将不胜感激任何人可以在这里提供的任何帮助!

干杯。

4

1 回答 1

1

使用nameUI 文件中的属性,您可以设置您希望<object>拥有的特定 Css 名称。为了使用这个自定义名称,您还需要在 Css#中的名称前面加上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>

这就是 Css 的样子(你已经有了这种方式):

#myBox { background-color: white; }
于 2021-12-02T16:29:01.463 回答