在GTK+ 2.24中,创建带有淡出效果的临时对话框
In GTK+ 2.24, create temporary dialog with fade out effect
我正在用GTK+ v2.24制作一个跨平台程序,在做了很多事情之后,我遇到了一个问题。这就是我想要做的:
1)在GtkEntry中按enter键,触发一个事件(用"activate"信号完成);
2)让一个对话框出现一个简单的消息,没有按钮;
3)使对话框在1秒后消失。
注意:当对话框出现然后淡出时,主顶层窗口应该继续工作(因为我有一个视频馈送在里面运行)。
我在网上找遍了,但是一无所获。我希望这里的天才们能帮我解决这个问题。谢谢你!
编辑:我已经发现了这个问题,但它是关于GTK#的,我无法将其转换为GTK+。
我将尽量详细说明链接的答案。一些基础知识:
-
gtk_widget_get_snapshot
将活动的小部件转换为包含该小部件内容的图片。这张图片是你要淡出的。 -
Cairo是一个图形API,它实现了各种绘图原语,包括透明度。Cairo还用于所有GTK绘图,因此每个GTK应用程序都已经依赖于Cairo,并且Cairo很容易与GTK挂钩。
淡出动画可以分三步完成:
-
弹出
GTK_WINDOW_POPUP
的顶层窗口,插入内容并旋转主循环,使其被绘制。使用gtk_widget_get_snapshot
获取小部件的图像并将其存储在一边 -
删除显示对话框内容的小部件,并将其替换为继承自
GtkDrawingArea
的自定义小部件,并显示您在一侧设置的图像。 -
调度一个超时函数,该函数使用cairo一步一步地逐渐淡出像素图,每次也将绘图区域标记为脏,以便重新绘制越来越褪色的像素图。返回到主循环,让动画播放。
第二个窗口结束后,销毁顶层窗口
虽然我在回答我自己的问题(因此不接受@user4815162342的一个),但并不意味着他是错的,它不适合我,我的答案也更好。由于缺乏技能和时间,我无法解决这个问题(实际上我从@user4815162342的建议中得到了我的结果!)。我是这样做的:
1)使用GTK_WINDOW_POPUP;
创建弹出窗口2)设置弹出框的位置居中,使用不同的背景颜色、不透明度级别和大小;
3)创建一个标签并添加到CONTAINER(popup);
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!)。
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 当对话框被接受时,如何用参数调用槽
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何多次询问来自QML对话框的输入?
- 选择文件对话框错误
- 自定义对话框(源自QDialog)不会关闭(Android)
- 如何在 MFC 对话框中使用 OnDraw
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 从资源视图访问对话框时出现问题
- 如何检测窗口当前是否正在运行模式对话框?
- "最小化"按钮不会出现在 MFC 对话框中
- 如何获取QNetworkConfiguration UserChoice对话框?
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何在 VC6 中的对话框中将图标设置为按钮
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在 Win32 应用中,如果未选择文件夹并且用户单击"确定",则文件夹选择对话框将关闭
- 在主窗口之前显示登录对话框并隐藏主窗口按钮
- 找不到没有具有类名 #32770 的窗口名称的父窗口的子窗口(对话框)
- 如何在主窗口标签的对话框中显示QLineEdit的输入
- 在GTK+ 2.24中,创建带有淡出效果的临时对话框