在我的GUI(C++,GTKMM 3)中,我有一個文本字段提供了一些狀態信息。我想根據狀態更改該字段的背景顏色(以及我可以輕鬆完成的文本)。在gtk文本字段中交換背景顏色(gtkmm C++)
有沒有很多關於如何使用GTKMM 3.X做到這一點。我知道我需要使用CssProvider類,並找到了一些關於如何將一個加載到程序中的例子。但示例顯示瞭如何設置屬性一次。
但我沒有想出的是我如何使用CSS屬性來改變背景的顏色,基於一個狀態(而不是像'懸停'或類似的狀態。我想成爲只要我願意,可以將背景從紅色交換到綠色)。如果CSS是使用小部件名稱或小部件類型編寫的,那麼如何處理小部件更改狀態以更改其屬性?
如果任何人有任何線索,或知道任何例子,我真的可以使用一些幫助。這樣做的目的是一目瞭然地給用戶一些即時反饋。匆忙中,他們不必閱讀箱子的狀態(或從遠處看)。顏色可以讓他們一眼就看出發生了什麼。
添加代碼
這是我迄今(濃縮)的嘗試:
std::string style_sheet = ".red_bg {background: #FF0000; color: #000000; } ";
style_sheet += ".green_bg {background: #33FF33; color: #000000; }";
Glib::RefPtr<Gtk::StyleContext> stylecontext = my_text_field->get_style_context();
Glib::RefPtr<Gtk::CssProvider> cssprov = Gtk::CssProvider::create();
cssprov->load_from_data(style_sheet);
stylecontext->add_provider(cssprov, GTK_STYLE_PROVIDER_PRIORITY_USER);
stylecontext->add_class("red_bg");
stylecontext->context_save();
使作品。當程序啓動時,我得到一個紅色背景的文本輸入。
但後來,如果我做到以下幾點,什麼都不會發生:
Glib::RefPtr<Gtk::StyleContext>stylecontext = my_text_field->get_style_context();
stylecontext->remove_class("red_bg");
stylecontext->context_save(); // probably not necessary
stylecontext->add_class("green_bg");
stylecontext->context_save();
在這一點上,背景一直顯示爲紅色。沒有從紅色過渡到綠色。我見過在GtkWidget對象中使用override_background_color函數的建議,但這不起作用。只會改變當您突出顯示小部件中的文本時使用的顏色。我仍然希望看到它完成CSS方式。
我想通了解如何更改背景(在css文件中使用「背景」,而不是「背景色」)。但我似乎無法來回切換背景顏色。 – jasonmclose
你可以分享一些你到目前爲止的代碼嗎? – alf
增加了我到目前爲止的基本輪廓。 – jasonmclose