0

我正在 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% 的不透明度淡入“复选标记”图标几秒钟,因此用户知道备份已完成。我无法使用其他方式来指示备份已完成。那是规范。

4

1 回答 1

1

当您调用 时setWindowFlags,您将删除除参数中指定的标志之外的所有窗口标志。所以Qt.SplashScreen标志被删除,窗口不再是闪屏。

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

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)
于 2013-08-11T08:42:25.137 回答