Gtkmm3:等待css转换完成 我的问题不涉及JavaScript,但是C++:

Gtkmm3:等待css转换完成 我的问题不涉及JavaScript,但是C++:,c++,css,gtkmm3,C++,Css,Gtkmm3,在gtkmm3中,应用程序外观由CSS管理,因此可以如下设置转换: theme.css: main.cc: //创建和定义样式上下文 CssProvider=Gtk::CssProvider::create(); CssProvider->load_from_path(Glib::build_文件名(UI_DIR,“theme.css”); Glib::RefPtr ButtonContext=button->get_style_context(); 按钮文本->添加提供程序(CssProvid

在gtkmm3中,应用程序外观由CSS管理,因此可以如下设置转换:

theme.css:

main.cc:

//创建和定义样式上下文
CssProvider=Gtk::CssProvider::create();
CssProvider->load_from_path(Glib::build_文件名(UI_DIR,“theme.css”);
Glib::RefPtr ButtonContext=button->get_style_context();
按钮文本->添加提供程序(CssProvider,
GTK_样式_提供程序_优先级_应用程序);
//指定新颜色
按钮文本->添加类(“紫色”);
//指定中间颜色
按钮文本->删除_类(“紫色”);
按钮上下文->添加类(“绿色”);
//做某事
// ... ...
//再换一次颜色
按钮文本->删除类(“绿色”);
按钮文本->添加类(“黄色”)
使用此代码,用户只看到按钮的“黄色”状态,而不看到之前的状态,因为跳过了转换。 如何依次显示所有颜色变化

编辑:

我的应用程序是一个游戏,其中按钮的颜色根据其标签而定。这个标签可以非常紧密地多次更改,我希望用户能够看到这些更改,从而看到每个状态之间的转换。因此,它不仅仅是一个flash(我的示例并不完美,如果您想要应用程序的全部代码,您可以得到它)

编辑2:


为了更好地解释我的问题,我修改了上面的代码和下面的句子。

你想让按钮短暂地闪成紫色吗?如果是这样,您可以将超时设置为您希望按钮闪烁的正确时间量。

我将我的问题编辑得更精确(您的答案不能解决我的问题),我认为可以。例如,如果您将超时设置为1050毫秒,那么您将获得500毫秒的紫色转换、50毫秒的紫色闪烁,以及500毫秒的恢复到原始颜色的转换。同样,我不希望按钮闪烁。我希望它等到CSS转换结束后再更改颜色。它可以是多个连续的颜色变化,在所有情况下,我希望用户看到这些连续的变化(而不仅仅是最后一种颜色,因为它是暂时的)。Glib::signal timeout并不是我问题的解决方案(我已经测试过了)。我花了很长时间学习如何使用它,但最后,我成功地使用了
Glib::signal\u timeout().connect()
。谢谢你,很抱歉我花了这么长时间才接受你的回答!
.purple {
transition: 500ms linear;
background-image: -gtk-gradient (radial,
    center center, 0,
    center center, 1,
    from (#FFB2E8),
    to (#80005A));
 }
   // Create and define the StyleContext
   CssProvider = Gtk::CssProvider::create();
   CssProvider->load_from_path (Glib::build_filename (UI_DIR, "theme.css"));
   Glib::RefPtr<Gtk::StyleContext> ButtonContext = button->get_style_context ();
   ButtonContext->add_provider (CssProvider,
                                GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
   // Assign new color
   ButtonContext->add_class ("purple");
   // Assign an intermediate color
   ButtonContext->remove_class ("purple");
   ButtonContexy->add_class ("green");
   // To something
   // ... ...
   // Change the color again
   ButtonContext->remove_class ("green");
   ButtonContext->add_class ("yellow")