将 css 样式应用于 Gtk::ToolButton 不适用于 gtkmm 中的选择器

Posted

技术标签:

【中文标题】将 css 样式应用于 Gtk::ToolButton 不适用于 gtkmm 中的选择器【英文标题】:Applying css style to Gtk::ToolButton is not working with a selector in gtkmm 【发布时间】:2020-05-07 16:13:17 【问题描述】:

我正在尝试在 gtkmm-3.0 中设置应用程序范围的 css 样式。这就是我初始化和加载样式的方式:

#include "MainWindow.h"

#include <string>
#include <iostream>

const std::string style = R"(
    toolbutton 
        border-color : #000000;
        border-width : 1px;
        border-radius: 0px;
    
)";

void loadStyle()

    try
    
        auto css = Gtk::CssProvider::create();

        css->load_from_data(style);

        Gtk::StyleContext::add_provider_for_screen(
            Gdk::Screen::get_default(), css,
            GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
        );
    
    catch(const Gtk::CssProviderError error)
    
        std::cerr << "Failed to load style:" <<error.code() << std::endl;
    


int main(int argc, char *argv[])

    auto app = Gtk::Application::create(argc, argv,"com.test");

    loadStyle();

    MainWindow window(800, 600);
    window.show_all();

    return app->run(window);

MainWindow 只是一个 Gtk::Window,它有一个 Gtk::Toolbar 和几个 Gtk::ToolButton。

但由于某种原因,该样式根本没有应用到我的 ToolButton 上。如果我将样式表选择器更改为“选择所有元素”,它将应用于我的工具按钮:

* 
        border-color : #000000;
        border-width : 1px;
        border-radius: 0px;

所以我假设我的代码是正确的,而我的样式表中的选择器是错误的。 但是文档说 GtkToolButton 有一个名为 toolbutton 的 CSS 节点。 我目前没有使用set_nameadd_class 自己设置任何名称或类。

我做错了什么?

【问题讨论】:

【参考方案1】:

当我们创建 Gtktoolbutton 时,它实际上是在使用 Gtkbutton。

如果你在你的css中添加

toolbutton button 

它会起作用的。

gtkcss 学习起来可能有点令人困惑,因为你找不到合适的文档(好吧,我找不到非常详细的文档等等).. 最好使用 GtkInspector 来调试 gtk css..

【讨论】:

非常感谢,这确实是问题所在。这是应该在文档中提到的那种东西。

以上是关于将 css 样式应用于 Gtk::ToolButton 不适用于 gtkmm 中的选择器的主要内容,如果未能解决你的问题,请参考以下文章

将 CSS 样式应用于子元素

根据子元素将CSS样式应用于元素[重复]

如何使用 $(element).css(styles) 将多个样式应用于 div? [复制]

停止将 CSS 'a' 样式应用于链接的图像

我可以将样式应用于 CSS 或 Sass 中的所有伪选择器吗?

CSS 用于将常规样式应用于所有输入类型按钮