7

我想设计一个新的 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但我看不出我怎么能做这样的事情。

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

4

2 回答 2

7

我确实被彻底抛弃了。我可以使用QIcon::paint并将其传递给矩形。它将正确地将请求委托给图标引擎。

于 2012-09-17T16:08:11.267 回答
1

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

于 2012-09-17T14:50:10.543 回答