工具栏上的透明图标绘制丑陋的边框

时间:2009-09-25 13:09:32

标签: c++ qt transparency icons

我正在尝试在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);

我知道问题出在上面的几行中,因为当我从单个文件加载图标时,这一切都完美无效(没有黑色边框)。

之前有其他人见过这样的事吗?任何人都可以建议一些更改,将删除难看的黑色边框?边框绝对是图像的一部分,而不是工具栏按钮本身的一部分。

1 个答案:

答案 0 :(得分:1)

首先,我认为你是通过将它们全部放在一张图像中而以不必要的复杂方式做事。然而...

你在运行什么版本的Qt?在什么平台上?在大约6-12个月前的某个时刻(我认为),我遇到了一个错误,即在另一个透明图像上绘制一个透明图像作为QPixmaps。据我所知,有些像素变成了其他颜色,有点随机。这是在Linux上,有Qt4.4或4.5(我不记得了)。无论是哪一个,我都提交了一个错误报告,它被确认为回归并在下一个错误修复版本中得到修复。这意味着如果您没有使用最新版本,您可能会更新到最新版本。 (解决方法是绘制到QImage,然后在需要时将其转换为QPixmap。)

或者,您可以尝试进行测试,除去索引,然后只需将您知道大小的图像加载到画家中,看看是否可以简化代码并仍能重现问题。