没有任务栏项目的屏幕上的动画

时间:2013-08-11 08:35:21

标签: qt animation pyside splash-screen always-on-top

我正在开发Qt项目(PySide,但欢迎任何Qt解决方案)。 我需要让图像淡入并随机动画。这样做了,但它创建了自己的任务栏项目(哎呀)! 代码:

self.img_Check = QPixmap("resources/checkmark.png")
self.lab = QSplashScreen(self.img_Check)
self.lab.setWindowFlags(Qt.WindowStaysOnTopHint)
self.lab.setMask(self.img_Check.mask())

如果我删除了setWindowFlags(Qt.WindowStaysOnTopHint),那么它可以正常工作,但它不是“永远在上面”,如果他正在使用其他应用程序,用户将看不到动画。

必须有一种方法可以在不创建菜单栏项的情况下制作始终在线的动画,但我不确定如何。我有一个QMainWindow,以防你好奇。

我尝试了大量的旗帜组合,我无法做到全部3: - 显示在其他Windows之上,如MS-Word。 - 不接管活动窗口状态。 - 此动画窗口没有显示任务栏项目。

背景信息:如果您好奇我为什么需要这样做,程序会在后台备份用户的文件,当一个人完成处理后,它会以50%不透明度的“复选标记”图标淡入淡出几秒钟,因此用户知道备份已完成。我不能用另一种方式表明备份已完成。这就是规范。

1 个答案:

答案 0 :(得分:1)

当您调用setWindowFlags时,除去您在参数中指定的标志外,将删除所有窗口标志。因此删除Qt.SplashScreen标志,窗口不再是启动画面。

您应该将Qt.WindowStaysOnTopHint指定为QSplashScreen构造函数的第二个参数。请参阅文档:

  

QSplashScreen :: QSplashScreen(const QPixmap& pixmap = QPixmap(),Qt :: WindowFlags f = 0)

     

除了Qt :: WindowStaysOnTopHint之外,不需要设置小部件标志f。

如果您以后需要动态添加Qt.WindowStaysOnTopHint,可以执行类似

的操作
self.lab.setWindowFlags(self.lab.windowFlags() | Qt.WindowStaysOnTopHint)

self.lab.setWindowFlags(Qt.SplashScreen | Qt.WindowStaysOnTopHint)