我正在使用 GTK+ v2.24 制作一个跨平台程序,在完成大量工作后,我遇到了一个问题。这就是我正在尝试做的:
1) 在 GtkEntry 中按下回车键,触发一个事件(通过“激活”信号完成);
2) 使一个对话框出现一个简单的消息,没有按钮;
3) 使对话框在 1 秒后以淡出效果消失。
注意:当对话框出现然后淡出时,主顶层窗口应该继续工作(因为我有一个视频源在其中运行)。
我在互联网上搜索过,但无济于事。我希望这里的天才可以帮助我解决这个问题。谢谢!
编辑:我已经找到了 this question ,但它是关于 GTK# 的,我无法将其转换为 GTK+。
最佳答案
我将尝试详细说明 the linked answer .一些基础知识:
gtk_widget_get_snapshot
将实时小部件转换为包含小部件内容的图片。这张照片是您将要淡出的。Cairo是实现各种绘图基元的图形 API,including transparency . Cairo 也用于所有 GTK 绘图,因此每个 GTK 应用程序都已经依赖于 cairo,并且 cairo 很容易挂接到 GTK。
淡出动画可以分为三个步骤:
使用
GTK_WINDOW_POPUP
弹出一个顶层窗口,将内容插入其中并旋转主循环以绘制它。使用gtk_widget_get_snapshot
获取小部件的图像并将其存储在一旁。删除显示对话框内容的小部件并将其替换为继承自
<GtkDrawingArea
并显示您在侧面设置的图像的自定义小部件。安排一个超时函数,使用 cairo 一次一步逐渐淡出像素图,每次也将绘图区域标记为脏,以便重新绘制越来越褪色的像素图。返回主循环,让动画播放。
一秒过去后,销毁顶层窗口。
关于c++ - 在 GTK+ 2.24 中,创建具有淡出效果的临时对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16239129/