
[英]why The Customize button in CMFCToolbar is ugly on large icons
[英]transparent icons on toolbar draw ugly borders
我正在尝试在QAction中设置透明图标,然后将其添加到“菜单”和工具栏。 我正在用样式表来样式化应用程序。 图标的透明度可以工作,但是图标是在工具栏上绘制的,图标的左边缘和顶部边缘看起来像1px黑色边框。
现在,我所有的图标都存储在一个大图像文件中(PNG,具有透明度)-它们被保存在一个大条带中。 要将它们提取到单个QIcon中,请执行以下操作:
// load icon strip:
QPixmap large;
large.load(":/icons/tb_icons_l.png", "PNG", Qt::OrderedAlphaDither);
QSize largeSize(large.width() / ICON_COUNT, large.height());
// create individual icon pixmap
QPixmap iconLarge(largeSize);
// fill with transparent pixels:
iconLarge.fill(QColor(0,0,0,0));
// copy pixel data from icon strip to image:
{
QPainter p(&iconLarge);
p.setBackgroundMode(Qt::TransparentMode);
p.drawPixmap(0,0,large, largeSize.width() * i, 0, largeSize.width(), largeSize.height()); // 'i' is the icon index.
}
return QIcon(iconLarge);
我知道问题出在上面几行,因为当我从单个文件中加载图标时,这一切都可以正常工作(没有黑色边框)。
之前有没有其他人看到过类似的东西? 谁能建议一些更改,以消除难看的黑色边框? 边框绝对是图像的一部分,而不是工具栏按钮本身的一部分。
首先,我认为您通过将所有这些都放在一个图像中来以不必要的复杂方式进行操作。 然而...
您正在运行什么版本的Qt? 在什么平台上? 在大约6到12个月前的某个时间点(我认为),我遇到了一个错误,即在另一个透明图像(如QPixmaps)上绘制一个透明图像。 据我所知,有些像素变成了其他颜色,有些随机。 这是在Linux上使用的Qt4.4或4.5(我不记得了)。 无论是哪一个,我都提交了一个错误报告,该报告被认为是回归,并在下一个错误修复版本中进行了修复。 这意味着,如果您未使用最新版本,则最好将其更新为最新版本。 (解决方法是绘制到QImage
,然后在需要时将其转换为QPixmap
。)
或者,您可以尝试消除索引的测试,然后将知道大小的图像加载到painter中,以查看是否可以简化代码并仍然重现该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.