2012-09-17 40 views
3

我想設計一個新的QIcon,並希望它看起來像一個圓角矩形固定文本週圍繪圖使用QPainter

.-----. 
| Phy | 
`-----´ 

的圖標應該沒有「像素塊規模可伸縮的QIcon 「在QPainter上繪畫時最終會應用比例變換(例如,當我繪製爲QGraphicsView的一部分並在其場景中應用比例時)的效果。

因此,我很難知道我應該如何畫我的QIcon。如果我在下面的方式做到這一點,我會畫畫總是有像素的固定金額的QPixmap,從而不可避免地引入像素塊效果時,規模足夠

void MyWidget::drawIcon(QPainter *painter, QPoint pos) { 
    QPixmap pixmap = icon.pixmap(QSize(22, 22), 
            isEnabled() ? QIcon::Normal 
               : QIcon::Disabled, 
            isChecked() ? QIcon::On 
               : QIcon::Off); 
    painter->drawPixmap(pos, pixmap); 
} 

大我所尋找的是這與QFont與drawText的工作方式類似。無論我的規模有多大,當我繪製字體時,它總是看起來很清晰,我無法檢測到單個像素。

我想,我可以告訴QPainter畫我的圖標變成一個給定的像素矩形,QPainter變換矩形本身讓我QIconEngine::paint使項目成爲可能較大的矩形或像素圖之前。但我看不出如何做到這樣的事情。

我只是很愚蠢,沒有看到明顯的解決方案?

回答

2

我確實完全傾倒。我可以使用QIcon::paint並將其傳遞給矩形。它會正確地將請求委託給圖標引擎。

1

我這樣做是通過創建我的圖標/圖像作爲SVG文件,並使用QSvgRenderer將它們繪製到QPainter上。所需的課程在SVG module

+0

我可以使用qpicture嗎? –

+0

要創建可縮放的圖形?大概是這樣的,因爲它'重播'QPainter命令,不知道它與'QSvg'類相比有多高效。 – cmannett85

+0

我剛剛找到合適的解決方案:只需使用QIcon的繪畫功能就足夠了。 –