繁体   English   中英

使用QPainter绘制可伸缩的QIcon

[英]Drawing a scalable QIcon using QPainter

我想设计一个新的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并将其传递给矩形。 它会正确地将请求委托给图标引擎。

我这样做是通过将我的图标/图像创建为SVG文件,并使用QSvgRenderer将它们绘制到QPainter 所需的类在SVG模块中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM