我想设计一个新的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将项目渲染成可能更大的矩形或像素图之前转换矩形本身 但我觉得我怎么能做这样的事情。

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

#1楼 票数:6 已采纳

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

#2楼 票数:1

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

  ask by Johannes Schaub - litb translate from so

未解决问题?本站智能推荐:

1回复

工具栏上的透明图标绘制难看的边框

我正在尝试在QAction中设置透明图标,然后将其添加到“菜单”和工具栏。 我正在用样式表来样式化应用程序。 图标的透明度可以工作,但是图标是在工具栏上绘制的,图标的左边缘和顶部边缘看起来像1px黑色边框。 现在,我所有的图标都存储在一个大图像文件中(PNG,具有透明度)-它们被保存在
1回复

使用CMake设置应用程序图标

有没有一种跨平台的方式来设置CMake的应用程序图标? 我在Qt 5.4中使用Cmake 3.0.2。 在Qt 文档中显示了一种方法,但它不是跨平台的。
3回复

在QWidget的setIcon方法中使用系统图标

我想跨平台获取系统图标的方法,例如文件夹图标 在QWidget的setIcon方法中。 像这样: 这可能吗? 如果是,该怎么办?
1回复

如何使用QtPushButton缩放图标

当QtPushButton的图标缩小/增长时,如何使它与按钮缩放? 我已经尝试过在发生大小调整事件时仅设置新图标的大小。 但这只是触发了调整大小事件本身,并使程序崩溃了。
3回复

如何在QT中使用编译时预定义图像定义图标?

我在编译时在磁盘上有一个png文件。 我想将其包含在已编译的可执行文件中。 如何在Qt中定义这样的图标?
3回复

使用INTEL TBB的可扩展内存分配

我想在RAM上分配大约40 GB。 我的第一次尝试是: 内存写入速度约为3 GB / s,这对我的高性能系统而言并不令人满意。 所以我尝试了英特尔Cilk Plus,如下所示: 结果在代码上方被注释。 可以看出,nworkers = 8的速度加快了。但是,nworker
1回复

使用QPainter平滑绘制

如何使用Qt QPainter平滑地增加角度/变长弧? 这是我刚从Qt的Analog Clock Window Example中创建的最小代码。 该代码在50毫秒内随机更改m_value + -5。 这是为了模拟我想要实现的实际行为。 弧从12点钟位置开始,并逆时针方向增长。 m_
1回复

使用QPainter在QTreeWidget上绘制

我正在开发一个小程序,其中有很多面板。 我想要它,这样当我将焦点放在面板上时,它会在面板周围绘制细线以显示它已聚焦。 我将其与除树状视图之外的所有面板一起使用。 这是一个与QWidget一起使用的示例: 当我在QTreeWidget上使用QPainter时,会在控制台中获得以下