簡體   English   中英

調用開始時QPainter失敗

[英]QPainter fails when calling begin

我正在嘗試在QsplashScreen上繪制PNG文件。 我正在嘗試通過QPainter做到這一點。 我想通過QPainter進行此操作的原因是因為我希望其平滑地最小化(直到消失),當我重新對其進行修補時,它看起來一點也不平滑。

我將QSplashScreen傳遞給QPainter構造函數。 當我使用QSplashScreen作為參數在QPainter調用begin()時,它在斷言d->active上失敗。 當我提供Qpixmap時,它以相同的方式發生。

我究竟做錯了什么? 我應該如何啟動QPainter的begin()?

您要創建QSplashScreen的子類並重新實現drawContents 請參閱文檔

使用他們給您的畫家,您會沒事的。

特別是關於使用QPainterbegin方法的文檔清楚地指出,一次只能在給定的繪畫設備上激活一個繪畫者,並且使用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工作原理。 您幾乎應該始終使用將設備傳遞給構造函數的版本,並且永遠不需要調用beginend (有時,您可能需要長時間保留繪畫者,並且特別要在其上使用beginend -在這種情況下,您不應該將其初始化到設備上。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM