【问题标题】:transparent icons on toolbar draw ugly borders工具栏上的透明图标画出丑陋的边框
【发布时间】:2010-12-01 10:08:43
【问题描述】:

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

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

以前有没有其他人见过这样的事情?任何人都可以提出一些改变来消除难看的黑色边框吗?边框绝对是图像的一部分,而不是工具栏按钮本身的一部分。

【问题讨论】:

    标签: c++ qt transparency icons


    【解决方案1】:

    首先,我认为通过将它们全部放在一个图像中,您正在以一种不必要的复杂方式做事。不过……

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

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

    【讨论】:

    • 我在 Linux 下运行最新的 Qt 4.5。
    • 谢谢 - 你是对的。有一个我没见过的新的错误修复版本。更新解决了这个问题。干杯!至少我的代码不应该受到责备!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2013-12-14
    • 1970-01-01
    • 2011-03-28
    • 2013-08-08
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多