2012-01-21 80 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