2012-12-19 64 views
5

我在QGraphicsView內畫幾個矩形;我通過創建QBrush與我的QPixmap使用自定義點畫模式。如預期的那樣,這將以默認縮放級別顯示。如何使qt qgraphicsview縮放不影響點畫模式?

當我打電話view->scale()時,矩形顯示更大或更小,如我所料。然而Qt已經縮放了預計不到的點畫圖的各個位;我預計它會再次用刷子繪製更大或更小的矩形。例如, 如果我使用了一個像素點和像素空間的點畫模式,放大後,我想看到一個更大的矩形,但我想要相同的像素間隙相同的點畫模式。這可以實現嗎?謝謝。

回答

5

我在開發Qt中的EDA工具伴侶時遇到了同樣的問題。

經過一番嘗試,我做了什麼(似乎爲我工作)是創建一個自定義圖形項目。在繪畫方法上,我這樣做:

QBrush newBrush = brush_with_pattern; 
newBrush.setTransform(QTransform(painter->worldTransform().inverted())); 
painter->setBrush(newBrush); 

即將項目的反轉換應用到畫筆(所以它不縮放)。

我認爲setDashOffset只適用於形狀的邊界(而不是填充)。

+0

設置ItemIgnoresTransformations會不會做同樣的事情? – Schollii

0

您可以使用QPEN :: setDashOffset:

http://harmattan-dev.nokia.com/docs/library/html/qt4/qpen.html#setDashOffset

你需要設置偏移根據場景縮放/縮放水平。你可以通過調用scene()來獲取指向場景的指針,但是不要忘記檢查NULL,因爲當它沒有添加到場景時它將爲NULL(儘管理論上不應該得到paint()當不在場景中時)。

另一種選擇是使用:

http://doc.qt.digia.com/qt/qpainter.html#scale

要撤消縮放您畫家的意見。

+0

感謝您的回覆。我想我沒有解釋清楚。我想要縮放矩形的大小,但點畫模式保持不變。 – Kaniyan

+0

使用setDashOffset應該達到這個結果,例如在100%的破折號偏移量可能是1,所以在50%,你可以改變它0.5和模式應該看起來相同(但矩形會小兩倍)。 – paulm

+0

我使用QBrush來設置點畫模式。我正在尋找一個*刷子的偏移方法。看不到。 – Kaniyan

0

如果有人仍然在尋找這個問題,a related question here關於縮放標準填充圖案而不是像素圖填充圖案可能會有幫助。基本上,可能無法修改標準填充模式的縮放比例(列出了一些解決方法的想法),但如果您正在尋找各種顏色(尤其是灰度級別),則使用alpha值會產生所需的效果 - 而且遠不及令人費解的。