2012-01-21 83 views
5

我试图将按钮的背景颜色更改为红色,但似乎不起作用。 我粘贴示例代码。 如果有人能告诉我如何解决我的代码请帮助。gtk(mm)3按钮背景颜色变化

#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; 
} 

UPDATE: 确定这里就是我如何解决:

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)); 
} 
+1

我看不出有什么错误的代码,我认为它最有可能与你的主题做的。如果你可以设置默认主题,你可以看到按钮颜色的变化。 –

+0

我不认为gtk3主题可以阻止要更改的按钮的背景 – giuspen

+0

按钮的背景至少可以更改最新版本。让我工作的关键是在添加提供者时指定GTK_STYLE_PROVIDER_PRIORITY_USER。否则背景图像似乎优先于背景色 –

回答

0

我有C++的经验,但我使用Python ,在Python中你必须这样做:

button.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(1.0 , 0.0 , 0.0, 1.0)) 

也许在C++中,你不得不这样做

button.override_background_color(GTK_STATE_FLAGS_NORMAL, Gdk::RGBA(1.0 , 0.0 , 0.0, 1.0)); 
+0

嗨,谢谢你的回复。我们发现问题是全部在主题中,唯一的方法是使用一个CSS并加载它。我将搜索解决方案并用结果更新问题。 – giuspen