c – 使用QPainter绘制可伸缩的QIcon

codeday· 2019-11-08
本文来自 codeday ,作者 codeday
我想设计一个新的QIcon,并希望它看起来像一个周围有圆角矩形的固定文本

.-----.
| Phy |
`-----?

在最终应用了比例变换的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将项目渲染成可能更大的矩形或像素图之前转换矩形本身.但我觉得我怎么能做这样的事情.

我只是愚蠢而没有看到明显的解决方案吗?

最佳答案
我确实完全倾倒了.我可以使用QIcon :: paint并将其传递给矩形.它会正确地将请求委托给图标引擎.