[英]QPainter fails when calling begin
我正在嘗試在QsplashScreen上繪制PNG文件。 我正在嘗試通過QPainter
做到這一點。 我想通過QPainter
進行此操作的原因是因為我希望其平滑地最小化(直到消失),當我重新對其進行修補時,它看起來一點也不平滑。
我將QSplashScreen
傳遞給QPainter
構造函數。 當我使用QSplashScreen
作為參數在QPainter
調用begin()時,它在斷言d->active
上失敗。 當我提供Qpixmap
時,它以相同的方式發生。
我究竟做錯了什么? 我應該如何啟動QPainter
的begin()?
您要創建QSplashScreen
的子類並重新實現drawContents
。 請參閱文檔 。
使用他們給您的畫家,您會沒事的。
特別是關於使用QPainter
, begin
方法的文檔清楚地指出,一次只能在給定的繪畫設備上激活一個繪畫者,並且使用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
-在這種情況下,您不應該將其初始化到設備上。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.