2017-04-24 54 views
0

我有一個QImage代表一張空白紙和一張QPainter,用於在此圖像上繪製。 有時候,我會在任何繪畫操作之前旋轉/翻譯QPainter,以便以「風景」方向繪製該圖像。將旋轉的QPainter剪輯繪製到QImage的不正確區域

下面是代碼的簡化片斷:

_image = new QImage(paperRect().size(), QImage::Format_RGB888); 
_painter->begin(_image); 

if (_orientation == QPrinter::Landscape) 
{ 
    _painter->translate(0, _image->height()); 
    _painter->rotate(270); 
} 

// Painting operations here. 

不幸的是,我曾預計這是行不通的。看起來,儘管畫家已經旋轉過,但它並不知道它可以畫的「新」邊界,從而裁剪成「肖像」的大小。

我試過以下無效:關閉剪輯(_painter->setClipping(false);),設置新的剪輯矩形(_painter->setClipRect(0, 0, _image.height(), _image.width());),並以各種方式調整窗口和視口。

我已經瀏覽了QPainter和QImage的文檔,並搜索了互聯網,但我還沒有發現此前討論過的這個特定問題。

+0

好像你遇到了Qt錯誤。 –

+0

一個bug會隱含現有代碼的問題,這看起來更像是代碼中缺少的場景考慮。 – dtech

+0

'paperRect()。size()'的值是什麼?如果仍然設置爲縱向格式(例如,A4尺寸爲210x294毫米),這可以解釋很多。 – JvO

回答

0

事實證明,這個問題與我發佈的代碼無關。這是我的解決方案,以防將來遇到任何人遇到此問題。

這個問題最初是在實現一個定製的QPrintEngine/QPaintEngine類的過程中產生的。問題中發佈的代碼工作 - 但是,我忘記了更新QPrintEngine::property()函數以返回對應於PPK_PageRectPPK_PaperRect鍵的新維度,當方向設置爲橫向時。

注意,QPrintEngine::metric()功能確實看起來需要以這種方式進行更新(在我的項目)。我假設這是因爲當使用QPrintEngine實現的QPrinter被用作繪畫設備時,主要使用metric函數,並且這在我的項目中從未發生過。

在任何情況下,解決這個問題都允許QImage在「側面」上正確繪製。