2012-05-19 77 views

回答

4

是的,只是檢查出QPainter::save()QPainter::restore()

如果要在多個QPainters的使用壽命之間進行保存/恢復,則必須手動完成。您可以創建封裝畫家狀態(筆,畫筆,變換等)的類PainterState,然後存儲QStack<PainterState>

有一個QPainterState類,但它僅供內部使用,我認爲它只能用於單個QPainter。如果您對QPainterState成員感興趣,請參閱源代碼(「qpainter_p.h」)(太多無法在此複製)。

+0

所以,當我開始()在一個新的設備上,保存的狀態將仍然存在? save()begin()restore()會做這個工作嗎? – feverzsj

+0

@feverzsj我不這麼認爲。如果您使用多個設備,則必須自己管理狀態。但是,正如我所說,創建自己的'QStack '應該很容易。 – Anthony

0

構建QPainter對象時,可以將其繪製到QPicture。然後它可以在需要時重新加載並繪製到真正的QPaintDevice上。

QPicture picture; 
QPainter painterQueued; 
painterQueued.begin(&picture);   // paint in picture 
painterQueued.drawEllipse(10,20, 80,70); // draw an ellipse 
painterQueued.end();      // painting done 

QImage myImage; 
QPainter painterTarget; 
painterTarget.begin(&myImage);    // paint in myImage 
painterTarget.drawPicture(0, 0, picture); // draw the picture at (0,0) 
painterTarget.end();       // painting done 

您可以在列表,堆棧等中排列許多QPicture對象,並在需要時重播它們。

相關問題