【问题标题】:Drawing a scalable QIcon using QPainter使用 QPainter 绘制可扩展的 QIcon
【发布时间】:2012-09-17 13:52:44
【问题描述】:

我想设计一个新的 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);
 }

我正在寻找的是一种类似于带有drawText 的 QFont 的工作方式。无论我的比例有多大,当我绘制字体时,它总是看起来很清晰,我无法检测到单个像素。

我想我可以告诉QPainter 将我的图标绘制成给定的像素矩形,然后QPainter 将矩形本身 转换,然后让我的QIconEngine::paint 将项目渲染为可能更大的矩形或像素图。但我看不出我怎么能做这样的事情。

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

【问题讨论】:

    标签: c++ qt icons scalable


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我通过将我的图标/图像创建为 SVG 文件并使用QSvgRenderer 将它们绘制到QPainter 上来做到这一点。所需的类在SVG module

      【讨论】:

      • 创建可缩放的图形?大概是这样,因为它“重播”QPainter 命令,不确定与QSvg 类相比它的效率如何。
      • 我刚刚找到了合适的解决方案:使用 QIcon 的绘画功能就足够了。
      猜你喜欢
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多