GUI (C++、GTKMM 3) 内に、ステータス情報を提供するテキスト フィールドがあります。ステータスに基づいて、このフィールドの背景色を(テキストとともに、簡単に変更できます)変更したいと思います。
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の方法で行われるのを見たいと思っています.