【问题标题】:Animation on screen without a taskbar item没有任务栏项目的屏幕动画
【发布时间】:2013-08-11 08:35:20
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    如果你以后需要动态添加Qt.WindowStaysOnTopHint,你可以这样做

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多