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 つすべてを行うことはできません。 - MS-Word など、他の Windows の上に表示します。- アクティブなウィンドウの状態を引き継がずに。- このアニメーションのウィンドウにはタスクバー項目が表示されません。

コンテキスト: なぜこれを行う必要があるのか​​知りたい場合に備えて、プログラムはユーザーのファイルをバックグラウンドでバックアップし、処理が完了すると、不透明度 50% の「チェックマーク」アイコンが数秒間フェード インします。ユーザーはバックアップが完了したことを知ることができます。バックアップが完了したことを示す別の方法は使用できません。それが仕様です。

4

1 に答える 1

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