将css样式应用到Gtk::ToolButton上,但在gtkmm中的选择器却无法使用。

问题描述 投票:0回答:1

我试图在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.

我到底做错了什么?

c++ css gtk gtkmm gtkmm3
1个回答
2
投票

当我们创建Gtktoolbutton时,它实际上使用的是Gtkbutton。enter image description here

所以在你的css中如果你添加

toolbutton button {

它可以工作。

gtkcss的学习可能有点混乱,因为你找不到合适的文档(好吧,我无法找到一个非常详细的文档和所有)......最好使用GtkInspector来调试gtk css。

© www.soinside.com 2019 - 2024. All rights reserved.