Qt:创建半透明的禁用图标状态

时间:2012-05-31 21:53:36

标签: c++ qt user-interface icons qpainter

我想从原始图标图像中创建一个半透明图标Pixmap,用于我的图标禁用状态(不使用额外图像用于禁用状态)。

我认为这需要五分钟,只需创建一个QPainter,将其不透明度设置为0.5或者其他东西,然后将普通的Pixmap绘制到其中。

问题在于QPainter似乎从背景设置为(205,205,205)开始,并且没有任何东西可以让它完全透明。

这是我用于标准图标的代码:

icon.addPixmap(QPixmap(filename));

到目前为止,我已尝试将其透明版本用于禁用状态:

QPixmap normalPixmap(filename);
QPixmap disabledPixmap(normalPixmap.size());
QPainter p(&disabledPixmap);

p.setBackgroundMode(Qt::TransparentMode);
p.setBackground(QBrush(Qt::transparent));
p.eraseRect(normalPixmap.rect());
// (...) I've tried Composition modes and a lot of other stuff here, with no success

p.setOpacity(0.5);
p.drawPixmap(0, 0, normalPixmap);

p.end();
icon.addPixmap(disabledPixmap, QIcon::Disabled, QIcon::On);

这些是我从上述代码中得到的结果:

enter image description here

2 个答案:

答案 0 :(得分:5)

尝试:

disabledPixmap.fill(Qt::transparent);

创建QPainter之前

答案 1 :(得分:0)

将图像绘制到disabledPixmap后尝试以下代码:

// Make the bitmap partially transparent by setting the alpha channel of all pixels
painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
painter.fillRect(thePixmap.rect(), QColor(255,255,255,150));