草庐IT

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

coder 2024-02-24 原文

在我的 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/

有关c++ - 在 gtk 文本字段中交换背景颜色 (gtkmm C++)的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  4. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  5. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  6. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  7. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  8. ruby-on-rails - 使用 Rmagick 或 ImageMagick 在背景上放置标题 - 2

    我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植

  9. ruby 诅咒颜色 - 2

    如何使用Ruby的默认Curses库获取颜色?所以像这样:puts"\e[0m\e[30;47mtest\e[0m"效果很好。在浅灰色背景上呈现漂亮的黑色。但是这个:#!/usr/bin/envrubyrequire'curses'Curses.noecho#donotshowtypedkeysCurses.init_screenCurses.stdscr.keypad(true)#enablearrowkeys(forpageup/down)Curses.stdscr.nodelay=1Curses.clearCurses.setpos(0,0)Curses.addstr"Hello

  10. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

随机推荐