gpt4 book ai didi

c++ - 在 gtk 文本字段中交换背景颜色 (gtkmm C++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:04 26 4
gpt4 key购买 nike

在我的 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 方式完成。

最佳答案

您可以取消 CSS,只使用 override_background_color ,一个标准的 GTK 小部件方法:

override_background_color (StateFlags state, RGBA color)

设置用于小部件的背景颜色。

所有其他样式值保持不变。

注意:此 API 主要用作应用程序更改小部件外观的快速方法。如果您正在开发小部件库并希望此更改可主题化,最好通过 add_classadd_region 在小部件/容器实现中设置有意义的 CSS 类和区域来完成.

这样,您的小部件库可以安装一个具有 STYLE_PROVIDER_PRIORITY_FALLBACK 优先级的 CssProvider,以便为那些需要的小部件提供默认样式,并且这个主题可以完全被用户的主题覆盖。

注意:请注意,对于复杂的小部件,这可能会带来不希望的结果(例如到处都是统一的背景颜色),在这些情况下,最好通过具有 STYLE_PROVIDER_PRIORITY_APPLICATION 优先权。

参数:

  • StateFlags state设置背景颜色的状态
  • RGBA color要分配的颜色,或为 null 以撤消先前调用 override_background_color
  • 的效果

关于c++ - 在 gtk 文本字段中交换背景颜色 (gtkmm C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com