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

在gtk文本字段中交换背景颜色(gtkmm C),第1张

概述在我的GUI(C,GTKMM 3)中,我有一个提供一些状态信息的文本字段.我想根据状态更改此字段的背景颜色(以及我可以轻松做的文本). 关于如何使用GTKMM 3.X进行此 *** 作并不是很多.我知道我需要使用CssProvider类,并找到了一些关于如何将一个加载到程序中的示例.但这些示例显示了如何一次设置属性. 但我还没想到的是我如何使用CSS属性来改变背景的颜色,基于状态(不是’悬停’或类似的东西 在我的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 necessarystylecontext->add_class("green_bg");stylecontext->context_save();

那时,背景保持红色.没有从红色到绿色的过渡.我已经看到了在GtkWidget对象中使用overrIDe_background_color函数的建议,但这不起作用.只会更改在窗口小部件中突出显示文本时使用的颜色.我仍然希望看到它完成CSS方式.

解决方法 你可以取消CSS并使用标准的GTK小部件方法 override_background_color:

overrIDe_background_color (StateFlags state,RGBA color)

设置用于窗口小部件的背景颜色.

所有其他样式值都保持不变.

注意:
此API主要用作应用程序更改窗口小部件外观的快捷方式.如果您正在开发一个小部件库并打算将此更改设为可主题,那么最好通过add_class和add_region在小部件/容器实现中设置有意义的CSS类和区域来完成.

这样,您的窗口小部件库可以安装具有STYLE_PROVIDER_PRIORITY_FALLBACK优先级的CssprovIDer,以便为需要这些窗口小部件的窗口小部件提供默认样式,并且这些主题可能会被用户的主题完全覆盖.

注意:
请注意,对于复杂的小部件,这可能会带来不希望的结果(例如到处都是统一的背景颜色),在这些情况下,最好通过具有STYLE_PROVIDER_PRIORITY_APPliCATION优先级的CssprovIDer完全设置此类小部件的样式.

参数:

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

总结

以上是内存溢出为你收集整理的在gtk文本字段中交换背景颜色(gtkmm C)全部内容,希望文章能够帮你解决在gtk文本字段中交换背景颜色(gtkmm C)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存