問題タブ [qsplashscreen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Qt スプラッシュ スクリーンが表示されない
私はこのコードを持っています。スプラッシュ スクリーンが動作していることを確認できるように、一種のタイマーを作成したので、スプラッシュ スクリーンが大きくなるため、スプラッシュ スクリーンを表示したいと考えています。問題は、スプラッシュ スクリーンが表示されないことですが、スプラッシュ スクリーンが表示されていない間にコードが実行され、スプラッシュ スクリーンを表示せずにメイン ウィンドウに直接送られます。これが私のコードです。
main.cpp
スプラッシュウィンドウ.cpp
スプラッシュウィンドウ.h
コマンドは、実行される前にスプラッシュ画面が表示されず、表示されないように実行されますが、修正する方法が見つかりません。
[編集] クロージャーに対応するコードの一部が間違って配置されていましたが、正しく配置しても機能しません。
c++ - QSplashscreen を繰り返しクリックすると背景が黒くなる
QSplashscreen
アプリケーションでスプラッシュスクリーンを表示するために使用しています。通常、アプリケーションのロード中にスプラッシュ画面をクリックすると、スプラッシュ画面が消えます。ウィジェットの関数を呼び出すように作られているmousepressevent
ことがわかりました。Qsplashscreen
hide
しかし、スプラッシュスクリーンを繰り返しクリックすると、スプラッシュスクリーンの背景が黒くなり、クリックし続けると、アプリケーションが応答していないというメッセージが表示されることがあります。しかし、しばらくすると、アプリは正常に動作します。
スプラッシュスクリーンでマウスをクリックすると黒い背景が表示されることがあるのはなぜですか? 私が使用しているQtのバージョンは4.8.5です
c++ - スレッドからスプラッシュ スクリーンを再描画する / アサーションを無効にする
問題
QTimer
を使用して、プログレス バーを描画する派生を更新しQSplashScreen
(ウィジェットではなくペイント コマンドを使用)、プログラムの実行開始時期を予測したいと考えています。
必然的に、これは のexec
呼び出しの前に発生しQCoreApplication
ます。これをX11 と Windowsの両方で (リリース モードでのみ) 動作させるには、2 番目のスレッドにタイマーを配置し、スプラッシュ スクリーンで進行状況を更新してウィジェットを再描画する関数を呼び出します。ただし、次のエラーが発生するため、これはデバッグ モードでは機能しません。
"ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread."
コードはリリース時にクラッシュせず、スプラッシュ画面にすぎないため、このアサーションについてはあまり心配していませんが、プログラムをデバッグで実行できるようにする必要があるため、次のいずれかを行いたいと思います a) コードをリファクタリングするアサーションをトリガーしないか、b) この特定のアサーションを無効にします。
試した:
update()
の代わりに使用しrepaint()
ます。finish
これはアサーションを引き起こしませんが、メインスレッドが共有ライブラリなどでロードするのにビジーであり、スプラッシュ画面で呼び出す準備ができるまでタイマーイベントが処理されないため、再描画もされません.QTimer
メインループから開始。上記と同じ結果です。- を使用し
QT::QueuedConnection
ます。同じ結果です。
主要
スプラッシュスクリーン
MyMainWindow
c++ - 最初の show() の後に QSplashScreen にウィジェットを追加する方法は?
したがって、私の意図したプログラムの流れは次のとおりです。
- インスタンスを作成し
show()
QSplashScreen
ます。 - i18n モジュールを含むシステムの他の部分を初期化する
- (翻訳された) 著作権表示 (
QLabel
) をQSplashScreen
インスタンスに追加します。
問題はhide()
、スプラッシュ スクリーンを呼び出さない限り、 を呼び出しQApplication::processEvents
、 を追加してからスプラッシュ スクリーンQLabel
を再表示しないshow()
と、明らかに大きなちらつきが発生し、QLabel
レンダリングされないことです。
つまり、次のように書いただけでは通知が表示されません。
上記の前に
pSplashNotice
スプラッシュ スクリーンを非表示にせずにレンダリングするにはどうすればよいですか?
c++ - QSplashscreen の位置を制御するには?
さまざまなシナリオで 3 つのスプラッシュ スクリーンを使用するアプリケーションがあります。問題は、これらの QSplashScreen のジオメトリまたは配置を設定できないように見えることです。実際、アプリケーションのサイズが変更されたり、画面上のアプリケーションの位置が変更されたりすると、スプラッシュがランダムな位置に制御不能に表示されます。どうすればそれを制御できますか?
qt - QSplashScreen をアプリケーションで動作させる
ドキュメントには、次のコードを提供する例があります。これは非常に単純なようです。
QApplication を使用してエンジンを作成し、次のように QML ファイルを開きます。
また、ドキュメントから、ファイルの URL を引数として渡さずに、例のように QMainWindow の方法を実際に理解することはできません (そのような関数はありません)。QMainWindow などから派生した C++ クラスを作成する必要がありますか? それとも、別の重要なポイントがありませんか? さらに、QSplashScreen を機能させるための他の提案についても満足しています。