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