c++ - gtk(mm) 3 按钮背景颜色变化

标签 c++ gtkmm

我试图将按钮的背景颜色更改为红色,但它似乎不起作用。 我粘贴示例代码。 如果有人可以告诉我如何修复我的代码,请帮忙。

#include <gtkmm.h>

// g++ simple.cc -o simple `pkg-config gtkmm-3.0 --cflags --libs`

int  main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);
    Gtk::Window  window;
    Gtk::Button  button("TEST");
    button.override_background_color(Gdk::RGBA("red"));
    window.add(button);
    window.show_all();
    Gtk::Main::run(window);
    return EXIT_SUCCESS;
}

更新: 好的,我是这样解决的:

mr_screen = Gdk::Screen::get_default();
mr_style_context = mp_window->get_style_context();
mr_css_provider = Gtk::CssProvider::create();
mr_css_provider->load_from_path(Glib::build_filename(m_glade_dir_path, "filename.css"));
mr_style_context->add_provider_for_screen(mr_screen, mr_css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

而filename.css的内容是:

column-header .button {
    background-image: -gtk-gradient (linear,
        left top,
        left bottom,
        from (#51cccc),
        color-stop (0.5, darker (#51cccc)),
        to (#51cccc));
}

最佳答案

事实上,我通过艰难的方式了解到,CssProvider 是处理此类事情的正确方法。你不需要使用 glade,甚至更好的是在你的代码中有 css,就像这样

#include <gtkmm.h>

Gtk::Button* button = new Gtk::Button("Test");
Glib::RefPtr<Gtk::CssProvider> css_provider = Gtk::CssProvider::create();
css_provider->load_from_data(
    "button {background-image: image(cyan);}\
     button:hover {background-image: image(green);}\
     button:active {background-image: image(brown);}");
button->get_style_context()->add_provider(
    css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

您必须处理背景图像,因为背景颜色与默认背景图像重叠,因此不会改变。 我的智慧来自Ruby-GNOME2

关于c++ - gtk(mm) 3 按钮背景颜色变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952679/

相关文章:

c++ - boost::filesystem::path 只给出第一个字符

c++ - 强制资源从非 mfc 应用程序中的 dll 加载的 WTL 方式? (我们使用的是 WTL/ATL,而不是直接的 win32)

c++ - gRPC:在 C++ 中关闭异步服务器的推荐方法是什么?

c++ - 在 C++ 中实现 GObject 接口(interface)

c++ - Gtk 进度条高度

c++ - 实现自定义 Gtkmm 小部件 : what should I return in the virtual on_* functions?

c++ - 有没有办法将 C++11 代码重构为可以由功能较弱的编译器编译的 C++ 代码?

c++ - 删除作为公共(public)类成员的指针

c++ - 调用 const 成员函数

c++ - Gtksourceviewmm 语法突出显示不起作用