1)在GtkEntry中按Enter键,触发一个事件(使用“activate”信号完成);
2)出现一个简单的消息对话框,没有任何按钮;
3)让对话框在1秒钟后以淡出效果消失。
注意:当对话框出现并然后消失时,主顶层窗口应继续工作(因为我在其中运行视频源)。
我在互联网上搜索了很久,但没有结果。我希望这里的天才们能够帮助我解决这个问题。谢谢!
编辑:我已经找到了这个问题,但它是关于GTK#的,我无法将其转换为GTK+。
注意:当对话框出现并然后消失时,主顶层窗口应继续工作(因为我在其中运行视频源)。
我在互联网上搜索了很久,但没有结果。我希望这里的天才们能够帮助我解决这个问题。谢谢!
编辑:我已经找到了这个问题,但它是关于GTK#的,我无法将其转换为GTK+。
虽然我正在回答自己的问题(因此不接受@ user4815162342的回答),但这并不意味着他的回答是错误的,也不意味着它对我没有用或我的回答更好。我只是由于缺乏技能和时间而无法解决它(实际上,我从@ user4815162342的建议中获得了我的结果!)。
所以我是这样做的:
1)使用GTK_WINDOW_POPUP创建弹出窗口;
2)设置弹出窗口的位置为居中,背景颜色、透明度和大小不同;
3)创建标签并将其添加到CONTAINER(弹出窗口);
4)使用gtk_timeout_add(timeInMS, fadeOutCallback, popup);
将弹出窗口连接到超时;
5)像这样创建回调函数:
int MyClass::fadeOutCallback(gpointer caller)
{
gtk_window_set_opacity(GTK_WINDOW(caller), gtk_window_get_opacity(GTK_WINDOW(caller)) - 0.03); //The 0.03 makes the rate at fading out
if(gtk_window_get_opacity(GTK_WINDOW(caller)) == 0) //When the popup is completly opaque
{
gtk_widget_hide(GTK_WIDGET(caller));
gtk_widget_destroy(GTK_WIDGET(caller));
return false; //stop the timer
}
return true; //Keeps on calling the callback until the timer reaches timeInMS
}
可能有更好的方法来完成我想要的事情,但这个方法很有效,即使在播放背景视频时也是如此。 希望这可以帮助任何人。(再次感谢@user4815162342的建议!)
我将尝试详细说明链接的答案。一些基础知识:
gtk_widget_get_snapshot
将一个活动的窗口小部件转换为包含该窗口小部件内容的图片。这个图片就是你将要淡出的内容。
Cairo是一个图形API,实现了各种绘图原语,包括透明度。Cairo也用于所有GTK绘图,因此每个GTK应用程序已经依赖于cairo,并且cairo易于与GTK集成。
淡出动画可以分为三个步骤:
使用GTK_WINDOW_POPUP
弹出顶层窗口,在其中插入内容并旋转主循环以使其绘制。使用gtk_widget_get_snapshot
获取窗口小部件的图像并存储在旁边。
删除显示对话框内容的窗口小部件,并替换为从GtkDrawingArea
继承并显示你设置在旁边的图像的自定义窗口小部件。
安排一个超时函数,使用cairo逐步淡化像素图一步一步地进行,每次还会标记绘图区域为脏,以便越来越模糊的像素图被重新绘制。返回主循环,让动画播放。
经过两秒后,销毁顶层窗口。