0

QsplashScreen に PNG ファイルを描画しようとしています。経由でやろうとしていQPainterます。経由QPainterでやりたいのは、(消えるまで)スムーズに最小化したいからです。繰り返しているだけでは、まったく滑らかに見えません。

をコンストラクタに渡しましたQSplashScreen。e as パラメータを使用QPainterして begin() を呼び出すと、 assert で失敗します。を供給した場合も同様です。QPainterQSplashScreend->activeQpixmap

私は何を間違っていますか?QPainterの begin()を開始するにはどうすればよいですか?

4

2 に答える 2

5

のサブクラスを作成してQSplashScreen再実装したいdrawContentsドキュメントを参照してください。

彼らがあなたに与えるペインターを使用してください。

于 2010-01-20T15:13:23.353 に答える
0

具体的には、の使用QPainterについて、beginメソッドのドキュメントには、特定のペイントデバイスで一度にアクティブにできるのは1人のペインターのみであり、コンストラクターバージョンのQPainter自動呼び出しの使用は、渡された値に対して開始されることが明記されています。あなたの質問で説明されているようにそれを行う、次のように:

QWidget *widget( ... );

QPainter painter( widget );
painter.begin( widget ); // <-- error, we already have a painter active on that paint device (our own).
// Do stuff...
painter.end();

Qtが最初にデバイスを閉じてから新しいデバイスを開く必要がある可能性がありますが、上記のようなコードは、動作を完全に理解していないことを意味しますQPainter。ほとんどの場合、デバイスをコンストラクターに渡すバージョンを使用する必要があり、beginまたはを呼び出す必要はありませんend。(場合によっては、ペインターを長期間保持し、特にその上で使用するbeginことendがあります。その場合は、デバイスに初期化するべきではありません。)

于 2010-01-20T19:19:39.247 に答える