2012-09-17 41 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的绘画功能就足够了。 –